- •1.Интегрированная среда разработки Delphi
- •2.Структура программы и типы в языке Delphi
- •3.Линейные структуры
- •4.Структуры с ветвлениями
- •5.Циклы с неизвестным числом повторений
- •6.Циклы с заданным числом повторений
- •Задание к работе
- •7.Массивы
- •8.Файлы
- •9.Подпрограммы
- •10.Динамическая память Подготовка к работе
- •Контрольные вопросы
- •Задание к работе
- •Задание 1
- •Задание 2
- •11.Исключения
2.Структура программы и типы в языке Delphi
Подготовка к работе
Изучить:
Структуру программы на языке Delphi.
Задание констант, переменных.
Типы численных данных и ошибки при преобразованиях типов численных данных.
Организацию простейшего ввода-вывода данных.
Составить программу решения задачи в виде консольного приложения.
Контрольные вопросы
Алфавит языка Delphi, операции, идентификаторы.
Структура программы. Разделы объявления констант, переменных, меток, типов данных, подпрограмм
Константы. Их объявление. Константные выражения.
Переменные. Их объявление.
Форматы представления чисел (с фиксированной и плавающей точкой).
Типы целых чисел без знака: Byte, Word, LongWord = Cardinal.
Типы целых чисел со знаком: Shortint, Smallint, Integer = Longint, Int64.
Типы вещественных чисел: Single, Real48, Double = Real, Extended, Comp, Currency.
Тип TDateTime и его использование
Логические типы данных Boolean.
Символьные типы: AnsiChar = Char, WideChar.
Строковые типы для длинных строк: AnsiString = String, WideString.
Строковые типы для коротких строк: ShortString, String[N].
Совместимость типов при присвоениях.
Тип Variant и его использование.
Задание
Создать программу взаимных преобразований типов численных данных в соответствии с вариантами, приведенными в табл. 2 .1. Нужно преобразовывать численные данные из типа Start в типы Fin1 и Fin2 для вещественных и целых чисел.
Создать программу взаимных преобразований строковых и символьных типов. Она должна отображать фамилию студента строками разного типа и добавлять к строке символ.
Создать программу работы с типом 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 |
LongWord |
Word |
6 |
Comp |
Extended |
Real |
Double |
Smallint |
Shortint |
Cardinal |
LongWord |
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 |
LongWord |
15 |
Real |
Currency |
Comp |
Extended |
Integer |
Shortint |
LongWord |
Cardinal |
Пример выполнения
Задание 1. Создать программу преобразования численных данных из типа Start в типы Fin1, Fin2 и Fin3:
Для вещественных чисел: Start = Real, Fin1 = Extended, Fin2 = Single, Fin3 = Currency.
Для целых чисел: 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;
int_3:=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.tin2
нт выбран таким, чтобы задаваемое
значение умещалось в формате типа.
рис. 2.1. Окно задания 1 при выполнении
Задание 2
Создать программу взаимных преобразований строковых и символьных типов. Она должна отображать слово World строками разного типа и добавлять к строке символ восклицательного знака !. На рис. 2 .2 показан вид окна консольного приложения перед закрытием программы.
Листинг программы
program Prg_2_2;
{$APPTYPE CONSOLE}
uses
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.2. Окно задания 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;
writeln(Rus('Введите время рождения часы.минуты.секунды'));
readln(Time);
writeln;
DateTime:=Date_1+Time;
DateTime_1:=StrToDateTime(DateTime);
DateTime_2:=Now;
writeln(Rus('Сегодня '),DateTimeToStr(Now));
writeln;
writeln(Rus('Сколько дней еще хотите учиться?'));
readln(Day);
writeln;
DateTime_2:=DateTime_2+Day;
Day:=DayOfWeek(DateTime_2);
writeln(Rus('Вы станете умным '), DateToStr(DateTime_2));
writeln(Rus('Это будет день недели номер '),Day);
readln;
end.
рис. 2.3. Окно задания 3 при выполнении
Выводы
Программа на языке Delphi имеет следующую структуру:
Заголовок.
Разделы объявлений констант, переменных, типов, меток, подпрограмм (процедур и функций).
Раздел операторов, помещенный в операторные скобки begin…end.
Точка, как признак конца программы.
Для чисел возможны типы: вещественные, целые без знака и со знаком, 16-ричные.
Вещественные числа запоминаются в формате с плавающей точкой. Для них лучше всего использовать тип real. При переходе к типу с меньшим размером теряется точность. При использовании типов с максимальными размерами потребная память увеличивается, но точность может не измениться. Для округления результатов используются типы вещественных чисел с ограниченной дробной частью: comp (0 разрядов) и currency (4 разрядов).
Целые числа запоминаются в формате с фиксированной точкой. Для них лучше всего использовать тип integer. При переходе к типу с меньшим размером возможна грубая ошибка, если число не умещается в отведенную под него память. Целые числа без знака целесообразно использовать для уменьшения занимаемой памяти.
Для работы с короткими строками используются типы ShortString, String [N до 255]. Это область в статической памяти, назначаемая при компиляции программы.
Для работы с длинными строками используются типы String, AnsiString, WideString. Это указатели размером 4 байта, в которые помещается адрес начала строки в динамической памяти, назначаемый при исполнении программы.
Операция + со строками выполняет конкатенацию (присоединение в конец) строк или символов.
Для работы с датой и временем определен тип TDateTime. Он в формате вещественного числа содержит и дату (целая часть - число суток, прошедших с 30.12.1899) и время (дробная часть - часть суток, прошедших с 0 часов). Тип позволяет выполнять с датой/временем операции, как с вещественными числами.