Автор Тема: Програмирование на C++  (Прочитано 76701 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #360 : 24 Май 2011, 22:33:55 »
Цитата
у паскаля возможностей же меньше
Столько же. В чём-то меньше, в чём-то больше. Я имею в виду дельфи, т.к. в древнем паскале не вижу смысла (вот тут не надо вспоминать про другие реализации паскаля и про то, что язык в дельфях называется Object Pascal, сегодня он официально называется Дельфи). Директивы препроцессора есть. ОО примочки есть, видимость членов, class var, class procedure, проперти, методы структур, метаклассы, интерфейсы, перегрузка, шаблоны, полиморфизм и дры и дры, короче, хватает. Есть свои особенности у дельфей и у сей, но я с дельфями не испытывал проблем типа "вот такой фишки катастрофически не хватает". А вот пропертей мне не хватало в сях, я нашёл где-то огромный макрос для их имитации, но компилятор VC сильно ругался, выдавая какую-то внутреннюю ошибку (т.е. его конкретно клинило), пока я не понял, что его замыкает именно из-за этих макросов. Правда, в BC проперти были, но мне нужен был VC.
Просто дело в том, что си изначально позиционируется как "серьёзный язык", поэтому его курс изучения более обширный, чем паскалевский. Типа если взялся за си, изучай всё сразу. В сях те же директивы препроцессора считаются обычным делом, поэтому их включают в стандартный курс по изучению языка. Разбивка на интерфейс и реализацию в разных файлах (правда, формально это правильно). Постоянная возня со ссылками и указателями - тоже обычное дело, поэтому их тоже включают в курс. Но это не значит, что в дельфях этого нет. Кому надо, тот может использовать ссылки на переменные, записать что угодно по адресу любой переменной. Массивы как параметры функций (я имею в виду, когда параметр объявлен как array of, без размерности, тогда можно использовать любые индексы, но фактически передаётся адрес этого массива или того индекса, с которого надо начинать, который ты укажешь при вызове функции (массив как бы сдвигается на нужную позицию). При этом не надо заморачиваться ни с какими звёздочками и другими закорючками или постоянно помнить, что идентификатор массива в сях = его нулевой элемент).

А те возможности, которых нет... А так ли они вообще нужны? Например, множественное наследование. Я уверен, что если тебе вдруг доведётся сопровождать чужой код, в котором много множественного наследования, ты начнёшь его проклинать.

И вообще, как я уже сказал, возможности нарастить можно любые. Но синтаксис языка останется.

Можешь также вызывать указатель на класс  без ->.
(*obj).one;
Один хрен лишние символы и различный синтаксис для классов и структур. Во-первых, зачем я должен постоянно помнить об этих различиях? А во-вторых, если я вдруг поменяю класс на структуру или наоборот (в дельфях запросто), мне теперь все обращения менять?

Цитата
Это зависит не от языка, а от выбора программиста.
От языка тоже зависит. Есть пример из Фортрана, где запятая или точка в коде меняет смысл этого кода. Надо понимать, что люди не машины, поэтому синтаксис должен быть составлен так, чтобы облегчить жизнь людям. В сях он не очень дружественный.
« Последнее редактирование: 24 Май 2011, 22:39:21 от GManiac »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #361 : 24 Май 2011, 23:08:50 »
Цитата: GManiac
Один хрен лишние символы и различный синтаксис для классов и структур. Во-первых, зачем я должен постоянно помнить об этих различиях?
Ну потому что структуры это структуры, а класс это класс! :D
И не такой уж он и различный.
Цитата: GManiac
А во-вторых, если я вдруг поменяю класс на структуру или наоборот (в дельфях запросто), мне теперь все обращения менять?
Ну это же по детски. А если я захочу поменять имя переменной, что мне его в каждой строчке менять?
Отношение к классам серьёзное, если предётся менять класс на структуру или наоборот, то скорее всего это ошибка в проэктировании.
Цитата: GManiac
От языка тоже зависит.
Я говорю что язык даёт большие возможности, а использовать их или нет это решает программист.Его никто не заставляет использовать указатели, классы, контейнеры.....

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #362 : 24 Май 2011, 23:24:34 »
Цитата: GManiac
Во-первых, зачем я должен постоянно помнить об этих различиях?
Ну ты же запомнил что int хранит только целые числа  :)
Цитата: GManiac
А во-вторых, если я вдруг поменяю класс на структуру или наоборот (в дельфях запросто), мне теперь все обращения менять?
Меняй сколько влезет туда-сюда, абсолютно ничего не поменяется (если указаны изначально спецификаторы public и private), вызов через стрелку нужен для указателей в любом случае.
Цитата: GManiac
Разбивка на интерфейс и реализацию в разных файлах (правда, формально это правильно).
Ну это не обязательно, хотя и удобно.
Цитата: GManiac
Постоянная возня со ссылками и указателями - тоже обычное дело, поэтому их тоже включают в курс.
Да что вы все с этими указателями не помиритесь, удобная штука и если раз до конца разобраться то больше с ней проблем не будет возникать, не понимаю почему их все так не любят и не могут понять что же он из себя представляет .
Цитата: GManiac
Массивы как параметры функций (я имею в виду, когда параметр объявлен как
 array of, без размерности, тогда можно использовать любые индексы, но фактически передаётся адрес этого массива или того индекса, с которого надо начинать, который ты укажешь при вызове функции (массив как бы сдвигается на нужную позицию).
Так в с++ так же и точно так же как и в делфи с одномерным массивом это прокатывает, а если больше пространств то нужно указывать все кроме первого.
Цитата: GManiac
При этом не надо заморачиваться ни с какими звёздочками и другими закорючками или постоянно помнить, что идентификатор массива в сях = его нулевой элемент).
Ну то что в с++ считается всё с 0 это же классика, но никто не запрещает не использовать 0 элемент, заполняй и используй в циклах элементы начиная с 1го и всё если так не нравиться цифра 0.
Ещё описывание всех переменных что надо отдельно вверху это конечно с одной стороны приучает к порядку, но блин это адски неудобно постоянно вдруг что понадобиться лезть и дописывать и сводит на нет локальность переменных.
Цитата: GManiac
Например, множественное наследование.
Ну когда сам что-то делаешь то оно лишним не бывает, хотя я использовал раза 3 пока что .
Ну а синтаксис вещь такая что раз запомнил и всё, не так уж и много зарезервированных слов, которые часто используются так что запоминаются они быстро.

Добавлено позже:
Цитата: Mr2
Ну это же по детски. А если я захочу поменять имя переменной, что мне его в каждой строчке менять?Отношение к классам серьёзное, если предётся менять класс на структуру или наоборот, то скорее всего это ошибка в проэктировании.
Какая ошибка в проэктировании? Между ними в с++ разници никакой кроме того что в структуре по умолчанию без спецификатора доступа всё public, а в классе private. Больше никаких различий между ними нет.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #363 : 24 Май 2011, 23:41:17 »
Цитата: gepar
Ещё описывание всех переменных что надо отдельно вверху это конечно с одной стороны приучает к порядку, но блин это адски неудобно постоянно вдруг что понадобиться лезть и дописывать и сводит на нет локальность переменных.
В C++ в любом месте можно переменную объявлять.Или ты не про C++? ;)
Цитата: gepar
Какая ошибка в проэктировании? Между ними в с++ разници никакой кроме того что в структуре по умолчанию без спецификатора доступа всё public, а в классе private. Больше никаких различий между ними нет.
У меня в кармане нет Ничего, ничего кроме полного кармана конфет. Как то неоднозначно звучит. Это очень большая разница.
Почему проанализируй сам.(если не справишья обращяйся)
Цитата: Mr2
И не такой уж он и различный.
В смысле синтаксис.
« Последнее редактирование: 24 Май 2011, 23:45:59 от Mr2 »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #364 : 24 Май 2011, 23:45:06 »
Mr2, про точки и стрелки.
gepar, про указатели и ссылки.
Коротко: зачем нужны лишние телодвижения, запоминать ненужные различия и потом о них вспоминать, когда можно обойтись без всего этого?
То же и с логическими и битовыми операторами. Лёгкая возможность спутать вместе логическое выражение и арифметические - это бред уже при проектировании самого языка. Пускай си делался как надстройка над асмом, но такая фишка даже в этом случае неактуальна, имхо. У 68к специально был набор команд SCC (Set if Condition), для вычисления логических выражений. Команда Sсс устанавливала байт $FF (-1), если условие верное, или $00, если неверное. Для таких байтов и арифметические и логические операции одинаковы: 0 and FF = 0, 0 or FF = FF, not 0 = FF. Выражение "if (var) ..." не дружественно человеку (var <> 0). Синтаксически не очевидно, что оно значит.
Возможность присваиваний внутри выражений (в т.ч. в условиях) тоже ничего хорошего не сулит. Опять же, человек не машина. Правильнее предотвратить допущение таких простых ошибок, чем валить вину и лишнюю работу на человека. Ремни безопасности придуманы не для того, чтобы брать штрафы.

Я почему вообще залез в эту тему, потому что наблюдая её, в последних страницах вижу, что gepar что-то мутит (усложняет), пытаясь выполнить какую-нибудь ерунду (в смысле что-то простое). Задача программиста (и не только) сделать проще, быстрее и понятнее.
« Последнее редактирование: 24 Май 2011, 23:48:27 от GManiac »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #365 : 25 Май 2011, 00:06:36 »
Mr2, про точки и стрелки.
Всё просто, не знаю в чём проблема. ;)
Коротко: зачем нужны лишние телодвижения, запоминать ненужные различия и потом о них вспоминать, когда можно обойтись без всего этого?
Я и говорю что можно программировать и без указателей, и без всего что тебе не нравится.
То же и с логическими и битовыми операторами. Лёгкая возможность спутать вместе логическое выражение и арифметические - это бред уже при проектировании самого языка. Пускай си делался как надстройка над асмом, но такая фишка даже в этом случае неактуальна, имхо. У 68к специально был набор команд SCC (Set if Condition), для вычисления логических выражений. Команда Sсс устанавливала байт $FF (-1), если условие верное, или $00, если неверное. Для таких байтов и арифметические и логические операции одинаковы: 0 and FF = 0, 0 or FF = FF, not 0 = FF. Выражение "if (var) ..." не дружественно человеку (var <> 0). Синтаксически не очевидно, что оно значит.
Всё просто, нужен логический пиши два символа || .Это как ЖЫ, ШЫ пиши с мягким знаком :lol:.
Возможность присваиваний внутри выражений (в т.ч. в условиях) тоже ничего хорошего не сулит. Опять же, человек не машина. Правильнее предотвратить допущение таких простых ошибок, чем валить вину и лишнюю работу на человека. Ремни безопасности придуманы не для того, чтобы брать штрафы.
Серьёзных проблем никогда не вызывало.(Возможность присваиваний внутри выражений)
Я почему вообще залез в эту тему, потому что наблюдая её, в последних страницах вижу, что gepar что-то мутит (усложняет), пытаясь выполнить какую-нибудь ерунду (в смысле что-то простое). Задача программиста (и не только) сделать проще, быстрее и понятнее.
Это наверное из за той книжки что он читает.(Мудрят Дейтлы!  :) )

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #366 : 25 Май 2011, 00:30:47 »
Короче, всё понятно ;)

Добавлено позже:
Цитата
Всё просто, нужен логический пиши два символа || .Это как ЖЫ, ШЫ пиши с мягким знаком .
Всё просто, хочешь завести машину, вылезай, раскручивай стартёр, потом садись, крути рычаги и в путь! Хотя ведь можно проще, одной кнопочкой, но зачем? ;)

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #367 : 25 Май 2011, 00:34:13 »
Цитата: GManiac
Mr2, про точки и стрелки.gepar, про указатели и ссылки.
Коротко: зачем нужны лишние телодвижения, запоминать ненужные различия и потом о них вспоминать, когда можно обойтись без всего этого?
коротко: чтобы компилятор выдал именно такой код, какой хочет программист.

если я пишу на С, я уже довольно точно знаю во что это будет скомпилировано
да и ты же вроде с как минимум одним асмом знаком ? тогда не должно возникать вопросов про указатели/ссылки и т.п.
« Последнее редактирование: 25 Май 2011, 00:42:10 от MetalliC »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #368 : 25 Май 2011, 00:43:15 »
Добавлено позже:
Всё просто, хочешь завести машину, вылезай, раскручивай стартёр, потом садись, крути рычаги и в путь! Хотя ведь можно проще, одной кнопочкой, но зачем? ;)
Всё просто, тормаза придумал трус, а сцепление вообще непонятно зачем нужно.... :(
Всегда можно лучше, можно хуже, но мы имеем то что имеем.Тут дело скорее устраивает это тебя или нет.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #369 : 25 Май 2011, 00:59:04 »
Цитата: GManiac
Коротко: зачем нужны лишние телодвижения, запоминать ненужные различия и потом о них вспоминать, когда можно обойтись без всего этого?
Звучит как "давайте использовать только double, int на мыло - он ущербный!"  :) Ну не используй указатели, в дельфи обходишься вот и здесь значит смог бы обойтись (хотя с ними удобнее же).
Цитата: GManiac
Возможность присваиваний внутри выражений (в т.ч. в условиях) тоже ничего хорошего не сулит.
Это хорошо что ты напомнил, не любил я это в паскале, но забыл до какой степени не любил, теперь вспомнил.
Цитата: GManiac
Я почему вообще залез в эту тему, потому что наблюдая её, в последних страницах вижу, что gepar что-то мутит (усложняет), пытаясь выполнить какую-нибудь ерунду (в смысле что-то простое). Задача программиста (и не только) сделать проще, быстрее и понятнее.
Ну вот, теперь я мутю да ещё и виноватый  :D Я просто не ищу лёгкие способы (да, я мог изначально перекопировать всё из своего символьного массива и всё), мне интересно как это можно сделать по другому. Как видишь в с++ всё не столь прямолинейно и существует очень много стандартных возможностей, о которых я и спрашиваю в теме. А вот есть ли в дельфи возможность запихнуть в буфер входящих данных данные для ввода чтобы при будущем запросе на чтение данных в переменную из буфера потока были взяты нужные данные).  Только давайте не будем трогать эмуляцию нажатий клавиатуры, это получиться уж очень сложно (в смысле кода много, а пользы мало).
Цитата: GManiac
Всё просто, хочешь завести машину, вылезай, раскручивай стартёр, потом садись, крути рычаги и в путь! Хотя ведь можно проще, одной кнопочкой, но зачем?
А вот это какраз про дельфи, хочешь новый локальный счётчик - листай n страниц назад и дописывай новую переменную для своего счётчика в объявления.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7492
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #370 : 25 Май 2011, 07:23:01 »
...а вот дельфи после паскаля что-то показалась мечтой быдло-программиста (программирование мышкой же!) и я после созданий пары кнопок да окошек (без путеводителя найти ничего невозможно, даже банально откомпилировать скопипащенный код) закинул это дело.
Т.е., ты никогда не программил на VС и всегда программишь на чистом API, описывая окна и его элементы по ходу исполнения программы, да? Не смеши мои тапки. Любая ГУевая программа требует определенного затрата человека-часов на, как ты назвал, "программирование мышкой". А сколько такого "программирования" занимает программирование под 1С, ты бы только знал... Пиши консольные вещи для гиков на чистом API. В виндах тебе делать нечего, я так считаю.

PS Реально работающий код:
« Последнее редактирование: 25 Май 2011, 07:41:11 от HardWareMan »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #371 : 25 Май 2011, 09:52:15 »
коротко: чтобы компилятор выдал именно такой код, какой хочет программист.
Если хочешь такой код, используй асм. Никакой си его не даст. Обычно компиляторы си дают более оптимизированный код, чем дельфя, но дело не в языке, а в оптимизаторе. (В частности поэтому дельфи так быстро компилирует). У того же си билдера код медленнее работает. Проверял на своём эмуле SN76489, перегнал с дельфей на BCB, потом на VC. Код BCB оказался в 2 раза медленней, а VC - в 1.5 раза быстрее дельфишного.
Приведи реальные примеры из реальных приложений, где си выполняет роль ЯВУ (а не перевирание асма), когда необходимо смешивать логические и арифметические значения. Для человека это две разные вещи.

Цитата
тогда не должно возникать вопросов про указатели/ссылки и т.п.
хы, да на сях всё запутанней :) В асме есть всего два случая операндов: immediate и address. Изредка указатель на адрес.


Цитата
Звучит как "давайте использовать только double, int на мыло - он ущербный!"
Ну, для целых и вещественных типов арифметика немного разная, а в целом - да, МЕНЬШИЕ типы были актуальны из-за прошлых ограничений. Для отдельных переменных сегодня это почти не актуально, если ты быдлокодишь, а не пишешь системную прогу. Выигрыш в скорости будет почти не ощутим. Зато если вдруг из-за переполнения твоя прога перестанет нормально работать, испытаешь головную боль ;)

Mr2, напиши на сях мои примеры отсюда:
http://www.emu-land.net/forum/index.php/topic,49888.msg722215.html#msg722215

Цитата
А вот это какраз про дельфи, хочешь новый локальный счётчик - листай n страниц назад и дописывай новую переменную для своего счётчика в объявления.
Да, это скорее минус дельфей, т.к. он мешает соблюдению локальности переменной (с точки зрения программиста), т.е. переменная должна использоваться как можно в меньшем промежутке текста, без ущерба логике программы.
Модули в n страниц говорят о плохом программисте ;)

Цитата
Это хорошо что ты напомнил, не любил я это в паскале, но забыл до какой степени не любил, теперь вспомнил.
...
Как видишь в с++ всё не столь прямолинейно и существует очень много стандартных возможностей, о которых я и спрашиваю в теме.
Для тебя языки это пока что "поиграться", а для меня это работа. Если тебе придётся работать с чужим непрямолинейным, нестандартным или медитативным кодом (а можно и с собственным, но написанным в прошлом) в проекте хотя бы на 50 тыщ строк, заговоришь по-другому ;)

На сях самая большая и реальная программа, которую я делал, был дизасм
http://www.emu-land.net/forum/index.php?topic=15957.0
, а позже анализатор кода на его основе. Щас понимаю, что написать это на дельфях было бы проще и быстрее.


Да, вот что хотел спросить. Можно объявлять функции без указания имён параметров:
void func( int )
{}

Вопрос: КАК их использовать в теле функции?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #372 : 25 Май 2011, 11:26:59 »
Цитата: GManiac
На сях самая большая и реальная программа, которую я делал, был дизасмhttp://www.emu-land.net/forum/index.php?topic=15957.0
Не запускается.
Цитата: GManiac
Да, вот что хотел спросить. Можно объявлять функции без указания имён параметров:void func( int ){}Вопрос: КАК их использовать в теле функции?
Это будет не обявление а прототип, дальше потом опишешь эту функцию и назовёшь её параметры как угодно, если ты писал приложение то по идеи должен был слышать об этом.
Цитата: HardWareMan
Т.е., ты никогда не программил на VС и всегда программишь на чистом API, описывая окна и его элементы по ходу исполнения программы, да? Не смеши мои тапки. Любая ГУевая программа требует определенного затрата человека-часов на, как ты назвал, "программирование мышкой".
Так а в visual в этот раз я сразу не прыгал с головой, я пока с консолью хочу доразбираться   :)

Добавлено позже:
Кстати типичный срач c++ VS Delphi воочию, не думал что он доберётся до эму-ленда  :)

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #373 : 25 Май 2011, 11:50:24 »
Не запускается.
Шутишь? Это консольное приложение. Из командной строки запусти, увидишь параметры запуска.

Цитата
Это будет не обявление а прототип, дальше потом опишешь эту функцию и назовёшь её параметры как угодно,
Емнип, в объявлении тоже так можно написать.

Добавлено позже:
Да, только что в VC проверил. Можно создать дефайн функции с параметрами без имён.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #374 : 25 Май 2011, 12:24:38 »
Цитата: GManiac
Да, только что в VC проверил. Можно создать дефайн функции с параметрами без имён.
Можно и не define ... и что? :) С++ не так сильно ограничивает тебя по этому поводу (по началу после паскаля это раздражает, а потом - наоборот), нужна тебе функция с параметром - на тебе функция с параметром. Вот тебе пример как применить это
void a(int)
{
    cout<<"GMan";
}

void a()
{
    cout<<"iac";

}


int main ()
{
    a(100500);
    a();
}


Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #375 : 25 Май 2011, 12:27:03 »
Цитата: GManiac
Mr2, напиши на сях мои примеры отсюда:
Я только С++ знаю. :blush:
В Delphi даже не вникал. Меня всё устраивает в C++, ну вот только двумерный динамический массив както смутил. ;)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #376 : 25 Май 2011, 12:36:36 »
Цитата: GManiac
Шутишь? Это консольное приложение. Из командной строки запусти, увидишь параметры запуска.
...

Добавлено позже:
Цитата: Mr2
В Delphi даже не вникал. Меня всё устраивает в C++, ну вот только двумерный динамический массив както смутил.
Почему? Всё логично ведь и также как и в других языках - создаём массив массивов,  главное потом когда будешь удалять свой динам. массив не забыть []. А вообще мне динам. массив понадобился единожды чтобы сдать одну лабу, больше нигде не применял.

Добавлено позже:
За срачём мой вопрос был не замечен  :(
Как в дебагере отслеживать состояния вх. и исх. потоков? Я вообще до этого дебагером не пользовался и ожидал что будет что-то вроде workspace матлаба где будет состояние всех переменных, история ввода-вывода, а на деле я получил только возможность следить за переменными в данный момент и изменять их значения на ходу (после изменения символа 'a' в перменной на 'b' моя программа сразу же завершилась почему-то :( ) и... и всё. Что же мне вводить в поле "следить за..." чтобы проследить за потоками подскажите пожалуйста.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #377 : 25 Май 2011, 12:42:03 »
Цитата: gepar
Почему?
В начале вот так его создал:
int *pArray
pArray =new int[val1][val2];
Когда выдало ошибку, пришлось создавать массив массивов. ;)
Теперь при старте программы появилась небольшая пауза, видимо массив массивов создаётся. :?
Цитата: gepar
А вообще мне динам. массив понадобился единожды чтобы сдать одну лабу, больше нигде не применял.
Я делал под нумерацию  анимации спрайта.
ani[type][kadr];
« Последнее редактирование: 25 Май 2011, 12:45:21 от Mr2 »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #378 : 25 Май 2011, 12:46:15 »
GManiac,кстати учитывая твою любовь к указателям повторю картинку что я здесь постил после НГ.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #379 : 25 Май 2011, 12:50:09 »
Цитата
Можно и не define ... и что?
Под дефайном я имел в виду определение тела функции, в отличие от декларейшна (объявление заголовка). И там, и там можно не давать имя параметру. Вот объясни мне, зачем в функции параметр, который нельзя использовать?

Я только С++ знаю. :blush:
В Delphi даже не вникал. Меня всё устраивает в C++, ну вот только двумерный динамический массив както смутил. ;)
А что там сложного в моих примерах? И двумерных дин. массивов там нету.
Если про вторую функцию sum, то вызовы:
sum( dyn_mas ) - суммирование всех элементов динамического массива, с индекса 0 до его конца
sum( stat_mas ) - суммирование всех элементов статического массива, например, с 1-го по 5-й, если он был объявлен как array[1..5]
sum( [ 2, 3, 4, 5 ] ) - суммирование фактически переданных в вызов чисел: 2 + 3 + 4 + 5.

И всё это одной простенькой функцией.

Или для первой функции sum:
sum( a ) - сложить первые два числа в массива a
sum( a[ 5 ] ) - сложить два числа, начиная с a[ 5 ], то есть a[ 5 ] + a[ 6 ]


И никаких закорючек.


А вот нашёл интересные посты ))))))
http://www.emu-land.net/forum/index.php/topic,49888.msg694737.html#msg694737
http://www.emu-land.net/forum/index.php/topic,49888.msg694732.html#msg694732
http://www.emu-land.net/forum/index.php/topic,49888.msg694515.html#msg694515
http://www.emu-land.net/forum/index.php/topic,49888.msg705059.html#msg705059

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #380 : 25 Май 2011, 12:57:12 »
Цитата: Mr2
pArray =new int[val1][val2];
Так кто же так делает. Тоесть по твоему массив массивов напрямую создать нельзя, а вот через new массив массивов сразу вот так можно, интересная у тебя логика  :)
Вот быстро набросанный пример массива массивов
int main ()
{
    int m,n;
    cin>>m>>n;
    int *a[m];
    for (int i=0;i<m;i++)
    {
        a[i]=new int [n];
        for (int j=0;j<n;j++)
         a[i][j]=i*j;
    }
    cout<<a[3][2];
}
Заполнение сделал чтобы нагляднее было если же просто сделать динам. двухмерный массив то
int *a[m];
 for (int i=0;i<m;i++)
  a[i]=new int [n];
Если не хочется использовать 0-элементы то можно после     cin>>m>>n; добавить m++ и n++  :)

Добавлено позже:
Цитата: GManiac
http://www.emu-land.net/forum/index.php/topic,49888.msg705059.html#msg705059
Ну то что в условии можно делать присваивание это чаще всего (но не всегда) неудобно, некоторые компиляторы правда предупреждают если где то в условии идёт = вместо ==.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #381 : 25 Май 2011, 13:03:18 »
GManiac синтаксис я не знаю.
Цитата: gepar
Так кто же так делает. Тоесть по твоему массив массивов напрямую создать нельзя, а вот через new сразу массив массивов сразу вот так можно, интересная у тебя логика 
Логика у меня такая, раз можно одномерный, то почему двумерный нельзя?Ведь статический двумерный  создаётся как и одномерный.
int array[5][5];

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #382 : 25 Май 2011, 13:11:03 »
Mr2,а ничего что обычный двумерный массив создаётся при компиляции а когда ты сам вводишь m и n откуда же компилятору знать какой он тогда у тебя там будет? Значит он не может рассчитать выделение памяти посему ты создаёшь массив указателей (это будет динам. выделено место в хипе), а потом заставляешь каждый указатель указывать на другие указатели (тоже место будет динам. выделено в хипе). При этом элементы массива в хипе будут не подряд так что арифметика указателей тут не применима. Ну это я чтобы понятно было, можно проще - запоминаешь эту схему и делаешь свой n-мерный массив.
int *a[m];
 for (int i=0,j=0...;i<m;i++,j++,...)
 {
    a[i]=new int [n];
    a[i][j]=new int[z]
    ....
  }


Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7492
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #383 : 25 Май 2011, 13:13:49 »
...
И где же ваш .NET?
...Значит он не может рассчитать выделение памяти посему ты создаёшь массив указателей (это будет динам. выделено место в хипе), а потом заставляешь каждый указатель указывать на другие указатели (тоже место будет динам. выделено в хипе). При этом элементы массива в хипе будут не подряд так что арифметика указателей тут не применима. Ну это я чтобы понятно было, можно проще - запоминаешь эту схему и делаешь свой n-мерный массив.
Ну прям по своему комиксу. :3 А что мешает сделать конструкцию из переопределения массивов в куче при смене размера? SetLength так и работает в тобой ненавистных Дельфях: при уменьшении размера он просто триммит в куче массив, а при увеличении - определяет новый, копирует из старого все действительное в новый и освобождает старый. И, кстати, судя по сему, многомерные массивы тоже являются массивом указателей на указатели на массивы... Только вот все это скрыто.
« Последнее редактирование: 25 Май 2011, 13:19:21 от HardWareMan »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #384 : 25 Май 2011, 13:16:49 »
Цитата: HardWareMan
И где же ваш .NET?
Это ты к чему?  :?

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7492
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #385 : 25 Май 2011, 13:20:35 »
Это ты к чему?  :?
Это я к этому:

Типичная ошибка запуска .NET программы на компе с отсутствующим этим самым .NET. У меня их целый букет и программка работает. :3 Наверное Маньякыч ее на шарпе писал. :3
« Последнее редактирование: 25 Май 2011, 13:24:04 от HardWareMan »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #386 : 25 Май 2011, 13:23:30 »
HardWareMan,да ну, visual studio когда я её ставил позаботилась чтобы фреймворки у меня были установлены да ещё и своих расширенных версий наставила. Не думаю что дело в этом, может быть проблема в том что у меня 64х битная 7ка.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1594
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #387 : 25 Май 2011, 13:24:52 »
Цитата: gepar
а когда ты сам вводишь m и n откуда же компилятору знать какой он тогда у тебя там будет?
Компилятор не знает какого размера у меня будет одномерный дин.массив, но всеравно его создаёт.
Тут скорее дело во втором указателе, чем в размере.
pArray =new int[val1][val2];

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7492
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #388 : 25 Май 2011, 13:27:16 »
HardWareMan,да ну, visual studio когда я её ставил позаботилась чтобы фреймворки у меня были установлены да ещё и своих расширенных версий наставила. Не думаю что дело в этом, может быть проблема в том что у меня 64х битная 7ка.
Возможно. Но у меня вот что (И кто тут говорил, что на Ц самые маленькие программки, а у дельфи все программы весят от 300к? Смотрите скока либов таскать надо за ними, при том, что 300к программа дельфи полностью автономна. Ну можно и меньше, но тогда придется таскать целый 1,2Мбайта рантайм библиотек. :3).

PS Между прочим, сейчас шарп курирует тот чел, который в свое время у борланда курировал дельфю. Заметили сходства, правда? Но он полностью на .NET.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #389 : 25 Май 2011, 13:32:05 »
Цитата: Mr2
Компилятор не знает какого размера у меня будет одномерный дин.массив
Там какая-то хитрая сложная реализация специально для одномерного динам. массива сделана чтобы удобно было, по этой же причине ты можешь передавать функциям одномерный массив не указывая его размер, а двумерный - нет. То же самое и в дельфи с паскалем.

Добавлено позже:
Цитата: HardWareMan
Возможно. Но у меня вот что (И кто тут говорил, что на Ц самые маленькие программки, а у дельфи все программы весят от 300к? Смотрите скока либов таскать надо за ними, при том, что 300к программа дельфи полностью автономна. Ну можно и меньше, но тогда придется таскать целый 1,2Мбайта рантайм библиотек. :3).
Нет, я наоборот писал (не в этой теме) что это глупо когда СУПИР_КАЛЬКУЛЯТОР_БАЙ_ВАСЯ написаный на .NET весом 50 кб не запуститься без 50 мб мелкософтовских библиотек, вспоминай  :) Ещё хитрая VS2010 не хочет создавать приложения для старого фреймворка и когда ты хочешь создать новый проект для старого фреймворка она (ВНИМАНИЕ!) хочет VS2008!