forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Двумерные массивы, не пойму (http://forum.boolean.name/showthread.php?t=13546)

Reizel 20.10.2010 23:48

Двумерные массивы, не пойму
 
Код:

#include <stdio.h>
#include <conio.h>

void main()
{      clrscr();
        const int size=3;
        int Array[size][size]=
        {
        {1,2,3},
        {3,1,2},
        {2,3,1}
        };


        for (int y=0;y<size;y++)
        {
                for (int x=0;x<size;x++) printf("%d ",*Array[x,y]);
                printf("\n");


        }
        getch();
}

Выводит:
111
333
222

ПОЧЕМУ????
ЗЫЖ за void main не бейте, мне в универе за иную запись ноль ставят

impersonalis 20.10.2010 23:53

Ответ: Двумерные массивы, не пойму
 
что вот это:
Цитата:

int Array[size][size]=
{
{1,2,3},
{3,1,2},
{2,3,1}
};
и вот это:
Цитата:

*Array[x,y]
за синткаксис? Билдер со свителками?

BlackDragon 21.10.2010 00:17

Ответ: Двумерные массивы, не пойму
 
Я тож С++ начал изучать.
Гуру, просветите, какой смысл несет запись:
Код:

x,y
что значит запятая?

Knightmare 21.10.2010 00:35

Ответ: Двумерные массивы, не пойму
 
1) Переводись на другой факультет пока есть возможность. На этом ты вылетишь в лучшем случае на 3 курсе.
2)
Ты не будешь программистом. Никогда.
3) void main() не соотвествует ISO C
4) При объявлении массива не нужны size, размеры сами подсчитаются.
5) Самое смишное[многомерные][массивы][в][С] индексируются с помощью указания каждой размерности в отдельный паре квадраных скобок. Кроме того, я понятия не имею почему компилятор проглотил запятую (хотя есть мнение что BC хавает запятые как разделитель инстукций, и в качеству индекса брался только y), но то как ты разыменовал указатель на массив чтобы получить int это нечто. Аплодирую стоя за чудесный метод решения ошибок выдаваемых компиляором.
6) clrscr() - это хреновина есть только в борладовских недокомпиляторах. И вообще за необоснованную очистку консоли надо отрубать руки по самые ноги.

pax 21.10.2010 13:26

Ответ: Двумерные массивы, не пойму
 
Цитата:

Сообщение от Knightmare (Сообщение 165322)
4) При объявлении массива не нужны size, размеры сами подсчитаются.

Заглянул в онлайн учебник:
Цитата:

Каждая пара фигурных скобок специфицирует значения, относящиеся к одной определённой размерности. Пустые фигурные скобки не допускаются (и это означает, что в C++ реализован жёсткий алгоритм инициализации массивов):
PHP код:

int MyArray[3][3][3] = {
{{
0,1}},
{{
100},{200,210},{300}},
{{
1000},{2000,2100},{3000,3100,3200}}
}; 

...
По аналогии с одномерным массивом, при явной инициализации массива входящего в состав многомерного массива его самая левая размерность может не указываться. Она определяется на основе инициализатора.
PHP код:

int MyArray[ ][3][3] = {
{{
0,1}},
{{
100},{200,210},{300}},
{{
1000},{2000,2100}}
}; 


http://www.cyberguru.ru/programming/...ay-page70.html

Knightmare 21.10.2010 14:58

Ответ: Двумерные массивы, не пойму
 
Может быть. Хотя проверять на нормальном компиляторе лень, а борландовские (на сайте там про Борланд говорится, да) поделки компиляторами считают только в наших замечательных ВУЗах. Хотя в С (не С++) пожалуй вполне возможно, что все размерности надо явно указывать, то язык невероятно суровый. Кстати, там еще косяк есть в коде (применительно к С, т.к. судя по коду задача была именно на нем писать), в С переменные можно объявлять только в начале блока.

pax 21.10.2010 16:47

Ответ: Двумерные массивы, не пойму
 
Цитата:

Сообщение от Knightmare (Сообщение 165385)
в С переменные можно объявлять только в начале блока.

Прям паскаль какой-то :)

Knightmare 21.10.2010 17:19

Ответ: Двумерные массивы, не пойму
 
Ну то особенности реализации компилятора. Ну и в паскале как бэ прям все в начале функции объявлялось, а тут в начале блока, т.е. примерно так:
PHP код:

int main()
{
    
int ijk;
    if(...)
    {
        
int mn;
    }
    
int a// а вот так низя, ололо
    
return 0;



Reizel 22.10.2010 10:53

Ответ: Двумерные массивы, не пойму
 
Не не не, объявлять можно в любом месте.

Цитата:

Сообщение от Knightmare (Сообщение 165322)
1) Переводись на другой факультет пока есть возможность. На этом ты вылетишь в лучшем случае на 3 курсе.
Хрена с два! Если историчка не завалит, то не вылечу
2)
Ты не будешь программистом. Никогда.
С чего ты так уверен?? :-D
3) void main() не соотвествует ISO C
Ты знаешь, когда наша училка на лекции говорила в первый раз про void main, что это типа главная функция и бла-бла-бла, дядь Паша возмутился, сказал что нужно бы int main, по стандарту. В результате она тупо покричала сказала что мы все никто и мозгов у нас нет
4) При объявлении массива не нужны size, размеры сами подсчитаются.
А ты это ей объясни :-D
5) Самое смишное[многомерные][массивы][в][С] индексируются с помощью указания каждой размерности в отдельный паре квадраных скобок. Кроме того, я понятия не имею почему компилятор проглотил запятую (хотя есть мнение что BC хавает запятые как разделитель инстукций, и в качеству индекса брался только y), но то как ты разыменовал указатель на массив чтобы получить int это нечто. Аплодирую стоя за чудесный метод решения ошибок выдаваемых компиляором.
Какое то время я писал на С#, там индексы были через запятую. А в С++ я их не юзал, вот и не знал! а то что там компилятор сказал что - то на английском, так я не понял, ибо не знаю его. Это я смудил, да :(
6) clrscr() - это хреновина есть только в борладовских недокомпиляторах. И вообще за необоснованную очистку консоли надо отрубать руки по самые ноги.

Чтоб училке оформление понравилось, благо там консоли не юзают. Она даж за оформление баллы накидывает

impersonalis 22.10.2010 11:03

Ответ: Двумерные массивы, не пойму
 
ну как всегда - проганью учит кто попало

Knightmare 22.10.2010 11:29

Ответ: Двумерные массивы, не пойму
 
Цитата:

Не не не, объявлять можно в любом месте.
В С++ да, а вот в С нет.
Цитата:

Хрена с два! Если историчка не завалит, то не вылечу
Ололо, год или два назад у нас полностью отчислили группу (ну не полностью, остатки сами быстро перевелись) с такими же скилами как у тебя. Основы матана, работа с командной строкой и массивы в С не самые страшные вещи.
Цитата:

С чего ты так уверен?
С того.
Цитата:

Ты знаешь, когда наша училка на лекции говорила в первый раз про void main, что это типа главная функция и бла-бла-бла, дядь Паша возмутился, сказал что нужно бы int main, по стандарту. В результате она тупо покричала сказала что мы все никто и мозгов у нас нет
Типа "Я неудачник и слился при первой сложности". Запоминай сюда, в стандарте ISO 9899:1999 (C99) в пункте 5.1.2.2.1 именуемом не иначе как "Program startup" сказано, что точка входа программы имеет 2 варианта:
1) int main(void)
2) int main(int argc, char *argv[])
Все. Никаких void, ибо ОС ожидает от программы числового кода завершения (0 - удачно, другое значение - фейл).
Цитата:

А ты это ей объясни
Щас все брошу поеду хрен знает куда выполнять роль кэпа и объяснять преподу что она тупая дура. Мне своих хватает, которым приходится объяснять что рандомный массив не может быть ни возрастающей, ни убывающей последовательностью.
Цитата:

а то что там компилятор сказал что - то на английском, так я не понял, ибо не знаю его.

Цитата:

Чтоб училке оформление понравилось, благо там консоли не юзают. Она даж за оформление баллы накидывает
Данное, кхм... "оформление кода" не соответствует общепринятым нормам (хотя я и встречал не раз данный жуткий стиль, человека так пишущего код не возьмут на работу ни в одну нормальную контору). И я не поэл, что значит "благо консоли там не юзают"?

pax 22.10.2010 11:31

Ответ: Двумерные массивы, не пойму
 
Я вот когда студентов паскалю учил - я их в первую очередь код форматировать учил и правильно отступы ставить слева, чтобы программы читабельны были. Чтобы понимали хотя бы что сами напишут ))

impersonalis 22.10.2010 12:08

Ответ: Двумерные массивы, не пойму
 
Я кстати часто раньше писал (а теперь иногда проскакивает) void main, данный оборот почерпнут был в период самообразования в школе из некоего пособия для младшекуров по С++.
Интересно - откуда ноги растут у этого явления. Или же эта часть (тип возвращаемого значения) неактуальна для С++ ?

pax 22.10.2010 12:13

Ответ: Двумерные массивы, не пойму
 
Цитата:

Сообщение от impersonalis (Сообщение 165581)
Я кстати часто раньше писал (а теперь иногда проскакивает) void main, данный оборот почерпнут был в период самообразования в школе из некоего пособия для младшекуров по С++.
Интересно - откуда ноги растут у этого явления. Или же эта часть (тип возвращаемого значения) неактуальна для С++ ?

Цитата:

а зачем делать его void?

В синтетических примерах, чтобы вообще не задумываться о возвращаемом значении и сосредоточиться на том аспекте для которого этот пример пишется.
Может ли main возвращать void

.Squid 22.10.2010 12:36

Ответ: Двумерные массивы, не пойму
 
Цитата:

Сообщение от pax (Сообщение 165576)
Я вот когда студентов паскалю учил - я их в первую очередь код форматировать учил и правильно отступы ставить слева, чтобы программы читабельны были. Чтобы понимали хотя бы что сами напишут ))

А я бы еще учил командному проганью. Разбивать группу на команды по три человека и давать модульное задание, чтобы каждый член команды свою часть выполнял.
Те, кто шарит, частично вставят ума тем, кто не особо разбирается. А слабые откроют глаза сильным, чтобы те были готовы к тому, что в реальной жизни они тоже не всегда будут окружены себе подобными.
Правда есть один серьезный затык. Есть большая вероятность, что те, кто шарит, сами все сделают


Часовой пояс GMT +4, время: 03:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot