Вопрос: двумерные массивы в функциях, статич. и динамич. массивы, рабо

Статус
Закрыто для дальнейших ответов.
28.11.2010
9
0
#1
Пробовала написать в разных вариантах,всё время либо компиллятор ругается,либо аварийное завершение программы. Как правильно использовать многомерные массивы в функциях?
C++:
//подсчёт суммы всех элементов чётных строк массива
#include <iostream>
using namespace std;
void de(double **a,int n,int m)
{
double s=0;
for(int i=0;i<n;i+2)
for(int j=0;j<m;j++)
s+=a[i][j];
cout<<s;
}
int main()
{
int x,y;
cin>>x;
cin>>y;
double ar[x][y];
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
cin>>ar[i][j];
de(ar,x,y);
return 0;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
C++:
#include <iostream>
using namespace std;

//Тут у вас все абсолютно верно
void de(double **a,int n,int m)
{
double s=0;
//А вот тут присвоение упустили
//for(int i=0;i<n;i+2)
for(int i=0;i<n;i+=2)
for(int j=0;j<m;j++)
s+=a[i][j];
cout<<"Сумма четных строк массива : " << s;
}
int main()
{
setlocale(LC_ALL,".1251");
int x,y; //Вот тут смотрите вы определяете переменные(!!!)
cin>>x; //Вводите их
cin>>y;
//double ar[x][y]; //А в этом месте вы предлагаете компилятору выделять память под массив (x на y) но они же (!!!)переменные(!!!), а должны быть константами
//Помпилятор на момент сборки просто не знает сколько нужно выделить памяти...
//Тут без динамики никак
//И так выделим динамически память..
double **ar; //Наш двумерный массив (указатель на массив указателей)
ar = new double*[x]; //Выделим память под строки массива
for(int i=0;i<x;i++)
{
ar[i] = new double[y]; //А тут будем выделять память под столбцы (для каждой строки!!!), иными словами под элементы массива(стоки)
for(int j=0;j<y;j++)
cin>>ar[i][j];
};
de(ar,x,y);
return 0;
}
 
28.11.2010
9
0
#4
DarkKnight125,спасибо,всё работает.С динамическим массивом пробовала,но,как написано выше,в этом случае выполнение программы аварийно завершалось.Видимо из-за той самой самой ошибки с присвоением
 
Статус
Закрыто для дальнейших ответов.