• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы SchwarzeWolfin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

SchwarzeWolfin

Пробовала написать в разных вариантах,всё время либо компиллятор ругается,либо аварийное завершение программы. Как правильно использовать многомерные массивы в функциях?
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;
}
 
C

c1100

Замени

[x][y] на [1000][1000] так как размер массива должен быть константой

**a на a[][1000]

i+2 на i+=2

объяснения здесь
 
D

DarkKnight

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;
}
 
S

SchwarzeWolfin

DarkKnight125,спасибо,всё работает.С динамическим массивом пробовала,но,как написано выше,в этом случае выполнение программы аварийно завершалось.Видимо из-за той самой самой ошибки с присвоением
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!