Консультация № 176119
19.01.2010, 03:01
0.00 руб.
0 17 1
Можете пож-ста оформить эту программу в виде функций(добавить куда надо inputArray, change, outputArray или ещё что-то, связаное с функциями!)
Программа задачи работает отлично! Сам проверял
Условие задачи:
Даны три квадратные матрицы разных размеров. Найти в каждой из матриц максимальный элемент главной диагонали. Оформить в виде функций!
У меня не получается оформит в виде функций! !Код написан на borland c++ 3.1
Программа ниже :

Приложение:
#include<iostream.h>
#include<conio.h>
#include<math.h>
int const n=3,m=4;
void main()
{
int A[n][m],B[n][n],C[m][m];
int maxA,maxB,maxC;
cout<<"Vvtdite el matr A"<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
cin>>A[i][j];
cout<<endl;
}
maxA=A[0][0];
for(i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(A[i][j]>maxA)
{
maxA=A[i][j];
}
}
}
cout<<"maxA="<<maxA<<endl;
for(i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cin>>B[i][j];
cout<<endl;
}
maxB=B[0][0];
for(i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(B[i][j]>maxB)
{
maxB=B[i][j];
}
}
}
cout<<"maxB="<<maxB<<endl;
for(i=0; i<m; i++)
{
for(int j=0; j<m; j++)
cin>>C[i][j];
cout<<endl;
}
maxC=C[0][0];
for(i=0; i<m; i++)
{
for(int j=0; j<m; j++)
{
if(C[i][j]>maxC)
{
maxC=C[i][j];
}
}
}
cout<<"maxC="<<maxC<<endl;
getch ();
}

Обсуждение

Неизвестный
19.01.2010, 15:24
общий
rafert:
А в чем лично ваша проблема?
Не знаете как сделать функцию?
давно
Профессор
230118
3054
19.01.2010, 20:09
общий
Напоминаю - void main противно стандарту. Почему - http://www.daniweb.com/forums/thread78955.html
давно
Профессор
230118
3054
19.01.2010, 21:14
общий
это ответ
Здравствуйте, rafert.

Чтобы вычислить максимальный элемент главной диагонали, достаточно одного цикла.

Приложение:
#include<iostream.h>
#include<conio.h>
#include<math.h>


int const n=3,m=4;

void inputArray(int** ar, int n, int m)
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
cin>>ar[i][j];
}
}

int maxDiag(int** ar, int n, int m)
{
int max;
if(n>m) n=m;
max=ar[0][0];
for(int i=0; i<n; i++)
{
if(ar[i][i]>max)
{
max=ar[i][i];
}
}
return max;
}

int main()
{
int A[n][m],B[n][n],C[m][m];
int maxA,maxB,maxC;
int i,j;

inputArray((int**)A,n,m);
maxA = maxDiag((int**)A,n,m);
cout<<"maxA="<<maxA<<endl;
inputArray((int**)B,n,m);

maxB = maxDiag((int**)B,n,n);
cout<<"maxB="<<maxB<<endl;

inputArray((int**)C,m,m);
maxC= maxDiag((int**)C,m,m);
cout<<"maxC="<<maxC<<endl;
getch ();
}
Неизвестный
20.01.2010, 19:33
общий
Спасибо большое! Это первый сайт где программу оформили без ошибок Но почему-то никому не удавалось не пользоваться этими двумя звёздочками ** перед ar! Проблема в том что мы на 1-ом курсе ещё не учили этих ** и принимать программу препод не будет пока не объясниш что это такое! В инэте я не нашол определение этих **! Скажите пожалуйста эксперты, что это такое, и можно ли обойтись без них
Заранее Благодарен!
давно
Профессор
230118
3054
20.01.2010, 19:47
общий
rafert:
Это ссылка на ссылку. То есть адрес того адреса, который указывает на целое. Массив двумерный имеет такой тип. Одномерный - 1 звездочка.
Неизвестный
20.01.2010, 19:54
общий
Спасибо огромное! Надеюсь препод опять не пошлёт меня с этими звёздочками! Жаль SMS thank только для России
давно
Профессор
230118
3054
20.01.2010, 20:02
общий
rafert:
В смысле препод не знает, что это такое?
Неизвестный
20.01.2010, 20:23
общий
Он знает, но он этих звёздочек нам ещё не преподавал и говорит мол это не ты сделал программу а кто-то другой, потому что не зная этих ** я не смог бы написать программу, используя их сам!
Неизвестный
21.01.2010, 04:47
общий
rafert:
Если у вас постоянный размер массива(а он у вас постоянный), то можете вместо (int** ar, int n, int m) написать - (int[3][4]), или же (int[][4], int n). Но в обоих случае вам придется немного изменить программу.
Неизвестный
21.01.2010, 15:45
общий
Попытался я сделать как вы указали Patriotix-N, но не удалось написать без ошибок,
Помогите пожалуйста уважаемые эксперты оформить без ** чтобы программа работала также как и со **-ми.
Преподаватель меня сегодня послал на*, даже когда я объяснил что такое ** он не поверил что я их знаю достаточно, чтоб написать с ними прогу и сказал сделать без них! Две паралели групп спрашивал никто не знает !
Кстати, размер массива вроде ж не постоянный т.к даны три квадратные матрицы разных размеров, которые я сам и задал: A[n][m] B[n][n] C[m][m]!
n=3 m=4
Неизвестный
21.01.2010, 16:19
общий
rafert:
Извиняюсь, что невнимательно прочитал код. Да действительно у вас разные размерности массивов.
Кстати, у вас первая матрица получается 3х4 - это квадратная?
Скажите вашему преподователю, что он дурак . Нельзя работать с двумерными массивами переменной размерности без указателей, т.к. массив в с++ - это особая переменная, которая не может передаваться по значению. Сам тип массива подразумевает указатель! Проще всего было бы использовать in[][], но такая конструкция не допустима стандартом, потому что компилятор должен знать одну из размерностей массива. Т.к. у вас квадратные матрицы, то у вас никак не получится использовать функцию с одинаковой одной из размерностей. Остается только использовать вариант с известными двумя размерностями. Можете сделать 3 отдельных функции для каждого массива, но это, честно говоря, дурацкое решение.
Можно еще попробовать сделать функции для чего-нибудь другого... Я подумаю над этим вариантом и над тем, что еще можно было бы сделать в этой ситуации

P.S. Еще вариант. Изучите указатели в достаточной степени...
Неизвестный
21.01.2010, 16:33
общий
Спасибо вам за понимание! Я думаю лучше сделать три отдельные функции! Конечно вам виднее но я уже пытался сделать три отдельные функции, но мне не удалось сделать это без ошибок может вы сможете! По-моему ничего другого не придумаеш чтоб её убедить! Впрочем вам виднее! Ещё раз спасибо!
Неизвестный
21.01.2010, 17:00
общий
rafert:
Что-то в голову ничего путевого не пришло... Все было бы проще, если бы все матрицы были одного размера.
Вот раздельные функции:
Код:

#include<iostream.h>
#include<conio.h>
#include<math.h>

const int n=3,m=4,l=5;

int A[n][n], B[m][m], C[l][l];

void inputArrayA()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; n<3; j++)
cin>>A[i][j];
}
}

void inputArrayB()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<m; i++)
{
for(int j=0; j<m; j++)
cin>>B[i][j];
}
}

void inputArrayC()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<l; i++)
{
for(int j=0; j<l; j++)
cin>>C[i][j];
}
}

int maxDiagA()
{
int max;
max=A[0][0];
for(int i=0; i<n; i++)
{
if(A[i][i]>max)
{
max=A[i][i];
}
}
return max;
}

int maxDiagB()
{
int max;
max=B[0][0];
for(int i=0; i<m; i++)
{
if(B[i][i]>max)
{
max=B[i][i];
}
}
return max;
}

int maxDiagC()
{
int max;
max=C[0][0];
for(int i=0; i<l; i++)
{
if(C[i][i]>max)
{
max=C[i][i];
}
}
return max;
}

int main()
{
int maxA,maxB,maxC;

inputArrayA();
maxA = maxDiagA();
cout<<"maxA="<<maxA<<endl;

inputArrayB();
maxB = maxDiagB();
cout<<"maxB="<<maxB<<endl;

inputArrayC();
maxC = maxDiagC();
cout<<"maxC="<<maxC<<endl;

getch ();

}


И совсем блатной вариант:
Код:

#include<iostream.h>
#include<conio.h>
#include<math.h>

int A[3][3],B[4][4],C[5][5];

void inputArrayA()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<3; i++)
{
for(int j=0; 3<3; j++)
cin>>A[i][j];
}
}

void inputArrayB()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
cin>>B[i][j];
}
}

void inputArrayC()
{
cout<<"Vvedite matricu"<<endl;
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
cin>>C[i][j];
}
}

int maxDiagA()
{
int max;
max=A[0][0];
for(int i=0; i<3; i++)
{
if(A[i][i]>max)
{
max=A[i][i];
}
}
return max;
}

int maxDiagB()
{
int max;
max=B[0][0];
for(int i=0; i<4; i++)
{
if(B[i][i]>max)
{
max=B[i][i];
}
}
return max;
}

int maxDiagC()
{
int max;
max=C[0][0];
for(int i=0; i<5; i++)
{
if(C[i][i]>max)
{
max=C[i][i];
}
}
return max;
}

void main()
{
int maxA,maxB,maxC;

inputArrayA();
maxA = maxDiagA();
cout<<"maxA="<<maxA<<endl;

inputArrayB();
maxB = maxDiagB();
cout<<"maxB="<<maxB<<endl;

inputArrayC();
maxC = maxDiagC();
cout<<"maxC="<<maxC<<endl;

getch ();

}



P.S. Но, все таки, разберитесь с указателями...
Неизвестный
21.01.2010, 17:07
общий
Я ему сразу три варианта программы дам !
Неизвестный
21.01.2010, 17:09
общий
rafert:
Зачем же 3, мои 2 варианта по сути ничем не отличаются, просто во втором больше примитивизма.
Неизвестный
21.01.2010, 17:16
общий
Я еле сегодня блок-схему составил с помошником к этой программе, а теперь их две ну ладно, я думаю одной ей будет достаточно!
Правда переделать надо будет бок-схему немного т.к делал я её ещё по примеру первому с указателями **! Но ничего с этим я справлюсь!
Спасибо большое вам реально рейтинг надо подымать на "хороший эксперт" жаль что-то с Украины СМС-ки с голосом не доходят до России!
Неизвестный
21.01.2010, 17:42
общий
rafert:
А макросы вы проходили? Можно попробовать сделать что-нибудь с помощью макроса...
Кстати, можете для пущей наглядности убрать функции ввода массива, а задавать массив вручную
Форма ответа