Сложение двух целых чисел.

Задания на самостоятельную работу

Самостоятельная работа № Iс

Создание простейшего консольного приложения

Запишем в теле функции main () следующие две строки:

printf("Hello world!\n");

Getch();

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

Чтобы приложение заработало, его надо откомпилировать, т. е. перевести то, что мы написали текстом на языке С в машинные коды. Для этого запускается программа-компилятор. Запускается она либо нажатием клавиши <F9>, либо выполнением опции главного меню Run/Run. Если мы проделаем подобные действия, то получим картину, показанную на рис. 1.5.

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

Выберем опцию Help/C++Builder Help главного меню. Откроется окно помощи. В нем выберем вкладку Указатель и в поле 1 наберем имя неизвестной (после компиляции программы) функции printf. В поле 2 появится подсвеченная строка с именем набранной в поле 1 функции. Нажмем <Enter>. Откроется окно помощи Help, в котором приводятся сведения о функции printf, в том числе, в каком файле находится ее описание (Header file — stdio.h), и как включать этот файл в текст программного модуля (#include <stdio.h>). #include — это оператор компилятора. Он включает в текст программного модуля файл, который указан в угловых скобках. Таким же образом с помощью раздела Help найдем, что для неизвестной функции getch() к программному модулю следует подключить строку #indude <conio.h>. После этого текст нашей первой программы будет выглядеть, как на рис. 1.6.

Рис. 1.6. Текст программы после подключения необходимых библиотек

Запускаем клавишей <F9> компилятор, результат показан на рис. 1.7.

Рис. 1.7. Результат выполнения первой программы.

Наша программа успешно откомпилировалась и сразу же выполнилась. В результате ее выполнения в окне черного цвета высветилось слово Hello world!. Если теперь нажать любую клавишу, программа завершится, и мы снова увидим ее текст. Сохраним новый проект, выполнив опции File/Save All.

Поясним суть программы. Мы уже говорили выше, что любая С-программа строится как множество элементов, называемых функциями, — блоков программных кодов, выполняющих определенные действия. Имена этих блоков кодов, построенных по специальным правилам, задает либо программист, если он сам их конструирует, либо имена уже заданы в поставленной со средой программирования библиотеке стандартных функций. Имя главной функции, с которой собственно и начинается выполнение приложения, задано в среде программирования. Это имя - main (). В процессе выполнения программы сама функция main() обменивается данными с другими функциями и пользуется их результатами. Обмен данными между функциями происходит через параметры функций, которые указываются в круглых скобках, расположенных вслед за именем функции. Функция может и не иметь параметров, но круглые скобки после имени всегда должны присутствовать: по ним компилятор узнает, что перед ним функция, а не что-либо другое. В нашем примере две функции, использованные в главной функции main(): это функция printf() и функция getch().

Функция printf() в качестве аргумента имеет строку символов (символы, заключенные в двойные кавычки). Среди символов этой строки есть специальный символ, записанный так:\n. Это так называемый управляющий символ — один из первых 32-х символов таблицы кодировки символов ASCII. Управляющие символы не имеют экранного отображения и используются для управления процессами. В данном случае символ \n служит для выбрасывания буфера функции printf(), в котором находятся остальные символы строки, на экран и установки указателя изображения символов на экране в первую позицию — в начало следующей строки. То есть когда работает функция printf(), символы строки по одному записываются в некоторый буфер до тех пор, пока не встретится символ \n. Как только символ \n прочтен, содержимое буфера тут же передается на устройство вывода (в данном случае — на экран).

Функция getch() — это функция ввода одного символа с клавиатуры: она ждет нажатия какой-либо клавиши. Благодаря этой функции результат выполнения программы задерживается на экране до тех пор, пока мы не нажмем любой символ на клавиатуре. Если бы в коде не было функции getch(), то после выполнения printf() программа дошла бы до конца тела функции main(), до закрывающей фигурной скобки, и завершила бы свою работу. В результате черное окно, в котором вывелось сообщение Hello world!, закрылось бы, и мы не увидели бы результата работы программы. Следовательно, когда мы захотим завершить нашу программу, мы должны нажать любой символ на клавиатуре, программа выполнит функцию getch() и перейдет к выполнению следующего оператора. А это будет конец тела main(). На этом программа и завершит свою работу. Следует отметить, что основное назначение функции getch() - - вводить символы с клавиатуры и передавать их символьным переменным, о которых пойдет речь ниже. Но мы воспользовались побочным свойством функции — ждать ввода с клавиатуры и, тем самым, не дать программе завершиться, чтобы мы посмотрели результат ее предыдущей работы.

 

Самостоятельная работа № Iа

Самостоятельная работа № II

Очень простое приложение.

Задание: создайте приложение, в кото­ром при щелчке пользователя на кнопке появлялась бы какая-нибудь надпись.

1. Если C++Builder уже работает, и вы уже делали какие-то эк­сперименты с формой, то откройте новое приложение. В C++ Builder 6 для это­го надо выполнить команду File | New и в открывшемся каскадном меню вы­брать раздел Application.

2. Перенесите на пустую форму, которая открылась вам, кнопку Buttonсо страницы Standard палитры компонентов. Для этого выделите пиктограмму кноп­ки и затем щелкните курсором мыши в нужном вам месте формы. На форме появится кнопка, которой C++Builder присвоит имя по умолчанию — Button1.

3. Аналогичным образом перенесите на форму с той же страницы Standardпалит­ры компонентов метку Label.В этой метке в процессе выполнения приложе­ния будет появляться текст при нажатии пользователем кнопки. C++Builder присвоит метке имя Label1.

4. Разместите компоненты на форме примерно так, как показано на рисунке. При этом уменьшите до разумных размеров окно формы, так как в вашем пер­вом приложении никаких других компонентов не будет.

 

 

5. Выделите на форме компонент Button 1— кнопку. Перейдите в Инспектор Объектов и измените ее свойство Caption(надпись), которое по умолчанию равно Buttonl(имя, которое по умолчанию присвоил этому компоненту C++Builder) на «Пуск».

6. Укажите метке Label1,что надписи на ней надо делать жирным шрифтом. Для этого выделите метку, в окне Инспектора Объектов раскройте двойным щелчком свойство Font(шрифт), затем также двойным щелчком раскройте подсвойство Style(стиль) и установите в trueсвойство fsBold(жирный).

7. Сотрите текст в свойстве Captionметки Label1,чтобы он не отображался, пока пользователь не нажмет кнопку приложения.

Теперь вам осталось только написать оператор, который заносил бы в свойство Captionметки Label1нужный вам текст в нужный момент. Этот момент определя­ется щелчком пользователя на кнопке. При щелчке в кнопке генерируется собы­тие OnClick.Следовательно, обработчик этого события вы и должны написать.

8. Выделите кнопку Button1на форме, перейдите в Инспектор Объектов, от­кройте в нем страницу событий (Events), найдите событие кнопки OnClick(оно первое сверху) и сделайте двойной щелчок в окне справа от имени этого собы­тия. Это стандартный способ задания обработчиков любых событий. Но перей­ти в обработчик события OnClick(только этого события) можно и иначе: до­статочно сделать двойной щелчок на компоненте Buttonlна форме. В обоих случаях вы окажетесь в окне Редактора Кода и увидите там текст:

 

void__fastcall TForml::Button1Click(TObject *Sender)

Заголовок этой функции складывается из имени класса вашей формы (TForml), имени компонента (Button1)и имени события без префикса On (Click).

9. Напишите в обработчике оператор задания надписи метки Label 1.Этот опера­тор может иметь вид:

 

Labell->Caption = "Это мое первое приложение!";

Таким образом, полностью ваш обработчик события должен иметь вид:

void __fastcall TForml::ButtonlClick(TObject *Sender)

{

Label1->Caption = "Это мое первое приложение!";

}

Оператор, который вы написали, означает следующее. Символ « = » обозначает операцию присваивания, в которой тому, что написано перед этим символом, присваивается значение того, что написано после символа присваивания. Слева вы на­писали: Label1->Caption.Это значит, что вы присваиваете значение свойству Caption компонента Label1.Все указания свойств и методов производятся анало­гичным образом: пишется имя компонента, затем ставятся сим­волы операции стрелка «->»: символ минус «-» и символ больше «>», записанные без пробела. После этих символов пишется имя свойства или метода. В данном слу­чае свойству Captionвы присваиваете строку текста «Это мое первое приложение!».

Если вы написали первый идентификатор оператора – Label1,поставили символы стрелки и ненадолго задумались, то вам всплывет подсказка, содержа­щая список всех свойств и методов метки. Это начал работать Знаток Кода, кото­рый стремится подсказать вам свойства и методы компонентов, аргументы функ­ций и их типы, конструкции операторов. Вы можете выбрать из списка нужное ключевое слово, нажать клавишу Enter, и выбранное слово (свойство, метод) ока­жется вписанным в текст. Можете поступить иначе: начать писать нужное свойст­во, Тогда Знаток Кода сам найдет по первым введенным символам нужное свойст­во. Когда вы увидели, что нужное слово найдено, можете его не дописывать, а на­жать Enter, и Знаток Кода допишет его за вас.

Подсказки Знаток Кода по умолчанию упорядочены по областям видимости и категориям, что не очень удобно. Вы можете изменить характер упорядочива­ния, щелкнув в окне Знатока Кода правой кнопкой мыши и включив во всплыв­шем меню раздел Sort by Name — сортировка по алфавиту.

Этот инструмент очень удобен во многих случаях, когда вы не очень точно помните последовательность перечисления параметров какой-нибудь функции, или когда не уверены в имени какого-то свойства (особенно в том, какие буквы это­го слова в каком регистре надо писать). Но иногда, когда вы хорошо освоитесь с C++Builder, эти подсказки, может быть, начнут вас раздражать, особенно, если у вас не слишком мощный компьютер. К тому же, иногда Знаток Кода безо всякого вашего желания дописывает начатое вами слово, причем дописывает не всегда вер­но. Имейте в виду, что при настройке ИСР вы можете временно отключить Знато­ка Кода или увеличить задержку, с которой он срабатывает.

Итак, ваше приложение готово. Можете откомпилировать и выполнить его. Для этого выполните команду Run Run, или нажмите соответствующую быструю кнопку или нажмите «горячую» клавишу F9. Если вы ничего не напутали, то после недолгой компиляции, сопровождающейся временным появлением на экране окна компилятора, перед вами появится окно вашего первого приложения. Нажав в нем кнопку «Пуск» вы увидите указанную вами строку текста. Можете попробовать различные манипуляции с ок­ном: перемещение его, изменение размеров его рамки курсором мыши, свертыва­ние и развертывание. В заключение закройте приложение, щелкнув на кнопке в его правом верхнем углу.

 

Самостоятельная работа № IIIc

Сложение двух целых чисел.

Используйте объект cin входного потока и операцию взять из потока <<, чтобы получить два целых числа, введенных пользователем на клавиатуре, посчитать сумму этих чисел и вывести этот результат с помощью cout.

1. В первой строке программы запишите директиву препроцессора #include <iostream.h>, она включает в программу содержание заголовочного файла iostream.h, без которой компилятор не поймет определенные в ней функции cout.

2. Объявите переменные, тип данных int. Это значит, что эти переменные всегда будут содержать целые значения, т.е. целые числа, такие как 7, -11, 0, 31914.

3.Оператор

печатает на экране буквенное сообщение Введите первое целое число и позиционирует курсор на начало следующей строки. Это сообщение называется приглашением, потому что оно предлагает пользователю выполнить некоторое действие. О предыдущем операторе можно сказать так: «cout получаетсим­вольную строку "Введите первое целоечисло\п"».

1. Оператор

,

использует объект входного потока cin и операцию взять из потока », чтобы получить от пользователя значение. Объект cinзабирает вводимую информа­цию из стандартного потока ввода, которым обычно является клавиатура. О предыдущем операторе можно сказать так: «cin дает значение первого целого числа».

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

5-6.аналогично 3-4.

7. Оператор присваивания

рассчитывает сумму переменных integer1 и integer2и присваивает результат переменной sum,используя операцию присваивания =. Оператор читается так: «sumполучает, значение, равное integerl + integer2».Оператор присваивания используется в большинстве расчетов.

8. Оператор

печатает символьную строку Сумма равна,затем численное значение перемен­ной sum, за которым следует endl(аббревиатура словосочетания «end line» — конец строки) — так называемый манипулятор потока. Манипулятор endlвыводит символ новой строки и затем «очищает буфер вывода». Это просто означает, что в некоторых системах, где выводы накапливаются в вычисли­тельной машине до тех пор, пока их не станет достаточно, чтобы «имело смысл печатать на экране», endlвызывает немедленную печать на экране всего накопленного.

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

В операторах вывода можно также выполнять вычисления. Мы могли бы объединить два предыдущих оператора в один

cout << "Suma ravna" << integerl + integer2 << endl;

 

Результат выполнения программы:

 

Самостоятельная работа № IIIa