Цель работы: Изучение стандартных типов данных; разработка алгоритмов и кодирование приложений линейной структуры.
В языке Delphi Win32 Language применяются перечисленные ниже стандартные типы данных.
Действительные типы данных имеют следующие диапазоны и форматы (в байтах) представления числовых значений (таблица 1):
Таблица 1
Тип | Диапазон Формат | ||
Real48 | -2.9 · 1039.. 1.7 · 1038 6 | ||
Single | -1.5 · 1045 .. 3.4 · 1038 4 | ||
Double | -5.0 · 10324.. 1.7 · 10308 8 | ||
Extended | -3.6 · 104951.. 1.1 · 104932 10 |
Целочисленные типы данных имеют следующие диапазоны и форматы (в битах) представления числовых значений (таблица 2):
Таблица 2
Тип | Диапазон | Формат | |
Shortint | -128..127 | 8 | |
Smallint | -32768..32767 | 16 | |
Longint | -2147483648..2147483647 | 32 | |
Int64 | -263..263-1 | 64 | |
Byte | 0..255 | 8 | |
Word | 0..65535 | 16 | |
Longword | 0..4294967295 | 32 |
Символьный тип (стандартное имя Char) представлен однобайтовым форматом и одиночным символом, заключенного в апострофы.
Логический тип (стандартное имя Boolean) представлен однобайтовым форматом и характеризуется двумя значениями: False (ложь) и True (истина).
Типы целочисленный, символьный и логический являются порядковыми, т.к. для каждого такого данного определены последующее и предыдущее значения.
Все величины, с которыми работает приложение, должны быть объявлены в разделе констант (служебное слово Const), если их значения не изменяются во время выполнения, или в разделе переменных (служебное слово Var) с указанием их типов, если их значения вычисляются.
Основные операции для формирования арифметических и логических выражений и приоритеты их выполнения представлены в таблице 3
Таблица 3 .
Приоритет выполнения операции | Операция | Выполняемое действие |
1 | +, - not | Присваивание знака Логическое отрицание |
2 | *, / div, mod and | Умножение, деление Целочисленное деление Логическое умножение |
3 | +, - or, xor | Сложение, вычитание Логическое суммирование |
4 | =,<>,<,>,<=,>= | Отношения (сравнения) |
Операции выполняются с учетом их приоритетов. Для изменения естественного порядка выполнения операций используются круглые скобки.
Результатом операции div является частное от деления двух чисел, а mod – остаток от деления, например:
(9 - 2) div 2 = 3; 7 mod 2 = 1
Стандартные функции и процедуры (таблица 4) описаны в файлах SysUtils и Math, которыедолжны быть включены в предложение uses:
Таблица 4
Стандартная функция | Тип аргумента | Тип результата | Математическая запись, комментарий |
abs(x) | integer, real | integer, real | │x│ |
arctan(x) | integer, real | real | arctg(x) |
cos(x) | integer, real | real | cos(x) |
sin(x) | integer, real | real | sin(x) |
exp(x) | integer, real | real | ex |
ln(x) | real, real | real | ln(x) |
sqrt(x) | integer, real | real | √x |
sqr(x) | integer, real | integer, real | x2 |
ord(x) | порядковый | integer | ASCCI-код символа |
succ(x) | порядковый | порядковый | возвращает следующее значение х |
pred(x) | порядковый | порядковый | возвращает предыдущее значение х |
round(x) | real | integer | округляет х до целого |
trunk(x) | real | integer | отсекает дробную часть х |
int(x) | real | real | выделяет целую часть х |
frac(x) | real | real | выделяет дробную часть х |
odd(x) | integer | boolean | True (х-нечетное), False (х-четное) |
random(range) | integer | integer | генерирует случайное число x в диапазоне 0<= х<range |
random | - | real | генерирует случайное число x в диапазоне от 0<= x<1 |
uppercase(x) | char | char | заменяет строчную букву латиницы на прописную |
lowercase(x) | char | char | заменяет прописную букву латиницы на строчную |
Стандартная процедура | Тип аргумента | Тип результата | Математическая запись, комментарий |
inc(x,n) | integer | integer | увеличивает х на n |
inc(x) | integer | integer | увеличивает х на 1 |
dec(x,n) | integer | integer | уменьшает х на n |
dec(x) | integer | integer | уменьшает х на 1 |
randomize | - | - | устанавливает генератор случайного числа на следующее значение. Используется совместно с random |
Приложение линейной структуры содержит операторы присваивания, вызова процедур (будут рассмотрены ниже), команды ввода и вывода данных.
Оператор присваивания записывается следующим образом:
<имя переменной>:= <выражение>, вычисляет выражение (арифметическое или логическое) и присваивает полученное значение имени переменной. Например, в результате выполнения операторов присваивания
s:= sqrt(p*(p- a)*(p- b)*(p- c)) и f:= (a> c) and (a< b),
переменная s получит числовое значение, а переменная f – логическое.
Ввод данных с клавиатуры осуществляется двумя стандартными командами (процедурами):
read (<список ввода>) и readln (<список ввода>),
где <список ввода> - это последовательность имен переменных, разделенных запятыми, значения которых необходимо ввести. При выполнении этих команд происходит приостановка выполнения приложения, после чего необходимо набрать на клавиатуре значения перечисленных в списке переменных (числа – через пробел, символы – без пробела). Вводимые данные должны соответствовать по типу и порядку следования перечисленным в списке переменным. По окончании ввода следует нажать клавишу <Enter>. Команда readln отличается от read только тем, что после считывания последнего в списке значения для одного оператора readln данные для следующего оператора будут считываться с начала новой строки. Вводить можно только переменные числового, символьного и строкового типов (строковый тип изложен в разделе 8).
Вывод на экран дисплея сообщений и результатов работы приложения осуществляется двумя стандартными командами (процедурами):
write (<список вывода>) и writeln (<список вывода>),
где <список вывода> - это последовательность имен переменных, разделенных запятыми, значения которых необходимо вывести. Список вывода может содержать константы, переменные или выражения. При использовании команды write после вывода последней переменной из списка курсор остается в той же строке экрана, и следующий вывод будет начинаться с этой же позиции курсора. Действие команды writeln отличается тем, чтопосле вывода последнего в списке значения происходит перевод курсора к началу следующей строки. При выводе нескольких данных в строку они не отделяются друг от друга пробелами. Поэтому следует применять форматированный вывод данных, т.е. представлять результаты в нужном и удобном виде. Для этого в скобках команды вывода после идентификатора переменной или выражения размещаются символ «:» и число, обозначающее количество позиций в строке экрана, которое необходимо выделить для вывода значения переменной или выражения. Такое выделение применяют для вывода целого и строкового типов. При выводе действительного типа указывают общее количество позиций для вывода значения и количество позиций для дробной части. Например, для вывода целых a=2, b=-13 и действительного с=-75,123456 можно записать
writeln (‘ ‘:3,‘a=’,a:2,’ b=’,b:5,’ c=’c:10:5). В результате на экране появится следующая строка:
a= 2 b= -13 c= -75.12346. Как видно из примера форматировать можно не только данные, но и комментарии к ним.
Пример 1: Вычислить и вывести в таблицу длины сторон треугольника по заданным целочисленным координатам его вершин. Алгоритм представляет собой линейную структуру, поскольку предполагает задание исходных данных, последовательный расчет длин сторон и вывод полученных результатов.
Код приложения Примера 1:
Program Example_1;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var x1,y1,x2,y2,x3,y3:longint; // координаты вершин
a12,a23,a31:real; // длины сторон
r1,r2:real48; // преобразование в действительный тип
Begin
writeln('Вычисление длин сторон треугольника по координатам вершин');
writeln('Введите координаты 1 вершины');
Readln(x1,y1);
writeln('Введите координаты 2 вершины');
Readln(x2,y2);
writeln('Введите координаты 3 вершины');
Readln(x3,y3);
{Вычисление длин сторон треугольника}
r1:=abs(x1-x2);r2:=abs(y1-y2);
a12:=sqrt(sqr(r1)+sqr(r2));
r1:=abs(x2-x3);r2:=abs(y2-y3);
a23:=sqrt(sqr(r1)+sqr(r2));
r1:=abs(x1-x3);r2:=abs(y1-y3);
a31:=sqrt(sqr(r1)+sqr(r2));
(*Вывод таблицы с исходными данными и результатами*)
writeln('=========================================================');
writeln(' Координаты вершин Длины сторон');
writeln(' x1 y1 x2 y2 x3 y3 1 - 2 2 - 3 3 - 1');
writeln('_________________________________________________________');
Writeln;
writeln(x1:5,y1:5,x2:5,y2:5,x3:5,y3:5,a12:8:2,a23:8:2,a31:8:2);
writeln('_________________________________________________________');
writeln('=========================================================');
Readln;
End.
Результаты работы приложения представлены в окне вывода (рис.1):
Рис.1. Результат работы приложения (Пример 1)
Примечание: в код приложения внесены комментарии. Комментарий – это любой поясняющий многострочный текст, заключенный в фигурные скобки {текст} или ограниченный комбинацией символов (*текст*). В Turbo Delphi возможно еще использование двух рядом стоящих символов //, которые любой текст до конца строки превращают в нечитаемый компилятором.
Варианты заданий
1. Вычислить дробную часть среднего геометрического трех заданных положительных чисел.
2. Вычислить длину окружности, площадь круга и объем шара одного и того же заданного радиуса.
3. По длинам двух сторон некоторого треугольника и углу (в градусах) между ними найти длину третьей стороны и площадь этого треугольника.
4. Найти произведение цифр заданного четырехзначного числа.
5. Определить число, полученное выписыванием в обратном порядке цифр заданного трехзначного числа.
6. Определить, равна ли сумма двух первых цифр заданного пятизначного числа произведению двух его последних цифр.
7. Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.
8. Определить, есть ли среди первых трех цифр из дробной части заданного положительного вещественного числа цифра 0.
9. Вычислить периметр и площадь прямоугольного треугольника по заданным значениям катета и острого угла (в градусах).
10. Вычислить длину гипотенузы и площадь прямоугольного треугольника по двум заданным катетам.
11. Какую площадь и периметр будет иметь квадрат, если описанный круг имеет заданную площадь.
12. Вычислить площадь и периметр квадрата, если задана его диагональ.
13. Треугольник задан координатами вершин на плоскости. Вычислить высоты треугольника.
14. Треугольник задан координатами вершин на плоскости. Вычислить медианы треугольника.
15. Треугольник задан координатами вершин на плоскости. Вычислить биссектрисы треугольника.
16. Треугольник задан координатами вершин на плоскости. Вычислить высоты треугольника и радиус вписанной окружности.
17. Треугольник задан координатами вершин на плоскости. Вычислить медианы треугольника и радиус описанной окружности.
18. Заданы два числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.
19. Определить площадь кольца, внутренний радиус которого задан, а внешний – равен кубу заданного.
20. Определить площадь кольца, внешний радиус которого задан, а внутренний – равен кубическому корню из заданного радиуса.
21. Треугольник задан величинами своих углов (в градусах) и радиусом описанной окружности. Найти стороны треугольника.
22. Найти площадь равнобедренной трапеции с заданными основаниями и углом (в градусах) при большем основании.
23. Вычислить корни квадратного уравнения, заданного своими коэффициентами (первый коэффициент не равен 0, дискриминант - неотрицателен).
24. Определить площадь треугольника по двум заданным сторонам и углу (в градусах) между ними.
25. Найти сумму членов арифметической прогрессии, если заданы ее первый член, разность и количество членов.