Другие языки программирования и технологии

Поясните, что не так в трехмерном массиве...

C++, надо составить функцию поиска наибольшего и наименьшего элемента в трехмерном массиве. Работаю в Microsoft Visual Studio 2010. #include "stdafx.h" #include <iostream> #include <malloc.h> using namespace std; int w=2; int x,n,m; int ***mas; float mat,mit; void MAXMIN (int ***mas,int w) {for (int i=0;i<=w;i++) { for (int j=0;j<=w;j++) { for (int k=0;k<=w;k++) { if (x<=mas[j][k]) x=mas[j][k]; } } } for (int i=0;i<=w;i++) { for (int j=0;j<=w;j++) { for (int k=0;k<=w;k++) { if (x>=mas[j][k]) x=mas[j][k]; } } } } void main (void) { //cout<<"n="; //cin>>n; //mas=(int ***)calloc(n,sizeof(int)); int i=2,j=2,k=2,g,h; mas=(int ***)calloc(i,sizeof(int **)); for (g=0; g<=i; g++) { mas=(int **)calloc(j,sizeof(int *)); for (h=0; h<=j; h++) mas[j]=(int *)calloc(k,sizeof(int)); } for (int i=0;i<=w;i++) { for (int j=0;j<=w;j++) { for (int k=0;k<=w;k++) {cout<<"Vvedite element ["<<i<<j<<k<<"]>>mas[j][k]; } } }//ввод x=mas[0][0][0]; MAXMIN(mas, 2); printf("\nmax=&d",&x); printf("\nmin=&d",&x); free(mas); }
Больше всего конечно настораживает функция maxmin:
сначала найдется минимум -- положиться в x, потом найдется максимум и найденный минимум затрется

ИМХО лучше переписать:
void maxmin(int ***mas, int w, int &min, int &max) {
int i, j, k;
max = min = mas[0][0][0];
for ...
for ...
for ...
if (mas[ i ][ j ] [ k ] < min) min = mas[ i ][ j ] [ k ];
if (mas[ i ][ j ] [ k ] > max) max = mas[ i ][ j ] [ k ];
...все проверки в одном цикле, два цикла не нужны
}

Зачем calloc, если в плюсах есть new?
Зачем в функции используются глобальные индексные переменные?

MAXMIN(mas, 2);
printf("\nmax=&d",&x); // x и максимум
printf("\nmin=&d",&x); // и одновременно минимум! :)

вообще этот код, какая-то фигня, надо так:
printf("\nmax = %d", x)
а лучше не мучать себя printf'ом:
cout << "max = " << x << endl;
SK
Sergei Kitaev
96 543
Лучший ответ
Ответ напишу в Паскале, но поймешь, как перевести в C++/
И так.
const k=20;l=20;m=20; {размеры массива}
VAR i,j,y:byte;
X:array[1...k,1..l,1..m] jf real;
MA{,MIN;real;

Begin
{Исходные значения.
MAX принимаем за самое МИНИМАЛЬНОЕ, а MIN за самое МАКСИМАЛЬНОЕ}
MIN:=1000000000000; {самое МАКСИМАЛЬНОЕ}
MA{:=-1000000000000;
{Начинаепм вводить массив и СРАЗУ ОПРЕДЕЛЕЕМ ЗНАЧЕНИЕ}
for :=1 to k do begin
for j:=1 to l do begin
for y:=1 tj m do begin
Write('Введите значение элемента массива Х [',i:2,j:2,y:2,']]);
Readln(x[i,j,y]; {прочитали число и сразу проверяем.
if X{i,,j,y]<min>MAX then MAX:=X[i,j,y];
end;{y}
end; {j}
end;{i]
{А теперь печатаем МАКС и МИН
эээээээээээээээээээээээээээээээээээээээ}
end {программы}
Андрей Цыганов
Андрей Цыганов
52 257