Реферат: Математический факультет



Математический факультет


Кафедра функционального анализа

и операторных уравнений


Программирование в среде Delphi


Часть I

Object Pascal

Создание консольных приложений


для студентов 1-2 курсов д/о

математического факультета


Составитель

О.Б.Садовская


Рекомендовано к изданию научно-методическим советом математического факультета Воронежского университета. Протокол № от


Данное учебное пособие содержит первую часть курса лекций Программирование в среде Delphi, которая посвящена изучению основ языка программирования Object Pascal на примерах создания консольных приложений. Пособие также содержит задачи для работы студентов на практических занятиях по данному курсу.


^ 1.1 Простейшее консольное приложение.

Основные понятия

Delphi – это среда разработки программ, ориентированных на работу в операционной системе Windows. В основе Delphi лежит технология визуального проектирования, которая базируется на идеях объектно-ориентированного программирования. Программы в Delphi пишутся на языке Object Pascal, который является развитием языка Turbo Pascal. Слово “Object” особо подчёркивает, что язык поддерживает концепцию объектно-ориентированного программирования. Программы, работающие в операционных системах семейства Windows, называют приложениями. Основной целью данного курса является обучение созданию оконных приложений с использованием возможностей визуального программирования. Однако Delphi позволяет программисту создавать приложения, в которых для ввода данных в оперативную память используются процедуры read и readln, а для вывода результатов на экран монитора – процедуры write и writeln. Такие приложения называются консольными. Первая часть данного курса лекций посвящена изучению основ языка Object Pascal на примерах создания консольных приложений.

Алфавит языка Object Pascal состоит из букв, цифр, специальных символов и неиспользуемых символов.

К буквам относятся большие и малые буквы латинского алфавита. При этом Object Pascal не различает одноимённые большие и малые буквы, если только они не входят в символьное или строковое выражение. Буквой является также знак подчёркивания « _ ».

К цифрам относятся арабские цифры от 0 до 9 и шестнадцатеричные цифры. Перед шестнадцатеричным числом ставят знак $ .

Специальные символы включают в себя разделители, знаки пунктуации, знаки операций и зарезервированные слова. В качестве разделителей можно использовать пробел, управляющие символы (символы с кодами от 0 до 32), комментарий. Комментарием называется любая последовательность символов, заключённая в фигурные скобки: {это комментарий}. Комментарий во время выполнения программы игнорируется, его основное назначение – пояснения к тексту программы.

Не следует путать комментарий в фигурных скобках и директивы компилятора, которые начинаются с пары символов {$, рассматриваемых как одно целое.

Знаки операций:

+ – * / = < > <= >=

Знаки пунктуации:

, . : ; // := .. “ ^ @ $ # ( ) (* *) [ ] (. .) { }

Зарезервированные слова нельзя использовать в качестве имён, которые задаёт программист. Примеры зарезервированных слов: begin, end, var, program, uses.

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

Идентификаторы (имена) используются для обозначения констант, типов, переменных, процедур, функций, классов, модулей, программ и т.д. Идентификаторы состоят из букв и цифр и должны начинаться с буквы. Длина идентификатора может быть произвольной, но значащими являются только первые 64 символа. Знак подчёркивания может входить в идентификатор. Специальные символы и неиспользуемые символы не могут входить в состав идентификаторов. Пример правильного идентификатора: pr_1_3. Примеры недопустимых идентификаторов: 5p сумма var sum.6 x 5

Консольное приложение состоит из заголовка (правильного идентификатора) и следующих разделов (структура консольного приложения):

^ Список подключаемых модулей начинается словом uses и содержит имена модулей, содержимое которых может использовать данное консольное приложение.

Раздел меток начинается словом label, за которым следует список меток, представляющих собой правильный идентификатор или целое число без знака. Метки позволяют пометить любой оператор, чтобы на него можно было передать управление из любого места программы.
Раздел констант начинается словом const, за которым идут конструкции вида <имя константы> = <значение>. Константами называют любые неизменяемые в процессе выполнения программы данные. Раздел описания типов начинается словом type, за которым идут конструкции вида <имя типа> = <описание>, позволяющие программисту создавать собственные типы. Раздел описания переменных начинается со слова var. Здесь должны быть указаны все переменные, используемые в разделе операторов программы, а также их тип: <имя переменной > : <тип>; Раздел описания процедур и функций не выделяется специальным служебным словом, поскольку каждая подпрограмма имеет свой заголовок. Подпрограмма имеет структуру, подобную основной программе. Раздел операторов начинается служебным словом begin и заканчивается словом end, после которого ставится точка – признак конца программы. Раздел операторов содержит последовательность действий, которую должен выполнить компьютер. В Object Pascal любой раздел, кроме последнего, может отсутствовать. В то же время, любой описательный раздел может встречаться несколько раз, при этом порядок следования разделов может быть произвольным. При этом следует руководствоваться правилом: все используемые типы, константы, переменные, функции, процедуры должны быть объявлены или описаны до их первого использования.
Типы данных в Object Pascal можно разделить на стандартные и определяемые программистом. Стандартные типы не нужно описывать в разделе type, а можно сразу использовать при описании переменных в разделе var. Имеющиеся в Object Pascal стандартные типы можно классифицировать следующим образом:


 Простые

Порядковые

Целые

Символьный

Логический

Перечислимый

Тип-диапазон

Вещественные

Тип дата-время

 Структурированные

Массивы

Строки

Множества

Записи

Файлы

Классы

Указатели

Процедурные

Variant



-Тип данных определяет множество допустимых значений, которые может иметь тот или иной объект данного типа, а также множество допустимых операций, которые применимы к нему.

Кроме стандартных типов есть ещё типы, определяемые программистом.

В Object Pascal можно использовать следующие стандартные математические функции:

abs(x) – абсолютное значение

arctan(x) – арктангенс

cos(x) – косинус

exp(x) – экспонента

frac(x) – дробная часть аргумента

int(x) – целая часть аргумента

ln(x) – натуральный логарифм

pi – число

round(x) – ближайшее целое аргумента

sin(x) – синус

sqr(x) – квадрат аргумента

sqrt(x) – квадратный корень

trunc(x) – отсечение дробной части вещественного числа


Выражение некоторых функций через стандартные:





В арифметическом выражении сначала вычисляются значения стандартных функций, затем операции умножения и деления ( * , / ), потом операции сложения и вычитания ( + , –). Если в выражении имеется несколько операций с одинаковым приоритетом, то они выполняются слева направо. Если нужно изменить порядок выполнения операций, то следует использовать круглые скобки (действия в скобках выполняются в первую очередь).

В консольном приложении ввод данных с клавиатуры осуществляется с помощью стандартных процедур read и readln, а вывод на экран дисплея – при помощи процедур write и writeln. При выполнении процедуры read происходит следующее. Программа приостанавливает свою работу и ждёт, пока на клавиатуре будут набраны нужные данные и нажата клавиша Enter. После нажатия клавиши Enter введённые значения присваиваются переменным, имена которых указаны в процедуре read. Например, то в результате выполнения процедуры read(x, y, z); и ввода с клавиатуры строки 5.25 10 -0.05 переменные будут иметь значения x=5.25 y=10.0 z=-0.05. В отличие от процедуры read процедура readln после ввода всех указанных в процедуре элементов списка ввода осуществляет переход к следующей строке дисплея. Назначение процедуры writeln – выводить информацию на экран. После этого курсор устанавливается в начало следующей строки. Если вы хотите оставить курсор на той же строке после последнего выведенного значения, то нужно использовать процедуру write. Для улучшения внешнего вида выводимых на экран дисплея данных можно использовать формат (описание поля вывода). Рассмотрим пример создания простейшего консольного приложения

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



program p1;

{$APPTYPE CONSOLE}

uses SysUtils;

var x, y, z : real;

begin

writeln('Enter x,y');

readln(x, y);

z:=(2*x–7.5)/(8*y+3.1) – 16.9;

writeln(' z= ',z:9:4);

readln

end.

В фигурных скобках содержится директива компилятора, указывающая на то, что создаётся консольное приложение. Компилятор – это программа, входящая в состав среды Delphi и предназначенная для перевода операторов, написанных на языке Object Pascal на язык машинных кодов, понятных процессору. Компиляция программы осуществляется одновременным нажатием клавиш CTRL и F9.

Инструкция uses SysUtils означает, что наша программа в процессе своей работы может использовать данные и подпрограммы, находящиеся в стандартном модуле SysUtils. Стандартные модули созданы разработчиками Delphi.
Программа в примере 1 содержит раздел описания переменных var и раздел операторов. Слово real, используемое для описания переменных x, y, z означает, что значения этих переменных должны быть вещественными числами.
Раздел операторов начинается со слова begin и заканчивается словом end, после которого стоит точка. Оператор writeln(Enter x,y); выводит на экран строку символов, расположенных между апострофами. При выполнении процедуры readln(x,y); после введения, например, чисел 2.3 и -5.41, переменным x и y будут присвоены значения: x=2.3 y=-5.41. Затем осуществляется переход к следующей строке экрана.

Оператор z:=(2*x–7.5)/(8*y+3.1) – 16.9; называется оператором присваивания. Этот оператор вычисляет значение выражения, стоящего справа от знака := , и присваивает вычисленное значение переменной, стоящей слева от знака := ( в данном случае переменная z получает значение -16.8278 )

Оператор writeln(' z= ',z:9:4); выводит на экран строку из двух символов z= , а затем вычисленное значение z. Формат вывода z:9:4 определяет, что на вывод всего числа на экране отводится 9 позиций, из них 4 позиции на вывод дробной части.

Оператор readln приостанавливает работу программы до нажатия клавиши Enter. Это нужно для того, чтобы просмотреть на экране результат работы программы. После просмотра нужно нажать клавишу Enter для завершения работы программы.

После успешной компиляции и запуска программы на выполнение (клавиша F9) на экране появится стандартное окно DOS, в котором вводятся исходные данные и выводится результат выполнения программы. В нашем примере содержимое окна DOS будет выглядеть следующим образом:

Enter x,y

-5.41

z= -16.8278

Текст написанной нами программы после сохранения содержится в файле с расширением .dpr . Этот файл называют файлом проекта. В примере 1 это файл p1.dpr . Файлы с расширением .cfg и .dof, содержащие установки и опции проекта, создаются автоматически. Файл с расширением .exe – файл приложения или исполняемый файл. Он будет создан компилятором, если в процессе компиляции не обнаружено синтаксических ошибок. Исполняемый файл является автономным исполняемым файлом, т.е. для его работы не требуются какие-либо другие файлы. Его можно запустить на выполнение, осуществив команду Открыть в окне Проводника.


Задачи.

Составить программу для вычисления значения переменной y по формуле ( x – вводимое с клавиатуры вещественное число):

1. 2.


3. 4.


5. 6.


7. Найти площадь треугольника, если известны три его стороны a, b, c. (Значения a, b, c вводятся с клавиатуры).

8. Даны координаты двух точек на плоскости A(x1,y1) и B(x2,y2). Найти длину отрезка AB. (Значения x1, y1, x2, y2 вводятся с клавиатуры).


^ 1.2 Простые типы

Простыми являются порядковые, вещественные типы и тип дата-время.

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

 ord(x) – возвращает порядковый номер значения данного выражения. Для целых типов возвращает само значение x, для логического 0 или 1, для символьного – значение в диапазоне от 0 до 255, для перечислимого – значение в диапазоне от 0 до 65535. Для типа­-дипазона результат зависит от свойств базового порядкового типа.

 pred(x) – возвращает значение, предшествующее значению данного выражения x.

 succ(x) – возвращает значение, следующее за значением данного выражения x.

 high(x) – возвращает максимальное возможное значение для аргумента x.

 low(x) – возвращает минимальное возможное значение для аргумента x.


^ Целые типы.

Тип

Диапазон значений

Размер (в байтах)

integer

-2147483648..2147483647

4

cardinal

0..4294967295

4

shortint

-128..127

1

smallint

-32768..32767

2

longint

-2147483648..2147483647

4

int64

-263..263-1

8

Byte

0..255

1

word

0..65535

2

longword

0..4294967295

4

Целые типы данных предназначены для представления целых чисел. Наибольшая производительность процессора и операционной системы достигается при использовании типов integer и cardinal.

К переменным целого типа можно применять операции целочисленного деления div и mod. Если a и b – переменные целого типа, то

a div b – это целая часть частного от деления a на b;

a mod b – это остаток от деления a на b.

Например, 9 div 2 = 4 9 mod 2 = 1

При применении к данным целого типа операций

* div mod + –

полученный результат будет также целого типа. То же можно сказать и о стандартных функциях abs и sqr. Операция деления / над целочисленными операндами даёт результат вещественного типа. Если в арифметическом выражении используются значения только какого-нибудь одного из целых типов, то результат выражения будет иметь такой же тип. Если же в выражении используются значения разных типов, то результат будет иметь тип integer. Для данных целого типа определены процедуры:

inc(i, k) – увеличивает значение i на k единиц; если k не задано, то на 1;

dec(i, k) – уменьшает значение i на k единиц; если k не задано, то на 1.

Пример 2. Дано целое четырёхзначное число n, введённое с клавиатуры. Найти сумму его первой и последней цифр.

program p2;

{$APPTYPE CONSOLE}

uses SysUtils;

var n : integer; s : byte;

begin

readln(n);

s:=n div 1000 + n mod 10 ;

writeln(' s= ',s); readln

end.


Задачи.

9. Найти сумму цифр данного целого трехзначного числа n.

10. Найти сумму цифр данного целого четырёхзначного числа n.

11. Дано двузначное число n. Получить число m, образованное перестановкой цифр исходного числа n. ( 39  93 ).

12. Дано двузначное целое число n. Получить число m, образованное приписыванием единицы в начале и в конце числа n. ( 65  1651 ).

13. Дано двузначное целое число n. Получить число m, образованное вписыванием цифры единица между цифрами числа n. ( 75  715 ).

14. Дано трёхзначное целое число n. Получить число m, образованное перестановкой цифр сотен и десятков числа n. ( 182  812 ).

15. Дано трёхзначное целое число n. Получить число m заменой на ноль средней цифры числа n. ( 973  903 ).


^ Символьные типы.

Тип

Размер (в байтах)

ANSIchar

1

Widechar

2

Char

1

Переменные символьного типа предназначены для хранения одного символа. Тип ANSIChar представляет собой так называемые Ansi-символы. Это символы, которые используются в операционных системах семейства Windows. Каждому символу соответствует число – код ANSI, что расшифровывается как American National Standard Institute. Из 256 имеющихся Ansi-символов первые 32 являются служебными, т.е. предназначены не для отображения информации, а для управления отображением информации. Код любого символа можно получить с помощью функции ord(x). Например, ord(Z)=90 ord(z)=122. Тип WideChar предназначен для хранения так называемых Unicode-символов, которые в отличие от Ansi-символов занимают два байта. Это позволяет кодировать символы числами от 0 до 65535. Первые 256 символов в стандарте Unicode совпадают с символами Ansi. Тип Char в Delphi5 эквивалентен типу AnsiChar и обеспечивает наибольшую производительность.

Стандартная функция chr(i) возвращает символ с порядковым номером i. Вместо chr(i) можно использовать оператор #. Например, chr(72) эквивалентно #72.

К значениям символьного типа можно применять операции отношения ( по коду) : < , > , <= , >= , <> , = . Например, z > Z .

Консольное приложение создаётся в операционной системе Windows, а выполняется под управлением операционной системы MS DOS, в которой используется таблица кодировки символов ASCII, отличающаяся от ANSI, начиная с 128 символа. В этой части таблицы находятся русские буквы. Поэтому вывести сообщение на русском языке в консольном приложении не удаётся. ( Для устранения этой проблемы в дальнейшем, накопив достаточно знаний, мы сможем написать функцию для перекодировки символов.)

Пример 3. Даны числа k1, k2, k3 из интервала [97, 122]. Напечатать слово, состоящее из символов с этими номерами.

program p3;

{$APPTYPE CONSOLE}

uses SysUtils;

var k1, k2, k3 : byte; c1, c2, c3 : char;

begin

readln(k1, k2, k3);

c1:=chr(k1); c2:=chr(k2); c3:=chr(k3);

writeln(c1, c2, c3);

readln

end.


После введения чисел 100 111 103 и нажатия клавиши Enter на экран будет выведено слово dog .


^ Логические типы
В Object Pascal данные логического (булева) типа могут принимать одно из двух значений: true (истина) или false (ложь). Логические типы, определённые в Object Pascal:


Тип

Размер (в байтах)

Boolean

1

ByteBool

1

WordBool

2

LongBool

4

Основным логическим типом в Delphi 5 является Boolean. Остальные типы нужны для совместимости с логическими данными, используемыми в Windows и некоторых других системах программирования, например Visual C.

В логических выражениях можно использовать логические операции: not (отрицание), and (логическое И ), or (логическое ИЛИ), xor (логическое исключающее ИЛИ). Результат применения этих операций к операндам логического типа представлен в следующей таблице.


X

Y

X and Y

X or Y

X xor Y

Not X

false

false

false

false

false

true

false

true

false

true

true

true

true

false

false

true

true

false

true

true

true

true

false

false

При записи логических выражений нужно помнить, что первой выполняется операция not, затем and, потом or и xor. Операции отношения выполняются в последнюю очередь.

Рассмотрим пример. Определить значение выражения:

(-3>=5) or not (7<9) and (0<=3)

Сначала выполняются операции в скобках слева направо:

(false) or not (true) and (true)

Затем not, and, or:

false or false and true  false or false  false

Таким образом, значение данного выражения – false.

Логические поразрядные операции предназначены для поразрядной обработки целочисленных операндов, представленных в двоичном виде. Такими операциями являются поразрядные отрицание (not), и (and), или (or), исключающее или (xor), а также поразрядные сдвиг влево (shl) и сдвиг вправо (shr). Расмотрим пример. Пусть переменные a и b типа byte имеют значения 3 и 5 соответственно. В двоичном представлении эти числа будут иметь вид : 00000011 и 00000101. Вычислим a xor b. Операция xor будет применяться поразрядно, т.е. к каждой паре чисел, стоящих в одинаковых позициях. Результат можно определить при помощи приведённой выше таблицы, если мысленно заменить 0 словом false, а 1 – словом true. Получим 00000110 = 6 (10). Операции shl и shr сдвигают значение переменной влево или вправо на указанное количество битов (например a shl 1 – сдвиг влево на 1 бит). При этом начальные или конечные биты теряются, а вновь появившиеся биты содержат нулевые значения. Это эквивалентно умножению на 2 в степени, равной количеству разрядов смещения.

Пример 4. Присвоить логической переменной t значение следующего логического выражения: натуральное число n при умножении на 6 заканчивается на 2, а при умножении на 7 заканчивается на 4.

var t : boolean; n : integer;

begin

readln(n);

t:=(n*6 mod 10=2) and (n*7 mod 10=4) ;

writeln(t);

readln

end.

Если ввести, например, число 32, то ответ получится true, а если ввести число 17, то получится false.


Задачи.

Присвоить логической переменной t значение следующего логического выражения:

16. Целое число x чётно и отрицательно.

17. Хотя бы одно из трёх целых чисел x, y, z равно 0.

18. Из двух целых чисел только одно кратно 3.

19. Сумма двух первых цифр четырёхзначного целого числа x равна сумме двух его последних цифр.

20. Цифра 5 входит в десятичную запись целого трёхзначного числа x.

21. Вещественное число x принадлежит отрезку [2, 5].

22. Среди цифр целого трёхзначного числа x есть одинаковые.

23. Четырёхзначное целое число n является палиндромом.

24*. Среди первых трёх цифр из дробной части заданного положительного вещественного числа х есть цифра 0.


^ Перечислимый тип
Перечислимый тип задаёт упорядоченное множество значений путём перечисления имён, обозначающих эти значения.

Например:

type color = (black, green, yellow, blue, red, white);

var a, b : color;

Применение перечислимого типа повышает наглядность программы и позволяет автоматически контролировать значения переменных, так как они могут принимать только одно из заданных в описании типа значений. Многие типы в Delphi являются перечислимыми, что даёт возможность работать не с абстрактными числами, а с осмысленными значениями.

При работе с переменными перечислимого типа можно использовать операторы присваивания, операции отношения, они могут быть параметром цикла for. Так как перечислимый тип является порядковым типом, то к переменным этого типа применимы функции succ, pred, ord. Порядковый номер первой из перечисленных в описании типа констант равен 0. В нашем примере ord(black)=0. Однако в Object Pascal нельзя непосредственно вводить и выводить значения перечислимых типов.

Пример 5.

type color = (black, green, yellow, blue, red, white);

var a, b, c : color; k1, k2 : byte;

begin

a:=blue; b:=pred(a); c:=succ(a);

k1:=ord(b); k2:=ord(c);

writeln(k1:5, k2:5); readln

end.

В результате выполнения данной программы переменная b получит значение yellow, а переменная c – значение red. Поэтому k1=2, k2=4. Числа 2 и 4 будут выведены на экран.


Тип-диапазон
Тип-диапазон можно определить, накладывая ограничения на какой-либо порядковый тип – его называют базовым типом.

type <имя типа> = <минимальная константа>..<максимальная константа>;

Например,

type

digit = 0 .. 9;

symb = A  Z;

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

Пример 6. Составить программу для вычисления среднего балла, полученного абитуриентом по результатам трёх экзаменов.

type ball = 2..5;

var m1, m2, m3 : ball; sr : real;

begin

readln(m1, m2, m3);

sr:=(m1 + m2 + m3)/3;

writeln(sr:7:2); readln

end.
^ Вещественные типы
Вещественные типы не являются порядковыми. Поскольку данные в компьютере хранятся в виде двоичных кодов, то действительные числа, в отличие от целых, представляются приближённо, хотя и с большой степенью точности. В Delphi 5 имеется 7 вещественных типов:

Тип

Диапазон значений

Размер (в байтах)

real

5.0*10–324 .. 1.7*10308

8

real48

2.9*10–39 .. 1.7*1038

6

single

1.5*10–45 .. 3.4*1038

4

double

5.0*10–324 .. 1.7*10308

8

extended

3.6*10–4951 .. 1.1*104932

10

comp

–263 +1 .. 263–1

8

currency

–922337203685477.5808 ..

922337203685477.5807

8

Наибольшая производительность процессора достигается при использовании типа real. В Delphi 5 ему эквивалентен тип double.

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

Вещественные значения могут изображаться в форме с фиксированной точкой ( например, 7.32 456.721 0.015), а также в форме с плавающей точкой, т.е. в виде <мантисса>Е<порядок>. Числа 7.32 может быть записано в форме с плавающей точкой следующим образом:

73.2 E -0001 7.32 Е +0000 0.732 Е +0001

Точка в мантиссе плавает – отсюда название. Вещественные числа выводятся на экран в форме с плавающей точкой, если не используется вывод с форматом.


^ Тип дата-время
Тип дата-время предназначен для одновременного хранения даты и времени. Определяется этот тип с помощью стандартного идентификатора TDateTime. Значения этого типа представляют собой 8-ми байтовые вещественные числа, при этом целая часть позволяет определить дату, а дробная – время. При вводе и выводе дат и времени можно использовать следующие стандартные функции для получения данных в привычном для нас виде:

StrToDateTime – преобразовывает строку в величину типа TDateTime;

StrToTime – преобразовывает строку в величину типа TDateTime;

DateTimeToStr – преобразовывает величину типа TDateTime в строку;

DayOfWeek – возвращает номер дня недели для заданной даты.

Пример 7. Определить дату и день недели, которые наступят через 10000 дней, 13 часов, 15 минут, 6 секунд после заданного момента.

В качестве заданного момента времени возьмём 25 апреля 1973 года, 23 часа 35 минут, 22 секунды.

var d : TDateTime; k:integer;

begin

d:=StrToDateTime('25.04.1973 23:35:22');

d:=d + StrToTime('13:15:6') + 10000;

writeln(DateTimeToStr(d));

k:=DayOfWeek(d);

writeln(k); readln

end.

После запуска программы на экран будет выведено:

11.09.2000 12:50:28

2


1.3 Операторы
^ Оператор присваивания
Оператор присваивания обозначается символом := . Действие его заключается в том, что вычисляется значение выражения, стоящего справа от знака присваивания , и это значение присваивается переменной, стоящей слева от знака присваивания.

Пусть, например, переменной x присвоено значение 13, а переменной y – значение 25. Чтобы x и y поменялись значениями, можно, используя вспомогательную (буферную) переменную t, записать следующую последовательность операторов присваивания:

x:=13; y:=25; t:=x; x:=y; y:=t;

В результате получим x=25 y=13.





^ Составной оператор
Составным оператором называется группа операторов, заключённая в операторные скобки begin … end. Составной оператор используется в тех случаях, когда по правилам языка Object Pascal разрешается использовать один оператор, а программисту для решения задачи необходимо выполнить группу операторов. Для разделения операторов предназначена точка с запятой.


Условный оператор IF

Оператор if предназначен для реализации разветвляющегося вычислительного процесса. В общем виде условный оператор записывается следующим образом:

if <логическое выражение> then <оператор1> else <оператор2>;

Вначале оператор if вычисляет значение логического выражения. Если значение логического выражения равно true, то выполняется оператор1, в противном случае – оператор2. В качестве оператора1 и оператора2 может быть использован составной оператор (группа операторов, заключённых в операторные скобки begin end) или другой условный оператор (вложенный условный оператор).

Оператор if может быть записан в сокращённой форме:

if <логическое выражение> then <оператор> ;

Пример 8. Даны два различных вещественных числа. Вывести на экран большее из них.

var x, y : real;

begin

readln(x, y);

if x>y then writeln(x:7:2) else writeln(y:7:2);

readln

end.


Пример 9. Даны два действительных числа x, y. Если x и y отрицательны, то каждое из чисел заменить его квадратом; если отрицательно только одно из них, то каждое из чисел увеличить в 10 раз; если оба числа неотрицательны, то каждое из них заменить корнем квадратным.

var x, y : real;

begin

readln(x, y);

if (x<0) and (y<0) then begin x:=sqr(x); y:=sqr(y) end

else

if (x<0) xor (y<0) then begin x:=x*10; y:=y*10 end

else begin x:=sqrt(x); y:=sqrt(y) end;

writeln('x=', x:6:2,' y=', y:6:2); readln

end.




да


нет

x10x y10y
да


нет



Пример 10. Даны три различных вещественных числа a, b, c. Найти максимальное из этих чисел.

var a, b, c, max : real;

begin

readln(a, b, c);

if (a>b) and (a>c) then max:=a

else

if b>c then max:=b

else max:=c;

writeln('max= ', max:7:2); readln

end.




да


нет


да


нет


Задачи.

25. Дано натуральное число x. Если оно нечётное, то удвоить его, в противном случае – уменьшить в два раза.

26. Даны целые числа m и n. Если число m делится нацело на число n, то вывести на экран частное от деления. В противном случае вывести два числа: целую часть частного и остаток от деления.

27. Даны вещественные числа a, b, c. Удвоить эти числа, если abc, и заменить их абсолютными значениями, если это не так.

28. Дано вещественное число x. Вычислить значение функции



29. Дано вещественное число x. Вычислить значение функции



30. Дано вещественное число x. Вычислить значение функции



31. Дано вещественное число x. Вычислить значение функции



32. Дано вещественное число x. Вычислить значение функции



33. Даны вещественные числа x, y. Переменной k присвоить номер четверти плоскости, в которой находится точка с координатами (x, y) (x0, y0).

34. Даны вещественные числа x, y (xy). Меньшее из них заменить их полусуммой, а большее – их удвоенным произведением.

35. Даны вещественные положительные числа a, b, c, d. Напечатать сообщение, можно ли прямоугольник со сторонами a, b уместить внутри прямоугольника со сторонами c, d так, чтобы каждая сторона одного прямоугольника была параллельна или перпендикулярна каждой стороне второго прямоугольника.

36. Даны вещественные положительные числа a, b, c. Если существует треугольник со сторонами a, b, c, то определить, является ли он прямоугольным.

37. Даны вещественные ненулевые числа x, y. Если они имеют разные знаки, то отрицательное заменить его абсолютным значением. В противном случае оба числа заменить на число 100.

38. Даны вещественные числа a, b, c (a0). Найти действительные корни уравнения ax2 + bx + c = 0. Если действительных корней нет, то вывести об этом сообщение.

39. Если сумма трёх различных действительных чисел x, y, z меньше единицы, то наименьшее из них заменить полусуммой двух других. В противном случае заменить меньшее из x и y полусуммой двух оставшихся значений.

40*. Написать программу, которая после ввода текущей даты (день, месяц, год – через пробел) и даты рождения данного человека (день, месяц, год – через пробел), определяет, исполнилось ли человеку полных 16 лет.

41*. Дано целое число k (1 k 180) . В последовательности цифр

101112131415…979899 ,

в которой выписаны подряд все двузначные числа, определить k-ю цифру.


^ Оператор выбора CASE

В отличие от оператора if, оператор case позволяет выбрать один оператор не из двух, а из нескольких операторов. В общем виде оператор case может быть записан следующим образом:

case <выражение> of

<список меток 1> : <оператор1>;

<список меток 2> : <оператор2>;

…………………………………..

<список меток N> : <операторN>

else

<оператор>

end;

Здесь <выражение> – это выражение порядкового типа. Вначале вычисляется значение этого выражения. Затем полученное значение последовательно сравнивается с константами из списков меток. Если значение выражения совпадает с какой-нибудь константой, то выполняется соответствующий оператор. Если значение выражения не совпадает ни с одной константой, то выполняется оператор, стоящий за словом else. Если слово else отсутствует, то выполняется оператор, стоящий за словом end.

Пример 11. По номеру дня недели определить название дня недели.

type week=1..7;

var day : week;

begin

readln(day);

case day of

1 : writeln(Понедельник);

2 : writeln(Вторник);

3 : writeln(Среда);

4 : writeln(Четверг);

5 : writeln(Пятница);

6 : writeln(Суббота);

7 : writeln(Воскресенье)

else writeln(Ошибка ввода)

end; readln

end.


Задачи.

42. По номеру месяца определить время года. (Например, 4 – весна).

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

44. Для натурального числа n напечатать фразу n грибов (использовать латиницу – gribov), согласовав окончание слова гриб с числом n.

45. Дано натуральное число n (1.n99), определяющее возраст человека. Напечатать фразу Мне n лет (использовать латиницу), учитывая при этом, что при некоторых значениях n слово лет надо заменить на слово год или года.


^ Операторы цикла
Часто при решении задач необходимо многократно выполнять определённую последовательность действий. Такие повторяющиеся действия называются циклами. В языке Object Pascal возможна организация 3-х видов циклов.

С параметром (оператор for)

С предусловием (оператор while)

С постусловием (оператор repeat)

Оператор цикла for организует выполнение последовательности операторов заранее известное число раз. Существуют два варианта оператора:

1. С увеличением счётчика:

for <счётчик> := <начальное значение> to <конечное значение> do <оператор>;

2. С уменьшением счётчика:

for <счётчик>:=<начальное значение>downto <конечное значение>do <оператор>;

Здесь

<счётчик> – переменная порядкового типа – параметр цикла;

<начальное значение> и <конечное значение> – выражения, которые должны быть совместимы с параметром цикла;

<оператор> – это оператор, который выполняется в цикле – тело цикла.

Если в цикле необходимо выполнить группу операторов, то её следует заключить в операторные скобки begin…end.

Оператор for действует следующим образом. Вначале вычисляются начальное и конечное значения счётчика. Далее счётчику присваивается начальное значение. Затем значение счётчика сравнивается с конечным значением. Далее, пока счётчик меньше или равен конечному значению ( в первом варианте ) или больше или равен ( во втором варианте ), выполняется очередная итерация цикла. В противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение тела цикла, а затем присвоение счётчику следующего большего значения (в первом варианте ) или следующего меньшего значения ( во втором варианте ). Если параметр цикла целого типа, то это означает увеличение либо уменьшение его на 1. В первом варианте начальное значение должно быть меньше конечного, а во втором варианте – больше конечного. В противном случае тело цикла не будет выполнено ни разу.

Пример 12. Напечатать столбиком все целые числа от 30 до 45.

var i : integer;

begin

for i:=30 to 45 do writeln(i);

readln

end.


Пример 13. Найти сумму всех целых чисел от 10 до 50.

var i, s : integer;

begin

s:=0;

for i:=10 to 50 do s:=s+i;

writeln(s);

readln

end.

Рассмотрим выполнение этой программы по шагам:

i s

10 0 + 10 = 10

11 10 + 11 = 21

12 21 + 12 = 33

…………………………..

50 1230


Пример 14. Вычислить сумму 22 + 23 + 24 + … + 210

Для решения этой задачи сначала ответим на вопрос: сколько слагаемых в этой сумме? Слагаемые – это степени двойки от 2ой до 10ой. Следовательно, имеем 9 слагаемых. Каждое следующее слагаемое получается из предыдущего умножением на 2. Пусть a – очередное слагаемое, s – сумма. Использу
еще рефераты
Еще работы по разное