Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Массив - куда делись последнии члены ?


Автор: En_t_end 5.3.2005, 12:15
Код

int matrix[3][3];
int i=0;
int d=0;
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[0][3] = 4;
matrix[1][0] = 5;
matrix[1][1] = 6;
matrix[1][2] = 7;
matrix[1][3] = 8;
matrix[2][0] = 9;
matrix[2][1] = 1;
matrix[2][2] = 0;
matrix[2][3] = 1;
matrix[3][0] = 1;
matrix[3][1] = 1;
matrix[3][2] = 2;
matrix[3][3] = 1;
cout << matrix[0][0];
cout << matrix[0][1];
cout << matrix[0][2];
cout << matrix[0][3] << endl;
cout << matrix[1][0];
cout << matrix[1][1];
cout << matrix[1][2];
cout << matrix[1][3] << endl;
cout << matrix[2][0];
cout << matrix[2][1];
cout << matrix[2][2];
cout << matrix[2][3] << endl;
cout << matrix[3][0];
cout << matrix[3][1];
cout << matrix[3][2];
cout << matrix[3][3] << endl;


Тут я сделал очень топорно, просто надо было быстро smile
Вот в чем глюк. Если обьявить массив именно так, как он сейчас обьявлен, то результат вывода будет не таким, как ожидалось, если же его обьявить, так : int matrix[3][4], то последнии члены горизонтального ряда нормально выведуться. Почему именно так ?, ведь члены вертикального ряда выводяться без глюков и так.

Автор: Domestic Cat 5.3.2005, 12:20
Код

   matrix[0][0] = 1;
   matrix[0][1] = 2;
   matrix[0][2] = 3;
   matrix[0][3] = 4;

у тебя массив 3х3, а ты присваиваешь значения как 4х4

Автор: En_t_end 5.3.2005, 12:22
 Domestic Cat 
Ой...а тогда зачем 0 член нужен, разве компилятор не знает, что в 3x3 входит 0 ?

Автор: Domestic Cat 5.3.2005, 12:26
Цитата
Ой...а тогда зачем 0 член нужен, разве компилятор не знает, что в 3x3 входит 0 ?


Не понял?

Автор: En_t_end 5.3.2005, 12:32
Ну смотри, вот этот ряд включает 0 : 0 1 2 3 ???, тут же последнее число 3, значит мы его и заносим в обьявление массива. ЗЫ первый раз этот ноль юзаю, вот и непонятно, раньше использовал первый член 1.

Автор: Fixin 5.3.2005, 12:44
Считай: 3 элемента - 0, 1, 2. 2 - пследний индекс в трех элементах.
Добавлено @ 12:45
А, опоздал. Сам понял - молодец!

Автор: Adil' 5.3.2005, 13:55
Цитата(En_t_end @ 5.3.2005, 12:32)
Ну смотри, вот этот ряд включает 0 : 0 1 2 3 ???, тут же последнее число 3, значит мы его и заносим в обьявление массива
Заносится в объявление массива не последнее число, а размерность массива, т.е. последний индекс+1: 3+1=4.

Автор: En_t_end 5.3.2005, 14:00
Спасибо!
Цитата
т.е. последний индекс+1

В смысле, если у меня квадратная матрица 4*4, получается, чтобы её обьявить надо [5][5] ? Чего-то я совсем запутался smile

Автор: DENNN 5.3.2005, 14:38
Цитата(En_t_end @ 5.3.2005, 14:00)
В смысле, если у меня квадратная матрица 4*4, получается, чтобы её обьявить надо [5][5] ? Чего-то я совсем запутался

Ты сам то подумай: массив char[5] имеет элементы 0,1,2,3,4
По пальцам количество пересчитай - будет пять.

Автор: Goryachev 5.3.2005, 14:43
Цитата(En_t_end @ 5.3.2005, 14:00)
В смысле, если у меня квадратная матрица 4*4, получается, чтобы её обьявить надо [5][5] ? Чего-то я совсем запутался

Если ты объявляешь матрицу 4х4:
Код

int matrix[4][4];


То индексы матрицы будут: 0,1,2,3, т.е. для особо трудно понятливых, индекс каждой строки и каждой колонки начинается с нуля (и это как в одномерном массиве), и заканчивается с 4-1=3.
Итого: 4 элемента в каждой строке, 4 элемента в каждой колонке. => 4х4

П.С.: Ты путаешь с ВБ 6. Там если объявляешь: (4,4) то индекс 0 входит в матрицу, и индекс 4 тоже, и получается 5х5.

Автор: Doc_d0s 5.3.2005, 18:14
В С нумерация идет с нуля!!! smile
Значит вводя массив три на три индексы у тебя будут от 0 до 2! smile

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