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

Инвестирование с нуля

  Все выпуски  

Программирование на Си и С++ с нуля 128) Делаем калькулятор


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

128) Программирование на С++: Делаем калькулятор

Несложные программы с помощью C++Builder готовятся по следующей схеме:

1. В Проектировщике готовится форма с элементами управления;

2. На языке С++ пишется программный код, который выполняет определенные действия в зависимости от действий с этими элементами. Например, к действию "нажатие на кнопку А" привязывается группа команд на языке С++, которая будет работать, когда пользователь программы нажмет на кнопку А.

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

Запустим C++Builder и дадим команду главного меню File - New - VCL Form Application (Файл - Создать - Приложение VCL). VCL - это название библиотеки Borland (набора программ и различных компонентов, из которых программы собираются как из кубиков).
Если в среде уже что-то было открыто, предварительно закроем все окна командой File - Close All (Файл - Закрыть все).

Мы находимся в Проектировщике, на экране имеется проектируемая форма будущей программы.

Все файлы, относящиеся к процессу создания конкретной программы, называются проектом. В проект входит файл с исходными текстами на С++, файл, описывающий структуру проектируемой формы, и ряд других вспомогательных файлов. Сохраним текущий проект - выполним команду File - Save All (Файл - Сохранить все).

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

Будет предложено сохранить файл с исходными текстами (по умолчанию Unit1.cpp), и файл описания проекта (по умолчанию Project1.bdsproj (в разных версиях C++Builder это расширение может несколько различаться).

Расширение .CPP - стандартное расширение для всех файлов с исходными текстами на С++.

Добавим на форму кнопку с панели инструментов (об этом рассказывалось в прошлом уроке).

Свойства любого элемента проектируемого окна настраиваются в Инспекторе объектов (Object Inspector). Он обычно вызывается поверх всех окон клавишей F11.

Он как правило располагается в левой части C++Builder и показывает свойства (набор характеристик) текущего выделенного элемента. Если щелкнуть один раз мышкой на форме, будет показан список свойств формы, если на кнопке один раз щелкнуть - выведется список свойств кнопки.

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

Еще одно важное свойство - это Caption (Заголовок). В него вводится текст, который для формы показывается в ее заголовке, а для кнопки - в виде надписи на ней самой.

Выделите на форме кнопку Button1 и введите в свойстве Инспектора объектов строку "Рассчитать" (без кавычек). Нажмите ENTER - и текст на кнопке сменится на новый.

Теперь - важно! - дважды щелкнем мышью на этой кнопке на форме. В результате C++Builder автоматически сгенерирует программный текст на С++, предназначенный для обработки события "Нажата кнопка Button1" и переключится в редактор.

В нем появится примерно такой текст:

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {

  }

Что он означает, пока разбирать не будем. Главное - понять, что в промежутке между фигурными скобками размещаются команды С++, которые будут выполнены, когда пользователь нажмет кнопку "Рассчитать".
Пока этих команд нету - их надо вводить вручную :)

Вернемся в Проектировщик. В последней версии C++Builder это можно сделать через закладку Design в нижней части окна (там же будет переход в редактор по закладке Unit1.cpp). Для этого также предназначена клавиша F12. Добавим на форму (с помощью палитры инструментов, элементы которой называются компоненты) новый элемент - поле-надпись, которое в палитре инструментов называется TLabel (компонент TLabel ). Сделайте это. Поле на форме получит название Label1 (обычно говорят, что элемент управления Label1 - это экземпляр компонента TLabel; компонент выступает в качестве шаблона, модели, по которой создаются конкретные элементы управления). Поле-надпись предназначено только для показа строки на форме.

Общий принцип - если в палитре инструментов компонент называется TXXX, то имя его представителя на форме (свойство Name) получит значение XXXN, где N принимает последовательно значения 1, 2, 3, ... Так, второе поле-надпись (компонент TLabel) получит имя Label2, а вторая кнопка - Button2 и так далее.

Свойство AutoSize (Автоподстройка размера) поля Label1 изменим (в Инспекторе объектов). По умолчанию оно равно true. Эти два значения - true и false, надо очень хорошо запомнить, они встречаются постоянно. True - это истина, да, присутствие, включено. False- ложь, нет, отсутствие, выключено.

Переведем значение свойства AutoSize в false. Таким образом мы запретили полю Label1 подстраивать свой размер под размер своего содержимого (отображаемой строки). Теперь мышкой можно изменить размер этого поля-надписи - выделим его, зажмем один из уголков и протащим в нужном направлении. Показываемое содержимое поля Label1 вводится в уже знакомом свойстве Caption. Введите для разнообразия строку "начальное значение" (без кавычек).

Вернемся в редактор - например, снова дважды щелкнем на кнопке, и очутимся в обработчике нажатия на эту кнопку. Сейчас нам необходимо записать команду, которая выведет в поле Label1 значение выражения 2+2 :)

Вот как это может быть записано:

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   Label1->Caption = FloatToStrF(

     2+2,

     ffFixed,5,2);
  }

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

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

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   Label1->Caption = FloatToStrF(2+2,ffFixed,5,2);
  }

Напомню, что мы вручную вводим лишь команду, начинающуюся с Label1... - все остальное сгенерировано автоматически и ручной правке не подлежит!

Теперь запустите программу командой F9. Если все введено без ошибок, появится окно работающей программы, нажмите кнопку Рассчитать - и в позиции, где находится поле Label1 (в итоговой программе его границы, конечно, не видны), появится значение 4,00 !

Таким образом мы подготовились к созданию калькулятора. Видно, что в этой мешанине знаков и идентификаторов (которая делает на самом деле простую вещь - рассчитывает значение 2+2, преобразует его в текстовый вид и выводит в свойство Caption поля-надписи Label1) имеется выражение 2+2. Его можно заменить на любое другое с применением обычных арифметических символов:

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

Важно! Дробные числа записываются с десятичной точкой (не запятой!). То есть Пи запишется как 3.1415927 (с точкой-разделителем после 3 , а не с запятой), и так далее.

Вы можете произвольно модифицировать выражение 2+2 - например, вместо него ввести:

5.67 + 2*0.01 - (300 / 31.345 + 10.01)

Снова перекомпилируем и запустим программу с исправленным кодом:

  Label1->Caption = FloatToStrF( 5.67 + 2*0.01 - (300 / 31.345 + 10.01),
  ffFixed,5,2);

Нажмем на кнопку, должно получиться -13,89.

Задание. Рассчитайте значения следующих выражений, которые столь сложны :) , что их пришлось рисовать:

пытаюсь подключать картинки к рассылке:

Если в ходе занятий у вас встретились проблемы (если даже вы справились успешно :), просьба, - присылайте подробные отчеты, описания проблем и успехов! Обратная связь важна для всех!
Лучшие ответы будут опубликованы в рассылке.

Если же вы не справились с заданием или не поняли урок, правило такое: читаете занятие заново с начала, как только встречается фраза, которую вы не поняли и не можете сами понять, останавливаетесь и пишете мне. Иначе дальше пойдет только запутывание.


Вдохновляющее-2.

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

Открытое письмо для всех подписчиков школы программирования.
Трижды вдохновляющее :)

Всем доброго времени суток :)
Что мне хочется сказать, вам всем?!
Если вы решили учиться и научиться программировать, то попали вы по адресу, и при вашем желании и определённом старании обязательно научитесь этому весьма интересному и очень-очень увлекательному делу.
Год назад.....хм.........или два? даже уже и не помню :)
Я, сидя дома и не зная чем бы заняться, просматривая всевозможные рассыки, совершенно случайно, повинуясь внутреннему чувству, подписалась на рассылку "Школа программирования с нуля".
На тот момент, вышел уже 19 выпуск и для меня слова: компилятор, Делфи, программирование, были какими-то нереальными и совершенно лишёнными всякого смысла. Но главное желание было и очень понравился сам стиль рассылки, вроде всё понятно и даже сложные моменты не пугали. Программу покупала в магазине, а так как для меня что Делфи, что С++ было всё одикаво ново, приходила в магазин с листочком, совершенно не понимая, что мне нужно, помню даже по буквам переписывала такие непонятные и незнакомые названия программ :)
В итоге за неделю догнала рассылку и уже на 25 занятии пошла со всеми в ногу :). Было ли сложно?! Иногда да, было, но не смотря на это, было невероятно интересно :) А сложности не пугали и даже когда что-то не получалось, не отчаивалась, а просто давала голове отдыхать. Не ждада помощи, не ждала подсказок. Хотелось всё самой и до всего докопаться. Начала заниматься в конце или в середине октября, а уже в декабре написала свою первую программу "Викторину по Питеру", конечно, просматривая сейчас код этой викторины, улыбаюсь, насколько ещё "по-детски" она была написана. Но ведь сама! но ведь сделала! ещё два месяца назад, не представляя, что это такое программирование. Помимо заданий, которые давал Сергей, старалась придумывать сама себе, свои собственные. Программки получались маленькие, но все рабочие. И главное, это приносило невероятное удовлетворение.
Работает школа, работает рассылка, главное старасться, главное хотеть и помнить, что сложного, того, чтобы невозможно было сделать, в программировании нет. :)
Если кто-то ещё сомневается :) Вот тут, при желании, можно посмотреть, чему я научилась за год по рассылке http://www.ls70.net.ru/delphi.html
Не важно, что я сейчас больше увлеклась web-программированием. Но без всякого сомнения, то, чему я научилась в школе, мне сейчас очень и очень помогает в программирование на php.
Вместе со мной, так же с нуля, начал учится программированию, теперь уже мой очень хороший знакомый, Алексей. Школу закончил, а желание знать ещё больше осталось, и сейчас, спустя год, он пишет ТАКИЕ!!!! программы! :) Посмотрите http://ansoft.net.ru/ , человек тоже учился у Сергея и тоже совершенно с нуля, более того, на тот момент, как он подписался на рассылку, ещё и трёх месяцев не прошло, как он приобрёл компьютр.
Так, что всем вам, удачи, терпения и желания. Сложив всё это, обязательно всё-всё получится.
Лена.


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

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное