Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИнфТехнКомпТехн

.pdf
Скачиваний:
18
Добавлен:
02.04.2015
Размер:
35.33 Mб
Скачать

Рисунок 1.12 - Окно Конструктора формы проекта задания 2

Двойным щелчком левой кнопкой мыши по кнопке Button1 инициируем создание обработчика события нажатия этой кнопки. ИСР автоматически добавляет для обработчика в разделе interface заголовок, а в разделе implementation заготовку его кода. Курсор автоматически устанавливается в тело кода обработчика, куда необходимо занести исполняемые коды. Для нашего проекта это всего две команды:

Label1.Caption:=’Hello, World & Россия!’;

Button1.Visible:=false;

Первая команда свойству caption (надпись) метки Lable1 присваивает значение строки для вывода сообщения на экран,

вторая команда свойству visible (видимость) кнопки Button1 присваивает значение false (ложь), делая ее невидимой.

При вводе кодов команд целесообразно использовать встроенный в ИСР подсказчик, который позволяет выбирать нужный член класса компонента из большого списка. После набора имени компонента и точки нужно сделать паузу. Появится окно списка членов класса (см. Рис. 1.13 для выбора свойства caption компонента Label1), в котором нужно выбрать нужный член и дважды щелкнуть по нему левой кнопкой мыши. Член класса переместится в код программы. После завершения ввода кодов нужно проект сохранить с заданным именем в созданной для него папке, используя команду Файл => Сохранить проект как. В диалоговом окне нужно выбрать нужную папку, задать имя и сохранить проект.

Внимание! При первом сохранении проекта запись файлов в папку происходит в два этапа:

Сначала сохраняется модуль формы проекта с расширением .pas. Для него рекомендуется имя Prg_1_2_.

Затем сохраняется файл проекта с расширением .dpr. Для него рекомендуется имя

Prg_1_2.

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

Листинг модуля формы: unit Prg_1_2_; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject);

private

{Private declarations } public

{Public declarations }

171

end;

 

 

var

 

 

Form1: TForm1;

 

 

implementation

 

 

{$R *.dfm}

 

 

procedure TForm1.Button1Click(Sender: TObject);

 

begin

 

текста

Label1.Caption:='Hello, World и Россия'; // Вывод

Button1.Visible:=false;

// Кнопка невидима

 

end;

 

 

end.

 

 

Рисунок 1.13 - Использование встроенного подсказчика

Теперь программу можно запустить на исполнение командой «Запуск» (или клавишей F9, или кнопкой со стрелкой из палитры инструментов). Если при кодировании ошибок не было, то появится окно приложения, как в Конструкторе формы. При нажатии кнопки «Нажми», окно принимает вид Рис. 1.14.

Рисунок 1.14 - Окно формы проекта задания 2 при исполнении

172

Если при кодировании допущены ошибки, то компиляция не происходит, в окне Редактора кода внизу выводится список обнаруженных синтаксических ошибок (логические ошибки компилятор не обнаруживает). Для каждой ошибки имеется описание. Для ошибки, помеченной стрелкой слева от кода, строка в коде выделяется цветом, как показано на Рис. 1.15. В данном примере обнаружен необъявленный идентификатор Hello. Причина - пропущены апострофы, обрамляющие текстовую строку. В результате компилятор рассматривает слово Hello не как часть строки, а как идентификатор, который в коде не определен. После исправления ошибки программу следует запустить повторно. При этом компиляция и сохранение файлов проекта произойдет автоматически. Проект приложения – это стандартная программа Windows, которая в качестве встроенного модуля использует модуль формы. При желании можно посмотреть код проекта, но редактировать его не надо. Для просмотра кода проекта нужно:

Командой Вид => Модули вызвать окно со списком модулей проекта, в котором выбрать Prg_1_2.

Теперь окно Редактора кода примет вид Рис. 1.16, в котором появляется страница с закладкой Prg_1_2, в которой размещен код проекта.

Код проекта в строке uses содержит ссылки на модули Forms (стандартный, содержащий средства работы с окном формы) и Prg_1_2_ (модуль формы нашего приложения) со ссылкой на его исходник (файл Prg_1_2.pas). В исполняемой части проекта имеются 3 стандартные процедуры Windows:

Application.Initialize – инициализация приложения,

Application.CreateForm – создание формы,

Application.Run – запуск формы на исполнение.

Рисунок 1.15 - Сообщения о синтаксических ошибках

173

Рисунок 1.16 - Код проекта задания 2

Выход из ИСР осуществляется стандартным для программ под Windows способом.

Выводы

1.ИСР Delphi – интегрированная среда быстрой разработки приложений.

2.Приложение в Delphi создается в окне Конструктора формы путем размещения там готовых компонентов.

3.Иерархия компонентов формы отображается в Delphi в окне Дерева объектов.

4.Свойства компонентов отображаются в Delphi в окне Инспектора объектов.

5.Каркас кода проекта ИСР создает автоматически.

6.Пользователь добавляет в него функциональность, вводя коды, определяющие выполняемые действия.

7.При кодировании следует использовать встроенный в ИСР подсказчик.

8.ИСР позволяет создавать приложения под Windows и консольные приложения под

DOS.

9.Для консольных приложений с выводом текста на русском языке необходима

перекодировка символов ANSI в ASCII.

Для этого в строку uses консольного приложения следует добавить ссылку на модуль

RusTrans.

2. Структура программы и типы в языке Delphi

Подготовка к работе

1.Изучить:

Структуру программы на языке Delphi.

Задание констант, переменных.

Типы численных данных и ошибки при преобразованиях типов численных данных.

Организацию простейшего ввода-вывода данных.

2.Составить программу решения задачи в виде консольного приложения.

174

Контрольные вопросы

1.Алфавит языка Delphi, операции, идентификаторы.

2.Структура программы. Разделы объявления констант, переменных, меток, типов данных, подпрограмм

3.Константы. Их объявление. Константные выражения.

4.Переменные. Их объявление.

5.Форматы представления чисел (с фиксированной и плавающей точкой).

6.Типы целых чисел без знака: Byte, Word, LongWord = Cardinal.

7.Типы целых чисел со знаком: Shortint, Smallint, Integer = Longint, Int64.

8.Типы вещественных чисел: Single, Real48, Double = Real, Extended, Comp, Currency.

9.Тип TDateTime и его использование

10.Логические типы данных Boolean.

11.Символьные типы: AnsiChar = Char, WideChar.

12.Строковые типы для длинных строк: AnsiString = String, WideString.

13.Строковые типы для коротких строк: ShortString, String[N].

14.Совместимость типов при пРисвоениях.

15.Тип Variant и его использование.

1. Алгебраически структуры

Задание

1.Создать программу взаимных преобразований типов численных данных в соответствии с вариантами, приведенными в табл. 2.1. Нужно преобразовывать численные данные из типа Start в типы Fin1 и Fin2 для вещественных и целых чисел.

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

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

Таблица 2.1 - Варианты заданий

 

Типы вещественных чисел

 

Типы целых чисел

 

 

 

Start

Fin_1

Fin_2

Fin_3

Start

Fin_1

Fin_2

Fin_3

1

Single

Currency

Extended

Real48

Byte

Cardinal

Integer

Smallint

2

Real48

Single

Currency

Double

Word

Byte

Cardinal

Integer

3

Double

Real48

Single

Real

LongWord

Word

Byte

LongInt

4

Real

Double

Real48

Single

Cardinal

LongWord

Word

Byte

5

Extended

Real

Double

Real48

Shortint

Cardinal

LongWor

Word

6

Comp

Extended

Real

Double

Smallint

Shortint

Cardinal

LongWor

7

Currency

Comp

Extended

Real

Integer

Smallint

Shortint

Cardinal

8

Single

Currency

Comp

Extended

LongInt

Integer

Smallint

Shortint

9

Real48

Single

Currency

Comp

Int64

LongInt

Integer

Smallint

10

Double

Real48

Single

Currency

Word

Int64

LongInt

Integer

11

Real

Double

Real48

Single

LongWord

Byte

Int64

LongInt

12

Extended

Real

Double

Real48

Cardinal

Word

Int64

Int64

13

Comp

Extended

Real

Double

Shortint

LongWord

Byte

Word

14

Currency

Comp

Extended

Real

Smallint

Cardinal

Word

LongWor

15

Real

Currency

Comp

Extended

Integer

Shortint

LongWor

Cardinal

Пример выполнения

Задание 1. Создать программу преобразования численных данных из типа Start в

типы Fin1, Fin2 и Fin3:

175

1.Для вещественных чисел: Start = Real, Fin1 = Extended, Fin2 = Single, Fin3 = Currency.

2.Для целых чисел: Start = Smallint, Fin1 = Cardinal, Fin2 = Longint, Fin3 = Byte.

Для контроля размеров данных в программе используется встроенная функция SizeOf,

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

Листинг программы program Prg_2_1; {$APPTYPE CONSOLE} uses SysUtils,RusTrans;

const real_0:real=123.456789; int_0:smallint=-1111;

var real_1:extended; real_2:single; real_3:currency; int_1:cardinal; int_2:longint; int_3:byte;

begin

writeln(Rus('Вещественное число в разных типах')); writeln;

real_1:=real_0; real_2:=real_0; real_3:=real_0; writeln(Rus('Значения и размер в байтах в разных типах')); writeln('real_0=',real_0:10:6,sizeof(real_0):4,' real'); writeln('real_1=',real_1:10:6,sizeof(real_1):4,' extended'); writeln('real_2=',real_2:10:6,sizeof(real_2):4,' single'); writeln('real_3=',real_3:10:6,sizeof(real_3):4,' currency');

readln;

 

разных типах'));

 

writeln(Rus('Целое число в

 

int_1:=int_0; int_2:=int_0;

 

 

writeln;

и

размер в байтах

в разных

writeln(Rus('Значения

типах'));

 

 

 

writeln('int_0=',int_0:10,sizeof(int_0):4,' smallint'); writeln('int_1=',int_1:10,sizeof(int_1):4,' cardinal'); writeln('int_2=',int_2:10,sizeof(int_2):4,' longint'); writeln('int_3=',int_3:10,sizeof(int_3):4,' byte'); readln;

end.

В листинге программы в разделе констант const объявлены, как типизированные константы, стартовые числа Start. В разделе var объявлены группы переменных Fin1, Fin2, Fin3 для каждого вида чисел. На Рис. 2.1 показан вид окна консольного приложения перед закрытием программы.

Задание 2

Создать программу взаимных преобразований строковых и символьных типов. Она должна отображать слово World строками разного типа и добавлять к строке символ восклицательного знака !.

Листинг программы program Prg_2_2; {$APPTYPE CONSOLE} uses

176

SysUtils, RusTrans; var

Str_1:string; Str_2:string[10]; ShortStr:ShortString; AnsiStr:AnsiString; WideStr:WideString; MyChar:char;

begin Str_1:='World';

writeln(Rus('Строки в разных типах')); writeln;

Str_2:=Str_1;

ShortStr:=Str_1;

AnsiStr:=Str_1;

WideStr:=Str_1;

writeln(Rus('Значения и размер в байтах в разных типах')); writeln;

writeln('AnsiStr=',AnsiStr:7,SizeOf(AnsiStr):5,'

AnsiString');

writeln('Str_1 =',Str_1:9,SizeOf(Str_1):5,' String'); writeln('WideStr=',WideStr:7,SizeOf(WideStr):5,' WideString'); writeln('ShortStr=',ShortStr:6,SizeOf(ShortStr):5,' ShortString');

writeln('Str_2 =',Str_2:9,SizeOf(Str_2):5,' String[..]'); readln;

writeln(Rus('Добавим к строке символ !')); writeln;

MyChar:='!'; Str_2:=Str_2+MyChar;

writeln('Str_2 =',Str_2:9,SizeOf(Str_2):5,' String[..]'); readln;

end.

2. Циклы

Задание 3

Создать программу работы с типом TDateTime. Она должна запрашивать дату и время рождения, выводить текущие дату/время, запрашивать желаемое время обучения, выводить дату/время и день недели конца обучения. На Рис. 2.3 показано окно работающего приложения задания 3.

Листинг программы program Prg_2_3; {$APPTYPE CONSOLE} uses

SysUtils, RusTrans; var

Date_1,Date_2,Time,DateTime:string; DateTime_1,DateTime_2:TDateTime; Day:integer; begin

writeln(Rus('Введите дату рождения в формате день.месяц.год'));

readln(Date_1); writeln;

177

writeln(Rus('Введите

время

рождения

в

формате

часы.минуты.секунды'));

 

 

 

 

readln(Time);

 

 

 

 

 

writeln;

 

 

 

 

 

DateTime:=Date_1+Time;

 

 

 

 

 

DateTime_1:=StrToDateTime(DateTime);

 

 

DateTime_2:=Now;

'),DateTimeToStr(Now));

 

writeln(Rus('Сегодня

 

writeln;

 

еще

хотите учиться?'));

 

writeln(Rus('Сколько дней

 

readln(Day);

 

 

 

 

 

writeln;

 

 

 

 

 

DateTime_2:=DateTime_2+Day;

 

 

 

Day:=DayOfWeek(DateTime_2);

 

совсем

умным

writeln(Rus('Вы

станете

 

'),DateToStr(DateTime_2));

день

недели номер '),Day);

 

writeln(Rus('Это будет

 

readln;

 

 

 

 

 

end.

 

 

 

 

 

Выводы

1.Программа на языке Delphi имеет следующую структуру:

Заголовок.

Разделы объявлений констант, переменных, типов, меток, подпрограмм (процедур и функций).

Раздел операторов, помещенный в операторные скобки begin…end.

Точка, как признак конца программы.

2.Для чисел возможны типы: вещественные, целые без знака и со знаком, 16-ричные.

3.Вещественные числа запоминаются в формате с плавающей точкой. Для них лучше всего использовать тип real. При переходе к типу с меньшим размером теряется точность. При использовании типов с максимальными размерами потребная память увеличивается, но точность может не измениться. Для округления результатов используются типы вещественных чисел с ограниченной дробной частью: comp (0 разрядов) и currency (4 разрядов).

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

5.Для работы с короткими строками используются типы ShortString, String [N до 255]. Это область в статической памяти, назначаемая при компиляции программы.

6.Для работы с длинными строками используются типы String, AnsiString, WideString. Это указатели размером 4 байта,

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

1.Операция + со строками выполняет конкатенацию (пРисоединение в конец) строк или символов.

2.Для работы с датой и временем определен тип TDateTime. Он в формате вещественного числа содержит и дату (целая часть - число суток, прошедших с 30.12.1899) и время (дробная часть - часть суток, прошедших с 0 часов). Тип позволяет выполнять с датой/временем операции, как с вещественными числами.

178

3. Линейные структуры

Подготовка к работе

1.Изучить:

Запись констант, переменных, стандартных функций.

Правила записи арифметических выражений.

Арифметический оператор пРисваивания.

2.Разработать алгоритм решения в соответствии с заданием.

3.Составить программу решения задачи в виде консольного приложения.

4.Контрольные вопросы

5.Алфавит языка Delphi.

6.Операции.

7.Идентификаторы.

8.Типы данных.

9.Структура программы консольного приложения.

10.Где описываются константы, переменные, метки и типы данных?

11.Стандартные функции.

12.Оператор

13.Пустой и составной операторы.

14.Процедуры ввода read и readln.

15.Процедуры вывода write и writeln.

16.Последовательность действий при выполнении оператора пРисваивания.

17.Приоритетность выполнения операций в выражениях.

18.Как организовать пропуск одной, двух строк при выводе?

Задание 2

Повторить задание 1, используя функции из модуля math. В листинг добавляем ссылку на модуль math, что позволяет использовать прямо функцию тангенса tan(аргумент) и возведения в степень power(основание, степень). Окно работающего приложения имеет такой же вид, как в задании 1.

Листинг программы program Prg_3_2; {$APPTYPE CONSOLE} uses SysUtils,RusTrans,math; label

10; var

a,b,c,x,y,z: real; proba:integer; begin

10: writeln(Rus('Введите x,y,z')); readln(x,y,z);

writeln;

writeln(Rus('Вы ввели')); writeln('x=',x:8:3,' y=',y:8:3,' z=',z:8:3); writeln;

writeln(Rus('Введите 1, если отображенные данные совпадают с заданными'));

readln(proba); if proba<>1 then

179

begin writeln; goto 10; end; writeln; c:=tan(x*x);

a:=y*power(c,3)+sqrt(z*z/(y*y+x*x)); b:=ln(y+x*x)+sqr(sin(z/y)); writeln(Rus('Результат')); writeln('a=',a:8:3,' b=',b:8:3); readLn;

end.

Выводы

1.Консольное приложение – программа под DOS. Проект – программа. Используется единственное окно. Ввод/вывод осуществляется процедурами read, readln, write и writeln.

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

3.Выражения используются для нахождения новых значений переменных. В выражениях можно использовать стандартные математические функции. Основные функции определены в модуле SysUtils.

4.Дополнительные математические функции определены в модуле math. Чтобы они были доступны, нужно включить модуль math в строку uses кода программы.

5.Для безусловного перехода можно использовать оператор goto metka, который передает управление помеченному оператору. Метка должна быть предварительно описана в разделе объявления меток label. В исполняемой части программы метка размещается слева от оператора, за именем метки следует вертикальное двоеточие.

6.Несколько операторов можно объединить в один составной, поместив их в операторные скобки begin…end.

7.Рекомендуется вводить в программу комментарии. Это либо текст до конца строки после символов //, либо несколько строк, помещенных в фигурные скобки. В листинге программы комментарий по умолчанию отображается курсивом.

4. Структуры с ветвлениями

Подготовка к работе

1.Изучить возможности языка программирования для реализации:

условной и безусловной передачи упраления;

вычислительного процесса с разветвляющейся структурой.

2.Разработать алгоритм решения в соответствии с заданием.

3.Составить программы решения задач.

Контрольные вопросы

1.Какие структуры вычислительных процессов Вы знаете?

2.Как организовать разветвление вычислений?

3.Условный оператор if...then...else.

4.Условный оператор if...then.

5.Вложенные условные операторы.

6.Оператор выбора case …of.

7.Зачем нужно при отладке программы тестировать все ветви алгоритма?

Задание 1

Вывести сообщения для дней недели с использованием оператора множественного ветвления. Проект – консольное приложение. В программе в разделе объявления типов type определен тип WeekDay из 7 строк. В разделе переменных var объявлена переменная MyWeek этого типа, значениям которой в исполняемой части программы пРисвоены русскоязычные имена дней недели. Программа содержит цикл запроса у пользователя

180