Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2014, 21:49   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Поменять суммы элементов строки массива местами

Здравствуйте, у меня задание: в двумерном массиве найти строки с максимальной и минимальной суммой элементов, затем поменять их местами, решил сделать это при помощи индексов, код огромный получился, индексы максимальных и минимальныч сумм строк нашел, а как поменять месами их? Вот этого не знаю, вот код, есть идея задействовать еще один одномерный массив, но как-не знаю, в общем Help, Спасибо!

Код:
#include <QCoreApplication>
#include <qmath.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int n=0,m=0;
    printf("Please, add stroki; stolbci: ");
    scanf("%d; %d",&n,&m);
    float a1[n][m];
    printf("\n\n ISXODNAYA MATRICA....\n");
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<m;j++)
        {
            a1[i][j]=rand()%150;
            printf("%f\t",a1[i][j]);
        }
        printf("\n");
    }
    printf("\n\n------------------------------------\n");
    printf("REZULT MATRICA....\n");


    float masssummator[n];

    for (int i=0;i<n;i++)
    {  masssummator[i]=0;
        for (int j=0;j<m;j++)
            masssummator[i]= masssummator[i]+a1[i][j];
    }

    int max=0,min=0,maxindex=0,minindex=0;


    max=masssummator[0];
    min=max;


//поиск индексов макс и мин элементов в одномерном массиве, он заполнен так, что
// в матрице сумма индексов  i элементов равна результату в одномерном массиве

    for (int i=1;i<n;i++)
    {
        if (masssummator[i]>max)
        {
            max=masssummator[i];
            maxindex=i;
        }

        if (masssummator[i]<min)
        {
            min=masssummator[i];
            minindex=i;
        }
    }
    
    max=0;
    min=0; 


  
    return a.exec();
}
from dark to light)

Последний раз редактировалось Алексей_2012; 23.11.2014 в 22:00.
Алексей_2012 вне форума Ответить с цитированием
Старый 23.11.2014, 22:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Полагаю так:
Код:
for(i=0;i<n;i++){
 float q=a1[maxindex][i];
 a1[maxindex][i]=a1[maxindex][i];
 a1[maxindex][i]=q;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2014, 22:15   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
#include <QCoreApplication>
#include <qmath.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //вводим размерность матрицы с клавиатуры, например 5; 2

    int n=0,m=0;
    printf("Please, add stroki; stolbci: ");
    scanf("%d; %d",&n,&m);
    float a1[n][m];


    printf("\n\n ISXODNAYA MATRICA....\n");

    // выводим матрицу

    for (int i=0;i<n;i++)
    {
        for (int j=0;j<m;j++)
        {
            a1[i][j]=rand()%150;
            printf("%f\t",a1[i][j]);
        }
        printf("\n");
    }
    printf("\n\n------------------------------------\n");
    printf("REZULT MATRICA....\n");

    // заполняем одномерный массив суммой строк из двумерной матрицы
    float masssummator[n];

    for (int i=0;i<n;i++)
    {  masssummator[i]=0;
        for (int j=0;j<m;j++)
            masssummator[i]= masssummator[i]+a1[i][j];
    }

    // ищем в одномерном массиве макс и мин индексы и элементы, запоминаем их

    int max=0,min=0,maxindex=0,minindex=0;


    max=masssummator[0];
    min=max;
    for (int i=1;i<n;i++)
    {
        if (masssummator[i]>max)
        {
            max=masssummator[i];
            maxindex=i;
        }

        if (masssummator[i]<min)
        {
            min=masssummator[i];
            minindex=i;
        }
    }


    // меняем строки местами

    for(int i=0;i<n;i++)
    {
        max=a1[maxindex][i];
        a1[maxindex][i]=a1[minindex][i];
        a1[minindex][i]=max;
    }


    //выводим конечную матрицу

    for (int i=0;i<n;i++)
    {
        for (int j=0;j<m;j++)
            printf("%f\t",a1[i][j]);
        printf("\n");
    }

    return a.exec();
}
Вот что получилось, а можно как-нибудь упростить или обойтись без одномерного массива? Кода многовато
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 23.11.2014, 22:32   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Не проверял.
Код:
float max_s = 0, min_s, tmp;
int max_ind = 0, min_ind = 0;
for (int j = 0; j < m; ++j)
    max_s += a1[0][j];
min_s = max_s;
for (int i = 1; i < n; ++i) {
    tmp = 0;
    for (int j = 0; j < m; ++j)
        tmp += a1[i][j];
    if (tmp > max_s) {
        max_ind = i;
        max_s = tmp;
    } else if (tmp < min_s) {
        min_ind = i;
        min_s = tmp;
    }
}
for (int j = 0; j < m; ++j) {
    tmp = a1[max_ind][j];
    a1[max_ind][j] = a1[min_ind][j];
    a1[min_ind][j] = tmp;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.11.2014, 23:03   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо! Я проверил, работает, впрочем как всегда))
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 25.11.2014, 22:37   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят,а почему этот код не работает? нужно поменять местами столбцы с максимальным и минимальным количеством четных элементов, и вообще, может ли вещественное число с плавающей точкой быть четным?

з.ы. немного не по теме, со строками все ок, а со столбцами не очень.

Код:
#include <QCoreApplication>
#include <qmath.h>
#include <ctime>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    srand(time(NULL));


    const int n=5;

   float arr[n][n];int chetn[n] ;

    printf("***  NACHAL MASS *** \n\n");
    for(int i=0;i<n;i++)
    {chetn[i]=0;
        for (int j=0;j<n;j++)
        {
            arr[i][j]=rand()%150;
            chetn[i]+=(arr[i][j]/2==0);
            printf("%f\t",arr[i][j]);
        }
        printf("\n");
    }
    printf("=============================================================\n");
    printf("***  REZULT *** \n\n");


    int max=0,min=0,maxindex=0,minindex=0;


      max=chetn[0];
      min=max;
      for (int i=1;i<n;i++)
      {
          if (chetn[i]>max)
          {
              max=chetn[i];
              maxindex=i;
          }

          if (chetn[i]<min)
          {
              min=chetn[i];
              minindex=i;
          }
      }


      for(int i=0;i<n;i++)
          {
              max=arr[i][maxindex];
              arr[i][maxindex]=arr[i][minindex];
              arr[i][minindex]=max;
          }


    for(int i=0;i<n;i++)
    {
        for (int j=0;j<n;j++)
            printf("%f\t",arr[i][j]);
        printf("\n");
    }

    return a.exec();
}
from dark to light)

Последний раз редактировалось Алексей_2012; 25.11.2014 в 23:12.
Алексей_2012 вне форума Ответить с цитированием
Старый 25.11.2014, 23:07   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

в двумерном массиве найти строки с максимальной и минимальной суммой элементов, затем поменять их местами

Код:
#include <algorithm>
#include <numeric>

struct Accumulate
{
	template <typename T, size_t N>
	T operator()(const T (&arr)[N]) const
	{
		return std::accumulate(arr, arr + N, 0);
	}
};

template <typename T, size_t Cols, size_t Rows>
void x(T(&m)[Cols][Rows])
{
	T sum[Cols];
	std::transform(m, m + Cols, sum, Accumulate());
	auto minmax = std::minmax_element(sum, sum + Cols);
	std::swap(m[std::distance(sum, minmax.first)], m[std::distance(sum, minmax.second)]);
}

int main()
{
	int m[3][4] =
	{
		{ -1, 2, -3, 4 },
		{ 1, -2, 3, -4 },
		{ 1, 2, 3, 4 }
	};

	x(m);

	return 0;
}
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В двумерном массиве, состоящем из целочисленных элементов, поменять местами T1wka Паскаль, Turbo Pascal, PascalABC.NET 7 14.11.2014 10:05
Определите частное от деления суммы положительных элементов массива на модуль суммы отрицательных элементов Aselyabel Visual C++ 1 22.01.2014 17:32
процедуры, цикл нахождения четных элементов каждой строки массива и вычисление из суммы nikepol Помощь студентам 0 15.06.2011 16:43
Поменять местами 3-ю и 4-ую строки массива танечка155 Помощь студентам 3 23.11.2010 21:52