Глава 1
Основы программирования
Рис. 1.1. Основные символы, используемые для представления алгоритма в виде блок-
Листинг 1.1. Программа Стоимость покупки
unit pokupka_1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
Type
TForm1 = class(TForm)
Edit1: TEdit; Edit2: TEdit;
Label1: TLabel; Label2: TLabel; Label3: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private { Private declarations }
public { Public declarations }
end;
Var
Forml: TForm1;
Implementation
{$R *.dfm}
// подпрограмма
procedure Summa;
Var
cena: real; // цена
kol: integer; // количество
s: real; // сумма
mes: string[255]; // сообщение
Begin
cena:= StrToFloat(Form1.Edit1.Text);
kol:= StrToInt(Form1.Edit2.Text);
s:= cena * kol;
if s > 500 then begin
s:= s * 0.9;
mes:= 'Предоставляется скидка 10%' + #13;
end;
mes:= mes+ 'Стоимость покупки: '
+ FloatToStrF(s,ffFixed,4,2) +' руб.';
Form1.Label3.Caption:= mes;
end;
// щелчок на кнопке Стоимость
procedure TForm1.Button1Click(Sender: TObject);
Begin
Summa; // вычислить сумму покупки
end;
// нажатие клавиши в поле Количество
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
Begin
case Key of
'0'.. '9',#8:; // цифры и клавиша <Backspace>
#13: Summa; // вычислить стоимость покупки
else Key:= Chr(O); // символ не отображать
end;
end;
// нажатие клавиши в поле Цена
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Begin
case Key of
'0'.. '9', #8:; // цифры и клавиша <Backspace>
#13: Form1.Edit2.SetFocus; // клавиша <Enter>
'.',',': begin
if Key = '.' then Key:=’,’;
if Pos(', ',Edit1.Text) <> 0 then Key:= Chr(0);
end;
else // все остальные символы запрещены
Key:= Chr(0);
end;
end;
End.
Рис. 1.2. Алгоритм программы вычисления стоимости покупки — совокупность алгоритмов обработки событий на компонентах формы
Рис. 1.3. Окно (форма) программы Стоимость покупки
Рис. 1.4. Схема работы компилятора
Язык программирования Delphi
Каждая инструкция состоит из идентификаторов. Идентификатор может обозначать:
|
- Инструкцию языка (:=, if, while, for);
- переменную;
- константу (целое или дробное число);
- арифметическую (+, -,*,/) или логическую (and, or, not) операцию;
- подпрограмму (процедуру или функцию);
- отмечать начало (procedure, function) или конец (end) подпрограммы или блока (begin, end).
Тип данных
Целый тип
Язык Delphi поддерживает семь целых типов данных: shortint, smallint, Longint, Int64, Byte, word и Longword, описание которых приведено в табл. 1.1.
Таблица 1.1. Целые типы
Тип | Диапазон | Формат | ||
Shortint | -128-127 | 8 битов | ||
Smallint | -32 768 - 32 767 | 16 битов | ||
Longint | -2 147 483 648 - 2 147 483 647 | 32 бита | ||
Int64 | -263- 263 - 1 | 64 бита | ||
Byte | 0-255 | 8 битов, беззнаковый | ||
Word | 0-65 535 | 16 битов, беззнаковый | ||
Longword | 0 - 4 294 967 295 | 32 бита, беззнаковый | ||
Object Pascal поддерживает и наиболее универсальный целый тип - Integer, который эквивалентен Longint.
Вещественный тип
Таблица 1.2. Вещественные (дробные) типы
Тип | Диапазон | Значащих цифр | Байтов | ||
Real48 | 2.9x 10-39-1.7x1038 | 11-12 | |||
Single | 1.5 x 10-45-3.4х 1038 | 7-8 | |||
Double | 5.0x10-324 -1.7x10308 | 15-16 | |||
Extended | 3.6x10-4951 -1.1 х104932 | 19-20 | |||
Comp | 263+1 - 263-1 | 19-20 | |||
Currency | -922 337 203 685 477.5808 - +922 337 203 685 477.5807 | 19-20 | |||
Язык Delphi поддерживает и наиболее универсальный вещественный тип - Real, который эквивалентен Double.
Символьный тип
Язык Delphi поддерживает два символьных типа: Ansichar и Widechar:
- тип Ansichar — это символы в кодировке ANSI, которым соответствуют числа в диапазоне от 0 до 255;
- тип widechar — это символы в кодировке Unicode, им соответствуют числа от 0 до 65 535.
Object Pascal поддерживает и наиболее универсальный символьный тип - Char, который эквивалентен Ansichar.
|
Строковый тип
Язык Delphi поддерживает три строковых типа: shortstring, Longstring WideString:
- тип shortstring представляет собой статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов;
- тип Longstring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти;
- тип WideString представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти. Каждый символ строки типа WideString является Unicode-символом.
В языке Delphi для обозначения строкового типа допускается использование идентификатора string. Тип string эквивалентен типу shortstring.
Логический тип
Логическая величина может принимать одно из двух значений True (истина) или False (ложь). В языке Delphi логические величины относят к типу Boolean.
Переменная
aх2 + bх + с = 0 a,d,c,x1,x2
TotalSumm и Discount или ObSumma и Skidka.
В общем виде инструкция объявления переменной выглядит так:
Имя: тип;
где:
- имя — имя переменной;
- тип — тип данных, для хранения которых предназначена переменная.
Пример:
а: Real; b: Real; i: Integer;
а,b,с: Real; x1,x2: Real;
Константы
В языке Delphi существует два вида констант: обычные и именованные.
Обычная константа — это целое или дробное число, строка символов или отдельный символ, логическое значение.
Числовые константы
123 0.0 -524.03 0
Таблица 1.3. Примеры записи дробных чисел
|
Число | Алгебраическая форма | Форма с плавающей точкой | ||
1 000 000 -123.452 0,0056712 | 1х106 -1,23452x102 5,6712х10-3 | 1.0000000000Е+06 -1.2345200000Е+02 5,6712000000Е-03 | ||
Строковые и символьные константы
'Язык программирования Delphi 7' '2.4' 'Д'
Логические константы
True False.
Именованная константа
константа = значение;
где:
- константа — имя константы;
Const Bound = 10;
Title = 'Скорость бега';
pi = 3.1415926;
В отличие от переменной, при объявлении константы тип явно не указывают. Тип константы определяется ее видом, например:
- 125 — константа целого типа;
- 0.0 — константа вещественного типа;
- ' выполнить ' — строковая константа;
- ' \' — символьная константа.
Инструкция присваивания
Имя: = Выражение;
где:
- Имя — переменная, значение которой изменяется в результате выполнения инструкции присваивания;
- : = — символ инструкции присваивания.
- Выражение — выражение, значение которого присваивается переменной, имя которой указано слева от символа инструкции присваивания.
Пример:
Surama:= Сеnа * Kol; Skidka:= 10; Found:= False;
Выражение
Таблица 1.4. Алгебраические операторы
Оператор | Действие | ||
+ | Сложение | ||
- | Вычитание | ||
* | Умножение | ||
/ | Деление | ||
DIV | Деление нацело | ||
MOD | Вычисление остатка от деления | ||
123 0.001 i+1
А + В/С Summa*0.75 (В1+ВЗ+ВЗ)/3 Cena MOD100
Тип выражения
Таблица 1.5. Правила определения типа выражения
Оператор | Тип операндов | Тип выражения | ||
*, +, - | Хотя бы один из операндов real | real | ||
*, +, - | Оба операнда integer | integer | ||
/ | real или integer | Всегда real | ||
DIV, MOD | Всегда integer | Всегда integer | ||
Математические функции
Таблица 1.6. Математические функции
Функция | Значение | ||
Аbs (n) | Абсолютное значение n | ||
Sqrt (n) | Квадратный корень из n | ||
Sqr (n) | Квадрат n | ||
Sin (n) | Синус n | ||
Cos (n) | Косинус n | ||
Arctan (n) | Арктангенс n | ||
Ехр(n) | Экспонента n | ||
Ln(n) | Натуральный логарифм n | ||
Random(n) | Случайное целое число в диапазоне от 0 до n- 1 | ||
Функции преобразования
Например, инструкция Label1.Caption:= FloatToStr(x) выводит значение переменной х в поле Label1.
Таблица 1.7. Функции преобразования
Функция | Значение функции | ||
Chr(n) IntToStr (k) | Символ, код которого равен n Строка, являющаяся изображением целого k | ||
FloatToStr (n) | Строка, являющаяся изображением вещественного n | ||
FloatToStrF(n,f, k,m) | Строка, являющаяся изображением вещественного п. При вызове функции указывают: f — формат (способ изображения); k — точность (нужное общее количество цифр); m — количество цифр после десятичной точки | ||
StrToInt (s) | Целое, изображением которого является строка s | ||
StrToFloat (s) | Вещественное, изображением, которого является строка s | ||
Round (n) | Целое, полученное путем округления n по известным правилам | ||
Trunc (n) | Целое, полученное путем отбрасывания дробной части n | ||
Frac(n) | Дробное, представляющее собой дробную часть вещественного n | ||
Int (n) | Дробное, представляющее собой целую часть вещественного n | ||
Использование функций
n:= Round((x2-x1)/dx);
x1:= (-b + Sqrt(d)) / (2*а);
m:= Random(10);
cena:= StrToInt(Edit1.Text);
Edit2.Text:= IntToStr(100);
mes:= 'x1=' + FloatToStr(xl);
Ввод данных
Наиболее просто программа может получить исходные данные
1)из окна ввода (функции inputBox) или
2) из поля редактирования (компонент Edit ).
Ввод из окна ввода
Переменная:= InputBox(Заголовок, Подсказка, Значение);
где:
- Переменная — переменная строкового типа, значение которой должно быть получено от пользователя;
- Заголовок — текст заголовка окна ввода;
- Подсказка — текст поясняющего сообщения;
- Значение — текст, который будет находиться в поле ввода, когда окно ввода появится на экране.
s:=InputBox('Фунты-килограммы','Введите вес в фунтах','0');
Рис. 1.5. Пример окна ввода
s:= InputBox('Фунты-килограммы','Введите вес в фунтах',''); funt:= StrToFloat(s);