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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 21:26   #1
Dudu
 
Регистрация: 30.03.2011
Сообщений: 3
По умолчанию Найти максимальный элемент в каждой строке

Помогите пожалуйста!!!
Имеется задача: используя тип структура для передачи массивов, подсчитать в каждой строке m х n – матрицы суммы абсолютных величин элементов.
Для решения этой задачи создана функция sum_abs_in_rows, аргументом которой является структура Massiv_2, а тип результата – структура Massiv_1.


Нужно переделать код программы, чтобы можно было найти максимальный элемент в каждой строке двумерного массива.


Код:
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>
const int nElem = 20;
struct Massiv_2{int Rows, Cols; float ar2[nElem][nElem];};
struct Massiv_1{int Cols; float ar1[nElem];};
// Прототипы функций:
Massiv_2 init(int m, int n);		// инициализация двухмерного массива;
void out2(Massiv_2 mas2);	// вывод элементов двухмерного массива;
float absF(float x) { return x < 0 ? -x : x;}	// модуль вещественного числа;
Massiv_1 sum_abs_in_rows (Massiv_2 mas2); // суммы модулей в строках;
void out1(Massiv_1 mas1);	// вывод элементов одномерного массива.
void main(void)
{ clrscr(); randomize();
int M, N;
cout<<"Rows "<<"(<="<<nElem<<"): ";cin>>M;
cout<<"Cols "<<"(<="<<nElem<<"): ";cin>>N;
// Инициализируем двумерный массив псевдослучайными числами:
Massiv_2 m2= init(M,N);
// Выводим на экран элементы двумерного массива:
out2(m2);
//Формируем одномерный массив из сумм модулей элементов в строках
//  двухмерного массива:
Massiv_1 m1 =sum_abs_in_rows(m2);
// Выводим полученный массив на экран:
out1(m1);
getch();
}
// Объявление функций.
Massiv_2 init(int m, int n)
{Massiv_2 mas2; mas2.Rows = m; mas2.Cols = n;
for(int i = 0; i < m; i++)
  for(int j = 0; j < n; j++)
   mas2.ar2[i] [j] = (float)(random(30) - 15) / 10;
return mas2;
}
void out2(Massiv_2 mas2)
{for(int i = 0; i < mas2.Rows; i++)
  {for(int j = 0; j < mas2.Cols; j++)
        cout << setprecision(2) << setw(5) << mas2.ar2[i] [j];
  cout<<"\n";
  }
}
Massiv_1 sum_abs_in_rows(Massiv_2 mas2)
{ Massiv_1 mas1;
float S;
mas1.Cols = mas2.Rows;
for(int i = 0; i<mas1.Cols; i++) mas1.ar1[i] = 0;
int k = -1;
for(int i = 0; i<mas2.Rows; i++)
  { S=0; ++k;
    for(int j=0; j < mas2.Cols; j++)  mas1.ar1[k] += absF(mas2.ar2[i] [j]);
  }
return mas1;
}
void out1(Massiv_1 mas1)
{cout<<"\n";
for(int i = 0; i < mas1.Cols; i++)
  cout << setprecision(2) << setw(5) << mas1.ar1[i];
}

Последний раз редактировалось ACE Valery; 08.04.2011 в 20:17.
Dudu вне форума Ответить с цитированием
Старый 07.04.2011, 21:29   #2
Dudu
 
Регистрация: 30.03.2011
Сообщений: 3
По умолчанию

Помогите пожалуйста!
Dudu вне форума Ответить с цитированием
Старый 08.04.2011, 01:42   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код бы оформили, а то глаза поломать можно.
p51x вне форума Ответить с цитированием
Старый 08.04.2011, 09:24   #4
Ирина Сергеевна
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Dudu Посмотреть сообщение
float absF(float x) { return x < 0 ? -x : x;} // модуль вещественного числа;
Вопрос - зачем Вам эта функция, когда есть стандартная fabs()?

Теперь по поводу максимального элемента. Сложного тут ничего нет: используя те же структурки, создаёте новую функцию типа
Код:
Massiv_1 max_in_rows(Massiv_2 mas2)
{
        Massiv_1 mas1; float temp;
        mas1.Cols = mas2.Rows;
        for(int i = 0; i < mas1.Cols; i++) mas1.ar1[i] = 0;
        for(int i = 0; i < mas2.Rows; i++){
                // Изначально считаем максимальным первый элемент в каждой строке
                temp = mas2.ar2[i][0];
                for(int j = 1; j < mas2.Cols; j++){
                        if (mas2.ar2[i][j] > temp)
                        temp = mas2.ar2[i][j];
                }
                mas1.ar1[i] = temp;
        }
return mas1;
}
Если нужно максимальный по модулю, то сравниваете абсолютные величины.
The impossible is possible, if you really want..
Ирина Сергеевна вне форума Ответить с цитированием
Старый 11.04.2011, 21:52   #5
Dudu
 
Регистрация: 30.03.2011
Сообщений: 3
По умолчанию

Спасибо большущее!!!
Dudu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти наибольший и наименьший элемент в каждой строке матрицы. Отсортировать... (Паскаль) Tifa Помощь студентам 0 27.01.2011 23:07
Первый нечетный элемент каждой строки удвоить (предполагается, что в каждой строке есть нечетный элемент Галина002 Помощь студентам 1 18.03.2009 06:30
Определить максимальный по модулю элемент каждой строки. (Kate) Помощь студентам 2 29.11.2008 21:05
В каждой строке массива выбирается максимальный элемент sergeyfsd Общие вопросы Delphi 2 13.05.2008 00:10
найти минимальный элемент в каждой строке матрицы и записать все минимальные элементы в отдельный массив W_P Помощь студентам 6 28.12.2007 00:24