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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2020, 19:20   #1
Асдин
 
Регистрация: 01.04.2020
Сообщений: 9
По умолчанию подпрограммы (функции). С++

Код:
#include <iostream>
#include <iomanip>
using namespace std;

void input(double * a, int n, int m)
{for (int i=0; i<n; ++i)
for (int j=0; j<m; ++j)
{ cout << "Введите[" << i << "," << j << "]элемент:";
cin >> a[m*i+j]; }}

void output( double *a, int n, int m)
{for (int i=0; i<n; ++i)
{ for (int j=0; j<m; ++j)
cout << setw(6) << setprecision(2) <<a[m*i+j] << "  ";
cout << endl; }}

void function(double * a, int n, int m, double maxValue)
{for (int j=0; j<m; ++j)
{int maxValue=a[m*0+j];
for (int i=1; i<n; ++i)
{if (a[m*i+j] > maxValue)
{maxValue =a[m*i+j] ;}}
cout<<"V "<<j+1<<" stolbce max element  "<< maxValue<<endl;}}

void bunction(double * a, int n, int m, double maxFalue )
{for (int j=m-1; j>=0; --j)
{int maxFalue=a[m*0+j];
for (int i=n-1; i>=0; --i)
{if (a[m*i+j] > maxFalue)
{maxFalue =a[m*i+j] ;}}
cout<<"V "<<j+1<<" stolbce max element  "<< maxFalue<<endl;}}

void resh (double y, double maxValue, double maxFalue)
{y+=maxValue*maxFalue; }

int main()
{double mas[100], maxA, maxB;
int N, M;
double y=0;
cout << "Введите кол-во строк N и столбцов M матрицы";
cout <<  endl;
cin >> N >> M;
cout << "Введите элементы матрицы" << endl;
input(mas, N, M);
output(mas, N, M);
function(mas, N, M, maxA);
bunction(mas, N, M, maxB);
resh (y,maxA,maxB);
cout<<y;

return 0;}
Не выдаёт значения, в чем причина?
Изображения
Тип файла: png ьпа.png (9.4 Кб, 31 просмотров)
Асдин вне форума Ответить с цитированием
Старый 02.04.2020, 14:50   #2
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Асдин Посмотреть сообщение
cin >> a[m*i+j]; }}
Эта часть кода что должна выполнять?
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 06.04.2020, 08:12   #3
Асдин
 
Регистрация: 01.04.2020
Сообщений: 9
По умолчанию

Предыдущая строка это ввод элементов, а это строка непосредственно запись в массив.
Что касается массива, это формула записи 2-мерного массива в одномерный, чтобы сократить работу в функции с указателем.
Асдин вне форума Ответить с цитированием
Старый 06.04.2020, 23:11   #4
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Зачем Вам функция:
Код:
void bunction(double * a, int n, int m, double maxFalue )
{for (int j=m-1; j>=0; --j)
{int maxFalue=a[m*0+j];
for (int i=n-1; i>=0; --i)
{if (a[m*i+j] > maxFalue)
{maxFalue =a[m*i+j] ;}}
cout<<"V "<<j+1<<" stolbce max element  "<< maxFalue<<endl;}}
По условию вроде как не нужно выводить полученный массив в обратном порядке.
Если правильно понял, необходимо полученные элементы одномерного массива умножать на максимальный элемент столбца.
Или ошибаюсь?

А что дает умножение на ноль?
Код:
int maxFalue=a[m*0+j];
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 07.04.2020, 15:16   #5
Асдин
 
Регистрация: 01.04.2020
Сообщений: 9
По умолчанию

Отвечаю по порядку
1. Да, верно не нужно, но я это делаю, чтобы в дальнейшем получить, то выражение, которое предложено в задании. Так как там самый большой элемент первого столбца умножается на самый большой элемент последнего столбца + самый большой элемент второго столбца умноженный на самый большой элемент второго с конца столбца и т. д. ( Можно, наверное, сделать проще, но я не догадался)
2. почему ноль? На месте 0 должно быть "i", но так как мы запускаем цикл по перебору элементов в каждом столбце, а нумерация в С++ идет, как мы знаем, с 0, то и перебор мы начинаем с 0 строки, при этом цикл по столбцам не меняется, а по i, как вы можете заметить, цикл начинается с 1. И в итоге получается, 0-ой элемент 1-столбца сравнивается с остальными элементами 1-ого столбца (в случае, нахождения большего элемента, значение в переменной поменяется на большее, и так он будет изменяться до тех пор пока столбец не закончится), потом 0-ой элемент 2-ого столбца сравнивается с элементами 2-ого столбца и т. д. надеюсь, что понятно объясняю
Но моя проблема заключается в том, что я не могу получить, то выражение из задания и посчитать его

Последний раз редактировалось Асдин; 07.04.2020 в 15:21.
Асдин вне форума Ответить с цитированием
Старый 07.04.2020, 17:13   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Код:
input(mas, N, M);
output(mas, N, M);
function(mas, N, M, maxA);
bunction(mas, N, M, maxB);
resh (y,maxA,maxB);
cout<<y;

return 0;}
У тебя тут линейный кусок программы.
Т.е. в первом проходе, находятся два максимальных элемента, которые перемножаются и добавляются в y.
Вывод значения.

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

Неправильный алгоритм.
Или функции должны возвращать массивы и затем выполняются перемножения и суммирование,
или эти функции должны возвращать значения только в заданном столбце и цикл по суммированию выполняться отдельно.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 08.04.2020, 00:21   #7
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Асдин Посмотреть сообщение
а по i, как вы можете заметить, цикл начинается с 1.
В функции function j-му элементы Вы присваиваете 0, соответственно теряется всякий смысл jm элементы умножать на ноль.
В функции bunction j-м и i-м элементам присваиваются значения m-1 и n-1 соответственно. Что также лишает всякого смысла m элементы умножать на ноль.

P. S.
И как уже сказали в постом выше, необходимо пересмотреть алгоритм реализации.
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 08.04.2020 в 00:31. Причина: Добавил P. S.
Desc вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции и подпрограммы Umkaa Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2017 19:26
Использование подпрограммы-функции: Вычислить значение функции (Турбо паскаль) RealUnited Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2012 20:34
Подпрограммы функции по-мо-ги-те --Sashok-- Помощь студентам 2 07.11.2011 19:52
Подпрограммы-функции bwitcher Помощь студентам 3 03.12.2010 22:50
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05