На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> "Учебник по C++" в нашем Wiki , Обсуждение глав
    Цитата juice @
    Ребят простите, что не осилил топик полностью, но хочется спросить, а чем плох учебник от Дейтел и Дейтел "Программирование на С++"? По сути классный талмут для изучения с нуля. Разве, что отсутствует "Поближе к реальности", а для старта и как справочник по базовому С++ вполне даже ничего, на мой не искушенный взгляд. И Либерти книжка С++ за 21 день для старта вроде самое оно. Может они и не новые, но как по мне лучше и не надо.

    Задача - написать именно актуальный учебник. При чем желательно, чтобы он был актуальный по состоянию на 2010-2011-ый года, т. е. когда выйдет новый стандарт, и будут появляться компиляторы, ему соответствующие. Учебника от Дейтел не читал, а к книгам из серии "... за 21 день" питаю некоторое предубеждение. :)

    Цитата juice @
    Что касается учебника. Я бы предложил другой формат - изучение на примерах. <...>

    Ну, собственно, если посмотришь обсуждение в теме, то поймешь, что именно так и предполагается. Вопрос только - что именно выбрать в качестве примера. Если не брать во внимание предложенный тетрис (под разными соусами и в разных вариантах), то остается другой предложенный вариант - плоттер. Т. е. программа для рисования графиков. Предлагаю на нем и остановиться, благо потенциал у него большой.

    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
      Цитата Flex Ferrum @
      Предлагаю на нем и остановиться, благо потенциал у него большой.

      а можно ли на нем сетевые приложения объяснить?

      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
        По поводу задач, которые можно рассматривать в учебнике, помимо плоттера предлагается следующие:
        - MMO для форума (тут impik лучше расскажет)
        - XForumReader Client.
        Так сказать, будет двойная польза.

        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
          Йолки зеленые :blink: Я уже подумал что у меня белочка после вчерашнего перепоя.. А нет. :wacko:
          Пардон а нафига?
          Хотя... Я бы лично пожелал бы хороший учебник по DirectShow. И по разработке и проектированию ПО.

          Добавлено
          Цитата Flex Ferrum @
          - XForumReader Client.

          Реализация сервера на крестах была бы не менее интересна чем реализация клиента. Для примера.
          Да и потом, XFR это побольшей части QT все же.

          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
            Цитата FullArcticFox @
            Реализация сервера на крестах была бы не менее интересна чем реализация клиента. Для примера.

            Хех. Ну а почему бы тогда и нет?

            Итого, в сухом остатке у нас получается:

            - Плоттер. Охватываемые темы:
            - Вычисление значения функции для заданного аргумента.
            - Табулирования функции для заданного диапазона аргумента.
            - Построение графиков функций (со всяческими наворотами и прибабахами)
            - Организация пользовательского интерфейса.
            - MMO-игра
            (тут impik распишет)
            - XForumReader Client/Server
            - Проектирование серверных и сервисных приложений на С++
            - Взаимодействие с базами данных
            - Сетевое взаимодействие
            - Многопоточность и задачи массового обслуживания
            - Проектирование десктопных приложений
            - Клиент-серверные взаимодействия в декстопных приложениях, распределенные архитектуры.
            - Организация пользовательского интерфейса.

            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
              Цитата Flex Ferrum @
              - MMO-игра
              (тут impik распишет)

              - кросплатформенный socket io
              - распределенная архитектура
              - уровни системы коммуникаций
              - система управления
              - система распределения
              - защита серверов, трафика
              - проектирования серверов в сторону производительности (работа с память, мультипоточность)
              - работа с БД + защита (все кроссплатформенное)
              - принципы проектирования клиента в агрессивной среде(это когда на том конце провода враги)
              - аспекты реализации пользовательского интерфейса с точки зрения "пользователя-нуба"
              - кроссплатформенный сетевой протокол

              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
              Сообщение отредактировано: impik777 -
                Введение главы "Начала" готово. Нужна, понятное дело, критика.

                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                  стиль изложения не по Карнеги

                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                    Цитата impik777 @
                    стиль изложения не по Карнеги

                    А "по Карнеги" - это как? :blink:

                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                      Цитата Flex Ferrum @
                      А "по Карнеги" - это как?

                      т.к. целевая аудитория - долбо люди малознающие, то нужно не сыпать терминами в академическом стиле, а простыми ассоциациями и аналогиями.

                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                        Цитата impik777 @
                        т.к. целевая аудитория - долбо люди малознающие, то нужно не сыпать терминами в академическом стиле, а простыми ассоциациями и аналогиями.

                        Ну так без терминов все равно потом не обойдешься, а потому спокойно их вводить - на мой взгляд самое оно.

                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                          Цитата Flex Ferrum @
                          Ну так без терминов все равно потом не обойдешься, а потому спокойно их вводить - на мой взгляд самое оно.

                          просто в ведении мощная плотность информации.

                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                            Цитата impik777 @
                            просто в ведении мощная плотность информации.

                            Твои предложения?

                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                              Цитата Flex Ferrum @
                              Цитата (impik777 @ Сегодня, 12:33)
                              просто в ведении мощная плотность информации.

                              Твои предложения?

                              все тоже самое, только более простым языком

                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                Цитата impik777 @
                                все тоже самое, только более простым языком

                                Так куда уж проще то? :blink: :wacko:

                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                  Цитата Flex Ferrum @
                                  Так куда уж проще то?

                                  хм, тебе все кажется простым, да и мне тоже.
                                  А вот пару дней назад рассказывал однокурснице про указатель, ссылку и массив.
                                  Все компьютерная терминология вызывала полное отторжение, а вот аналогии на тычинках и пестиках - шли на ура.
                                  Если ты делаешь учебник для начинающего, то нужны именно "тычинки и пестики".
                                  Тем более посмотри стиль всех "учебников для дебилов", как там разжевывается все.
                                  А такой стиль удобен для человека, которые это все примерно знает, но вот надо в мозгу устаканить. И пару пробелов восполнить.

                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                    Угумс. Задумаюсь над этим.

                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                      критика - не очень понятно, зачем нужно упоминание про .NET Framework и java, а так в целом неплохо.

                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                        Цитата Бобёр @
                                        критика - не очень понятно, зачем нужно упоминание про .NET Framework и java, а так в целом неплохо.

                                        Ты не прав. Если целью было донести до читателя что такое программа и какими способами выполняются и обрабатываются программы компьютером то их упоминания были уместными.

                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                          Цитата Бобёр @
                                          критика - не очень понятно, зачем нужно упоминание про .NET Framework и java, а так в целом неплохо.

                                          Упоминание о них было в разделе "подробности" и да, чтобы показать, что сейчас компиляция может вестись не только в машинные коды, но и в байт-код для виртуальных машин (как, например, для C++/CLI).

                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                            Цитата Бобёр @
                                            не очень понятно, зачем нужно упоминание про .NET Framework и java, а так в целом неплохо

                                            Новички на сегодняшний день приходят наслышанные о Java, C# и пр. страшных словах. Думаю, это полезно для укладывания в голове всё по порядку. BTW, не помешало бы провести ликбез относительно разных C/C#/C++ о том, что это разные вещи не вдаваясь ни в какие подробности(их можно отдельной - на то она и вики).

                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                              Цитата archimed7592 @
                                              BTW, не помешало бы провести ликбез относительно разных C/C#/C++ о том, что это разные вещи не вдаваясь ни в какие подробности(их можно отдельной - на то она и вики).

                                              Тоже думал об этом.

                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                Также интересует вопрос стиля. По поводу того, что не стоит его делать официальным (по крайней мере в части "для новичков") - уже высказались. А вот каким он должен быть? В принципе, в свое время понравился стиль изложения Элджера. По крайней мере, читать его было весело (со всеми его "если вы так подумали, то идите, заварите себе кофе, и подумайте еще раз!"). :) Но вот будет ли возможность везде этот стиль выдержать...

                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                  Цитата Flex Ferrum @
                                                  По крайней мере, читать его было весело (со всеми его "если вы так подумали, то идите, заварите себе кофе, и подумайте еще раз!"). :) Но вот будет ли возможность везде этот стиль выдержать...

                                                  Мне кажется, что новичку так весело не будет ;) . Но и официальным и слишком строгим стиль изложения быть не должен
                                                  Нужно найти компромис...
                                                  Главное - спокойствие. Не слишком грузить деталями, давать "отдохнуть", и "философию" не вешать(как тот же Элджер). "Спокойствие, только спокойствие!"(с)Карлсон.
                                                  В этом плане мне нравится Керниган и Ритчи, ничего лишнего. Но там, пожалуй, немного перебор с официальностью.

                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                  Сообщение отредактировано: D_KEY -
                                                    А какова, собственно, цель обсуждения?
                                                    Потрепаться или сделать что-то в итоге?

                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                      Цитата
                                                      Потрепаться или сделать что-то в итоге?

                                                      Так начали уже. http://www.sources.ru/wiki/doku.php?id=doc:cpp:teachbook:beginning

                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                        Цитата i++ @
                                                        Цитата
                                                        Потрепаться или сделать что-то в итоге?

                                                        Так начали уже. http://www.sources.ru/wiki/doku.php?id=doc:cpp:teachbook:beginning

                                                        Здорово!
                                                        А присоединиться мона ;) ?

                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                          Цитата D_KEY @
                                                          А присоединиться мона ;) ?

                                                          Нет, и он еще спрашивает! :) Там непаханное поле! Реквизиты для доступа к wiki можешь получить у Romtek'а.

                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                            Цитата Flex Ferrum @
                                                            Цитата D_KEY @
                                                            А присоединиться мона ;) ?

                                                            Нет, и он еще спрашивает! :) Там непаханное поле! Реквизиты для доступа к wiki можешь получить у Romtek'а.

                                                            Не, ну мало ли у вас отбор строгий ;)
                                                            Я, конечно, много не обещаю, но мне было бы этим интересно заняться в свободное время.
                                                            А с чего желательно начать?

                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                              Цитата D_KEY @
                                                              А с чего желательно начать?

                                                              А с чего больше приглянется. :)

                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                Цитата D_KEY @
                                                                А с чего желательно начать?

                                                                Да с чего хочешь. Лишь бы оно не соответствовало принципу "Легкость написания программ не являлась целью написания сего языка" (С) аффтар (один из ) ADA

                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                  Цитата Flex Ferrum @
                                                                  А с чего больше приглянется. :)

                                                                  Сам я планирую идти последовательно (от раздела к разделу).

                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                    Цитата Flex Ferrum @
                                                                    Сам я планирую идти последовательно (от раздела к разделу).

                                                                    Главное, разжевать указатели :(

                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                      Цитата Оззя @
                                                                      Главное, разжевать указатели :(

                                                                      Ооо... Это - да. :)

                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                        Цитата Flex Ferrum @
                                                                        Цитата Flex Ferrum @
                                                                        А с чего больше приглянется. :)

                                                                        Сам я планирую идти последовательно (от раздела к разделу).

                                                                        Нароботок еще нет? То есть вики отражает текщее положения дел ;) ?

                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                        Сообщение отредактировано: D_KEY -
                                                                          Цитата D_KEY @
                                                                          Нароботок еще нет? То есть вики отражает текщее положения дел ;) ?

                                                                          Угумс.

                                                                          Добавлено
                                                                          Из наработок (точнее идей) - на каких примерах излагать. Для первого раздела у меня таковым стал плоттер:
                                                                          Цитата Flex Ferrum @
                                                                          - Плоттер. Охватываемые темы:
                                                                          - Вычисление значения функции для заданного аргумента.
                                                                          - Табулирования функции для заданного диапазона аргумента.
                                                                          - Построение графиков функций (со всяческими наворотами и прибабахами)
                                                                          - Организация пользовательского интерфейса.


                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                            Могу попробовать взять на себя шаблоны. Но хотелось бы предварительно определиться со стилем, чтобы выдержать в едином духе. Так что пока помолчу и поприглядываюсь. Если к тому времени, как насмотрюсь, желающих не будет, то возьмусь, пожалуй. Не целиком, конечно, как получится. Ибо целиком - это до фига и надолго. Впрочем, смотря как пойдёт (это я биографию свою клубную вспомнил :wub: )...

                                                                            Добавлено
                                                                            Кстати, Flex Ferrum, насчёт критики. Раз уж окончание начала книги предназначено для неновичков, то надеюсь, они не сильно будут огорошены объёмом информации, если ты прояснишь, что байт-код получается путём компиляции исходников, а виртуальная машина его обычно интерпретирует. И чем эта золотая середина выгоднее и наоборот по сравнению с чистыми компиляцией и интерпретацией.

                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                              Цитата Qraizer @
                                                                              Кстати, Flex Ferrum, насчёт критики. Раз уж окончание начала книги предназначено для неновичков, то надеюсь, они не сильно будут огорошены объёмом информации, если ты прояснишь, что байт-код получается путём компиляции исходников, а виртуальная машина его обычно интерпретирует. И чем эта золотая середина выгоднее и наоборот по сравнению с чистыми компиляцией и интерпретацией.

                                                                              И об этом тоже думал. Наверняка добавлю. Вторая часть "Введения в начала" не дописана. Там должно быть подробнее и про интерпретируемые/компилируемые языки, и про императивные/декларативные/функциональные (хотя бы примеры оных), и что-нибудь еще.

                                                                              Добавлено
                                                                              Цитата Qraizer @
                                                                              Но хотелось бы предварительно определиться со стилем, чтобы выдержать в едином духе.

                                                                              Для этого с этим "духом" надо бы определиться.

                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                Цитата Flex Ferrum @
                                                                                Цитата Qraizer @
                                                                                Но хотелось бы предварительно определиться со стилем, чтобы выдержать в едином духе.

                                                                                Для этого с этим "духом" надо бы определиться.

                                                                                Можно "потренироваться" на чем-нибудь относительно простом, вроде hello world.
                                                                                Один человек пишет свой вариант этой потрясающей программы, или все заинтересованные представляют свой, затем обсуждаем. Можно пойти немного другим путём, писать эту небольшую статейку по-частям(сама программа, компиляция/запуск, построчный разбор кода), обсуждая каждую отдельно.
                                                                                Заодно определимся и с "духом" и со стилем изложения, и с правилами расстановки скобочек и пробелов ;) .

                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                  Цитата D_KEY @
                                                                                  Один человек пишет свой вариант этой потрясающей программы, или все заинтересованные представляют свой, затем обсуждаем. Можно пойти немного другим путём, писать эту небольшую статейку по-частям(сама программа, компиляция/запуск, построчный разбор кода), обсуждая каждую отдельно.
                                                                                  Заодно определимся и с "духом" и со стилем изложения, и с правилами расстановки скобочек и пробелов ;) .

                                                                                  Я согласный. :)

                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                    Цитата Flex Ferrum @
                                                                                    Заходил тут на выходных в книжный, полистал то, что сейчас стоит на полке с надписью "С++" и имеет в названии "Учебник"/"Учебный курс"/"Для начинающих" и т. п. Пришел в некоторое состояние шока.
                                                                                    1. Книги наших авторов - безнадежно устарели. Честно. Я не понимаю, как сейчас можно издавать что-то по С++, где все примеры пишутся сплошным текстом (без отступов, без ничего такого прочего), и в качестве среды предлагается использовать BC++ 3.1. :wacko:

                                                                                    Да, все именно так :yes-sad: . Я тут как-то создавал тему в многошуме, она не только об этом, но основным побудительным мотивом была именно подобная литература по программированию.

                                                                                    -Added
                                                                                    Цитата Flex Ferrum @
                                                                                    Цитата int0 @
                                                                                    надо было взглянуть на Р.Лафоре

                                                                                    По-моему, листал. Понравилось.

                                                                                    Мне кажется я тоже смотрел сию книгу, очень даже.

                                                                                    -Added
                                                                                    Цитата Flex Ferrum @
                                                                                    Цитата D_KEY @
                                                                                    Один человек пишет свой вариант этой потрясающей программы, или все заинтересованные представляют свой, затем обсуждаем. Можно пойти немного другим путём, писать эту небольшую статейку по-частям(сама программа, компиляция/запуск, построчный разбор кода), обсуждая каждую отдельно.
                                                                                    Заодно определимся и с "духом" и со стилем изложения, и с правилами расстановки скобочек и пробелов ;) .

                                                                                    Я согласный. :)

                                                                                    Ну так какой вариант написания hello world предпочтём:
                                                                                    - кто-то пишет свой вариант, а далее обсуждаем и вместе правим
                                                                                    - несколько заинтересованных пишут по варианту, затем сравниваем, обсуждаем

                                                                                    Ещё нужно решить обсуждать сразу все, или по частям.

                                                                                    Кстати, части, я думаю, будут такие:
                                                                                    Небольшое вступление(одно-два предложения)
                                                                                    Код программы (заодно решим стиль форматирования и оформления исходников)
                                                                                    Компиляция и запуск(g++ и студия(например))
                                                                                    Разбор кода программы:
                                                                                    - функция main
                                                                                    - включение iostream
                                                                                    - using namespace std(здесь надо осторожнее, чтоб не напугать)
                                                                                    - использование cout
                                                                                    - использование endl

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

                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                    Сообщение отредактировано: D_KEY -
                                                                                      Flex Ferrum, так что, будем тренироватья?

                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                        Цитата D_KEY @
                                                                                        Flex Ferrum, так что, будем тренироватья?

                                                                                        Начинай. У меня сейчас тренировки другого характера планируются. Но я скоро вернусь в строй. :)

                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                          Цитата Flex Ferrum @
                                                                                          Цитата D_KEY @
                                                                                          Flex Ferrum, так что, будем тренироватья?

                                                                                          Начинай. У меня сейчас тренировки другого характера планируются.

                                                                                          У меня сейчас тоже времени нет почти. Вчера вон так и не смог найти. Все-таки удобнее разбирать по маленьким частям, время легче выделить.

                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                          Сообщение отредактировано: D_KEY -
                                                                                            Я тут подумал, что так дело не пойдет. Этак мы ничего никогда не напишем. Надо двигаться хотя бы маленькими шажками.
                                                                                            Вот сейчас набросал начало описания hello world. Меня строго не судите, это набросок. А вот к самому тексту отнеситесь со всем строгостью, ибо нам как раз нужно определиться со всякого рода деталями, чтобы в дальнейшем приступить к описанию уже более сложных вещей.
                                                                                            Я постарался быть кратким и не вдаваться в детали, ибо считаю, что незначительные неточности вполне допустимы и позволяют избегать перегруженности текста, которая может отпугнуть непосвящённого читателя.
                                                                                            Цитата
                                                                                            Как говорится, лучший способ выучить язык программирования — это начать писать на нем программы. Ну что же, давайте попробуем.
                                                                                            Классическим примером, призванным помочь в ознакомлении с новым языком программирования, является простая «приветливая» программа, выполняющая вывод на экран строки «Hello, world!».
                                                                                            На С++ её можно записать следующим образом:

                                                                                            ExpandedWrap disabled
                                                                                              #include <iostream>
                                                                                               
                                                                                              using namespace std;
                                                                                               
                                                                                              int main()
                                                                                              {
                                                                                                  cout << "Hello, world!" << endl;
                                                                                              }

                                                                                            Для создания исходного текста программы можно воспользоваться любым текстовым редактором или же прибегнуть к помощи среды разработки, такой как Visual Studio, Eclipse или Qt creator.
                                                                                            После того, как текст программы готов, программу нужно скомпилировать, то есть создать из написанного нами исходного текста работающую программу. Способ компиляции зависит от операционной системы и используемой вами среды разработки. Так, если исходный текст программы был сохранен в файле hello.cpp, а в системе установлен компилятор gcc, то компиляция программы может быть осуществлена командой:

                                                                                            ExpandedWrap disabled
                                                                                              g++ hello.cpp

                                                                                            Если компиляция прошла успешно, в текущей директории появится исполняемый файл с именем a.out или a.exe в зависимости от операционной системы. После этого программу можно запускать на выполнение. В результате своей работы программа должна вывести на экран строку приветствия

                                                                                            ExpandedWrap disabled
                                                                                              Hello, world!

                                                                                            Теперь настало время поговорить о самой программе. Любая программа на С++ начинает своё выполнение с первой инструкции специальной функции с именем main. В общем случае, функции представляют собой последовательность инструкций, которые описывают выполняемые операции и вычисления.
                                                                                            «main» - особая функция С++, с неё начинается выполнение любой программы, написанной на этом языке.
                                                                                            Обычно функция main в процессе работы вызывает другие функции, создает и использует различные данные и объекты. Все это может быть написано самостоятельно или взято из уже существующих библиотек, предоставляющих необходимые средства в ваше распоряжение.
                                                                                            Первая строка созданной нами программы указывает компилятору на необходимость включения информации о потоках ввода/вывода стандартной библиотеки С++, которые нам нужны для вывода надписи на экран:

                                                                                            ExpandedWrap disabled
                                                                                              #include <iostream>

                                                                                            Обычно средства библиотек помещаются в так называемые «пространства имён», что, во-первых, позволяет логически группировать средства конкретной библиотеки, а, во-вторых, дает возможность безопасно использовать несколько таких библиотек, не опасаясь конфликтов наименований.
                                                                                            Все средства стандартной библиотеки С++, в том числе и используемые нами потоки ввода/вывода, находятся в специальном пространстве имён std.
                                                                                            Строка

                                                                                            ExpandedWrap disabled
                                                                                              using namespace std;

                                                                                            указывает компилятору, что мы будем использовать имена из пространства имён стандартной библиотеки.


                                                                                            Далее должно следовать описание cout и endl. Надо подумать, как это все описать, не отпугнув новичков.
                                                                                            Итак, конкретно по этому тексту, обсуждаем:
                                                                                            -Стиль изложения. Так же интересует мнение новичков в программировании и программистов на других языках
                                                                                            -Описание процесса компиляции и запуска программы. Тут, мне кажется, нужно много дополнить.
                                                                                            -Описание функции main
                                                                                            -Описание #include <iostream>
                                                                                            -Описание пространств имен
                                                                                            -Описание using namespace std
                                                                                            -Будем ли дополнить main return'ом и объяснять зачем он нужен? Мне кажется, это лучше оставить для раздела о функциях
                                                                                            -Нужно обсудить, как и насколько подробно рассказывать о cout и endl

                                                                                            Нужно обсудить на будущее:
                                                                                            -Стиль изложения
                                                                                            -Форматирование исходного кода программ
                                                                                            -Описание компиляции и сред разработки. Со всякими студиями все понятно, а вот с gcc что делать будем? В разделах для более выского уровня можно описать make и make-файлы. Это я могу взять на себя.
                                                                                            -ну и что еще кому в голову придет ;)

                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                              Цитата D_KEY @
                                                                                              Описание процесса компиляции и запуска программы. Тут, мне кажется, нужно много дополнить.

                                                                                              Я вообще это планировал вынести в отдельный раздел ("Выбор среды и компилятора")

                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                Цитата Flex Ferrum @
                                                                                                Цитата D_KEY @
                                                                                                Описание процесса компиляции и запуска программы. Тут, мне кажется, нужно много дополнить.

                                                                                                Я вообще это планировал вынести в отдельный раздел ("Выбор среды и компилятора")

                                                                                                Я имел в виду конкретно для hello world. Там тоже надо кратенько сказать, как все это дело скомпилировать и запустить. Иначе будет не полноценно смотреться. ИМХО.

                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                  Потом, ты не забывай. Каждый раздел (по идее) должен состоять минимум из двух частей - для совсем новичков (ничего лишнего) и для тех, кто что-то уже понимает. Там предполагаются различные подробности. В ряде случаев может быть еще и третий раздел, в котором излагается все то же, но уже со ссылками на стандарт и т. п. (т. е. максимально подробно).

                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                    Цитата Flex Ferrum @
                                                                                                    Потом, ты не забывай. Каждый раздел (по идее) должен состоять минимум из двух частей - для совсем новичков (ничего лишнего) и для тех, кто что-то уже понимает. Там предполагаются различные подробности. В ряде случаев может быть еще и третий раздел, в котором излагается все то же, но уже со ссылками на стандарт и т. п. (т. е. максимально подробно).

                                                                                                    Мне кажется, для hello world это будет лишним.

                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                      У меня получается вот что:

                                                                                                      Цитата

                                                                                                      Кто бы и как к программированию не относился, но все согласятся, что программирование (само по себе) - это чисто прикладная специальность и/или наука. А потому, научится программировать "в теории", только по учебникам (и программируя "на листочке") вообще говоря, очень сложно. А потому, как и для любой другой прикладной профессии, программисту нужна практика, практика и еще раз практика. Так уж повелось, что когда программист первый раз знакомится с новым языком, первое, что он пишет - это программу-приветствие. Целей, которые преследуются такой простой, на первый взгляд, программой, несколько. Подробнее он них можно прочитать во второй части этой главы, а сейчас настало время продемонстрировать, каким именно выглядит простейший текст этой программы на языке С++:

                                                                                                      ExpandedWrap disabled
                                                                                                        #include <iostream>
                                                                                                         
                                                                                                        int main()
                                                                                                        {
                                                                                                            std::cout << "Hello World!!!" << std::endl;
                                                                                                            return 0;
                                                                                                        }


                                                                                                      Как можно увидеть, программа занимает всего шесть строк. Нельзя сказать, что это самый короткий "Hello World" (сравните:
                                                                                                      ExpandedWrap disabled
                                                                                                        10 PRINT "Hello World!!!"

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

                                                                                                      ExpandedWrap disabled
                                                                                                        #include <iostream>


                                                                                                      Говоря по-простому, это инструкция включения в текст программы средств, предназначенных для осуществления операций ввода-вывода на консоль. Не залезая вглубь можно сказать, что не будь этой инструкции, текст программы (в остальном вполне корректный, с точки зрения синтаксиса) выдал бы ряд ошибок компиляции. И всегда необходимо помнить, что с помощью такой инструкции в файл с исходным текстом должно включаться все, что в нем используется, но тем или иным образом не описано. Сейчас это достаточно просто запомнить.
                                                                                                      ExpandedWrap disabled
                                                                                                        int main()
                                                                                                        { /*…*/}

                                                                                                      Так выглядит объявление основной ("main" - "главный, основной") функции программы. Тут необходимо отметить, что весь текст программы на C++ состоит из тех или иных объявлений (за исключением комментариев и строк, начинающихся с символа '#'). По мимо функций (как в данном случае 'main') можно объявлять глобальные переменные, классы, пространства имен, перечисления и прочее. Но обо всем этом разнообразии чуть позже. Сейчас же необходимо вспомнить, что в самом начале этого раздела мы выяснили, что C++ - это императивный язык программирования, а значит текст программы на нем должен тем или иным образом задавать четкую последовательность действий, которую надо выполнить для достижения цели. Единственный способ описания такой последовательности (в языке C++, да и не только в ним) - это объявить так называемую "функцию", содержащую эту последовательность. А поскольку (вообще говоря) текст программы может содержать очень большое количество различных функций, то среди них компилятор должен выбрать какую-то одну, с которой должно начаться выполнение программы. Было решено (создателями языка), что таковой функцией будет main. А потому почти любая программа на языке C++ содержит такую функцию. Почему "почти" - можно посмотреть в секции "подробности".
                                                                                                      Каким именно образом объявляется функция будет рассмотрено несколько позже (в соответствующей главе), пока же нам будет достаточно просто запомнить, как именно объявляется основная функция программы.

                                                                                                      Цитата

                                                                                                      Подробности

                                                                                                      При кажущейся пустяковости польза от программы "Hello World" вполне очевидна. Текст этой программы демонстрирует фундаментальные концепции языка и/или технологии, к которым можно отнести:
                                                                                                      1. Собственно базовую нотацию. Т. е. что нужно сделать для того, чтобы написать простейшую программу.
                                                                                                      2. Способ обращения к подсистеме ввода-вывода и/или демонстрации пользователю результатов работы программы.
                                                                                                      3. Способ оформления законченной программы.


                                                                                                      Вариантов реализации этой программы на разных языка - великое множество. Достаточно посетить, например, этот ресурс: http://www.roesler-ac.de/wolfram/hello.htm. Или этот: http://www2.latech.edu/~acm/HelloWorld.html . А ввели в обиход эту традицию создатели языка С Брайян Керниган и Денис Ричи в далеком 1978 году.

                                                                                                      <... тут будет еще текст ...>


                                                                                                      Во многих компилируемых (да и интерпретируемых тоже) языках программирования файл с исходным текстом рассматривается как одна, независимая единица трансляции, способная компилироваться отдельно от других файлов, входящих в проект. По этому практически всегда требуется в том или ином виде перечислять - какие же именно сторонние компоненты должны быть использованы для корректной трансляции конкретного файла. В Delphi/Pascal аналогом этой директивы является uses. В C# - using. В java - import.
                                                                                                      Вообще говоря, для такой простой программы #include-директива не нужна. Такой текст:

                                                                                                      ExpandedWrap disabled
                                                                                                        extern int printf(char const*, ...);
                                                                                                         
                                                                                                        int main()
                                                                                                        {
                                                                                                            printf("Hello World\n");
                                                                                                        }


                                                                                                      Компилируется с помощью g++ "на ура", и выводит ту же самую строчку. Но писать таким образом можно только тогда, когда вы точно знаете, как именно выглядит объявления тех средств, которые вы планируете использовать. И если в случае С-функций (как, например, printf) это просто, то в случае C++-средств (таких, как потоки ввода вывода типа std::cin/std::cout) это уже практически невозможно, ибо требуется полная реализация соответствующего класса.


                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                        Flex, мне видится, что в твоем варианте есть некоторые запутывающие незнающего человека детали, которые лучше раскрывать постепенно, в основных главах.
                                                                                                        Я писал в расчете на новичка.
                                                                                                        Возможно, я не так понял всю твою задумку в целом.

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

                                                                                                        Можно рассмотреть вариант, созданный на базе моего(его необходимо дописать и переработать) в качестве варианта для начинающих программистов, а твой для слегка более "продвинутой" аудитории.

                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                          Цитата
                                                                                                          В первую очередь, новичков и программистов, пишущих на других языках...

                                                                                                          Я новичек в С++, так как не делал на нем коммерческих проектов и ничего серьезного в учебных целях.

                                                                                                          Цитата
                                                                                                          Так, если исходный текст программы был сохранен в файле hello.cpp, а в системе установлен компилятор gcc, то компиляция программы может быть осуществлена командой:

                                                                                                          Цитата
                                                                                                          Если компиляция прошла успешно, в текущей директории появится исполняемый файл с именем a.out или a.exe в зависимости от операционной системы

                                                                                                          Такие предложения запретить под страхом смертной казни! Какой компилятор, какая командная строка?


                                                                                                          Цитата
                                                                                                          Так выглядит объявление основной ("main" - "главный, основной") функции программы. Тут необходимо отметить, что весь текст программы на C++ состоит из тех или иных объявлений (за исключением комментариев и строк, начинающихся с символа '#'). По мимо функций (как в данном случае 'main') можно объявлять глобальные переменные, классы, пространства имен, перечисления и прочее. Но обо всем этом разнообразии чуть позже. Сейчас же необходимо вспомнить, что в самом начале этого раздела мы выяснили, что C++ - это императивный язык программирования, а значит текст программы на нем должен тем или иным образом задавать четкую последовательность действий, которую надо выполнить для достижения цели. Единственный способ описания такой последовательности (в языке C++, да и не только в ним) - это объявить так называемую "функцию", содержащую эту последовательность. А поскольку (вообще говоря) текст программы может содержать очень большое количество различных функций, то среди них компилятор должен выбрать какую-то одну, с которой должно начаться выполнение программы. Было решено (создателями языка), что таковой функцией будет main. А потому почти любая программа на языке C++ содержит такую функцию. Почему "почти" - можно посмотреть в секции "подробности".
                                                                                                          Каким именно образом объявляется функция будет рассмотрено несколько позже (в соответствующей главе), пока же нам будет достаточно просто запомнить, как именно объявляется основная функция программы.

                                                                                                          Думаю надо заострить внимание на том, что прототипы функций должны быть объявлены до их определения. Flex Ferrum, было бы хорошо четко рассказать о организации файлов в проекте, что они представляют как логические единицы, зачем нужны заголовочные файлы, как взаимодействовать с кодом из других файлов и т.д.

                                                                                                          Добавлено
                                                                                                          Цитата
                                                                                                          Первая строка созданной нами программы указывает компилятору на необходимость включения информации о потоках ввода/вывода стандартной библиотеки С++, которые нам нужны для вывода надписи на экран:

                                                                                                          В общем для того, чтобы работало. :D
                                                                                                          По-моему надо сразу писать что происходит на уровне файла исходного кода, и что делает компилятор.

                                                                                                          Цитата
                                                                                                          Говоря по-простому, это инструкция включения в текст программы средств, предназначенных для осуществления операций ввода-вывода на консоль.

                                                                                                          У Flex Ferrum уже конкретнее, но слово текст вероятно все равно будет воспринято как речевой оборот.

                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                            Цитата Flex Ferrum @
                                                                                                            У меня получается вот что:

                                                                                                            если честно, то я три раза перечитывал текст. :(
                                                                                                            Убери нафиг причастные и деепричастные обороты.
                                                                                                            Они конечно красиво смотрятся, только текст какой то мутный становится.

                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                              Цитата
                                                                                                              если честно, то я три раза перечитывал текст.
                                                                                                              Убери нафиг причастные и деепричастные обороты.
                                                                                                              Они конечно красиво смотрятся, только текст какой то мутный становится.

                                                                                                              Не знаю, мне стиль Flex Ferrum нравится, чувствуется опыт и отсутствует сухость.

                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                Цитата i++ @
                                                                                                                Не знаю, мне стиль Flex Ferrum нравится, чувствуется опыт и отсутствует сухость.

                                                                                                                так мыж не предвыборную речь пишем, чтоб было красиов и убедительно, а пособие для начинающих. И если тебе, например, понятно, то скорее всего из-за опыта в Шарпе. А есть новички, которые вообще ничего незнают в программировании.

                                                                                                                Добавлено
                                                                                                                Ну, конечно, это мое ИМХО :)

                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                  Вот что я думаю относительно стиля: по мне, так стиль Флекса - это то что я понимаю под идеальным учебником по языку/технологии. Да, конечно, определённой группе новичков будет непонятно, но... я считаю, что те, кому непонятно, но понять очень хочется прочитают один раз, потом ещё раз, потом, раз на пятый, в итоге поймут. Те же, кому непонятно, и понять не хочется... не в обиду будет сказано, но С++ не для них и не скоро С++ станет для них(С++09 при всём желании Страуструпа не решает ряда проблем очень ленивых новичков).
                                                                                                                  Если я правильно понимаю, цель учебника заключается далеко не в том, чтобы стать руководством для тех, кому "нужно лабу по С++ сдать".

                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                    Отлично, что обсуждать начали ;)
                                                                                                                    Вариант Flex'а мне нравится. Но, мне кажется, что во-первых, текст действительно слегка "размытый", а во-вторых для новичков в программировании(не писавших на других языках) будет не совсем понятен. Слегка напомнил Страуструпа... ИМХО, конечно.
                                                                                                                    archimed7592, читать главу hello world по пять раз никто не будет.
                                                                                                                    Глава о hello world, как мне видится, предназначена для ознакомления. То есть кратенько рассказывает о структуре программы, библиотеках, компиляции и запуске программы.

                                                                                                                    В общем, если бы я был новичком, я бы не понял в тексте Flex'а ничего, насколько я помню себя того периода.
                                                                                                                    Подумал бы, что С++ не для меня и взял бы книжку по другому языку программирования.

                                                                                                                    Цитата i++ @
                                                                                                                    Такие предложения запретить под страхом смертной казни! Какой компилятор, какая командная строка?

                                                                                                                    Почему :blink: ?
                                                                                                                    Цитата i++ @
                                                                                                                    Цитата
                                                                                                                    Первая строка созданной нами программы указывает компилятору на необходимость включения информации о потоках ввода/вывода стандартной библиотеки С++, которые нам нужны для вывода надписи на экран:

                                                                                                                    В общем для того, чтобы работало. :D
                                                                                                                    По-моему надо сразу писать что происходит на уровне файла исходного кода, и что делает компилятор.
                                                                                                                    Зачем? Не лучше ли это оставить для соответствующих глав?

                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                    Сообщение отредактировано: D_KEY -
                                                                                                                      Цитата D_KEY @
                                                                                                                      В общем, если бы я был новичком, я бы не понял в тексте Flex'а ничего, насколько я помню себя того периода.
                                                                                                                      Подумал бы, что С++ не для меня и взял бы книжку по другому языку программирования.

                                                                                                                      Возможно, возможно ты и прав. Но тогда способ подачи материала (по крайней мере этой главы, а возможно и всех остальных) должен быть совсем иным. А именно - не показывать текст программы, а потом долго и нудно объяснять, что именно написано (и, возможно, почему), а плясать от задачи. Т. е. самая первая и простая задача, решаемая на любом языке - вывести приветствие на консоль. Сформулировать эту задачу (корректно), и начать поэтапно ее решать. Может быть так было бы лучше. Сегодня подумаю, и предложу свой вариант. По крайней мере, насколько я себя помню "тогда", "чесалось" именно по-скорее задачу решить, а не слушать долгие и нудные объяснения относительно искусственного кода.

                                                                                                                      Цитата i++ @
                                                                                                                      Думаю надо заострить внимание на том, что прототипы функций должны быть объявлены до их определения. Flex Ferrum, было бы хорошо четко рассказать о организации файлов в проекте, что они представляют как логические единицы, зачем нужны заголовочные файлы, как взаимодействовать с кодом из других файлов и т.д.

                                                                                                                      Ни в коем случае (на мой взгляд). На этом этапе все должно быть достаточно просто, а до прототипов функций и проектов дело еще дойдет.

                                                                                                                      Цитата D_KEY @
                                                                                                                      Такие предложения запретить под страхом смертной казни! Какой компилятор, какая командная строка?

                                                                                                                      А как иначе то? :) И это, критикуя - предлагай. :)

                                                                                                                      Цитата D_KEY @
                                                                                                                      Flex, мне видится, что в твоем варианте есть некоторые запутывающие незнающего человека детали, которые лучше раскрывать постепенно, в основных главах.

                                                                                                                      Что именно?

                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                        Цитата Flex Ferrum @
                                                                                                                        А именно - не показывать текст программы, а потом долго и нудно объяснять, что именно написано (и, возможно, почему), а плясать от задачи. Т. е. самая первая и простая задача, решаемая на любом языке - вывести приветствие на консоль. Сформулировать эту задачу (корректно), и начать поэтапно ее решать. Может быть так было бы лучше. Сегодня подумаю, и предложу свой вариант. По крайней мере, насколько я себя помню "тогда", "чесалось" именно по-скорее задачу решить, а не слушать долгие и нудные объяснения относительно искусственного кода.

                                                                                                                        Я думаю, что это очень хорошая идея. Даже отличная. Целиком и полностью "за".

                                                                                                                        Цитата
                                                                                                                        Цитата D_KEY @
                                                                                                                        Такие предложения запретить под страхом смертной казни! Какой компилятор, какая командная строка?

                                                                                                                        А как иначе то? :) И это, критикуя - предлагай. :)

                                                                                                                        Это не я сказал ;)

                                                                                                                        Цитата
                                                                                                                        Цитата D_KEY @
                                                                                                                        Flex, мне видится, что в твоем варианте есть некоторые запутывающие незнающего человека детали, которые лучше раскрывать постепенно, в основных главах.

                                                                                                                        Что именно?

                                                                                                                        Сейчас времени нет, убегаю. Потом могу описать подробно, но если мы изменим концепцию, как ты предложил, то и необходимости в этом может не возникнуть.
                                                                                                                        Скорее всего, смогу отписаться только в понедельник.

                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                          Цитата
                                                                                                                          А как иначе то? И это, критикуя - предлагай.

                                                                                                                          Написал бы примерно так.

                                                                                                                          Сегодня для повышения эффективности работы программиста существует множество визуальных IDE, и вы вероятно, если цените свое время и силы, будете использовать одну из них. /* Далее рассматриваем создание Hello World в Visual Studio и еще где-нибудь */
                                                                                                                          Однако важно понимать, что IDE это всего лишь инструмент избавляющий нас от рутинной работы задания параметров компиляции через командную строку. Отсюда следует, что теоретически не все возможности компиляции могут быть доступны пользователю визуальных инструментов (приводим какой-нибудь яркий пример, например отсутствие в Visual Studio возможности создавать управляемые сборки из нескольких модулей, находящихся в разных файлах), поэтому рассмотрим как вручную можно добиться нужного резульата.
                                                                                                                          /* Здесь рассматриваем компиляцию с помощью командной строки */

                                                                                                                          Цитата
                                                                                                                          printf("Hello World\n");

                                                                                                                          Кстати нужно будет не забыть объяснить \n или не использовать его.

                                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                            Цитата i++ @
                                                                                                                            Сегодня для повышения эффективности работы программиста существует множество визуальных IDE, и вы вероятно, если цените свое время и силы, будете использовать одну из них. /* Далее рассматриваем создание Hello World в Visual Studio и еще где-нибудь */

                                                                                                                            Давай не будем здесь разжигать холивары. Я лично не согласен с этим твоим высказыванием. Кто-то согласится. Учебник нужен и для тех и для других.

                                                                                                                            Цитата
                                                                                                                            Цитата
                                                                                                                            printf("Hello World\n");

                                                                                                                            Кстати нужно будет не забыть объяснить \n или не использовать его.

                                                                                                                            :blink:
                                                                                                                            Учебник по С++, а не по С. Про printf и '\n' рассказать может и надо, но не в этой главе. Так что cout и endl.

                                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                              Цитата
                                                                                                                              Давай не будем здесь разжигать холивары. Я лично не согласен с этим твоим высказыванием. Кто-то согласится. Учебник нужен и для тех и для других.

                                                                                                                              Почему-то уверен, что 99,999% читающих не будут компилировать примеры через командную строку, отчасти хотя бы потому, что никогда ею не пользовались, и в их представлении это выглядит дико. А будут использовать скорее всего Visual Studio, поэтому примеры должны быть именно в ней и/или других популярных средах, и у человека, должно все получаться без головной боли, а она появится, потому, что нижеприведенного описания явно не достаточно для того чтобы выполнить пример. А если такие проблемы начинаются уже с первой страницы, то дальше читать никто не будет. И к тому же учебник называется "Актуальный". Актуально ли сегодня компилировать через командную строку - не думаю.

                                                                                                                              Цитата
                                                                                                                              Способ компиляции зависит от операционной системы и используемой вами среды разработки. Так, если исходный текст программы был сохранен в файле hello.cpp, а в системе установлен компилятор gcc, то компиляция программы может быть осуществлена командой:

                                                                                                                              g++ hello.cpp

                                                                                                                              Если компиляция прошла успешно, в текущей директории появится исполняемый файл с именем a.out или a.exe в зависимости от операционной системы. После этого программу можно запускать на выполнение. В результате своей работы программа должна вывести на экран строку приветствия

                                                                                                                              Допустим у меня исходный текст сохранен в моих документах. Путь с пробелами, и что прикажешь мне делать? Если человек не знаком с батниками или вообще не знает, что такое командная строка, то набирать по 10 раз эти параметры ему вряд-ли доставит удовольствие, да и к тому же не уверен, что об ошибках компиляции ему тоже кто-то сообщит и отладить он их сможет. В общем и т.д. и т.п.

                                                                                                                              Добавлено
                                                                                                                              Цитата
                                                                                                                              Так что cout и endl.

                                                                                                                              Надо бы еще сделать так, чтобы программа сразу не завершилась, а можно было бы прочитать сообщение.

                                                                                                                              Добавлено
                                                                                                                              Цитата
                                                                                                                              Я лично не согласен с этим твоим высказыванием.

                                                                                                                              С чем именно ты не согласен. Сам компилируешь через командную строку?

                                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                i++, почему ты уверен, что компиляция будет происходить в windows?
                                                                                                                                Почему ты считаешь, что будут пользоваться именно студией?
                                                                                                                                Почему ты считаешь, что новичек в программировании == новичок в работе с компьютером?

                                                                                                                                Это учебник по С++, а не по среде разработки или программированию в какой-то операционной системе.
                                                                                                                                Делая акцент на какой-то одной стороне С++, ты убиваешь остальные.
                                                                                                                                В "актуальном" учебнике должно быть краткое описание для различных способов работы с исходниками программы, компиляции и запуска, в том числе и с помощью командной строки, и с помощью студии. Студия вообще есть только в виндовс, так что сразу вводит дополнительные ограничения(ИМХО).
                                                                                                                                Все холиварные вопросы нужно постараться учесть, непринимая какую-либо из сторон.

                                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                  Цитата
                                                                                                                                  i++, почему ты уверен, что компиляция будет происходить в windows?
                                                                                                                                  Почему ты считаешь, что будут пользоваться именно студией?

                                                                                                                                  Потому, что виндовс на сегодня самая популярная ОС. Речь вообще не об ОС, а о IDE.

                                                                                                                                  Цитата
                                                                                                                                  Это учебник по С++, а не по среде разработки или программированию в какой-то операционной системе.

                                                                                                                                  :wacko: Флекс, собирался описывать решение реальной задачи построения графиков, и именно такие примеры будут (как я понял) смыслом этой книги. Не думаю, что компилировать эти примеры он собирается в командной строке.

                                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                    Цитата D_KEY @
                                                                                                                                    Я думаю, что это очень хорошая идея. Даже отличная. Целиком и полностью "за".

                                                                                                                                    Тогда надо что-то придумать в этом направлении. :)

                                                                                                                                    Подумаем.
                                                                                                                                    Кстати, если действительно выбрать такую концепцию, то и описывать компиляцию нужно в другом разделе, как ты и планируешь(наверно, все-таки это правильно).

                                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                      Hello World с применением новых возможностей С++:

                                                                                                                                      ExpandedWrap disabled
                                                                                                                                        #include <iostream>
                                                                                                                                         
                                                                                                                                        int main()
                                                                                                                                        {
                                                                                                                                            char text[] = "Hello World!";
                                                                                                                                         
                                                                                                                                            std::for_each(text, text + sizeof(text), [](char ch) {std::cout << ch;});
                                                                                                                                            std::cout << std::endl;
                                                                                                                                            
                                                                                                                                            return 0;
                                                                                                                                        }


                                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                        Вообщем, родилось у меня следующее:
                                                                                                                                        Цитата

                                                                                                                                        Вариант 2

                                                                                                                                        Кто бы и как к программированию не относился, но все согласятся, что программирование (само по себе) - это чисто прикладная специальность и/или наука. И научится программировать "в теории", только по учебникам (и программируя "на листочке") вообще говоря, очень сложно. А потому, как и для любой другой прикладной профессии, программисту нужна практика, практика и еще раз практика. Так уж повелось, что когда программист первый раз знакомится с новым языком, первое, что он пишет - это программу-приветствие.
                                                                                                                                        Не смотря на то, что программа- приветствие и по сути и по структуре достаточно проста, тем не менее, как и любая другая программа, она начинается с постановки задачи. В данном случае формулировка задачи будет предельно простой:
                                                                                                                                        Программа должна вывести на консоль строчку "Hello World!" и успешно завершить свою работу.
                                                                                                                                        Когда задача сформулирована, следующим шагом является поиск ее решения в "терминах" выбранного языка программирования. Строго говоря, в ряде случаев выбор языка программирования тоже может сильно зависть от формулировки задачи, но так как в нашем случае язык уже выбран - С++, то этот этап будет опущен.
                                                                                                                                        Поскольку в самом начале этого раздела было выяснено, что С++ - это императивный язык программирования, то искомым решением должна быть инструкция (или набор инструкций), корректная(ый) с точки зрения языка С++, исполнение которой (которых) приводит к печати на консоль заданной строки ("Hello World"). Для поиска такой инструкции (или инструкций) надо последовательно найти ответы на ряд следующих вопросов:
                                                                                                                                        1. Можно ли в тексте программы на С++ описать текстовую строку?
                                                                                                                                        Да. Можно. Говоря по-простому, текстовой строкой является фрагмент исходного текста программы, заключенный в кавычки. Таким образом, где-то в тексте программы должен быть следующий фрагмент:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          "Hello World!"

                                                                                                                                        2. Можно ли в тексте программы на C++ взаимодействовать с консолью? В данном случае - с целью вывода чего-либо на нее?
                                                                                                                                        Да. Можно. Для этого надо обратиться к глобальному объекту std::cout. Что такое "объект" и почему он "глобальный" будет рассмотрено несколько позже. Сейчас достаточно просто запомнить это понятие, и то, что обратившись к такому "объекту" будет произведено обращение к консоли. Итак, где-то в тексте программы должен быть фрагмент:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          std::cout

                                                                                                                                        3. Каким образом (используя объект std::cout) можно вывести что-либо на консоль, и можно ли вообще?
                                                                                                                                        Вывести можно. Странно, если бы способ обращения к консоли существовал, но только и всего. И ничего большего нельзя было бы сделать. А каким образом? Ответ весьма просто - посредством операции вывода. Возможно, что звучит несколько странно ("операция сложения" звучит привычнее, но "операция вывода"???), тем не менее, такая операция в языке C++ существует, и выглядит так: "<<". Первым операндом этой операции (стоящим слева от этого знака) должно быть то, куда осуществляется вывод. Вторым операндом - то, что выводится. Применительно к нашей задаче, слева будет стоять std::cout, справа - "Hello World!", и выглядеть все это будет так:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          std::cout << "Hello World!"

                                                                                                                                        А это уже выглядит как инструкция (в перевод е на русский читается как "вывести в std::cout строку "Hello World!"), но законченным предложением на языке C++ пока еще не является. Как любое предложение в русском языке заканчивается точкой, на языке C++ большинство предложений-инструкций заканчиваются знаком ';'. Таким образом, правильная запись выглядит так:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          std::cout << "Hello World!";


                                                                                                                                        Итак, записать инструкцию, выполняющую вывод на консоль нужной нам строки, у нас получилось. Для большинства интерпретируемых языков этого было бы достаточно. Но, опять же, в самом начале раздела мы выяснили, что C++ является компилируемым языком. А это означает, что написав в текстовом файле только приведенное выше предложение, и отправив его на компиляцию, мы получим ряд ошибок компиляции. Причина этого проста - правильная программа на C++ не может состоять только из одного предложения. Можно сказать больше -корректная программа на C++ не может состоять из предложений, т. к. она состоит из объявлений. Объявлять в C++ можно много чего. Это и классы, и структуры, и перечисления, и глобальные объекты, и константы. Но в настоящий момент нас интересует вполне конкретная разновидность объявлений - это объявление функций. Так как именно функции могут содержать в себе конкретные наборы инструкций, которые впоследствии должны быть выполнены. Таким образом, полученное нами предложение-инструкцию надо поместить в функцию. Например, так:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          void PrintHello()
                                                                                                                                          {
                                                                                                                                             std::cout << "Hello World!";
                                                                                                                                          }

                                                                                                                                        - а именно таким (или подобным) образом в C++ выглядят объявления функций. Написав такой текст в исходном файле и отправив его на компиляцию, мы опять получаем сообщения об ошибке. Смысл этого сообщения будет такой (в переводе на русский): "Объявление std::cout не найдено". Причина его возникновения проста. В программе на C++ все, что используется, должно быть предварительно объявлено. В нашей программе мы используем глобальный объект std::cout, а при этом нигде его не объявляем. Таким образом, для осуществления корректной компиляции мы должны добавить это объявление. Но как оно должно выглядеть? Поскольку std::cout является стандартным глобальным объектом, представляющем консоль, то, по логике вещей, практически любой компилятор должен предлагать его объявление, не утруждая этим программиста. И это действительно так. Объявление этого глобального объекта можно "включить" из поставки компилятора в текст программы следующим образом:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          #include <iostream>


                                                                                                                                        Перевести это можно примерно следующим образом: "Включить в текст программы содержимое файла iostream". Почему именно iostream? Потому что именно этот файл (в соответствии со стандартом языка C++) содержит нужное нам объявление, и некоторые другие (о которых речь пойдет позже). Таким образом, получаем следующий текст:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          #include <iostream>
                                                                                                                                           
                                                                                                                                          void PrintHello()
                                                                                                                                          {
                                                                                                                                             std::cout << "Hello World!";
                                                                                                                                          }

                                                                                                                                        Отправив его на компиляцию, мы, тем не менее, опять получим ошибку. В этот раз нам будет сообщено о том, что компоновщик не может найти функцию main (_main, _main@8, или еще какое-либо похожее название). Причина, опять же, проста. Поскольку текст программы на C++ может содержать множество различных объявлений, и среди этих объявлений может быть некоторое количество объявлений функций, то компилятор должен выбрать какое-то одно из них, с которого начинать выполнение программы. С самого начала существования языка C++ (и его прародителя - языка C), такой функцией является функция main ("главная функция"), объявляемая следующим образом:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          int main()
                                                                                                                                          {
                                                                                                                                          }


                                                                                                                                        И именно внутри этой функции должны содержаться инструкции, которые должны быть выполнены после старта программы. Учтя эти замечания, итоговый текст должен будет выглядеть следующим образом:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          #include <iostream>
                                                                                                                                           
                                                                                                                                          int main()
                                                                                                                                          {
                                                                                                                                             std::cout << "Hello World!";
                                                                                                                                          }


                                                                                                                                        Отправив его на компиляцию, ошибок мы уже не получаем (правда, могут быть предупреждения), и запустив полученный исполняемый файл, мы увидим на консоли радостное
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          Hello World!


                                                                                                                                        Итак, задача решена! Первая программа - написана! Можно себя поздравить. Но победа еще не окончательная. Не плохо было бы избавиться от предупреждение, которое выдается компилятором. Суть его сводится к тому, что функция main должна возвращать некоторое значение. В большинстве операционных систем исполняемые файлы устроены таким образом, что в качестве результата своей работы возвращают некоторое целое число, обычно обозначающее - насколько успешным оказался запуск программы. Это число в последствии можно проверить и, если программа отработала с ошибкой, предпринять какие-либо меры. По традиции, если программа запустилась и успешно отработала, то она должна вернуть 0. Инструкция, выполняющая это действие, будет, фактически, буквальным переводом с русского на английский:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          return 0;


                                                                                                                                        А итоговый текст приобретет такой вид:
                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          #include <iostream>
                                                                                                                                           
                                                                                                                                          int main()
                                                                                                                                          {
                                                                                                                                             std::cout << "Hello World!";
                                                                                                                                             return 0;
                                                                                                                                          }

                                                                                                                                        Откомпилировав его можно убедиться, что на этот раз ни предупреждений, ни ошибок выдано не будет.


                                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                          Цитата
                                                                                                                                          заключенный в кавычки
                                                                                                                                          имхо лучше сразу уточнить, что двойные кавычки.
                                                                                                                                          и что насчет endl?

                                                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                            Цитата Radagast @
                                                                                                                                            имхо лучше сразу уточнить, что двойные кавычки.
                                                                                                                                            и что насчет endl?

                                                                                                                                            Возможно, имеет смысл дописать. Возможно - нафиг. Для понимания задачи это не очень существенно.

                                                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                              Цитата Flex Ferrum @
                                                                                                                                              return 0;

                                                                                                                                              Вообще говоря, конкретно для main этот элемент по стандарту не обязателен...

                                                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                Цитата archimed7592 @
                                                                                                                                                Вообще говоря, конкретно для main этот элемент по стандарту не обязателен...

                                                                                                                                                Это да. Я потому и написал:
                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                правда, могут быть предупреждения


                                                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                  Flex Ferrum, мне этот вариант нравится ;) .
                                                                                                                                                  Есть правда несколько замечаний по тексту. Мне кажется налицо некий перебор скобок с пояснениями и уточнениями. В некоторых местах встречаются лишние обороты. Могу описать подробно, но думаю, что этот вариант не окончательный и ты сам все исправишь :)
                                                                                                                                                  Я свой вариант тоже начинал, но у меня немного по-другому. Вначале я описываю структуру программы на С++(функции и инструкции, main, подключениее заголовочных файлов), а затем уже говорю о std::cout и строках. Но мне твой вариант последовательности подачи материала представляется более интересным. Кроме того, мой вариант не дописан, но я собирался им заняться. Теперь вот думаю, а стоит ли ;) ? Ну так что, выложить?
                                                                                                                                                  PS: для продвинутых читателей можно поместить твой код на "новом С++". Еще есть мысль там жеееее кратенько описать гуевый hello world на Qt. А то действительно, многих из начинающих могла бы заинтересовать возможность и простота создания графического интерфейса... Хотя не знаю, насколько это вписывается в концепцию учебника... Может и не стоит.

                                                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                    имхо не надо мешать С++ и GUI

                                                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                      Могу описать подробно

                                                                                                                                                      Если тебя не затруднит. :)
                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                      Ну так что, выложить?

                                                                                                                                                      Да, будет интересно.
                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                      PS: для продвинутых читателей можно поместить твой код на "новом С++". Еще есть мысль там жеееее кратенько описать гуевый hello world на Qt. А то действительно, многих из начинающих могла бы заинтересовать возможность и простота создания графического интерфейса... Хотя не знаю, насколько это вписывается в концепцию учебника...

                                                                                                                                                      Подумаю над этим. Наверняка, имеет смысл.

                                                                                                                                                      Добавлено
                                                                                                                                                      Цитата Radagast @
                                                                                                                                                      имхо не надо мешать С++ и GUI

                                                                                                                                                      Предлагать в учебнике упражняться на абстрактных задачах - тоже не дело. :)

                                                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                        Цитата
                                                                                                                                                        Предлагать в учебнике упражняться на абстрактных задачах - тоже не дело. :)

                                                                                                                                                        Это смотря, что считать абстрактыми задачами. Реализация стандартных функций, алгоритмов, контейнеров по вашему абстрактная задача? Мне, как и Radagast, кажется что мешать не стоит, а то если человек не знаком с с++ и он будет читать основы + графика, в голове будет каша. Как он поймет, не зная классов,что такое QPushButton* button = new QPushButton("Hello world"); ?

                                                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                          Так, друзья, не сбивайте Flex Ferrumа с истинного пути.

                                                                                                                                                          Цитата
                                                                                                                                                          Реализация стандартных функций, алгоритмов, контейнеров по вашему абстрактная задача?

                                                                                                                                                          По-моему это бред. (ИМХО):D


                                                                                                                                                          Цитата
                                                                                                                                                          а то если человек не знаком с с++ и он будет читать основы + графика, в голове будет каша.

                                                                                                                                                          Никакой каши не будет. Наоборот человек увидит что есть С++ в реальных условиях. В этом то и смысл "актуального" учебника.

                                                                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                            т.е. консольные приложения - это уже "нереальный" С++?

                                                                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                              Цитата Radagast @
                                                                                                                                                              т.е. консольные приложения - это уже "нереальный" С++?

                                                                                                                                                              Вполне реальный. Только программирование на С++ не сводится исключительно к задачам написания консольных приложений.

                                                                                                                                                              Добавлено
                                                                                                                                                              Цитата int0 @
                                                                                                                                                              Это смотря, что считать абстрактыми задачами. Реализация стандартных функций, алгоритмов, контейнеров по вашему абстрактная задача?

                                                                                                                                                              Смотря в каком контексте.
                                                                                                                                                              Цитата int0 @
                                                                                                                                                              Мне, как и Radagast, кажется что мешать не стоит, а то если человек не знаком с с++ и он будет читать основы + графика, в голове будет каша. Как он поймет, не зная классов,что такое QPushButton* button = new QPushButton("Hello world"); ?

                                                                                                                                                              Если ты читал последние обсуждения в этой теме, то мог бы заметить, что в каждой главе предполагается как минимум две части - часть "для новичков", идущая в начале. И часть "Подробности", рассчитанная уже на подготовленного читателя. Вот в этой, второй, части и предполагается рассказывать разные подобные "интересности".

                                                                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                Цитата
                                                                                                                                                                И часть "Подробности", рассчитанная уже на подготовленного читателя.

                                                                                                                                                                Это я прочитал, и мне очень понравилась идея с ссылками на стандарт(это действительно было бы очень полезно), но не кажется ли вам, что если описывать еще и графику, то получить изучение с++ в ширь, а не в глубь. А обзор графических библиотек (qt/wxwidgets/mfc) можно было бы привести в приложении.

                                                                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                  int0, нет цели написать объемлющее руководство по С++. С этой целью вполне справляется тот же Страуструп. Основная цель - это что-то вроде практикума. Т. е. как этот самый С++ можно применять в решении конкретных, вполне реальных задач.

                                                                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                    Flex Ferrum
                                                                                                                                                                    тогда такое руководство должно начинаться с главы, как сконфигурировать и собрать Кутю -.- имеет мало отношения к С++, зато дает 1й опыт с билд-системами.

                                                                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                      Господа, мое предложение о внесении в дополнительную часть главы hello world небольшого примера на Qt основано на том факте, что хорошие книги именно по С++ не содержат, в большинстве случаев, упоминание о гуе, а книги по Qt не пригодны для изучения С++.
                                                                                                                                                                      Теперь представим себе человека, решившего начать программировать. Вокруг него всякие C# и прочая ересь ;) и лишь отдаленно слышимые разговоры о С++. Но вот он хочет изучать С++, а видит лишь консольные примеры, которые его только отпугивают. Что он сделает? Правильно - выберет другой язык программирования. Потому как ему просто неоткуда узнать о том, что на С++ гуй делается легко и непринужденно, да еще и, ИМХО, изящно и красиво, с помощью Qt. Сам С++ объяснять действительно лучше, не отвлекаясь на Qt и прочее, но для ознакомления, в качестве дополнительного материала, рассказ о Qt может стать очень полезным.
                                                                                                                                                                      Можете считать это своего рода рекламных ходом для завлечения в ряды С++ программистов ;) . С++ удобный и современный инструмент программирования для очень широкого круга задач и об этом нужно говорить.
                                                                                                                                                                      Почему именно Qt? Потому что это изначально независимая(в плане использования) от платформы библиотека, с хорошо продуманной архитектурой, использующая С++ изначально(а не некая обертка над Сишной библиотекой).
                                                                                                                                                                      int0, ты исходишь из предположения, что человеку нужно изучить именно С++. Я же пытаюсь рассматривать случай, когда человек выбирает себе язык для разработки.

                                                                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                        ППКС

                                                                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                          Цитата Qraizer @
                                                                                                                                                                          D_KEY, бывает, нестрашно. Я сам забыл, когда последний раз под винду гуёвое чего писал. Не разучиться бы...

                                                                                                                                                                          Я стараюсь иногда просматривать код на Qt, чтобы не забыть... А вот под винду когда-то и на winapi гуевые приложения писал. Кошмар. А MFC я так и не успел изучить, перешел на никсы и кроссплатформенные проекты.
                                                                                                                                                                          Cам как думаешь, стоит ли hello world на Qt описать "для любознательных"?

                                                                                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                          Сообщение отредактировано: D_KEY -
                                                                                                                                                                            Не знаю. :( Это зависит от того, каким хотят видеть учебник. Наверное, сто́ит, учитывая, что консольный таковой будет присутствовать, но смущает то, что для "любознательных" таковая задача слишком тривиальна. Разве что если на API, но это не вяжется с общей направленностью учебника.

                                                                                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                              Текст для раздела Основной инструментарий программиста
                                                                                                                                                                              Цитата

                                                                                                                                                                              Все в нашем мире состоит из простейших элементов. Живые организмы состоят из клеток, различные материалы - из молекул, а те, в свою очередь, из атомов. Дома - из кирпичей и бетона, досок и гвоздей. Любой процесс можно разложить на какие-либо элементарные составляющие, и т. д. и т. п. Так же и программу - какой бы язык не был выбран, какая бы парадигма не была использована при разработке, каким бы способом не записывался бы исходный текст, он в любом случае будет состоять из тех или иных элементарных, более не делимых составляющих. В случае C++ структурная иерархия выглядит следующим образом:
                                                                                                                                                                              1. Любой более-менее крупный проект состоит из модулей (или библиотек - можно называть по разному).
                                                                                                                                                                              2. Модуль состоит из набора исходных файлов - текстовых файлов (обычно с расширением .cpp), иначе называемых единицами трансляции.
                                                                                                                                                                              3. Единица трансляции содержит текст, рассматриваемый компилятором как набор лексем (фрагментов текста, интерпретируемых тем или иным образом), собственно составляющих программу.
                                                                                                                                                                              3. (другой взгляд) Единица трансляции содержит набор объявлений и определений, вместе составляющий правильный текста на C++.
                                                                                                                                                                              4. В конечном итоге некоторые виды определений (определения функций, например) содержат последовательности выражений и операторов, непосредственно транслируемых в машинные инструкции.


                                                                                                                                                                              Собственно, выражения и операторы - это своего рода "строительные кирпичи" программ на большинстве императивных языков программирования. Это то, что составляет основной инструментарий программиста. Это то, что необходимо освоить в первую очередь.


                                                                                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                а разве .cpp файл == единица трансляции?

                                                                                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                  Цитата Бобёр @
                                                                                                                                                                                  а разве .cpp файл == единица трансляции?

                                                                                                                                                                                  Угумс.

                                                                                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                    Цитата Бобёр @
                                                                                                                                                                                    а разве .cpp файл == единица трансляции?

                                                                                                                                                                                    Цитата
                                                                                                                                                                                    The text of the program is kept in units called source files in this International Standard. A source file
                                                                                                                                                                                    together with all the headers (17.6.1.2) and source files included (16.2) via the preprocessing directive
                                                                                                                                                                                    #include, less any source lines skipped by any of the conditional inclusion (16.1) preprocessing directives, is
                                                                                                                                                                                    called a translation unit. [ Note: a C++ program need not all be translated at the same time. —end note ]

                                                                                                                                                                                    Стандарт, раздел [lex.separate], пункт 1.

                                                                                                                                                                                    Добавлено
                                                                                                                                                                                    Замечание по общей форме организации сего учебника.

                                                                                                                                                                                    Пока все движется таким образом, что каждая "листовая" глава содержит ряд вопросов и ответов на них. Т. е. получается что-то типа развернутого ФАКа. В связи с чем возникла идея сделать отдельную страницу, на которой все эти вопросы категоризированы и перечислены.

                                                                                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                      ну вот, я ж говорю: единица трансляции - это .cpp + все включённые в него .h-ики.

                                                                                                                                                                                      Добавлено
                                                                                                                                                                                      Цитата
                                                                                                                                                                                      Пока все движется таким образом, что каждая "листовая" глава содержит ряд вопросов и ответов на них. Т. е. получается что-то типа развернутого ФАКа

                                                                                                                                                                                      а я, например, именно такую форму и люблю...

                                                                                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                        Цитата Бобёр @
                                                                                                                                                                                        ну вот, я ж говорю: единица трансляции - это .cpp + все включённые в него .h-ики.

                                                                                                                                                                                        Странно рассматривать .cpp файл отдельно от включенных в него h-ников. ;)

                                                                                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                          а ты знаешь, я очень долгое время именно так и делал. и уж тем более вероятно, что это будут делать НАЧИНАЮЩИЕ граждане.

                                                                                                                                                                                          Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                            Это да. Это обязательно нужно как-то донести, что нет никакой связи между именем .cpp и именем .h, что нет никакого магического алгоритма связывания, который определял бы, что нужно связать код отсюда с кодом оттуда. Короче как-то донести, что есть объявление, что есть определение, что за чем должно следовать и т.д.

                                                                                                                                                                                            Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                              Было бы очень неплохо объяснить организацию программы в ОЗУ во время выполнения. Хотя бы в общих чертах. Это покажет почему у функций тоже есть адреса, как и у переменных. Это к теме об указателях.

                                                                                                                                                                                              -Added
                                                                                                                                                                                              Цитата archimed7592 @
                                                                                                                                                                                              Это да. Это обязательно нужно как-то донести, что нет никакой связи между именем .cpp и именем .h, что нет никакого магического алгоритма связывания, который определял бы, что нужно связать код отсюда с кодом оттуда. Короче как-то донести, что есть объявление, что есть определение, что за чем должно следовать и т.д.

                                                                                                                                                                                              Линковка в С++, как правило, достаточно слабо объясняется. Я, например, долгое время не понимал, чем динамическое связывание отличается от статического. К тому же, как всегда, есть тонкости. Например, с inline функциями, которые линкуются динамически и не подчинаются ODR. Однако, если определение такой функции вынести в отдельный модуль, то будет ошибка на этапе линковки, если попытаться вызвать эту функцию из другого модуля. Пожалуй раздел про линковку, следует вставить почти в самый конец книги, после шаблонов.

                                                                                                                                                                                              А после линковки, я бы добавил раздел о тестировании (в котором я сам нуб). Как правило, тестированию не уделяется вниманя совсем, или скудно. На мой взгляд, очень зря. Для этих целей желательно использовать какую-нибудь библиотеку. Я бы предложил одну из этих.
                                                                                                                                                                                              Boost Test Library
                                                                                                                                                                                              CPPUNIT
                                                                                                                                                                                              (Надо будет обязательно описать установку)
                                                                                                                                                                                              Кстати, я считаю что для обучения лучше пользоваться g++, он ближе к стандарту. Как правило, для простеньких консольных приложений ничего больше не надо.
                                                                                                                                                                                              Сюда же, стоит внести дебаг, потому что он неразрывно связан с тестированием.
                                                                                                                                                                                              Думаю, название этого, несомненно большого, раздела - "Тестирование и отладка"

                                                                                                                                                                                              Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                              Сообщение отредактировано: evlan -
                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                Текст для раздела Основной инструментарий программиста
                                                                                                                                                                                                Цитата

                                                                                                                                                                                                Все в нашем мире состоит из простейших элементов. Живые организмы состоят из клеток, различные материалы - из молекул, а те, в свою очередь, из атомов. Дома - из кирпичей и бетона, досок и гвоздей. Любой процесс можно разложить на какие-либо элементарные составляющие, и т. д. и т. п. Так же и программу - какой бы язык не был выбран, какая бы парадигма не была использована при разработке, каким бы способом не записывался бы исходный текст, он в любом случае будет состоять из тех или иных элементарных, более не делимых составляющих. В случае C++ структурная иерархия выглядит следующим образом:
                                                                                                                                                                                                1. Любой более-менее крупный проект состоит из модулей (или библиотек - можно называть по разному).
                                                                                                                                                                                                2. Модуль состоит из набора исходных файлов - текстовых файлов (обычно с расширением .cpp), иначе называемых единицами трансляции.
                                                                                                                                                                                                3. Единица трансляции содержит текст, рассматриваемый компилятором как набор лексем (фрагментов текста, интерпретируемых тем или иным образом), собственно составляющих программу.
                                                                                                                                                                                                3. (другой взгляд) Единица трансляции содержит набор объявлений и определений, вместе составляющий правильный текста на C++.
                                                                                                                                                                                                4. В конечном итоге некоторые виды определений (определения функций, например) содержат последовательности выражений и операторов, непосредственно транслируемых в машинные инструкции.


                                                                                                                                                                                                Собственно, выражения и операторы - это своего рода "строительные кирпичи" программ на большинстве императивных языков программирования. Это то, что составляет основной инструментарий программиста. Это то, что необходимо освоить в первую очередь.

                                                                                                                                                                                                Flex, может у меня паранойя, но никакой четкой структурной иерархии я здесь не наблюдаю. Корень проблемы в том, что в С++ нет модулей как таковых. Есть единицы трансляции.
                                                                                                                                                                                                Каким образом логический "модуль" будет отражен в исходниках - целиком зависит от программиста и исповедуемого им стиля.
                                                                                                                                                                                                То есть взаимодействие "модуль - исходные файлы - единица трансляции" не такое уж однозначное.
                                                                                                                                                                                                В данном случае, как мне кажется, необходимо четкое определение того, что подразумевается под "модулем".
                                                                                                                                                                                                Особенно, если учебник предназначен в том числе и для людей, переходящих на С++ с других языков, в которых модули есть.

                                                                                                                                                                                                Цитата
                                                                                                                                                                                                1. Любой более-менее крупный проект состоит из модулей (или библиотек - можно называть по разному).
                                                                                                                                                                                                2. Модуль состоит из набора исходных файлов - текстовых файлов (обычно с расширением .cpp), иначе называемых единицами трансляции.

                                                                                                                                                                                                Эти пунты, в общем случае, противоречат друг другу в отношении библиотек, ибо они, мягко говоря, не всегда доступны в виде исходных файлов.
                                                                                                                                                                                                Я предлагаю вообще исключить фразу о библиотеках, она здесь полезной нагрузки не несет, ИМХО естественно.
                                                                                                                                                                                                Если ты уж упоминаешь .cpp, то надо обязательно сказать, что имеются в виду и все .h(pp), включенные с помощью #include. Можно упомянуть, о том, что не следует включать .cpp ;) . Хотя, мне кажется, это уже будет здесь лишним.

                                                                                                                                                                                                Цитата
                                                                                                                                                                                                3. Единица трансляции содержит текст, рассматриваемый компилятором как набор лексем (фрагментов текста, интерпретируемых тем или иным образом), собственно составляющих программу.
                                                                                                                                                                                                3. (другой взгляд) Единица трансляции содержит набор объявлений и определений, вместе составляющий правильный текста на C++.

                                                                                                                                                                                                Я больше за второй вариант(возможно чуть развернутый). Оставлять оба мне кажется не совсем правильным решением.

                                                                                                                                                                                                Цитата
                                                                                                                                                                                                4. В конечном итоге некоторые виды определений (определения функций, например) содержат последовательности выражений и операторов, непосредственно транслируемых в машинные инструкции.

                                                                                                                                                                                                Фраза "в конечном итоге" может создать впечатление о наличии дополнительного(но упущенного) уровня сложности.
                                                                                                                                                                                                Еще мне, честно говоря, не очень понятно перечисление "выражения и операторы". Разве операторы не являются частью выражения?

                                                                                                                                                                                                Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                                Сообщение отредактировано: D_KEY -
                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                  Разве операторы не являются частью выражения?

                                                                                                                                                                                                  Есть выражение (expression), оператор (на самом деле "предложение" - statement, но это не устоявшийся перевод), и операция (operator). Чтобы исключить неоднозначность в понимании ("оператор" как statement и "оператор" как operator) я и решил, что там, где имеется ввиду именно operator использовать термин "операция". Вроде бы, ничему не противоречит.

                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                  Остальные замечания вполне разумны, буду над ними думать.

                                                                                                                                                                                                  Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                    Разве операторы не являются частью выражения?

                                                                                                                                                                                                    Есть выражение (expression), оператор (на самом деле "предложение" - statement, но это не устоявшийся перевод), и операция (operator). Чтобы исключить неоднозначность в понимании ("оператор" как statement и "оператор" как operator) я и решил, что там, где имеется ввиду именно operator использовать термин "операция". Вроде бы, ничему не противоречит.

                                                                                                                                                                                                    Ясно, но, честно говоря, не очень очевидно...

                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                    Остальные замечания вполне разумны, буду над ними думать.

                                                                                                                                                                                                    Оки...

                                                                                                                                                                                                    После сертификации и банкета что-то как-то так...
                                                                                                                                                                                                    Вообще нафиг мы(пока только ты) пишем это все, вон там в теме про С# и С++ сторонники быдлокодинга высказали уже свое мнение...

                                                                                                                                                                                                    Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                      на самом деле "предложение" - statement

                                                                                                                                                                                                      statement можно и как "утверждение" перевести
                                                                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                                                                      Вообще нафиг мы(пока только ты) пишем это все, вон там в теме про С# и С++ сторонники быдлокодинга высказали уже свое мнение...

                                                                                                                                                                                                      и кто интересно "быдлокодер"?

                                                                                                                                                                                                      Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"
                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                        1. Любой более-менее крупный проект состоит из модулей (или библиотек - можно называть по разному).
                                                                                                                                                                                                        2. Модуль состоит из набора исходных файлов - текстовых файлов (обычно с расширением .cpp), иначе называемых единицами трансляции.
                                                                                                                                                                                                        3. Единица трансляции содержит текст, рассматриваемый компилятором как набор лексем (фрагментов текста, интерпретируемых тем или иным образом), собственно составляющих программу.
                                                                                                                                                                                                        3. (другой взгляд) Единица трансляции содержит набор объявлений и определений, вместе составляющий правильный текста на C++.

                                                                                                                                                                                                        По моему, непонятен ни один из вариантов. Может сойдёт такой?

                                                                                                                                                                                                        Единица трансляции, он же модуль, это результат обработки компилятором файла, как правило, с расширением *.cpp. Следует учитывать все директивы #include которые находятся в этом файле, потому что эта директива просто вставляет в место включения весь "включаемый" файл целиком. Который, обычно, имеет расширение *.h или *.hpp или, в случае со стандартными библиотеками, без расширения вовсе - #include <iostream>. Синтаксис языка разрешает применять #include к любым файлам, в том числе и с расширением *.cpp - в общем случае, это может привести к ошибке компиляции. Стоит заметить, что в любом случае, "включение" файлов с раширением *.cpp, нарушает парадигму раздельной компиляции.
                                                                                                                                                                                                        Когда проект состоит из нескольких компилируемых файлов то результатом успешной компиляции будет соответсвующее количество модулей, готовых для создания связей между собой. Эти связи нужны когда, например, в одном из модулей вызывается функция, которая находится в другом модуле. Этой функции, в свою очередь, может передаваться переменная, которая, находится в третьем модуле и т.д.

                                                                                                                                                                                                        Эта тема была разделена из темы "Актуальный учебник по С++"
                                                                                                                                                                                                        Сообщение отредактировано: evlan -
                                                                                                                                                                                                          Цитата Мяут @
                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                          Другие с тем же упорством утверждают, что программистам ничего кроме .NET и C# изучать в ВУЗах не нужно...

                                                                                                                                                                                                          В вузах действительно может оказаться достаточным и C# как основы так сказать.

                                                                                                                                                                                                          Как основа он может и достаточен, но для ВУЗа мало. Ладно, я высказал свое личное мнение, а спорить я думаю смысла нет. Тем более здесь это не в тему.
                                                                                                                                                                                                            Цитата evlan @
                                                                                                                                                                                                            это результат обработки компилятором файла с расширением *.cpp.

                                                                                                                                                                                                            Результат обработки компилятором - объектный файл. А сам файл *.cpp или *.cxx (бывает и такое ;-) ) - и есть модуль. Вообще надо не на расширения акцентировать внимание, а на понятия и взаимодействие понятий, что у вас не сделано, так что ваш вариант не канает.

                                                                                                                                                                                                            Насколько я понимаю, учебник рассчитан на новичков, так что предлагаю свой вариант:
                                                                                                                                                                                                            Со временем, когда ваши программы значительно перерастут Hello, world, вам придется познакомиться с еще одним понятием - модульное программирование. Как и в любой технически сложной вещи, в C/C++ любую программу по выполняемым функциям и назначению отдельные участки кода выделяют в отдельные модули, которые проще поддерживать, можно раздельно компилировать и более просто переносить между программами (хотя все это требует определенного искусства проектирования кода).
                                                                                                                                                                                                            В модульном программировании выделяют несколько понятий:
                                                                                                                                                                                                            • Header (заголовочный файл). Заголовочный файл содержит описание функций модуля (прототипы функций, описание классов, extern-ссылки на глобальные переменные). Важно понимать, что заголовочный файл подставляется препроцессором с помощью директивы #include в заголовок файлов-реализаций, поэтому не должен содержать излишней информации (не более чем указанию компилятору). Более того, существует целый ряд советов, как оптимизировать их использование (см. Мейерса).
                                                                                                                                                                                                            • Source (исходный файл). Исходник содержит собственно реализацию, и компилируется в объектный файл, предоставляя реализацию интерфейса модуля линковщику.


                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                            Как основа он может и достаточен, но для ВУЗа мало.

                                                                                                                                                                                                            У тебя очень интересное представление о вузе :-) Ты хоть знаешь, что там сотни специальностей существуют, и требования у всех разные?
                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                              Цитата Мяут @
                                                                                                                                                                                                              так что ваш вариант не канает

                                                                                                                                                                                                              Эту фразу рассматриваю как приглашение перейти на "ты" :)

                                                                                                                                                                                                              Цитата Мяут @
                                                                                                                                                                                                              Результат обработки компилятором - объектный файл. А сам файл *.cpp или *.cxx (бывает и такое ;-) )

                                                                                                                                                                                                              Если считаешь что этому следует уделить больше внимания, то почему бы тогда не упомянуть, что в С++, исходники программ не обязанны храниться в файлах вообще? Но зачем новичку отвлекаться на это сейчас? Я посчитал что это будет лишним и затруднит понимание "единицы трансляции" как сущности. Мне мой вариант объяснения, что такое единица трансляции, больше нравится, он понятен, не врёт, и в этом цель. К тому же, принято подавать на компиляцию (а не на препроцессинг) файлы *.cpp, в редких случаях *.c, и ещё реже встречается *.cxx. Здесь есть выбор, между простотой понимания, и сильной детализацией. В общем, я специально не вдаюсь в детали, не пишу, что на самом деле, работает препроцессор. На данном этапе, это тоже затруднит понимание. Если конечно, сначала не объяснить что такое препроцессор, и как им пользоваться. Тогда, можно (а может и нужно) сказать всю правду-матку :)

                                                                                                                                                                                                              У тебя же уже об организации программы. Хедеры, исходники. Если продолжить, то надо тут же вводить ODR, статическую и динамическую линковку. Это всё хорошо, но в своё время. К тому же, нет чёткого объяснения, что такое единица трансляции.


                                                                                                                                                                                                              ********************************************************************************************
                                                                                                                                                                                                              К тому же, можно смёржиться, но я вообще убрал бы понятие "модульное" программирование, по моему его не следует применять к C++. Но его вполне можно заменить "раздельной компиляцией". А вообще, одно другому не мешает, только вот как-то уж больно "нахрапом" получается.

                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                              Цитата
                                                                                                                                                                                                              Единица трансляции, он же модуль, это результат обработки компилятором файла, как правило, с расширением *.cpp. Следует учитывать все директивы #include которые находятся в этом файле, потому что эта директива просто вставляет в место включения весь "включаемый" файл целиком. Который, обычно, имеет расширение *.h или *.hpp или, в случае со стандартными библиотеками, без расширения вовсе - #include <iostream>. Синтаксис языка разрешает применять #include к любым файлам, в том числе и с расширением *.cpp - в общем случае, это может привести к ошибке компиляции. Стоит заметить, что в любом случае, "включение" файлов с раширением *.cpp, нарушает парадигму раздельной компиляции.
                                                                                                                                                                                                              Когда проект состоит из нескольких компилируемых файлов то результатом успешной компиляции будет соответсвующее количество модулей, готовых для создания связей между собой. Эти связи нужны когда, например, в одном из модулей вызывается функция, которая находится в другом модуле. Этой функции, в свою очередь, может передаваться переменная, которая, находится в третьем модуле и т.д.

                                                                                                                                                                                                              ...

                                                                                                                                                                                                              Со временем, когда ваши программы значительно перерастут "Hello, world", вам придется познакомиться с еще одним понятием - раздельная компиляция. В C++, как правило, отдельные участки кода выделяют по выполняемым функциям и назначению в отдельные модули, которые, в результате, проще поддерживать и переносить между проектами, но это требует определенного искусства проектирования системы в целом. Так же, при внесении изменений в программу, компилятору совсем не обязательно заново обрабатывать все компилируемые файлы, только те, которые были изменены, или добавлены в проект.
                                                                                                                                                                                                              Следует выделить несколько понятий:
                                                                                                                                                                                                              Header (заголовочный файл). Заголовочный файл содержит описание функций модуля - прототипы обычных функций, определения inline функций, описание классов, extern объявления на глобальные переменные, каждая из которых определенна только в одном из модулей ровно один раз. Важно понимать, как работает препроцессор, который подставляет содержимое файла с помощью директивы #include (см. главу №).
                                                                                                                                                                                                              Source (исходный файл). Исходный файл содержит собственно реализацию, и компилируется в объектный файл. Т.е. представляет из себя, по сути, один модуль.

                                                                                                                                                                                                              Но я бы вторую часть вставил там, где появляется первая программа, состояцая более чем из одного модуля. Надо, к тому-же, поясняющие примеры. Потому что к этому времени, читатель уже должне быть, как минимум, знаком с разницей между определением и объявлением всего, в том числе и классов, а возможно, и шаблонов.
                                                                                                                                                                                                              Сообщение отредактировано: evlan -
                                                                                                                                                                                                                Цитата evlan @
                                                                                                                                                                                                                А после линковки, я бы добавил раздел о тестировании (в котором я сам нуб).
                                                                                                                                                                                                                В раздел о тестировании я мог бы много что вписать. Уж чем-чем, а верификацией аутсорсного ПО я как раз и занимаюсь последние три года. Только полноценное описание технологии займёт много места, и вряд ли сто́ит ожидать хорошего изложения материала. Теоретическая часть получится, но специфика конкретно нашей работы такова, что практических рекомендаций от меня будет мало.
                                                                                                                                                                                                                  Итак, после "утряски и усушки" получился следующий вариант вводной главы 2.3:
                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                  Все в нашем мире состоит из простейших элементов. Живые организмы состоят из клеток, различные материалы - из молекул, а те, в свою очередь, из атомов. Дома - из кирпичей и бетона, досок и гвоздей. Любой процесс можно разложить на какие-либо элементарные составляющие, и т. д. и т. п. Так же и программу - какой бы язык не был выбран, какая бы парадигма не была использована при разработке, каким бы способом не записывался бы исходный текст, он в любом случае будет состоять из тех или иных элементарных, более не делимых составляющих. В случае C++ наиболее крупной единицей, с которой имеет дело компилятор языке − это исходный файл, содержащий текст программы на языке С++. Обычно (и в подавляющем большинстве случае) это обычный текстовый файл, имеющий расширение .cpp, или .cc, или .cxx (в разных системах и средах программирования на C++ существуют разные соглашения на этот счет).
                                                                                                                                                                                                                  В реальности при компиляции одного файла с исходном текстом, в самом процессе его компиляции может учувствовать множество файлов. Достигается такой эффект за счет использования описанной в предыдущей главе директивы #include. При этом компилятор воспринимает все это множество файлов так, как будто бы это один большой текстовый файл, состоящий из содержимого всех "включенных" в него других файлов. И называется такой виртуальный текстовый файл "единицей трансляции".
                                                                                                                                                                                                                  Основное (и единственное) содержимое любой единицы трансляции − это набор объявлений и определений, вместе составляющий правильный текста на C++. И, наконец, некоторые виды определений (определения функций, например) содержат последовательности выражений и операторов, непосредственно транслируемых в машинные инструкции.

                                                                                                                                                                                                                  Собственно, объявления, определения, выражения и операторы − это своего рода "строительные кирпичи" программ на большинстве императивных языков программирования. Это то, что составляет основной инструментарий программиста. Это то, что необходимо освоить в первую очередь. И именно этой теме будет посвящено следующие несколько глав.
                                                                                                                                                                                                                    Глава 2.3.1 "Линейное исполнение":
                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                    Давным-давно, когда компьютеры были большие (и занимали огромные залы), основная задача, которая перед ними ставилась − это производить сложные математические вычисления. Времени с тех пор прошло много (относительно много), компьютеры "научились" решать множество других задач, но основная их функция осталась неизменной − так же, как и на заре "компьютерной эры", они складывают, умножают, вычитают и делят. Для проверки сего простого факта попробуем вывести на консоль таблицу умножения на число три. Сформулировать задачу можно следующим образом:
                                                                                                                                                                                                                    Программа должна вывести на консоль результат умножения на число 3 чисел от 1 до 10 и завершить свою работу.
                                                                                                                                                                                                                    В главе "Первая программа" мы уже выяснили − как именно можно вывести что-либо на консоль. Для решения же новой задачи нам необходимо ответить на несколько новых вопросов:
                                                                                                                                                                                                                    1. Можно ли в тексте программы на С++ записать число?
                                                                                                                                                                                                                    Да. Можно. Число можно записать в наиболее привычном для нас виде − в десятичной системе счисления (но это не единственная возможная форма записи). При этом, если в записи числа используется только целая часть (например: 10, 20, 23422), то такое число считается "целым". Если используется десятичный разделитель - символ '.' (например, 10., 23.5, 3.141, .0001), то число считается "с плавающей точкой". Подробнее об этом будет рассказано позже, сейчас же достаточно знать, что форма записи числа оказывает существенное влияние на результат операций с ним.
                                                                                                                                                                                                                    2. Можно ли в тексте программы записать операцию умножения двух величин?
                                                                                                                                                                                                                    Да. Можно. Операция умножения двух величин записывается с помощью символа '*'. Например: 2 * 3, или 10 * 100. Оба этих выражения означают ровно тоже самое, что и их аналоги в математической записи (2∙3 или 10∙100).
                                                                                                                                                                                                                    Кроме операции умножения в C++ существуют аналоги следующих математических операций: сложения ('+'), вычитания ('-'), деления ('/') и взятия остатка или, иначе, деления по модулю ('%'). Операции возведения в степень в языке C++ не существует.
                                                                                                                                                                                                                    3. Можно ли вывести на консоль результат выполнения некоей операции?
                                                                                                                                                                                                                    Да. Можно. Делается это точно таким же образом, как и вывод строкового литерала − с помощью операции вывода в поток. Например:
                                                                                                                                                                                                                    std::cout << 2 * 3 << std::endl;
                                                                                                                                                                                                                    std::cout << 10 * 100 << std::endl;
                                                                                                                                                                                                                    Записав подряд несколько таких инструкций (иначе называемых "выражениями") в результате компиляции и запуска результата, мы получим последовательное их выполнение ровно в том порядке, в котором они записаны в тексте программы.
                                                                                                                                                                                                                    На основании этих знаний можно составить законченную программу, выполняющую озвученную в начале главы задачу:
                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                      #include <iostream>
                                                                                                                                                                                                                       
                                                                                                                                                                                                                      int main()
                                                                                                                                                                                                                      {
                                                                                                                                                                                                                          std::cout << 1 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 2 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 3 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 4 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 5 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 6 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 7 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 8 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 9 * 3 << std::endl;
                                                                                                                                                                                                                          std::cout << 10 * 3 << std::endl;
                                                                                                                                                                                                                      }


                                                                                                                                                                                                                    В следующем примере демонстрируется разница между формами записи числа:

                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                      #include <iostream>
                                                                                                                                                                                                                       
                                                                                                                                                                                                                      int main()
                                                                                                                                                                                                                      {
                                                                                                                                                                                                                          std::cout << "Integer numbers: " << 1 / 3 << std::endl;
                                                                                                                                                                                                                          std::cout << "Floating point numbers:" << 1. / 3. << std::endl;
                                                                                                                                                                                                                      }


                                                                                                                                                                                                                    Результат его работы говорит сам для себя. Этого примера должно быть вполне достаточно, чтобы сразу уяснить для себя, что всегда необходимо четко осознавать − какого рода операции (целочисленные или с плавающей точкой) требуются в том или ином случае. Смешения этих типов операций либо использование операций одного типа там, где требуются операции другого − может иметь фатальные последствия.


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


                                                                                                                                                                                                                    В части "подробности" этой главы планирую рассмотреть следующие вопросы:
                                                                                                                                                                                                                    1. Описать различные формы записи чисел, в том числе - про формы записи чисел с плавающей точкой.
                                                                                                                                                                                                                    2. Подробнее рассказать про особенности целочисленной арифметики и арифметики с плавающей точкой. А также про смешение этих типов арифметики.

                                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                                    Возможно, что в этой же главе имеет смысл рассмотреть остальные вопросы, связанные с простейшими выражениями (приоритет операций, группировка), чтобы позже к этому уже не возвращаться.
                                                                                                                                                                                                                      Подправил финал главы:
                                                                                                                                                                                                                      Цитата

                                                                                                                                                                                                                      В следующем примере демонстрируется разница между формами записи числа:

                                                                                                                                                                                                                      #include <iostream>

                                                                                                                                                                                                                      int main()
                                                                                                                                                                                                                      {
                                                                                                                                                                                                                      std::cout << "Integer numbers: " << 1 / 3 << std::endl;
                                                                                                                                                                                                                      std::cout << "Floating point numbers:" << 1. / 3. << std::endl;
                                                                                                                                                                                                                      }

                                                                                                                                                                                                                      Результат его работы говорит сам для себя. Этого примера должно быть вполне достаточно, чтобы сразу уяснить для себя, что всегда необходимо четко осознавать − какого рода операции (целочисленные или с плавающей точкой) требуются в том или ином случае. Смешения этих типов операций либо использование операций одного типа там, где требуются операции другого − может иметь фатальные последствия.

                                                                                                                                                                                                                      Проводя дальнейшие сравнения арифметических выражений в языке C++ с их математическими аналогами можно выделить следующие общие моменты:
                                                                                                                                                                                                                      1. Арифметические выражения в C++ учитывают приоритет операций. И приоритет этот соответствует приоритету операций в математике. Т. е. операции '*', '/' и '%' имеют более высокий приоритет, чем операции '+' и '-'.
                                                                                                                                                                                                                      2. Арифметические выражения в C++ (да и выражения вообще) допускают группировку с помощью круглых скобок (также, как и математические выражения). При этом, то, что записывается в скобках, имеет более высокий приоритет и вычисляется в первую очередь.
                                                                                                                                                                                                                      3. Также, как и соответствующие математические операции, арифметические операции в С++ обладают свойством коммутативности и транзитивности, в том случае, если применяются к числовым аргументам (в общем случае эти операции такими свойствами могут не обладать).
                                                                                                                                                                                                                      Кроме того, для арифметических (и иных) операций, в которых участвуют два аргумента (бинарных операций) вводится понятие ассоциативности. Ассоциативность операции определяет - какой из двух аргументов должен вычисляться в первую очередь, а какой - во вторую. В левоассоциативных операциях первым вычисляется то, что стоит слева от знака операции. В правоассоциативных, соответственно, то, что справа. В простейших арифметических выражениях это не так важно. Но в более сложных выражениях, которые могут быть записаны на языке C++, порядок вычисления аргументов может играть существенную роль.


                                                                                                                                                                                                                      В качестве упражнения вы можете модифицировать (или дополнить) приведенные здесь программы для вывода/расчета чего-либо еще, продолжив использование многогигагерцового процессора в качестве простейшего школьного калькулятора.
                                                                                                                                                                                                                        Цайнэ Кул шикарно :pray: всё просто и понятно, как же давно я ждал такого автора, как ты!

                                                                                                                                                                                                                        Flex Ferrum
                                                                                                                                                                                                                        вот здесь
                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                        << 1. / 3. <<

                                                                                                                                                                                                                        мне кажется, лучше заменить на
                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                        << 1.0 / 3.0 <<

                                                                                                                                                                                                                        так понятнее имхо.
                                                                                                                                                                                                                          Flex Ferrum, мне нравится(исключая некоторые мелкие ошибки, вроде пропущенных букв, некоторых лишних "и т.д. и т.п." и скобочек).
                                                                                                                                                                                                                          Вечером посмотрю получше, может чего-нибудь напишу. Пока мне кажется, что можно добавить еще какое-нибудь простенькое предложение до того, как описывать единицы трансляции(а то совсем новеньким тяжело понять будет, надо бы посмотреть, как у K&R это описано).
                                                                                                                                                                                                                          Еще можно в описании операций упомянуть(хотя бы в скобочках), что С++ математические функции есть в стандартной библиотеке, а то фразы в духе "операции возведения в степень в языке C++ не существует" могут шокировать непосвященных ;) .
                                                                                                                                                                                                                            Цитата Radagast @
                                                                                                                                                                                                                            мне кажется, лучше заменить на

                                                                                                                                                                                                                            Выше была вводная:
                                                                                                                                                                                                                            Цитата Flex Ferrum @
                                                                                                                                                                                                                            например, 10., 23.5, 3.141, .0001


                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                            Еще можно в описании операций упомянуть(хотя бы в скобочках), что С++ математические функции есть в стандартной библиотеке, а то фразы в духе "операции возведения в степень в языке C++ не существует" могут шокировать непосвященных ;) .

                                                                                                                                                                                                                            Ключевое слово "операции". :)
                                                                                                                                                                                                                              Radagast, на счет формы записи согласен.

                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                              Кстати, в описании форм записи чисел для "любознательных" можно немного рассказать о user-defined literals нового стандарта(я правда не знаю, как они там продвигаются).

                                                                                                                                                                                                                              -Added
                                                                                                                                                                                                                              Цитата Flex Ferrum @
                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                              Еще можно в описании операций упомянуть(хотя бы в скобочках), что С++ математические функции есть в стандартной библиотеке, а то фразы в духе "операции возведения в степень в языке C++ не существует" могут шокировать непосвященных ;) .

                                                                                                                                                                                                                              Ключевое слово "операции". :)

                                                                                                                                                                                                                              Вопрос. Было ли бы тебе это понятно, в тот период, когда ты только изучал программирование, если бы этот учебник был твоим первым в этой области знаний?
                                                                                                                                                                                                                              Я предлагаю, все же указать, хотя бы в скобках. Ты думаешь, это будет лишним?
                                                                                                                                                                                                                              Сообщение отредактировано: D_KEY -
                                                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                                                Вечером посмотрю получше, может чего-нибудь напишу. Пока мне кажется, что можно добавить еще какое-нибудь простенькое предложение до того, как описывать единицы трансляции(а то совсем новеньким тяжело понять будет, надо бы посмотреть, как у K&R это описано).

                                                                                                                                                                                                                                Буду ждать.
                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                  Я предлагаю, все же указать, хотя бы в скобках. Ты думаешь, это будет лишним?

                                                                                                                                                                                                                                  Ты жеж сам сетуешь, что слишком много скобок. :)
                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                    Проводя дальнейшие сравнения арифметических выражений в языке C++ с их математическими аналогами можно выделить следующие общие моменты

                                                                                                                                                                                                                                    Ты забыл сказать про:
                                                                                                                                                                                                                                    4. Порядок вычислений подвыражений в выражении не определён.
                                                                                                                                                                                                                                    Например в строке:
                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                      X = sin (Y+3) + cos (Z-1) ;

                                                                                                                                                                                                                                    вовсе не факт, что подвыражение Y+3 будет вычислено раньше подвыражения Z-1.

                                                                                                                                                                                                                                    Не знание этой особенности C++ может привести к различным побочным эфектам :yes:
                                                                                                                                                                                                                                    Сообщение отредактировано: Цайнэ Кул -
                                                                                                                                                                                                                                      Цитата Цайнэ Кул @
                                                                                                                                                                                                                                      Ты забыл сказать про:

                                                                                                                                                                                                                                      Я не забыл. Я до этого еще не дошел.
                                                                                                                                                                                                                                        Цитата Flex Ferrum @
                                                                                                                                                                                                                                        1. Можно ли в тексте программы на С++ описать текстовую строку?
                                                                                                                                                                                                                                        Да. Можно. Говоря по-простому, текстовой строкой является фрагмент исходного текста программы, заключенный в кавычки. Таким образом, где-то в тексте программы должен быть следующий фрагмент:
                                                                                                                                                                                                                                        "Hello World!"

                                                                                                                                                                                                                                        Во-первых, не "текстовая строка", а "строковый литерал" - один из вид лексем языка. Ибо "текстовая строка" может находится и в комментариях.
                                                                                                                                                                                                                                        Во-вторых, некоторые последовательности символов (escape-последовательности) преобразуются/интерпретируются некоторыми функциями как один символ.

                                                                                                                                                                                                                                        -Added
                                                                                                                                                                                                                                        Цитата Radagast @
                                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                                        заключенный в кавычки
                                                                                                                                                                                                                                        имхо лучше сразу уточнить, что двойные кавычки.
                                                                                                                                                                                                                                        и что насчет endl?

                                                                                                                                                                                                                                        Это сообщение было перенесено сюда или объединено из темы "Актуальный учебник по С++"

                                                                                                                                                                                                                                        Не надо "уточнять".
                                                                                                                                                                                                                                        Ибо термин "кавычки" и так подразумевает, что они "двойные".
                                                                                                                                                                                                                                        А одинарные "кавычки" называются апострофами. :yes:

                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                        Цитата Цайнэ Кул @
                                                                                                                                                                                                                                        Во-вторых, некоторые последовательности символов (escape-последовательности)...


                                                                                                                                                                                                                                        Или триграфы :yes:
                                                                                                                                                                                                                                          Цитата Цайнэ Кул @
                                                                                                                                                                                                                                          Во-вторых, некоторые последовательности символов (escape-последовательности) преобразуются/интерпретируются некоторыми функциями как один символ

                                                                                                                                                                                                                                          В-третьих escape-последовательности преобразуются не "некоторыми функциями", а самим компилятором.
                                                                                                                                                                                                                                          В-четвертых:
                                                                                                                                                                                                                                          Цитата Цайнэ Кул @
                                                                                                                                                                                                                                          Говоря по-простому, текстовой строкой является фрагмент исходного текста программы, заключенный в кавычки.

                                                                                                                                                                                                                                          При первом знакомстве пугать читателя фразой "строковый литерал", делать оговорки про комментарии и прочее - не нужно. Задача - набить текст, запустить, убедиться, что работает. И, самое главное, иметь представление о том, что же ты написал. Про "строковые литералы" можно рассказать в подробностях или в главе типа "Текст программы на C++ в деталях".

                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                          Цитата Цайнэ Кул @
                                                                                                                                                                                                                                          Ибо термин "кавычки" и так подразумевает, что они "двойные".
                                                                                                                                                                                                                                          А одинарные "кавычки" называются апострофами. :yes:

                                                                                                                                                                                                                                          Учим маттчасть, потом сыплем подобными комментариями.
                                                                                                                                                                                                                                            Цитата Flex Ferrum @
                                                                                                                                                                                                                                            Модуль состоит из набора исходных файлов

                                                                                                                                                                                                                                            Не верно.
                                                                                                                                                                                                                                            Модуль не состоит из файлов, а модуль - это и есть файл. Один !!!!
                                                                                                                                                                                                                                              Цайнэ Кул, ты хотя бы для начала всю тему осилил, а потом бы комментировал.

                                                                                                                                                                                                                                              Цитата Цайнэ Кул @
                                                                                                                                                                                                                                              Модуль не состоит из файлов, а модуль - это и есть файл. Один !!!!

                                                                                                                                                                                                                                              Не верно. Строго говоря, в C++ понятия "Модуль" не существует (поиск соответствующего слова в стандарте дает 0 результатов). Существует понятие "transation unit", а это не одно и то же.
                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                При первом знакомстве пугать читателя фразой "строковый литерал", делать оговорки про комментарии и прочее - не нужно. Задача - набить текст, запустить, убедиться, что работает. И, самое главное, иметь представление о том, что же ты написал. Про "строковые литералы" можно рассказать в подробностях или в главе типа "Текст программы на C++ в деталях".

                                                                                                                                                                                                                                                А если излагать по Вашему, то у читателя сложится впечатление, что "строковый литерал" ("текстовая строка" по-Вашему) - это не специальный объект данных с который используется операторами программы, не лексема, а просто любая (!!!) строка, заключённая в кавычки.

                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                В-третьих escape-последовательности преобразуются не "некоторыми функциями", а самим компилятором.

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

                                                                                                                                                                                                                                                  А оно практически так и есть:
                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                  A string literal is a sequence of characters (as defined in 2.14.3) surrounded by double quotes, optionally
                                                                                                                                                                                                                                                  prefixed by R, u8, u8R, u, uR, U, UR, L, or LR, as in "...", R"[...]", u8"...", u8R"**[...]**", u"...",
                                                                                                                                                                                                                                                  uR"* [...]* ", U"...", UR"zzz[...]zzz", L"...", or LR"[...]", respectively.


                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                  Цитата Цайнэ Кул @
                                                                                                                                                                                                                                                  А триграммы (или триграфы? забыл как правильно ;) )? Кем преобразуются ещё даже до отработки препроцессора?

                                                                                                                                                                                                                                                  Триграфы. На них вообще можно забить. Процент "попадания" в них - очень низок.
                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                    Смешения этих типов операций либо использование операций одного типа там, где требуются операции другого − может иметь фатальные последствия.

                                                                                                                                                                                                                                                    Вот чего здесь не хватает, так это булевой алгебры. Она достаточно проста, что-бы описать на трёх страницах в подробностях. Не помешало бы перед этим объяснить что такое бит, байт, килобайт и т.д. и почему не в десятичной системе счисления. После можно объяснить
                                                                                                                                                                                                                                                    OR - |
                                                                                                                                                                                                                                                    AND - &
                                                                                                                                                                                                                                                    XOR - ^
                                                                                                                                                                                                                                                    Без этого, по моему, трудновато будет понять, каким же волшебным образом хранятся в памяти данные. И почему 4 байтовый int ограничен значениями -(2 в степени 31); и (2 в степени 31) - 1;
                                                                                                                                                                                                                                                    Наверное, нужна целая глава, посвящённая этому.
                                                                                                                                                                                                                                                    Сообщение отредактировано: evlan -
                                                                                                                                                                                                                                                      Цитата evlan @
                                                                                                                                                                                                                                                      Вот чего здесь не хватает, так это булевой алгебры. Она достаточно проста, что-бы описать на трёх страницах в подробностях. Не помешало бы перед этим объяснить что такое бит, байт, килобайт и т.д. и почему не в десятичной системе счисления. После можно объяснить

                                                                                                                                                                                                                                                      Возможно. Просто мне не хотелось смешивать "битовую арифметику" с традиционной. Так сказать, всему свое время.
                                                                                                                                                                                                                                                        Цитата Flex Ferrum @
                                                                                                                                                                                                                                                        Так сказать, всему свое время

                                                                                                                                                                                                                                                        Абсолютно согласен. Я и говорю, для этого лучше отвести отдельную главу, или даже раздел.
                                                                                                                                                                                                                                                          Цитата evlan @
                                                                                                                                                                                                                                                          И почему 4 байтовый int ограничен значениями

                                                                                                                                                                                                                                                          насколько все это нужно в курсе по программированию - ибо вопрос связан скорее с архитектурой ПК :-)
                                                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                                                          Триграфы. На них вообще можно забить. Процент "попадания" в них - очень низок.

                                                                                                                                                                                                                                                          Триграфы попадают в вопросы Deep C - на них 100% можно забить.

                                                                                                                                                                                                                                                          Вообще не плохо бы подойти к возможностям wiki и скажем сделать отдельную статью про for-циклы, и затем уже давать ссылки на нее (или статью про циклы + якорь + ссылку на якорь). И повесить в первое сообщение тут (прикрепленное) правила работы с wiki, а саму тему прикрепить, ибо раз оно так - писать надо коллективно.
                                                                                                                                                                                                                                                            Цитата Мяут @
                                                                                                                                                                                                                                                            насколько все это нужно в курсе по программированию - ибо вопрос связан скорее с архитектурой ПК :-)

                                                                                                                                                                                                                                                            от того, сколько int памяти занимает суть не меняется
                                                                                                                                                                                                                                                              Цитата miksayer @
                                                                                                                                                                                                                                                              от того, сколько int памяти занимает суть не меняется

                                                                                                                                                                                                                                                              Если ты заглянешь в эту тему: цифровая подборка
                                                                                                                                                                                                                                                              увидишь, что этот вопрос для новичков принципиально важен, впрочем на уровне архитектуры оперируют с понятием байт/слово/двойное слово, а не мифической длиной пиписькицелого числа
                                                                                                                                                                                                                                                                Еще комментарии будут? Если нет, то я переношу в Вики.

                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                Цитата Мяут @
                                                                                                                                                                                                                                                                Если ты заглянешь в эту тему: цифровая подборка
                                                                                                                                                                                                                                                                увидишь, что этот вопрос для новичков принципиально важен, впрочем на уровне архитектуры оперируют с понятием байт/слово/двойное слово, а не мифической длиной пиписькицелого числа

                                                                                                                                                                                                                                                                В данном конкретном случае новичок пользовался сишными форматными функциями. А они требуют точной спецификации типа, и знания особенностей платформы, на которой компилируется. Если бы для вывода в файл он бы использовал С++-сные потоки, то такой проблемы бы не возникло.

                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                Итоговый вариант главы 2.3.1:

                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                Давным-давно, когда компьютеры были большие (и занимали огромные залы), основная задача, которая перед ними ставилась − это производить сложные математические вычисления. Времени с тех пор прошло много (относительно много), компьютеры "научились" решать множество других задач, но основная их функция осталась неизменной − так же, как и на заре "компьютерной эры", они складывают, умножают, вычитают и делят. Для проверки сего простого факта попробуем вывести на консоль таблицу умножения на число три. Сформулировать задачу можно следующим образом:
                                                                                                                                                                                                                                                                Программа должна вывести на консоль результат умножения на число 3 чисел от 1 до 10 и завершить свою работу.
                                                                                                                                                                                                                                                                В главе "Первая программа" мы уже выяснили − как именно можно вывести что-либо на консоль. Для решения же новой задачи нам необходимо ответить на несколько новых вопросов:
                                                                                                                                                                                                                                                                1. Можно ли в тексте программы на С++ записать число?
                                                                                                                                                                                                                                                                Да. Можно. Число можно записать в наиболее привычном для нас виде − в десятичной системе счисления (но это не единственная возможная форма записи). При этом, если в записи числа используется только целая часть (например: 10, 20, 23422), то такое число считается "целым". Если используется десятичный разделитель - символ '.' (например, 10., 23.5, 3.141, .0001), то число считается "с плавающей точкой". Подробнее об этом будет рассказано позже, сейчас же достаточно знать, что форма записи числа оказывает существенное влияние на результат операций с ним.
                                                                                                                                                                                                                                                                2. Можно ли в тексте программы записать операцию умножения двух величин?
                                                                                                                                                                                                                                                                Да. Можно. Операция умножения двух величин записывается с помощью символа '*'. Например: 2 * 3, или 10 * 100. Оба этих выражения означают ровно тоже самое, что и их аналоги в математической записи (2∙3 или 10∙100).
                                                                                                                                                                                                                                                                Кроме операции умножения в C++ существуют аналоги следующих математических операций: сложения ('+'), вычитания ('-'), деления ('/') и взятия остатка или, иначе, деления по модулю ('%'). Операции возведения в степень в языке C++ не существует (она заменяется функцией из стандартной библиотеки).
                                                                                                                                                                                                                                                                3. Можно ли вывести на консоль результат выполнения некоей операции?
                                                                                                                                                                                                                                                                Да. Можно. Делается это точно таким же образом, как и вывод строкового литерала − с помощью операции вывода в поток. Например:
                                                                                                                                                                                                                                                                std::cout << 2 * 3 << std::endl;
                                                                                                                                                                                                                                                                std::cout << 10 * 100 << std::endl;
                                                                                                                                                                                                                                                                Записав подряд несколько таких инструкций (иначе называемых "выражениями") в результате компиляции и запуска результата, мы получим последовательное их выполнение ровно в том порядке, в котором они записаны в тексте программы.
                                                                                                                                                                                                                                                                На основании этих знаний можно составить законченную программу, выполняющую озвученную в начале главы задачу:

                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                  #include <iostream>
                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                  int main()
                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                      std::cout << 1 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 2 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 3 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 4 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 5 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 6 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 7 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 8 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 9 * 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << 10 * 3 << std::endl;
                                                                                                                                                                                                                                                                  }


                                                                                                                                                                                                                                                                В следующем примере демонстрируется разница между формами записи числа:

                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                  #include <iostream>
                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                  int main()
                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                      std::cout << "Integer numbers: " << 1 / 3 << std::endl;
                                                                                                                                                                                                                                                                      std::cout << "Floating point numbers:" << 1.0 / 3.0 << std::endl;
                                                                                                                                                                                                                                                                  }


                                                                                                                                                                                                                                                                Результат его работы говорит сам для себя. Этого примера должно быть вполне достаточно, чтобы сразу уяснить для себя, что всегда необходимо четко осознавать − какого рода операции (целочисленные или с плавающей точкой) требуются в том или ином случае. Смешения этих типов операций либо использование операций одного типа там, где требуются операции другого − может иметь фатальные последствия.

                                                                                                                                                                                                                                                                Проводя дальнейшие сравнения арифметических выражений в языке C++ с их математическими аналогами можно выделить следующие общие моменты:
                                                                                                                                                                                                                                                                1. Арифметические выражения в C++ учитывают приоритет операций. И приоритет этот соответствует приоритету операций в математике. Т. е. операции '*', '/' и '%' имеют более высокий приоритет, чем операции '+' и '-'.
                                                                                                                                                                                                                                                                2. Арифметические выражения в C++ (да и выражения вообще) допускают группировку с помощью круглых скобок (также, как и математические выражения). При этом, то, что записывается в скобках, имеет более высокий приоритет и вычисляется в первую очередь.
                                                                                                                                                                                                                                                                3. Также, как и соответствующие математические операции, арифметические операции в С++ могут обладать свойствами коммутативности, сочетательности и дистрибутивности, в том случае, если применяются к числовым аргументам (в общем случае эти операции такими свойствами могут не обладать).
                                                                                                                                                                                                                                                                4. В случае необходимости записать отрицательное число, перед ним (как и в математике) ставится знак минус ('-'). Также перед числом можно поставить знак '+', в этом случае число останется положительным. При использовании этих знаков стоит помнить следующее: в C++ два подряд идущих плюса − "++" или минуса − "--" (не разделенных пробелом, табуляцией и т. п. символом) считаются отдельной операцией. И по этому запись 1 - - 2 и 1 -- 2 − совсем не одно и то же.

                                                                                                                                                                                                                                                                В качестве упражнения вы можете модифицировать (или дополнить) приведенные здесь программы для вывода/расчета чего-либо еще, продолжив использование многогигагерцового процессора в качестве простейшего школьного калькулятора.
                                                                                                                                                                                                                                                                  Flex Ferrum, я так и не вкурил смысла выкладывания промежуточного варианта на форуме, его редактирования и потом аппрува в вики. :blink:
                                                                                                                                                                                                                                                                  Ибо функционал Wiki позволяет делать все это вообще не затрагивая форум, к тому же более удобно.
                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                    Давным-давно, когда компьютеры были большие (и занимали огромные залы), основная задача, которая перед ними ставилась − это производить сложные математические вычисления. Времени с тех пор прошло много (относительно много), компьютеры "научились" решать множество других задач, но основная их функция осталась неизменной − так же, как и на заре "компьютерной эры", они складывают, умножают, вычитают и делят. Для проверки сего простого факта попробуем вывести на консоль таблицу умножения на число три. Сформулировать задачу можно следующим образом:

                                                                                                                                                                                                                                                                    Flex Ferrum, как по мне этот бы абзац я бы убрал нафик и не вспоминал о далеком прошлом, аргументы такие(все высказаное ниже ИМХО):
                                                                                                                                                                                                                                                                    1) Не нужно тревожить старое, лучше в качестве эдаково вступления расказать чем С/С++ багат, чем беден(Правда вот не сформулирую с чего начать)
                                                                                                                                                                                                                                                                    2) Кто будет читать, я уверен просто пролетит этот абзац глазами даще не поняв сути написанного, т.к. новичок ищет готовые примеры чтобы поимпровизировать...
                                                                                                                                                                                                                                                                    Аргументы такие: мало кого интересует что там научились компьютеры за последние 50 лет, сейчас больше интересует что они могут, и как этим пользоваться...

                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                    В главе "Первая программа" мы уже выяснили − как именно можно вывести что-либо на консоль. Для решения же новой задачи нам необходимо ответить на несколько новых вопросов:

                                                                                                                                                                                                                                                                    М пошла нудотень...: как мы выводим пицот раз число на екран, мне кажеться что лучше в той первой программе привести пару примеров демонстрирующих вывод числа, переменной еще чего то на экран. А раз уже эта глава про арифметические операции, то соответственно оставить ссылку на первую главу мол мы выводили чилса на екран а теперь потренируемся применять к ним арифметические операции, и еще, я считаю что уж больно это тупо расказывать все, то есть абсолютно все нъюансы, мне кажеться что нужно как то привести некий пример демонстрирующий чтото, и патом привести в качестве упражнения подобную задачу, уверен начинающему читателю будет интересно поэкспериментировать самому. Я о том что лучше всетаки наверно написать "Вот мол в консоль можно выводить выражения содержащие арифметические операции, расмотрим это на примере операции умножения":
                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                      std::cout << 4*5 << std::endl;

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

                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                    3. Также, как и соответствующие математические операции, арифметические операции в С++ могут обладать свойствами коммутативности, сочетательности и дистрибутивности, в том случае, если применяются к числовым аргументам (в общем случае эти операции такими свойствами могут не обладать).

                                                                                                                                                                                                                                                                    Уж больно по професиональному написано, не все же в универе учаться, есть и такие которые самоучки и никто им не объяснил что такое "свойства коммутативности" и вообще что такое "коммутативность", тут лучше простыми словами обойтись.
                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                    4. В случае необходимости записать отрицательное число, перед ним (как и в математике) ставится знак минус ('-'). Также перед числом можно поставить знак '+', в этом случае число останется положительным. При использовании этих знаков стоит помнить следующее: в C++ два подряд идущих плюса − "++" или минуса − "--" (не разделенных пробелом, табуляцией и т. п. символом) считаются отдельной операцией. И по этому запись 1 - - 2 и 1 -- 2 − совсем не одно и то же.

                                                                                                                                                                                                                                                                    Нет смысла в первом предложении, и дальше читать както непонятно, мысль теряеться, лучше написать мол: "Для представления числа в отрицательной форме, необходимо..."

                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                    В качестве упражнения вы можете модифицировать (или дополнить) приведенные здесь программы для вывода/расчета чего-либо еще, продолжив использование многогигагерцового процессора в качестве простейшего школьного калькулятора.

                                                                                                                                                                                                                                                                    Вот в том то и дело что новичку ты ничего не оставил, ибо все описано и он ничего не понял(не все воспринимаеться первого раза), я иногда чтобы понять некое предложение читаю его 10 раз что бы суть понят ьне говоря уже о примерах и т.п.
                                                                                                                                                                                                                                                                    Лучше всего тут привести конкретное задание, и при этом чтобы оно бюыло сложнее чем описано в теме, ну например:
                                                                                                                                                                                                                                                                    1)Напишите программу, которая выводит выше полное имя, фамилия, отчество на отдельной строке(оператор endl использовался в примере, но про него ничего не было сказано, и это хорошо начинающий будет импровизировать и понимать что куда и как)
                                                                                                                                                                                                                                                                    2) Напишите программу, которая вычисляет факториал числа 4(можно для наглядности привести формулу вычесления факториала)
                                                                                                                                                                                                                                                                    ну и т.д.
                                                                                                                                                                                                                                                                    Сообщение отредактировано: KILLER -
                                                                                                                                                                                                                                                                      Цитата KILLER @
                                                                                                                                                                                                                                                                      Аргументы такие: мало кого интересует что там научились компьютеры за последние 50 лет, сейчас больше интересует что они могут, и как этим пользоваться...

                                                                                                                                                                                                                                                                      Вот не соглашусь, судя по самому себе - мне всегда недоставало "немного истории" в книгах по программированию

                                                                                                                                                                                                                                                                      Цитата KILLER @
                                                                                                                                                                                                                                                                      А дальше уже начинающий сам догонит: "а что если туда плюс поставить", и ему интереснее и писать меньше прилдеться...
                                                                                                                                                                                                                                                                      Далее, по себе знаю как плохо писать программу под консоль которая при выполнении тут же пролетает и ниче не видать что вообще она показала нам?, я думаю можно оговориться в первых главах что мол есть такая функция getch() или еще как то там, она задерживает выполнение программы до нажатия эникея :), чтобы новичок мог видеть плоды своих трудов...

                                                                                                                                                                                                                                                                      Да ну эту getch(), тем более например студия будет варнинг выдавать про _getch(). Да и не всегда консоль вылетает, но об этом уже в другом месте можно расказать. Ну а если все же надо, так лучше уж
                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                        std::cin.get();

                                                                                                                                                                                                                                                                      чем getch() (который еще и conio.h требует).

                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                      Цитата KILLER @
                                                                                                                                                                                                                                                                      Лучше всего тут привести конкретное задание, и при этом чтобы оно бюыло сложнее чем описано в теме, ну например:
                                                                                                                                                                                                                                                                      1)Напишите программу, которая выводит выше полное имя, фамилия, отчество на отдельной строке(оператор использовался в примере, но про него ничего не было сказано, и это хорошо начинающий будет импровизировать и понимать что куда и как)
                                                                                                                                                                                                                                                                      2) Напишите программу, которая вычисляет факториал числа 4(можно для наглядности привести формулу вычесления факториала)
                                                                                                                                                                                                                                                                      ну и т.д.

                                                                                                                                                                                                                                                                      А вот наличие задания - с этим полностью согласен, можно одно - два самое то.
                                                                                                                                                                                                                                                                        Цитата kanes @
                                                                                                                                                                                                                                                                        Вот не соглашусь, судя по самому себе - мне всегда недоставало "немного истории" в книгах по программированию

                                                                                                                                                                                                                                                                        Спорить не буду, то было ИМХО(я подстраховалсо :tong: )
                                                                                                                                                                                                                                                                        Цитата kanes @
                                                                                                                                                                                                                                                                        Да ну эту getch(), тем более например студия будет варнинг выдавать про _getch(). Да и не всегда консоль вылетает, но об этом уже в другом месте можно расказать. Ну а если все же надо, так лучше уж

                                                                                                                                                                                                                                                                        Тут я тоже подстраховалсо
                                                                                                                                                                                                                                                                        Цитата KILLER @
                                                                                                                                                                                                                                                                        Далее, по себе знаю как плохо писать программу под консоль которая при выполнении тут же пролетает и ниче не видать что вообще она показала нам?, я думаю можно оговориться в первых главах что мол есть такая функция getch() или еще как то там


                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                        Еще хотел бы дополнить может пригодица, например я обожаю читать книги по программированию где есть хорошая доля юмора, и коментов, причем коментов больше всего не хватает...
                                                                                                                                                                                                                                                                        Если мне попадет книга в которой написано:
                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                          ...
                                                                                                                                                                                                                                                                          //! тут мы объявляем переменную типа int и инициализируем ее числом 10
                                                                                                                                                                                                                                                                          int i(10);
                                                                                                                                                                                                                                                                          //! В этой строчке мы выводим значение переменной i в поток вывода(в нашем случае это будет консоль)
                                                                                                                                                                                                                                                                          //! (пускай даже слово поток для начинающего будет неясно, все равно, если ему расказать что такое поток вывода
                                                                                                                                                                                                                                                                          //! ввода сразу он не поймет..., причем начинающие начинают тутже путоца что тако поток ввода и что такое поток
                                                                                                                                                                                                                                                                          //! вывода(cin/cout) ) это тоже ИМХО...
                                                                                                                                                                                                                                                                          std::cout << "i = " << i << endl;

                                                                                                                                                                                                                                                                        То я выберу именно ее, а не ту которая тупо что то там про основные правила гласит...
                                                                                                                                                                                                                                                                        И еще я незнаю конечно как остальные, но мне както тяжко тянуть кабылу за хвост, лучше сразу же расказать про такую волшебнуюу переменную std::cin, ибо как тока начинающий научица что то выводить в консоль ему тутже захочеться что то ввести в нее :wub: ...
                                                                                                                                                                                                                                                                        Сообщение отредактировано: KILLER -
                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                          Flex Ferrum, как по мне этот бы абзац я бы убрал нафик и не вспоминал о далеком прошлом, аргументы такие(все высказаное ниже ИМХО):
                                                                                                                                                                                                                                                                          1) Не нужно тревожить старое, лучше в качестве эдаково вступления расказать чем С/С++ багат, чем беден(Правда вот не сформулирую с чего начать)
                                                                                                                                                                                                                                                                          2) Кто будет читать, я уверен просто пролетит этот абзац глазами даще не поняв сути написанного, т.к. новичок ищет готовые примеры чтобы поимпровизировать...
                                                                                                                                                                                                                                                                          Аргументы такие: мало кого интересует что там научились компьютеры за последние 50 лет, сейчас больше интересует что они могут, и как этим пользоваться...

                                                                                                                                                                                                                                                                          Ну, тут действительно - кому как. Мне (как и kanes'у) нравится некоторое количество "лирики" в изложении.

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

                                                                                                                                                                                                                                                                          Ээээ...
                                                                                                                                                                                                                                                                          1. До переменных "мы" еще не дошли. Это будет в следующей главе.
                                                                                                                                                                                                                                                                          2. Вообщем то, я специально выбрал такой стиль изложения (где-то я его описывал). В каждой существенной главе формулируется какая-то задача и решается "по шагам".
                                                                                                                                                                                                                                                                          3. Более подходящего места для описания базовых арифметических операций мне пока не видится. Дальше будет уже о другом.

                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                          Далее, по себе знаю как плохо писать программу под консоль которая при выполнении тут же пролетает и ниче не видать что вообще она показала нам?, я думаю можно оговориться в первых главах что мол есть такая функция getch() или еще как то там, она задерживает выполнение программы до нажатия эникея :), чтобы новичок мог видеть плоды своих трудов...

                                                                                                                                                                                                                                                                          Последние несколько лет я с такой проблемой не сталкивался. ;)

                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                          Уж больно по професиональному написано, не все же в универе учаться, есть и такие которые самоучки и никто им не объяснил что такое "свойства коммутативности" и вообще что такое "коммутативность", тут лучше простыми словами обойтись.

                                                                                                                                                                                                                                                                          При переносе в вики по этим понятиям расставил ссылки на википедию.

                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                          Лучше всего тут привести конкретное задание, и при этом чтобы оно бюыло сложнее чем описано в теме, ну например:
                                                                                                                                                                                                                                                                          1)Напишите программу, которая выводит выше полное имя, фамилия, отчество на отдельной строке(оператор endl использовался в примере, но про него ничего не было сказано, и это хорошо начинающий будет импровизировать и понимать что куда и как)
                                                                                                                                                                                                                                                                          2) Напишите программу, которая вычисляет факториал числа 4(можно для наглядности привести формулу вычесления факториала)
                                                                                                                                                                                                                                                                          ну и т.д.

                                                                                                                                                                                                                                                                          Предлагай! У меня фантазии не хватает. :)
                                                                                                                                                                                                                                                                            может быть уже кто-то этот вопрос подымал, но все же: почему раздел "Основы управления памятью" стоит почти в самом конце, а до этого, как я понял, не будет ни слова про указатели и вообще динамическую память? имхо это неправильно
                                                                                                                                                                                                                                                                            Сообщение отредактировано: miksayer -
                                                                                                                                                                                                                                                                              Цитата miksayer @
                                                                                                                                                                                                                                                                              может быть уже кто-то этот вопрос подымал, но все же: почему раздел "Основы управления памятью" стоит почти в самом конце, а до этого, как я понял, не будет ни слова про указатели и вообще динамическую память? имхо это неправильно

                                                                                                                                                                                                                                                                              Аргументируй.
                                                                                                                                                                                                                                                                                Ну например, про каскадное использование <<
                                                                                                                                                                                                                                                                                Допустим: Выведите выша любимое стихотворение используя только один cout.

                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                Или допустим арифметические операции, но с рациональными дробями в виде a/b их сначала нужно ввести правильно, а потом уже выполнить операцию
                                                                                                                                                                                                                                                                                  Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                  Аргументируй.

                                                                                                                                                                                                                                                                                  во-первых, это очень важно :) , во-вторых, практически в каждой более-менее прикладной программе они(указатели) используются, в-третьих, имхо нужно сразу читателю объяснить, чем отличается выделение памяти на стеке и в куче(сам лично по-началу часто наступал на эти грабли)
                                                                                                                                                                                                                                                                                    Цитата miksayer @
                                                                                                                                                                                                                                                                                    имхо нужно сразу читателю объяснить, чем отличается выделение памяти на стеке и в куче(сам лично по-началу часто наступал на эти грабли)

                                                                                                                                                                                                                                                                                    miksayer, ну при этом указатели можно и не привлекать пока, ибо в самом начале про распределение динамической памяти говорить слишком круто))))
                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                      1. До переменных "мы" еще не дошли. Это будет в следующей главе.

                                                                                                                                                                                                                                                                                      Вот плохо это, до переменных "мы" еще должны были дойти после лирического вступления, так как оно как раз и описывать память компьютера шо куды, как оно организуеться, а заодно можно было намекнуть и про переменные в первой же главе, пускай оно будет вначале не понятно - это да, но во второй главе зато будет объеснение что такое переменная, что такое число, как и т.д.
                                                                                                                                                                                                                                                                                      Flex Ferrum, не надо Никонова брать в пример читателя, это исключение из правил...
                                                                                                                                                                                                                                                                                      Просто с такими темпами "мы" до классов дойдем к главе 15 :)
                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                      3. Более подходящего места для описания базовых арифметических операций мне пока не видится. Дальше будет уже о другом.

                                                                                                                                                                                                                                                                                      Вот в том то и дело что не нужно расказывать об сразу всех и темболее приводить таблицу умножения состоящюю из 10
                                                                                                                                                                                                                                                                                      std::cout << чото там << тыры пыры;
                                                                                                                                                                                                                                                                                      достаточно один пример привести и сказать мол попробуйте знак умножения поменять на другие арифметические операции которые вы знаете, заодно и начинающему станет ясно что можно, а что нельзя...
                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                      Последние несколько лет я с такой проблемой не сталкивался.

                                                                                                                                                                                                                                                                                      Я уж тоже забыл такое, но посмотри на ситуацию глазами начинающего, тем более под консоль, он хочет увидеть(возможно показать свои достижения другу, девушке, маме...) но не может ни как прервать выполнение программы чтобы поглядеть что она ему вывела, это ужасно, особенно для начинающего, он тутже начинает паниковать и лезти на форум с вапросами :D...
                                                                                                                                                                                                                                                                                      Пускай это будет описано в нейтральной форме, даже в паскале есть ReadLn который задерживает выполнение программы(а если начинающий перешол с паскаля, то его в первую очередь будет интересовать подобная функция)

                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                      При переносе в вики по этим понятиям расставил ссылки на википедию.

                                                                                                                                                                                                                                                                                      Ну опять же, кому нужно лезти куда то таа на вики читать мудренные слова, проще когда написано ясно а не когда есть ссылки мол кури код :)
                                                                                                                                                                                                                                                                                      Хотя с другой стороны это учит больше...
                                                                                                                                                                                                                                                                                      Сообщение отредактировано: KILLER -
                                                                                                                                                                                                                                                                                        Цитата KILLER @
                                                                                                                                                                                                                                                                                        Ну опять же, кому нужно лезти куда то таа на вики читать мудренные слова, проще когда написано ясно а не когда есть ссылки мол кури код :)
                                                                                                                                                                                                                                                                                        Хотя с другой стороны это учит больше...

                                                                                                                                                                                                                                                                                        ну уж совсем на первоклассников-то тоже не стоит ориентироваться :D
                                                                                                                                                                                                                                                                                          Цитата kanes @
                                                                                                                                                                                                                                                                                          ну уж совсем на первоклассников-то тоже не стоит ориентироваться

                                                                                                                                                                                                                                                                                          Так вот по изложению матиериала както кажеться что все описываеться для первокласника, раз уж писать идеально, значит нужно както либо делать сноски(что более приемлемо), либо же пояснять написанное примерами, я уверен что добрый процент даже закончивших ВУЗ не знает что такое комутативность
                                                                                                                                                                                                                                                                                            Цитата kanes @
                                                                                                                                                                                                                                                                                            miksayer, ну при этом указатели можно и не привлекать пока, ибо в самом начале про распределение динамической памяти говорить слишком круто))))

                                                                                                                                                                                                                                                                                            в самом конце тоже об этом говорить не стоит. Где-нибудь в середине - в самый раз
                                                                                                                                                                                                                                                                                              Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                              Предлагай! У меня фантазии не хватает.

                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                              1)Напишите программу - проверяющую число на четность.

                                                                                                                                                                                                                                                                                              2)Дано натуральное число а = 101. Напишите программу, определяющую количество цифр в этом числе, сумму его цифр, выводящую на экран первую и последнюю цифру через два пробела. (арифметические операции мы ведь прошли?)

                                                                                                                                                                                                                                                                                              3)Известно, что 1 дюйм равен 2.54 см. Разработать приложение, переводящие дюймы в сантиметры и наооборот. Диалог с пользователем реализовать через систему меню.

                                                                                                                                                                                                                                                                                              4)Найти сумму всех целых чисел в диапазоне, указанном пользователе.

                                                                                                                                                                                                                                                                                              5)Разработать программу, которая выводит на экран таблицу умножения.(возможно это уже на циклы задача)

                                                                                                                                                                                                                                                                                              6)Дано натуральное число n. Написать программу, которая вычисляет факториал неотрицательных целых чисел n (т.е. число целое и больше 0). Формула вычисления факториала приведена ниже.

                                                                                                                                                                                                                                                                                              n! = 1*2*3*....*n, (формула вычисления факториала числа n)
                                                                                                                                                                                                                                                                                              0! = 1 (факториал 0 равен 1 (по определению факториала))
                                                                                                                                                                                                                                                                                              (Ну тут однозначно на циклы)

                                                                                                                                                                                                                                                                                              Вот например такого плана задания....
                                                                                                                                                                                                                                                                                              Сообщение отредактировано: KILLER -
                                                                                                                                                                                                                                                                                                Оставляя за скобками насилие над стилистикой, орфографией и пунктуацией, стоит отметить, что представления автора о формуле прототипа main() вполне исчерпывающе описывают как теоретическую, так и практическую ценность работы и открывают двери для дельнейшей широкой научной дискуссии по проблемам светского образования в России.
                                                                                                                                                                                                                                                                                                  Цитата hummy @
                                                                                                                                                                                                                                                                                                  Оставляя за скобками насилие над стилистикой, орфографией и пунктуацией,

                                                                                                                                                                                                                                                                                                  это черновые варианты, ты в своем посте 4 запятые пропустил и чо дальше то ?
                                                                                                                                                                                                                                                                                                  Цитата hummy @
                                                                                                                                                                                                                                                                                                  стоит отметить, что представления автора о формуле прототипа main() вполне исчерпывающе описывают как теоретическую, так и практическую ценность работы

                                                                                                                                                                                                                                                                                                  а что тебе в прототипе main не понравилось ? или ты предлагаешь с первой же главы пояснить что такое функция, скока параметров она может принимать, и как ее вообще юзать ? вроде это уже оговаривалось в другой теме, не стоит забегать в перед...
                                                                                                                                                                                                                                                                                                  Цитата hummy @
                                                                                                                                                                                                                                                                                                  и открывают двери для дельнейшей широкой научной дискуссии по проблемам светского образования в России.

                                                                                                                                                                                                                                                                                                  Что они открыты, что они закрыты,(лучше бы они закрыты, те двери были бы) ничего от этого не меняеться...
                                                                                                                                                                                                                                                                                                    Цитата KILLER @
                                                                                                                                                                                                                                                                                                    6)Дано натуральное число n. Написать программу, которая вычисляет факториал неотрицательных целых чисел n (т.е. число целое и больше 0). Формула вычисления факториала приведена ниже.

                                                                                                                                                                                                                                                                                                    n! = 1*2*3*....*n, (формула вычисления факториала числа n)
                                                                                                                                                                                                                                                                                                    0! = 1 (факториал 0 равен 1 (по определению факториала))
                                                                                                                                                                                                                                                                                                    (Ну тут однозначно на циклы)

                                                                                                                                                                                                                                                                                                    почему "однозначно на циклы"? факториал - классический пример рекурсии

                                                                                                                                                                                                                                                                                                    Цитата KILLER @
                                                                                                                                                                                                                                                                                                    5)Разработать программу, которая выводит на экран таблицу умножения.(возможно это уже на циклы задача)

                                                                                                                                                                                                                                                                                                    а задачу № 4 можно решить без циклов? разве что наверное через формулу суммы арифметической прогресии(была такая вроде)?
                                                                                                                                                                                                                                                                                                      Нет, я не пропустил ни одной запятой и ничего подобного не предлагаю.
                                                                                                                                                                                                                                                                                                        Цитата miksayer @
                                                                                                                                                                                                                                                                                                        почему "однозначно на циклы"? факториал - классический пример рекурсии

                                                                                                                                                                                                                                                                                                        ну когда до рекурсии дойдет дело, тогда эту задачу можно перефразировать вставив ключевую фразу "Реализовать с помощью рекурсии"
                                                                                                                                                                                                                                                                                                        А вообще эта задача на циклах делаеться без напряга
                                                                                                                                                                                                                                                                                                        Цитата miksayer @
                                                                                                                                                                                                                                                                                                        а задачу № 4 можно решить без циклов? разве что наверное через формулу суммы арифметической прогресии(была такая вроде)

                                                                                                                                                                                                                                                                                                        Ну кто знает, может то что написано в скобках, кого то подстегнет на неимоверный подвиг, и он умудрица в пару строк написать без циклов таблицу умножения :D

                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                        Цитата hummy @
                                                                                                                                                                                                                                                                                                        ет, я не пропустил ни одной запятой

                                                                                                                                                                                                                                                                                                        букварь тебе в руки, и бегом учить пунктуацию руского языка :)
                                                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                                                          ну когда до рекурсии дойдет дело, тогда эту задачу можно перефразировать вставив ключевую фразу "Реализовать с помощью рекурсии"
                                                                                                                                                                                                                                                                                                          А вообще эта задача на циклах делаеться без напряга

                                                                                                                                                                                                                                                                                                          ну, не знаю, меня когда учили, давали на циклы посчитать какое-нибудь выражение со знаком суммы(мне очень стыдно, но вылетело из головы, как это в математике называется)
                                                                                                                                                                                                                                                                                                          а вот на рекурсию давали факториал(точнее на нем учили, а задачи естественно посложнее были)
                                                                                                                                                                                                                                                                                                          хотя, конечно, никто не отрицает, что можно факториал посчитать через циклы

                                                                                                                                                                                                                                                                                                          Цитата KILLER @
                                                                                                                                                                                                                                                                                                          Ну кто знает, может то что написано в скобках, кого то подстегнет на неимоверный подвиг, и он умудрица в пару строк написать без циклов таблицу умножения

                                                                                                                                                                                                                                                                                                          я про задачу № 4 писал, а не про таблицу умножения
                                                                                                                                                                                                                                                                                                          Сообщение отредактировано: miksayer -
                                                                                                                                                                                                                                                                                                            Цитата miksayer @
                                                                                                                                                                                                                                                                                                            факториал - классический пример рекурсии

                                                                                                                                                                                                                                                                                                            это уж точно не надо в первую главу помещать
                                                                                                                                                                                                                                                                                                              Цитата kanes @
                                                                                                                                                                                                                                                                                                              Ну например, про каскадное использование <<
                                                                                                                                                                                                                                                                                                              Допустим: Выведите выша любимое стихотворение используя только один cout.

                                                                                                                                                                                                                                                                                                              Хм. Интересный вариант.

                                                                                                                                                                                                                                                                                                              Цитата kanes @
                                                                                                                                                                                                                                                                                                              Или допустим арифметические операции, но с рациональными дробями в виде a/b их сначала нужно ввести правильно, а потом уже выполнить операцию Быстрая цитата

                                                                                                                                                                                                                                                                                                              Не совсем понял. Поясни - как это можно сделать без привлечения переменных?

                                                                                                                                                                                                                                                                                                              Цитата miksayer @
                                                                                                                                                                                                                                                                                                              во-первых, это очень важно :) , во-вторых, практически в каждой более-менее прикладной программе они(указатели) используются, в-третьих, имхо нужно сразу читателю объяснить, чем отличается выделение памяти на стеке и в куче(сам лично по-началу часто наступал на эти грабли)

                                                                                                                                                                                                                                                                                                              То, что важно - не спорю. Другое дело - какой подход. Я планирую сначала рассказывать об "умном" управлении памятью, а потом уже про особенности работы с "дикими" указателями.

                                                                                                                                                                                                                                                                                                              Цитата KILLER @
                                                                                                                                                                                                                                                                                                              Вот плохо это, до переменных "мы" еще должны были дойти после лирического вступления, так как оно как раз и описывать память компьютера шо куды, как оно организуеться, а заодно можно было намекнуть и про переменные в первой же главе, пускай оно будет вначале не понятно - это да, но во второй главе зато будет объеснение что такое переменная, что такое число, как и т.д.

                                                                                                                                                                                                                                                                                                              Этому будет посвящена следующая глава.

                                                                                                                                                                                                                                                                                                              Цитата KILLER @
                                                                                                                                                                                                                                                                                                              1)Напишите программу - проверяющую число на четность.

                                                                                                                                                                                                                                                                                                              2)Дано натуральное число а = 101. Напишите программу, определяющую количество цифр в этом числе, сумму его цифр, выводящую на экран первую и последнюю цифру через два пробела. (арифметические операции мы ведь прошли?)

                                                                                                                                                                                                                                                                                                              3)Известно, что 1 дюйм равен 2.54 см. Разработать приложение, переводящие дюймы в сантиметры и наооборот. Диалог с пользователем реализовать через систему меню.

                                                                                                                                                                                                                                                                                                              4)Найти сумму всех целых чисел в диапазоне, указанном пользователе.

                                                                                                                                                                                                                                                                                                              5)Разработать программу, которая выводит на экран таблицу умножения.(возможно это уже на циклы задача)

                                                                                                                                                                                                                                                                                                              6)Дано натуральное число n. Написать программу, которая вычисляет факториал неотрицательных целых чисел n (т.е. число целое и больше 0). Формула вычисления факториала приведена ниже.

                                                                                                                                                                                                                                                                                                              n! = 1*2*3*....*n, (формула вычисления факториала числа n)
                                                                                                                                                                                                                                                                                                              0! = 1 (факториал 0 равен 1 (по определению факториала))
                                                                                                                                                                                                                                                                                                              (Ну тут однозначно на циклы)

                                                                                                                                                                                                                                                                                                              При случае - обязательно использую.

                                                                                                                                                                                                                                                                                                              Цитата hummy @
                                                                                                                                                                                                                                                                                                              Оставляя за скобками насилие над стилистикой, орфографией и пунктуацией, стоит отметить, что представления автора о формуле прототипа main() вполне исчерпывающе описывают как теоретическую, так и практическую ценность работы и открывают двери для дельнейшей широкой научной дискуссии по проблемам светского образования в России.

                                                                                                                                                                                                                                                                                                              Аффтору сего комментария читать раздел стандарта 3.6.1 [basic.start.main], пункт 2. В случае отсутствия оного приведу выдержку:
                                                                                                                                                                                                                                                                                                              Цитата

                                                                                                                                                                                                                                                                                                              An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
                                                                                                                                                                                                                                                                                                              int main() { /* ... */ }
                                                                                                                                                                                                                                                                                                              and
                                                                                                                                                                                                                                                                                                              int main(int argc, char* argv[]) { /* ... */ }

                                                                                                                                                                                                                                                                                                              Впрочем, подозреваю, у hummy другие... любимые авторы. И стандарт в данном случае - не авторитет. Ну, тут уж ничего не поделаешь.
                                                                                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                Не совсем понял. Поясни - как это можно сделать без привлечения переменных?

                                                                                                                                                                                                                                                                                                                никак, я как-то не обратил внимания на отсутствия переменных, так что эту задачу откладываем до следующих разделов
                                                                                                                                                                                                                                                                                                                  Да насчет задач, в принципе их можно и в отдельный раздел поместить и разложить по главам, а в каждой главе ссылаться на них.
                                                                                                                                                                                                                                                                                                                  В конце главы: "Задачи на тему" или "Задания для закрепления"

                                                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                                                  Да еще такой вопрос, а почему подсветка цпп-кода на форуме и в Вики разная?
                                                                                                                                                                                                                                                                                                                    Цитата kanes @
                                                                                                                                                                                                                                                                                                                    Да еще такой вопрос, а почему подсветка цпп-кода на форуме и в Вики разная?

                                                                                                                                                                                                                                                                                                                    Потому что движки подсветки разные.
                                                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                      То, что важно - не спорю. Другое дело - какой подход. Я планирую сначала рассказывать об "умном" управлении памятью, а потом уже про особенности работы с "дикими" указателями.

                                                                                                                                                                                                                                                                                                                      ну, не знаю, все равно перед тем, как использовать умные указатели нужно представлять, как работают обычные
                                                                                                                                                                                                                                                                                                                        Цитата miksayer @
                                                                                                                                                                                                                                                                                                                        ну, не знаю, все равно перед тем, как использовать умные указатели нужно представлять, как работают обычные

                                                                                                                                                                                                                                                                                                                        +1
                                                                                                                                                                                                                                                                                                                        начинать сразу с умных, как-то странно, Флекс, какие аргументы для такого подхода?
                                                                                                                                                                                                                                                                                                                          Ах да! У нас же есть Стандарт. В свете этого факта как теоретическая, так и практическая ценность работы только возрастает! Наверное, помимо предложенного авангардизма, по Стандарту можно ещё, например, не указывать тип возвращаемого значения. То-то будет чтиво для Человеков-Стандартов с полным соответствие логике Компилятора. Хотя с другой стороны - нафиг нам Стандарт. У нас же есть Компилятор! Он если чё подскажет. Да и вообще это всё неважно. Задача была сформулирована Человеком-Стандартом ясно - вывести на экран ЭВМ строчку "Хэллоу, ворлд!" Зачем вся эта ересь об эфемерных параметрах каких-то мифических функций? Ну и что, что это была функция? Ну и что, что она перестала быть функцией и стала процедурой! Ну и что, что мы учим детей не плюсам а паскалю! Печатает же? Вот и сё. :yes:
                                                                                                                                                                                                                                                                                                                            Цитата kanes @
                                                                                                                                                                                                                                                                                                                            начинать сразу с умных, как-то странно, Флекс, какие аргументы для такого подхода?

                                                                                                                                                                                                                                                                                                                            Аргумент простой - надо научить, как правильно. А как неправильно - само получится. :) В данном случае я вспоминаю свой собственный путь - от "диких" указателей, утечек памяти, через Элджера и собственной реализации смарт-указателей к shared_ptr'ам. Было много шишек и много мыслей типа "если бы я про это знал раньше..." :wall:
                                                                                                                                                                                                                                                                                                                            Сейчас индустрия разработки движется к тому что управление памятью и ресурсами становится максимально автоматизированным. И C++ позволяет достичь в этом максимальной гибкости (есть возможность сравнить, так сказать). Так вот - отсюда и желание: привить изначально правильный подход к управлению памятью в частности и ресурсами вообще. Посредством RAII. Т. е. чтобы у прочитавшего руки в первую очередь тянулись к shared/scoped_ptr'у, vector'у и т. п. И только в крайнем случае - к "диким" версиям указателей. С детальным объяснением - когда и что лучше применять. Сам понимаешь - тут есть много тонких аспектов, о которых следует знать сразу. Тем более, что новый стандарт включает все это добро в стандартную библиотеку.

                                                                                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                                                                                            hummy, ты вообще о чем? Есть что сказать по теме, конкретно и аргументировано - говори. Если есть только эмоции, то лучше отойди в сторонку.

                                                                                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                                                                                            Цитата hummy @
                                                                                                                                                                                                                                                                                                                            по Стандарту можно ещё, например, не указывать тип возвращаемого значения.

                                                                                                                                                                                                                                                                                                                            Нельзя. Раздел C.1.5, clause 7, подпункт 7.1.6 "Banned implicit int"
                                                                                                                                                                                                                                                                                                                              Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                              Аргумент простой - надо научить, как правильно. А как неправильно - само получится. В данном случае я вспоминаю свой собственный путь - от "диких" указателей, утечек памяти, через Элджера и собственной реализации смарт-указателей к shared_ptr'ам. Было много шишек и много мыслей типа "если бы я про это знал раньше..."
                                                                                                                                                                                                                                                                                                                              Сейчас индустрия разработки движется к тому что управление памятью и ресурсами становится максимально автоматизированным. И C++ позволяет достичь в этом максимальной гибкости (есть возможность сравнить, так сказать). Так вот - отсюда и желание: привить изначально правильный подход к управлению памятью в частности и ресурсами вообще. Посредством RAII. Т. е. чтобы у прочитавшего руки в первую очередь тянулись к shared/scoped_ptr'у, vector'у и т. п. И только в крайнем случае - к "диким" версиям указателей. С детальным объяснением - когда и что лучше применять. Сам понимаешь - тут есть много тонких аспектов, о которых следует знать сразу. Тем более, что новый стандарт включает все это добро в стандартную библиотеку.

                                                                                                                                                                                                                                                                                                                              может, ты и прав, но все равно лучше сначала выделить хотя бы 2-3 абзаца для обычных указателей
                                                                                                                                                                                                                                                                                                                                Цитата miksayer @
                                                                                                                                                                                                                                                                                                                                может, ты и прав, но все равно лучше сначала выделить хотя бы 2-3 абзаца для обычных указателей

                                                                                                                                                                                                                                                                                                                                Тут лучше так (на мой взгляд). Выделить пару абзацев про доступные программисту ресурсы вообще (и память в том числе), и уже от этого плясать. Т. е. представить проблему (незакрытые хендлы, неосвобожденная память, сокеты и прочее). Просто чтобы определенная стройность была. А то, значит, при работе с файлами мы сразу обертки используем (типа fstream и т. п.), которые позволяют нам не думать особо о том, чтобы вовремя закрыть файл, а с памятью - ручное слежение за освобождением. Ни к чему это. Сейчас (в смысле на современном этапе развития).

                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                Просто представь себе, что когда хочешь рассказать про память - ты рассказываешь про файлы. Будешь ты уделять "пару абзацев" функциям типа (f)open/close/read/write, хендлам, FILE*, или сразу будешь "толкать" if/ofstream, и т. п.?

                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                А про указатели все равно рассказывать придется (действительно, одна из самых сложных концепций в C++), но не в контексте управления памятью, а вообще.
                                                                                                                                                                                                                                                                                                                                  Flex Ferrum, тогда еще вопрос: ты же собираешься рассказывать о функциях раньше, чем о динамической памяти? как тогда читатель будет понимать без понимания понятия указатель такую распространенную конструкцию а-ля:
                                                                                                                                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                    void foo(int * x)
                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                    }

                                                                                                                                                                                                                                                                                                                                  т.е. я о способах передачи параметров говорю :)
                                                                                                                                                                                                                                                                                                                                    Цитата miksayer @
                                                                                                                                                                                                                                                                                                                                    Flex Ferrum, тогда еще вопрос: ты же собираешься рассказывать о функциях раньше, чем о динамической памяти? как тогда читатель будет понимать без понимания понятия указатель такую распространенную конструкцию а-ля:

                                                                                                                                                                                                                                                                                                                                    Я придумаю что-нибудь. Возможно, что и самой проблемы не возникнет.
                                                                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                      Я придумаю что-нибудь. Возможно, что и самой проблемы не возникнет.

                                                                                                                                                                                                                                                                                                                                      в принципе в главе о функциях можно минимально указатели затронуть(только в контексте, описанном мною выше) и написать что-то вроде: "Подробнее об указателях и работе с динамической памятью можно узнать в такой-то главе"
                                                                                                                                                                                                                                                                                                                                        "Пролог" главы 2.III.b "Память, переменные и типы":
                                                                                                                                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                                                                                                                                        Научив компьютеры выполнять простейшие арифметические операции самое время озаботиться вопросом сохранения результатов таких вычислений. Цель проста − при увеличении сложности вычислений возникает необходимость разбивать их на этапы и, как следствие, сохранение промежуточных результатов уже прошедших этапов. Кроме того, было бы здорово научится где-то сохранять входные данные для вычислений. Ведь в противном случае при изменении входных данных придется переписывать и перекомпилировать всю программу (попробуйте получить результат умножения, например, числа 232 на 335 в примере программы из предыдущей главы без его модификации и перекомпиляции). Для решения этой задачи в компьютерах существуют различные виды памяти. Начиная от регистров процессора (наиболее быстрый и наименее емкий вид памяти), в которых сохраняются результаты работы ряда машинных инструкций, до огромных дисковых массивов, способных хранить терабайты и петабайты данных. Первым моделям вычислительных машин вполне хватало регистровой памяти − программы писались непосредственно на ассемблере, и у программистов была возможность выстраивать их таким образом, чтобы все данные (входные, промежуточные и выходные) умещались в набор регистров процессора. Но с увеличением сложности вычислений и объемов данных, регистров процессора перестало хватать. Тогда данные начали хранить в так называемой "оперативной" памяти. Доступ к ней обычно более медленный, чем к регистрам, но и объем у нее больше (значительно больше). При всех своих достоинствах, у этой памяти есть один существенный "недостаток" − с выключением электропитания данные в ней пропадают. Для его устранения были придуманы различные способы сохранения данных на внешних (энергонезависимых) носителях. Таких как перфокарты, перфоленты, магнитные ленты, жесткие диски, различные оптические диски, магнитооптические диски, флеш-накопители, твердотельные диски, и прочее, прочее, прочее. Но, опять же, при всевозможных достоинствах у всех этих накопителей есть пара "недостатков": большое время доступа к данным и сложные протоколы обмена, которые не позволяют использовать их напрямую на уровне процессорных команд.
                                                                                                                                                                                                                                                                                                                                        Из всего вышесказанного становится очевидным, что наиболее оптимальное место хранения данных программы (выходных, промежуточных, выходных) − это оперативная память. В регистрах процессора их сохранять не разумно − их слишком мало для хранения сколь-нибудь большого объема данных. На внешних носителях − тоже не разумно ввиду слишком низкой скорости и слишком высокой сложности доступа к ним. Остается только оперативная память, являющаяся разумным компромиссом.
                                                                                                                                                                                                                                                                                                                                        Не вдаваясь в особенности современных программно-аппаратных архитектур, оперативную память, доступную работающей программе, можно представить как множество ячеек, каждая из которых хранит один байт данных. Байт − это минимально-возможная единица хранения на большинстве современных аппаратных платформах, способная хранить число в диапазоне от 0 до 255 (включительно). Каждая ячейка оперативной памяти имеет свой уникальный адрес, а совокупность всех адресуемых программой ячеек называется "адресным пространством". Пространство это может иметь достаточно сложную структуру. Часть его занимает исполняемый код программы, часть − код различных библиотек, необходимых для работы программы, часть − данные, используемые программой в своей работе, часть − в принципе не доступна для использования. По этому, в общем случае, при обмене данными с оперативной памятью, доступной в данный конкретный момент работающей программе, результат может быть предсказуем только в том случае, если программист точно знает − что именно хранится в тех ячейках памяти, с которыми производится обмен. В общем же случае при обращению к произвольно выбранной ячейке результат будет непредсказуемым.
                                                                                                                                                                                                                                                                                                                                        Если бы программа писалась непосредственно на ассемблере, то для обмена данными с ячейкой памяти использовался адрес этой ячейки. Этот адрес мог бы быть указан непосредственно в машинной команде, или предварительно сохранен в регистре процессора, или в другой ячейки (или ячейках) памяти, но в том или ином виде он бы фигурировал в тексте программы. В программе же на C++ адресация памяти осуществляется несколько иначе.

                                                                                                                                                                                                                                                                                                                                        Это, так сказать, альфа-вариант. После этого пролога предполагается собственно формулировка задачи "на главу": перемножение двух введенных чисел и ее поэтапный разбор.
                                                                                                                                                                                                                                                                                                                                        Сам понимаю, что получилось несколько коряво, по этому жду предложений по улучшению.

                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                        Есть предчувствие, что с такого "захода" концепцию указателей можно будет дать "на раз".
                                                                                                                                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                          терабайты и петабайты данных

                                                                                                                                                                                                                                                                                                                                          Что за петобайты ? Может я конечно оцтал от прогресса, но не слышал такого термина, это 1024 терабайта ?

                                                                                                                                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                          По этому, в общем случае, при обмене данными с оперативной памятью, доступной в данный конкретный момент работающей программе, результат может быть предсказуем только в том случае, если программист точно знает − что именно хранится в тех ячейках памяти, с которыми производится обмен

                                                                                                                                                                                                                                                                                                                                          Это уже пахнет жоским дебагом, может лучше не пугать сразу ? а оставить на патом :)

                                                                                                                                                                                                                                                                                                                                          А так в принципе как по мне так очень познавательно получилось, но мне кажеться что это нужно гдето в самом начале вставить, эдакое вступление + предыдущая глава, они я думаю дополнят друг друга...
                                                                                                                                                                                                                                                                                                                                            Цитата KILLER @
                                                                                                                                                                                                                                                                                                                                            это 1024 терабайта ?

                                                                                                                                                                                                                                                                                                                                            да, ознакомься, если интересно

                                                                                                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                                                                                                            кстати, вообще правильней говорить, как здесь, как оказалось(сам не знал) :)
                                                                                                                                                                                                                                                                                                                                              Цитата miksayer @
                                                                                                                                                                                                                                                                                                                                              и написать что-то вроде: "Подробнее об указателях и работе с динамической памятью можно узнать в такой-то главе"
                                                                                                                                                                                                                                                                                                                                              Лучше описать тривиальный случай и приписать, что "указатели могут использоваться и для других целей, которые будут описаны в главе такой-то".
                                                                                                                                                                                                                                                                                                                                                Альтернативный вариант начала главы про память и переменные:
                                                                                                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                                                                                                Выполняя задания из предыдущей главы вы, должно быть, заметили, что в случае изменения начальных требований к программе (даже таких несущественных, как другое число, для которого должна выводиться таблица умножения), программу приходится модифицировать во многих местах. Даже если вы пишите программу для себя (а уж, тем более, если для кого-то), необходимость прямой модификации текста программы и последующей перекомпиляции для работы с новыми данными, делает такую программу очень сложной в использовании. Более того, у человека, для которого вы пишите программу, могут элементарно отсутствовать необходимые средства, с помощью которых он может внести нужные изменения в текст и, таким образом, получить новую версию программы. Или он может не знать языка, на котором написана программа. В любом случае пользоваться такой программой будет сложно.

                                                                                                                                                                                                                                                                                                                                                На первых вычислительных машинах, вполне возможно, так и делали − при изменении набора входных данных или логики самой программы она переписывалась. Но с ростом сложности программ, объема входных данных в целях уменьшения трудоемкости всего процесса возникла необходимость где-то сохранять начальные и промежуточные данные, а также результаты работы программы. Для решения этой задачи в компьютерах существуют различные виды памяти. Начиная от регистров процессора (наиболее быстрый и наименее емкий вид памяти), в которых сохраняются результаты работы ряда машинных инструкций, до огромных дисковых массивов, способных хранить терабайты и петабайты данных. Первым моделям вычислительных машин вполне хватало регистровой памяти − программы писались непосредственно на ассемблере, и у программистов была возможность выстраивать их таким образом, чтобы все данные (входные, промежуточные и выходные) умещались в набор регистров процессора. Но с увеличением сложности вычислений и объемов данных, регистров процессора перестало хватать. Тогда данные начали хранить в так называемой "оперативной" памяти. Доступ к ней обычно более медленный, чем к регистрам, но и объем у нее больше (значительно больше). При всех своих достоинствах, у этой памяти есть один существенный "недостаток" − с выключением электропитания данные в ней пропадают....
                                                                                                                                                                                                                                                                                                                                                  Очень распространённая ошибка в книшках по Цэ-Плас-Плас касаемо переменных-ссылок.

                                                                                                                                                                                                                                                                                                                                                  Пишуть, что под них не выделяется память и что они просто служат синонимами других переменных.

                                                                                                                                                                                                                                                                                                                                                  Или ещё пишуть, что это ссылки это те же указатели, но которые всегда неявно и автоматически разыменовываются.

                                                                                                                                                                                                                                                                                                                                                  Ни то, ни другое вообще говоря не правильно
                                                                                                                                                                                                                                                                                                                                                    Цайнэ Кул, так просвети нас как правильно
                                                                                                                                                                                                                                                                                                                                                      Цайнэ Кул, так что там насчет ссылок?
                                                                                                                                                                                                                                                                                                                                                        Цитата Цайнэ Кул @
                                                                                                                                                                                                                                                                                                                                                        Пишуть, что под них не выделяется память и что они просто служат синонимами других переменных.

                                                                                                                                                                                                                                                                                                                                                        Выделяется если например переменная ссылка описана в заголовке функции. В этом случае под неё в стеке выделяется память как под указатель.

                                                                                                                                                                                                                                                                                                                                                        Цитата Цайнэ Кул @
                                                                                                                                                                                                                                                                                                                                                        Или ещё пишуть, что это ссылки это те же указатели, но которые всегда неявно и автоматически разыменовываются.

                                                                                                                                                                                                                                                                                                                                                        Да. Если переменная ссылка - локальная переменная, описанная в заголовке функции.

                                                                                                                                                                                                                                                                                                                                                        А если нет, то это просто синоним (другое имя) переменной и памяти под указатель не выделяется
                                                                                                                                                                                                                                                                                                                                                          Цайнэ Кул, не надо тут постить, пожалуйста.
                                                                                                                                                                                                                                                                                                                                                            Учебник переехал на GitHub.
                                                                                                                                                                                                                                                                                                                                                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                                                                                                                                                                            0 пользователей:


                                                                                                                                                                                                                                                                                                                                                            Рейтинг@Mail.ru
                                                                                                                                                                                                                                                                                                                                                            [ Script execution time: 0,4141 ]   [ 17 queries used ]   [ Generated: 25.04.24, 08:04 GMT ]