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)
Я вот когда студентов паскалю учил - я их в первую очередь код форматировать учил и правильно отступы ставить слева, чтобы программы читабельны были. Чтобы понимали хотя бы что сами напишут ))

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

Knightmare 22.10.2010 13:56

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

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

Насколько я помню из компиляторов Мелкософта ноги растут. В С++ все так же, по стандарту - int. Это скорее требование самой ОС.
Цитата:

В синтетических примерах, чтобы вообще не задумываться о возвращаемом значении и сосредоточиться на том аспекте для которого этот пример пишется.
Бред. Тогда вообще уж точку входа убрать, а-ля BASIC, чего мелочиться-то. Быдлокодерство с таких мелочей и начинается. Тут значение не вернул, а чего, пофиг же, там память не подчистил, а чего, ее же много, тут алгоритм не оптимизировал, процессор-то 4х ядерный.

falcon 22.10.2010 14:26

Ответ: Двумерные массивы, не пойму
 
.Squid, нам в вузе повезло, на втором курсе дисциплину "технологии программирования" пригласили вести выпускника нашей кафедры.. вот он нам и устроил такую групповую работу. автоматизируем систему оплаты в кафе.. появился стимул читать много литературы, про **nix системы, параллельное и распределённое программирование, сетевое взаимодействие.
вот только проблема в том, что в группе больше никто ничего тольком не умеет..

ABTOMAT 22.10.2010 17:15

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

Быдлокодерство с таких мелочей и начинается. Тут значение не вернул, а чего, пофиг же, там память не подчистил, а чего, ее же много, тут алгоритм не оптимизировал, процессор-то 4х ядерный.
Отлично сказано!

impersonalis 22.10.2010 17:23

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

Быдлокодерство с таких мелочей и начинается. Тут значение не вернул, а чего, пофиг же, там память не подчистил, а чего, ее же много, тут алгоритм не оптимизировал, процессор-то 4х ядерный.
В мемориз!

.Squid 22.10.2010 19:24

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

Сообщение от falcon (Сообщение 165601)
...вот только проблема в том, что в группе больше никто ничего тольком не умеет..

Да, я тоже с таким столкнулся. Корень проблемы в том, что люди сами не знают чего хотят.
"О, компы! Я же все лето в Диаблу вторую прошпилил. А еще вроде в пеинте шарю. Пойду на факультет информатики".
"Ой, а я не знаю. Ну мне сказали, что программисты прилично зарабатывают, ну вот я и пошла. Что у меня по математике? Ну три и чо?" и т.д.
Хз как обстоят дела в других ВУЗах, городах, странах, но в моем универе было так. Самое смешное - это то, что 70% людей с красными дипломами нифига толком не шарят, просто у них общий IQ довольно высокий, и это позволило им зазубрить/выкрутиться/"сдать экзамен альтернативно" и т.п.
ЗЫ. Собственно говоря, далеко ходить не надо. На втором образовании по специальности "Менеджмент организаций" я именно так и учился:
Во-первых, я все таки переоценил свои силы и занятия еще и по субботам реально напрягали. А еще сессия, которая совпадала с основной, как правило.
Во-вторых, я не думал, что это будет настолько нудно. Я надеялся на какие-то более новые методики гуманитарного образования (вероятно, смотря на наши занятия по английскому, на которых мы и фильмы смотрели, и книги обсуждали..). Но, все оказалось весьма скучным и похожим на какие-то совковые методики (хотя некоторые преподы и их лекции понравились).
В результате, защита диплома на "Хорошо", а в списке оценок по экзаменам несколько "Удовлитворительно". Че-то там шарю, но глубоких знаний нет. Хотя приятно удивился сам себе, когда в статье, встретив термин "SWOT-анализ", для себя отметил, что я знаю, что это такое и как делается, и даже помню как расшифровывается эта аббревиатура. Хотя должно было быть стыдно... Но почему-то нет :)

Morganolla 22.10.2010 19:32

Ответ: Двумерные массивы, не пойму
 
Никогда не задумывался над main. Так за деревьями можно и леса не увидеть... Наверно я - бы...дер :))))?
ЗЫ Наверно тип main зависит от операционной системы ... или от IDE... ?

.Squid 22.10.2010 20:30

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

Сообщение от Morganolla (Сообщение 165640)
ЗЫ Наверно тип main зависит от операционной системы ... или от IDE... ?

Нет. Тип main зависит от стандарта. В С и С++ он должен быть int. Просто компиляторы не всегда придерживаются стандартов (например, как и браузеры не придерживаются стандартов HTML / xHTML).
IDE вообще не при чем. Можно код и в блокноте набивать.
От ОС может зависеть число параметров у функции main. Например, в Винде помимо int argc, char **argv есть еще char **envp, который передает переменные окружения. В Линуксе тоже вроде такое есть. А Эппл еще дальше пошла - у них в МакОСХ еще и четвертый параметр есть, который передает еще какие-то допольнительные параметры, вроде полного пути к исполняемому файлу (это я в Википедии вычитал, сам на практике не юзал ибо под МакОСХ не писал).
Да, кстати, указав тип функции main как void, можно получить внезапную неадекватную, на первый взгляд, работу. Любая программа по завершении своей работы возвращает определенный код операционной системе. И то, что вы указали void, не значит, что этот код будет "0". А не "0" - это код ошибки.

falcon 22.10.2010 21:00

Ответ: Двумерные массивы, не пойму
 
по сути у нас в вузе так же .Squid. Но всё же есть парочка людей как бы интересующихся ИТ и математикой... но они абсолютно не умеют погружаться в свой предмет с головой.. учиться, читать книги... они привыкли жить по системе: "придти на лекцию, записать, сделать дз"... а почитать страуструпа вместо дз - рилигия не позволяет... в итоге топчутся на месте

Mr_F_ 23.10.2010 20:43

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

Просто компиляторы не всегда придерживаются стандартов
помню сам удивился... VC++6.0 компилился норм с войдом, а след версии нет.

Reizel 24.10.2010 00:33

Ответ: Двумерные массивы, не пойму
 
хех, void main нас ЗАСТАВЛЯЕТ писать училка :-D
А вообще, Knightmare, ты один тут самый умный, да, мы все га**о :-D

.Squid 24.10.2010 02:23

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

Сообщение от Павел (Сообщение 165775)
А вообще, Knightmare, ты один тут самый умный, да, мы все га**о :-D

Нет, только ты. Потому что ты чаще всего об этом говоришь ХД

Hurrit 30.10.2010 23:55

Ответ: Двумерные массивы, не пойму
 
У нас универ вроде бы нормальный. Есть предмет под названием "концепция программирования". Разбераем, как работает тот или иной оператор, как используется память и т.д. и т.п. Плюс, обучают правильному стилю программирования. Девизом можно назвать: любой дурак может написать программу понятную компилятору, но только отличный программист может написать программу, понятную другому программисту. Правда, в некоторых местах инфа устаревшая, но неплохо вообщем.


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

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