Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Глюк с матрицей


Автор: mgkit 3.5.2009, 10:17
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
main()
{
int i,j,S=0,K=0;
printf("Quantity elements of mas = 10,10\n");
int *a=new int[10,10];
printf("\n---------------------------------\n\n");
 for(i=0; i<10; i++) {
  for(j=0; j<10; j++)
  {
    *(a+i,a+j)=random(10);
  }
 }
printf("\nThis is random mas:\n");
 for(i=0; i<10; i++) {
  for(j=0; j<10; j++)
  {
    cout<<*(a+i,a+j)<<" ";
  }
  cout<<endl;
 }
delete[] a;
getch ();
}
//---------------------------------------------------------------------------

В выводе всегда одни и те же числа. Они вроде до 10 и целые, но всегда одни и те же. Так ещё и совпадают все столбцы, как будто одну строчку вывожу 10 раз. Я где то напортачил в дин матрице. Наверно ввод её не правильный, но С++ всё прощает и это усложняет дело. Мне надо обязательно использовать дин матрицу, потому и делаю через указатели.

Автор: zim22 3.5.2009, 10:23
как вы думаете, что здесь происходит? 
Код

int *a=new int[10,10,99, "hello", int(), std::cout << "yo", 666,9,-19,10,1,10];

ответ: создаётся массив из десяти объектов типа int. Только самое правое значение будет служить размерностью массива.  Так работает "оператор запятая". 

Автор: TrЭin3e 3.5.2009, 15:45
если я правильно понял вопрос, вам необходимо использовать функцию randomize() из библиотеки stdlib.h, перед заполнением матрицы.
суть функции randomize() в С/С++ такая же как и в Pascal.

Цитата(mgkit @  3.5.2009,  10:17 Найти цитируемый пост)
Они вроде до 10 и целые

это потому, что вы используете random(10), который генерирует числа от 0 до 10, прием, как вы звметили, целые.

Автор: mgkit 3.5.2009, 19:42
Цитата

ответ: создаётся массив из десяти объектов типа int. Только самое правое значение будет служить размерностью массива.  Так работает "оператор запятая". 

Ой, извините, сначала изучали pascal - от него осталось, а как тогда ввести дин двумерную матрицу? Ну я то есть понимаю, что для двумерной просто 
Код
a[10][10]
 А вот с указателями тогда как? 
Код
int *a=new int[10][10]
  - не воспринимает.
Цитата

это потому, что вы используете random(10), который генерирует числа от 0 до 10, прием, как вы звметили, целые.

Да это понятно, я не понимал почему один и те же числа выводит (каждый раз при запуске выводил  6 2 0 1 5 7 8 2 4 6). После подключения библиотеки и прописки randomize() в коде - всё нормально, каждый раз разные числа. 

Автор: zim22 3.5.2009, 19:51
Цитата(mgkit @  3.5.2009,  19:42 Найти цитируемый пост)
 А вот с указателями тогда как? 

http://forum.vingrad.ru/forum/topic-189118/0.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)