Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! N 9. Делаем консольную программу


Информационный Канал Subscribe.Ru

 
Школа программирования

Программирование с нуля - это совсем просто!

9) Делаем консольную программу.

Похоже, долго еще придется в начале каждого выпуска эти слова писать:

а) Вы получили НЕ первый выпуск рассылки :) То есть это занятие не первое, но начинать базовый курс вам надо с первого занятия (ну как еще написать, не знаю :).

НАЧИНАТЬ НАДО С ПЕРВОГО ЗАНЯТИЯ! С ПЕРВОГО! ПЕР-ВО-ГО!

Вот его точный адрес даже:

http://russianenterprisesolutions.com/sbo/b1.html

А вот тут все предыдущие занятия базового курса (слева там сразу все видно; номера занятий идут сверху вниз, по убыванию, от последнего выпуска к первому :) :

http://russianenterprisesolutions.com/sbo/base.htm

б) Базовый курс открыт для всех. Он публикуется в данной рассылке. Где все задания можно найти - см. пункт а)

Для вступления в него ничего делать не надо и ничего мне присылать не надо. Надо делать сам курс, и все :) Последовательно, с первого упражнения, ничего не пропуская. Если же вопрос возникает, то сначала прочтите все выпуски, особенно ответы на вопросы. Возможно, ответ там уже есть.


Делаем консольную программу.

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

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

Начнем с Delphi (СЕМЬ! :). Надо дать команду главного меню File > New > Other (Файл > Новый > Другое), и в диалоговом окне на закладке New выбрать значок Console Application (Консольное приложение).

http://russianenterprisesolutions.com/sbo/im/40.gif

После нажатия на кнопку OK экран примет следующий вид:

http://russianenterprisesolutions.com/sbo/im/41.gif

В Delphi сейчас открылось окно редактора, в котором подготавливается текст будущей программы. Видно, что это окно не пустое - в нем уже содержится некоторая информация. Этот текст был сгенерирован Delphi автоматически. Он представляет собой своеобразную заготовку, шаблон создаваемого приложения. Ничего изменять в этом тексте в принципе не надо - он соответствует готовой программе. Но мы все-таки изменим :)

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.

Удалим первую строчку, где слово program, потом где "uses SysUtils;" и еще строчку с фигурными скобками. Вот что у нас останется:

{$APPTYPE CONSOLE}

begin

end.

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

Но тем не менее пока у нас есть только исходный текст программы. Раньше у нас была схожая ситуация, когда мы работали с дизайнером. Только там был макет, заготовка, проект формы, а тут исходный текст. Сама программа (исполнимый EXE-файл) еще не существует. Чтобы преобразовать исходный текст в работоспособную Windows программу, надо обратиться к среде, чтобы она перевела этот текст в исполнимый код. Система Delphi, как мы помним, позволяет сделать это одним нажатием клавиши F9 или щелчком на кнопке Run.

Процесс перевода исходных текстов в исполнимый код называется компиляция (или трансляция), а программа, выполняющая компиляцию - компилятор (или транслятор). Компилятор вызывается оболочкой Delphi автоматически.

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

Теперь приступаем непосредственно к программированию. Сначала посмотрим на наш текущий текст из трех строчек. Первой следует

{$APPTYPE CONSOLE}

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

Далее следуют две команды

begin
и
end.

Означают они вот что: начало (begin) и конец (end). И больше ничего. Начало программы и конец программы. Начинается программа со слова begin, а завершается словом end (с точкой на конце). А между этими словами располагаются другие команды программы. Но так как пока никаких команд там нету, то и не делает эта программа ничего. Просто запускается и заканчивается. Но тем не менее работает.

А на каком языке программирования записана эта программа? Этот язык называется Паскаль (Pascal). Его компания Borland, которая Delphi сделала, совершенствовала довольно долго, он потом назывался Объектный паскаль (Object Pascal), а сейчас совсем оригинально называется: язык Delphi :) Среда программирования Delphi на Delphi. Но мне больше нравится Паскаль, я его и буду так называть.

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

Прекратить работу и ожидать от пользователя нажатия на клавишу Enter. Как только эта клавиша будет нажата, продолжить работу.

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

ReadLn;

Это сокращение от английского read line (дословно "читать линию"). Можно записать ее большими и маленькими буквами, любыми комбинациями, например READLN или readln или rEADlN. Только после нее необходимо поставить символ ";".

Важно! Все команды языка Паскаль (Delphi :) отделяются друг от друга точкой с запятой! Это правило надо крепко запомнить.

А почему тогда, вы можете спросить, begin без точки с запятой, а end вообще с одной точкой? Ну пожалуйста, можно так записать:

begin;

end.

Просто принято в Паскале, что после слова begin точки с запятой не ставится. Ведь это же начало! Ну а end - это конец программы, и чтобы подчеркнуть, что ничего дальше не будет и быть не может, ставится финальная точка! Одни исключения, правда? Ничего, скоро привыкните. Их не так много на самом деле.

Вот как теперь наша программа запишется:

{$APPTYPE CONSOLE}

begin

ReadLn;

end.

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

http://russianenterprisesolutions.com/sbo/im/42.gif

Сделайте это, программа закроется, и управление будет передано оболочке Delphi.

В следующем занятии - консольная програма на Си++ и Бейсике.


Упражнение на развитие логических способностей.

Друзья! Что же вы в каждом втором письме пишете, что не обладаете логическим мышлением? Вот про творческое почему-то никто не пишет, что не обладает. Словно каждый обладает :) Хотя о нем наверно даже и не подозревает никто, что есть такое и как работает. А только пишут, что логического нету.

Ну так развивайте! Ну а как еще? Ждать, пока само разовьется? Что вы делаете-то, чтобы его усилить? Поэтому жаловаться мне на свою слабую логику не надо :)

Задание такое. Имеются две емкости по 1 литру объемом каждая. В одной вино, в другой вода. Из первой емкости зачерпываем ложкой некоторый объем вина и переливаем в другую емкость. Затем перемешиваем вместе с водой, зачерпываем уже из второй емкости (где не чистая вода, а уже смесь) ложкой такой-же объем, переливаем обратно. Где чего теперь больше - в первой емкости воды или во второй - вина? А главное, почему?


Упражнения на развитие творческих способностей (из книги "Кем мы можем быть" П. Феруччи).

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

МАЯК

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

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

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

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

БАБОЧКА

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

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

Наконец кокон раскрывается и сквозь щель проникает луч света. Как только свет прикасается к вам, вы ощущаете внезапный прилив жизненных сил и сознаете, что можете сбросить кокон. Почувствовав, что остались без кокона, вы обнаруживаете, что вместе с ним сбросили защиту, гарантию своей безопасности и свое прошлое. Сейчас вы свободнее, чем могли когда-либо себе представить; вы красивая разноцветная бабочка. Вскоре вы сознаете, что возможности ваши безгранично расширились: вы способны летать. Вы обнаруживаете, что обитаете в неведомом вам ранее мире красок, звуков, открытого пространства. Вы чувствуете, что летите, что воздух держит вас, что вы подхвачены легким ветерком, то опускаясь вниз, то вновь взмывая вверх.

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


Вот тут:

http://www.demoscene.ru/english/demo/demo1b.php3?2004#284

можно найти демку (есть жанр такой компьютерного искусства, типа видеоролика) Obsoleet (первое место на конкурсе Assembly 2004). Правда, занимает она 15 мб, но стоит того. Это не просто красиво, а еще идея, причем вдохновляющая, словно специально для нашего курса и начинающих программистов. Компьютер нужен приличный, но очень рекомендую, не пожалеете! Сам каждый день смотрю :) Там и про Бейсик, и про Си, и про ассемблер :)


Есть такие, кто записался на какие-нибудь дополнительные курсы, а я пока задание не выслал? Напомните, пока я отлаживаю систему ведения курсантов :) Какие-то ваши заявки мог пропустить.


(c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com

Школа программирования с нуля
http://russianenterprisesolutions.com/sbo/

Все выпуски базового курса тут:
http://russianenterprisesolutions.com/sbo/base.htm

 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.prognull
Отписаться

В избранное