С++,Двуменые массивы

BBC
Сообщения: 9
Зарегистрирован: 26 окт 2008, 02:43

Написать программу которая формирует двухмерный массив и считает сумму его элементов.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Стоимость программы будет где-то 100 USD :) .Но можно почитать форум, посмотреть анологичные темы, выбрать из них нужное и написать самомостоятельно с пользой для себя и бесплатно.
Nuan
Сообщения: 3
Зарегистрирован: 17 дек 2008, 17:44

main()
{
int a[10][10];
randomize();
for(int i=0;i<10;i++)
for(imt j=0;j<10;j++)
a[j]=random(100);
int summa=0;
for(int i=0;i<10;i++)
for(imt j=0;j<10;j++)
summa+=a[j];
cout>>"SUMMA">>summa;

}
kravazp
Сообщения: 5
Зарегистрирован: 28 янв 2009, 23:43

Подскажите пожалуйста ,как создать двумерный динамический массив ,типа int используя iostream .
Можно ли поступить так как и с одномерным ??
Я имею ввиду как создать двумерный массив с неопределенным количеством элементов ,что я делаю неправильно ??
#include <iostream>
using namespace std;
int main ()
{
int n,m;
cin >> n>>m;
int *a =new int[n][m];
delete a;
}
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Двумерный массив можно рассматривать как массив массивов. Поэтому создать его можно так:

Код: Выделить всё

int** pINT; //указатель на двумерный массив
int i,j; //размерности массива, важно показать что это не константы
i=3; //можно запросить у пользователя
j=5; 
pINT=new int*[i]; //выделяем память под указатели
for(int k=0;k<i;k++) //выделяем память под значения
           pINT[k]=new int[j];
pINT[0][0]=15; // используем массив
//---------------------
delete []pINT; //Освобождаем память
kravazp
Сообщения: 5
Зарегистрирован: 28 янв 2009, 23:43

Albor , огромное спасибо ,оригинальный способ ,я не знал ,что можно элементу одномерного массива присваивать целую стоку как у двумерного !!Еще раз спасибо !
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

kravazp писал(а):Albor , огромное спасибо ,оригинальный способ ,я не знал ,что можно элементу одномерного массива присваивать целую стоку как у двумерного !!Еще раз спасибо !

Что ты понимаешь под словами "присваивать целую строку"? Если имеется ввиду массив int-ов, то, в данном случае, в массиве содержатся адреса массивов.
kravazp
Сообщения: 5
Зарегистрирован: 28 янв 2009, 23:43

Albor писал(а):Что ты понимаешь под словами "присваивать целую строку"? Если имеется ввиду массив int-ов, то, в данном случае, в массиве содержатся адреса массивов.

Да я понял ,и понял то, что мне нужно учить указатели ,и самому соображать ,я не зная указатели ,делаю динамические массивы ,и это не правильно !Я сейчас, начав изучать указатель, только понял сам смысл указателя ,а раньше по шаблону делал дин. массив .Так получается ,что один одномерный массив обращается к i-тым одномерным массивам ,используя их адрес ,и тем самым работает как двумерный ?
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&quot писал(а):Подскажите пожалуйста ,как создать двумерный динамический массив ,типа int используя iostream .
Можно ли поступить так как и с одномерным ??
Я имею ввиду как создать двумерный массив с неопределенным количеством элементов ,что я делаю неправильно ??
#include <iostream>
using namespace std;
int main ()
{
int n,m;
cin >> n>>m;
int *a =new int[n][m];
delete a;
}
Двумерный массив - это массив указателей на вершины массивов, трехмерный - массив указателей на вершины масисивов указателй на верешины массивов и т.д. То есть любой многомерный массив - это ВСЕГДА одномерный массив указателей на вершины массиво с размерностью на единицу меньше. Определенеи рекурсивно в своеё основе, так как массивы рамерности на единицу меньше снова могут оказаться многомерными. Отсюда и делай выводы.
Zazeek
Сообщения: 9
Зарегистрирован: 17 фев 2009, 22:31

Задание: " вычислить максимальный элемент и поменять его местами с последним"
Ниже код. Нужна такая же, только с использованием функции. (18 вещественных чисел)

Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a[18];int i,max=0,imax;
for(i=0;i<18;i++)a=StrToFloat(Memo1->Lines->Strings);
max=a[0];imax=0;
for(i=1;i<18;i++)
if(a>max){max=a;imax=i;}
a[imax]=a[17];
a[17]=max;
Memo2->Clear();
for(i=0;i<18;i++)Memo2->Lines->Add(FloatToStr(a));
}

Заранее спасибо!
Ответить