Реферат: Программирование на языке Турбо Паскаль
Лекция 1. Структура программы на языке Turbo PascalПриведём простейший пример программы, единственная целькоторой <span Times New Roman CYR""><span Times New Roman CYR"">–
вывести на экран какое-нибудь приветствие:program Hello;
begin
writeln('Hello, world!');
readln;
end.
Первая строка ничего не делает, она просто содержит названиепрограммы. Затем, после слова beginначинаются собственно действия. В нашей программе их два: первое <span Times New Roman CYR""><span Times New Roman CYR"">–
это вывод строчки «Hello,world»<span Times New Roman",«serif»;mso-ansi-language: EN-US"> на экран, а второе <span Times New Roman CYR""><span Times New Roman CYR"">– ожидание нажатия клавиши «Enter», оно нужно для того,чтобы можно было увидеть результат программы, а затем уже нажать «Enter» и вернуться вТурбо-Паскаль. И, наконец, слово end с точкой в последней строке говорит о том, что программазакончилась. Действия, из которых состоит программа, называются операторами, они отделяются друг отдруга точкой с запятой.А теперь приведём пример, в котором программа уже не«глухая», то есть может запрашивать какие-либо данные у пользователя. Пустьтребуется спросить у пользователя два числа, после этого вывести на экран ихпроизведение:
program AxB;
var a,b: integer;
begin
writeln('Введите a и b');
readln(a,b);
writeln('Произведение равно ',a*b);
readln;
end;
В этой программе перед словом begin появляется новая строчка,начинающаяся словом var.В ней мы указываем, что программе понадобится две переменные (a и b), в которых можно хранить целые числа (слово integer).
О том, что делает первый оператор, нам известно: он выводитна экран строчку 'Введите a и b'. При выполнении второго оператора программабудет ждать, пока пользователь не введет число с клавиатуры и не нажмёт «Enter»; это число программазапишет в переменную a,затем то<span Times New Roman",«serif»;mso-ansi-language: EN-US">
же самое делается для переменной b. Третьим оператором выводим на экрансначала надпись «Произведение равно », а потом значение выражения <span Times New Roman",«serif»;mso-ansi-language:EN-US">a<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-ansi-language:EN-US;mso-char-type: symbol;mso-symbol-font-family:Symbol">×<span Times New Roman",«serif»;mso-ansi-language:EN-US">b («*»<span Times New Roman CYR""><span Times New Roman CYR"">–знак умножения<span Times New Roman",«serif»; mso-ansi-language:EN-US">). Четвёртый оператор пояснений не требует.А теперь<span Times New Roman",«serif»; mso-ansi-language:EN-US">
рассмотрим структуру программы в общем виде.Любая программа на Турбо-Паскале состоит из трех блоков: блока объявлений,блока описания процедур и функций и блока основной программы. Ниже эти блокирасписаны более подробно.<span Times New Roman",«serif»; mso-ansi-language:EN-US">Блок объявлений:
program… (название программы)
uses… (используемые программой внешние модули)
const… (объявления констант)
type… (объявления типов)
var... (объявления переменных)
Блок описания процедур и функций:
procedure(function)
begin
...
end;
...
Блок основной программы:
begin
… (операторы основнойпрограммы) ...
end;<span Times New Roman",«serif»">
Рассмотрим наиболее важные частивышеописанных блоков. Под заголовком программы понимается имя, помогающееопределить её назначение. Имя, или идентификатор,строится по следующим правилам: оно может начинаться с большой или малой буквылатинского алфавита или знака «_», далее могут следовать буквы, цифры или знак«_»; внутри идентификатора не может стоять пробел. После имени программыследует поставить «;», этот знак служит в Паскале для разделенияпоследовательных инструкций. Заметим, что имя программы может не совпадать сименем соответствующего файла на диске.
После слова const помещаются описания постоянных,которые будут использованы в программе, например:
<span Times New Roman",«serif»;mso-ansi-language:EN-US">
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">const
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> Zero = 0;<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">pi = 3.1415926;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">my_const = -1.5;
<span Courier New"; mso-bidi-font-family:«Times New Roman»"><span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Hello = '
<span Courier New"; mso-bidi-font-family:«Times New Roman»">Привет !<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">';<span Times New Roman",«serif»;mso-ansi-language:EN-US">
За словом var следуют объявленияпеременных, которые понадобятся нам при написании программы. Переменные Паскалямогут хранить данныеразличнойприроды: числа, строки текста, отдельные символы и т. п. Ниже приводится частьтипов переменных, которые можно применять.
Название типа
Возможные значения
Примеры значений
integer
целые: -32768… 32767
12, -10000
real
действительные (по модулю): 2,9x10-39… 1,7x1038
-9.81, 6.02e-23
string[n]
строка до n символов длиной, если [n] не указано, то до 255
‘abcde’, ‘привет’
char
одиночный символ
‘F’, ‘!’, ’_’,’ю’
<span Times New Roman",«serif»;mso-ansi-language:EN-US">
Объявления переменныхзаписываются в следующей форме:<span Times New Roman",«serif»; mso-ansi-language:EN-US"> var <
переменная<span Times New Roman",«serif»;mso-ansi-language:EN-US">>: <span Times New Roman",«serif»;mso-ansi-language: EN-US"><тип<span Times New Roman",«serif»; mso-ansi-language:EN-US">>;<span Times New Roman",«serif»;mso-ansi-language:EN-US">Если описываются несколько переменныходного типа, то достаточно записать их имена через запятую, а после двоеточияпоставить общий тип.
Примеры объявления:
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> Number: integer;<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">d,l: real;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Name: string[20];
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Line: string;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">Key1,Key2: char;
<span Times New Roman",«serif»;mso-ansi-language:EN-US">
Блок основной программы. Здесь, между словами <span Times New Roman",«serif»;mso-ansi-language:EN-US">begin
и<span Times New Roman",«serif»;mso-ansi-language: EN-US">end. располагаются команды (точнее, операторы), которые будутвыполняться один за другим при запуске программы. Рассмотрим простейшие типыоператоров на следующем примере:<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">program
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> First;<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">const
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> a<span Courier New"; mso-bidi-font-family:«Times New Roman»">2<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> = 3;<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">a1 = -2;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">a0 = 5;
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> x,f: real;<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">begin
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">write(‘
<span Courier New"; mso-bidi-font-family:«Times New Roman»">Введите значение х <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">’);<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">readln(x);
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">f
<span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">:=<span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">a2*x*x+a1*x+a0;<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">writeln(‘
<span Courier New"; mso-bidi-font-family:«Times New Roman»">Значение квадратного трехчлена: <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">’<span Courier New"; mso-bidi-font-family:«Times New Roman»">,<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">f);<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">end
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">.<span Times New Roman",«serif»;mso-ansi-language:EN-US">
Первая строка исполняемой(основной) части программы выводит на экран надпись «Введите значение х », дляэтого используется процедура writeнаписанная разработчиками Турбо Паскаля, то есть набор команд, невидимыйдля нас, но существующий реально в недрах системы Турбо Паскаль. В качествепараметра этой процедуры используется наша строчка. Параметры всегдазаписываются в круглых скобках, апострофы означают, что параметр имеетстроковый тип. Итак, в первой строке мы видим так называемый оператор вызовапроцедуры. Каждый оператор отделяется от следующего знаком «;». Во второйстроке вызывается процедура ввода readln(x), которая ждет, пока пользователь наберет значение x с клавиатуры и нажметклавишу «Enter», азатем переводит курсор на следующую строку (ln <span Times New Roman CYR"; mso-hansi-font-family:«Times New Roman CYR»;mso-char-type:symbol;mso-symbol-font-family: Wingdings;mso-no-proof:yes">ó
Line <span Times New Roman CYR""><span Times New Roman CYR"">–строка). В третьей строке вычисляется значение трехчлена и записываетсяв переменную f; этотоператор называется оператором присваивания, и обозначается символом ":=". В последней строкена экран выводится строка «Значениеквадратного трехчлена: » и значение переменной f. Несложно заметить, что здесьпроцедуре writeln передаетсяуже не один, а два параметра, причем они могут иметь разные типы. Вообще,процедуры ввода и вывода (т.е. write,writeln, read, readln)могутиметь любое число параметров различных типов, параметрами могут являтьсяпеременные, литералы (т.е. непосредственно записанные числа, строки; в нашемпримере дважды были использованы строковые литералы), а также выражения.Используя выражение при выводе, можно заменить две последние строчки нашейпрограммы одной:<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">writeln('
<span Courier New";mso-bidi-font-family:«Times New Roman»">Значениеквадратного трехчлена: <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">'<span Courier New";mso-bidi-font-family:«Times New Roman»">,<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> a2*x*x+a1*x+a0);<span Courier New"; mso-bidi-font-family:«Times New Roman»">В арифметических выражениях наПаскале используются следующие знаки для обозначения операций: +, -, *, <span Times New Roman",«serif»;mso-ansi-language:EN-US">/
.Для определения порядка действий используются круглые скобки согласнообщепризнанным математическим правилам.Замечание об именах. Для обозначения переменных запрещаетсяиспользование ряда слов, называемых зарезервированными, они играют в языкеособую роль. Нам уже встречался ряд зарезервированных слов: program, begin, end, string, const, var, ит.п.
<span Times New Roman",«serif»;mso-ansi-language:EN-US">
Лекция 2.Процедуры ввода-вывода. Некоторые встроенные функции Турбо-Паскаля.1. Процедуры ввода<span Times New Roman",«serif»; mso-ansi-language:EN-US">-
вывода. Почти каждая программа должнаобщаться с пользователем, то есть выводить результаты своей работы на экран изапрашивать у пользователя информацию с клавиатуры. Для того чтобы это сталовозможным, в Турбо-Паскале имеются специальные процедуры (то есть небольшиевспомогательные программы), называются он процедурами ввода-вывода. Для тогочтобы заставить процедуру работать внашей программе, нужно написать её имя, за которым в скобках, через запятуюперечислить параметры, которые мы хотим ей передать. Для процедуры выводаинформации на экран параметрами могут служить числа или текстовые сообщения,которые должна печатать наша программа на экран. Опишем назначение этихпроцедур.·<span Times New Roman"">
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">write(p1,p2,…pn);<span Times New Roman CYR""><span Times New Roman CYR"">–выводит на экран значения выражений p1,p2,… pn, количество которых (n) неограничено. Выражения могут бытьчисловые, строковые, символьные и логические. Под выражением будем пониматьсовокупность некоторых действий, применённых к переменным, константам илилитералам, например: арифметические действия и математические функции длячисел, функции для обработки строк и отдельных символов, логические выражения ит.п. Возможен форматный вывод, т.е. явное указание того, сколько выделятьпозиций на экране для вывода значения. Пример для вещественных типов: write(r+s:10:5); <span Times New Roman CYR""><span Times New Roman CYR"">–вывести значение выражения r+s с выделением для этого 10 позиций, из них 5 <span Times New Roman CYR""><span Times New Roman CYR"">–после запятой. Для других типов все несколько проще: write(p:10); <span Times New Roman CYR""><span Times New Roman CYR"">– вывестизначение выражения p,выделив под это 10 позиций. Вывод на экран в любом случае производится поправому краю выделенного поля.·<span Times New Roman"">
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">writeln(p1,p2,…pn); <span Times New Roman CYR""><span Times New Roman CYR"">–аналогично write,<span Courier New"; mso-bidi-font-family:«Times New Roman»"> выводит значения <span Times New Roman",«serif»;mso-ansi-language:EN-US">p1,p2,…pn, после чего переводит курсор на новую строку. Смысл параметров <span Times New Roman CYR""><span Times New Roman CYR"">–тот же, замечания о форматном выводе остаются в силе. Существует вариант <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">writeln; (без параметров), что означает лишьперевод курсора на начало новой строки.·<span Times New Roman"">
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">readln(v1,v2,...vn);<span Times New Roman CYR""><span Times New Roman CYR"">–ввод с клавиатуры значений переменных <span Times New Roman",«serif»;mso-ansi-language:EN-US">v1,...vn.Переменные могут иметь строковый, символьный или числовой тип. При вводеследует разделять значения пробелами, символами табуляции или перевода строки(т.е., нажимая <span Times New Roman",«serif»; mso-ansi-language:EN-US">Enter).·<span Times New Roman"">
read(v1,v2,...vn);<span Times New Roman CYR""><span Times New Roman CYR"">–по назначению сходно с readln;отличие состоит в том, что символ перевода строки (Enter), нажатый при завершении ввода, не«проглатывается», а ждет следующего оператора ввода. Если им окажется операторввода строковой переменной или просто readln; то строковой переменной будет присвоено значение пустойстроки, а readln безпараметров не станет ждать, пока пользователь нажмет Enter, а среагирует на уже введенный.Пример.Программа просит пользователя ввести с клавиатуры два целых числа и печатает наэкране их сумму:
programPrintSum;
vara,b: integer;
begin
write('Введите два числа:');
readln(a,b);
writeln('Сумма a и b равна ',a+b);
readln;
end.
<span Times New Roman CYR"; mso-bidi-font-family:«Times New Roman CYR»">2. <span Times New Roman"">
Функции числовых параметров.Название
Значение
<span Times New Roman",«serif»;mso-ansi-language:EN-US">abs
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)модуль x
<span Times New Roman",«serif»;mso-ansi-language:EN-US">cos
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)косинус<span Times New Roman",«serif»;mso-ansi-language:EN-US">
x<span Times New Roman",«serif»;mso-ansi-language:EN-US">frac
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)дробная часть x
<span Times New Roman",«serif»;mso-ansi-language:EN-US">int
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)целая часть x (т.е. ближайшее целое, не превосходящее x)
<span Times New Roman",«serif»;mso-ansi-language:EN-US">pi
число <span Times New Roman CYR";mso-hansi-font-family: «Times New Roman CYR»;mso-char-type:symbol;mso-symbol-font-family:Symbol">p
<span Times New Roman",«serif»;mso-ansi-language:EN-US">round(x)
x, округлённое до целого
<span Times New Roman",«serif»;mso-ansi-language:EN-US">sin
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)синус x
<span Times New Roman",«serif»;mso-ansi-language:EN-US">sqr
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)квадрат x
<span Times New Roman",«serif»;mso-ansi-language:EN-US">sqrt
(<span Times New Roman",«serif»;mso-ansi-language: EN-US">x)квадратный корень из x
<span Times New Roman",«serif»;mso-ansi-language:EN-US">trunc(x)
число, полученное из x отбрасыванием дробной части
Лекция 3. Операторыусловного выполнения.1. Оператор if.Иногда требуется, чтобы часть программы выполнялась невсегда, а лишь при выполнении некоторого условия (а при невыполнении этогоусловия выполнялась другая часть программы). В этом случае пользуютсяоператором условного выполнения, который записывается в следующем виде:
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">if
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> <<span Courier New"; mso-bidi-font-family:«Times New Roman»">условие<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">then<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> <<span Courier New"; mso-bidi-font-family:«Times New Roman»">оператор1<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">else<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> <<span Courier New"; mso-bidi-font-family:«Times New Roman»">оператор2<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">>;Под оператором понимается либо одиночный оператор (например,присваивания, вызова процедуры), либо т.н. составной оператор, состоящий изнескольких простых операторов, помещённых между словами begin и end. Важно заметить, что перед else неставится точка с запятой.Частьelse может иотсутствовать.
Пример 1: пустьтребуется найти число m=max(a,b).Этой задаче соответствует следующий фрагмент программы на Паскале:
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">if
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> a>b thenm:=a else m:=b;<span Courier New";mso-bidi-font-family:«Times New Roman»">Пример 2: (без else) пусть дано целое число i. Требуется оставить его безизменения, если оно делится на 2, и вычесть из него 1, если это не так.
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">i: integer;<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">.......
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">if
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US"> i mod 2 = 1 then i:=i-1;<span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">{else -<span Courier New"; mso-bidi-font-family:«Times New Roman»"> ничего не делать<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">}<span Courier New"; mso-bidi-font-family:«Times New Roman»">Примечание: в примере использована операция нахожденияостатка от деления (<span Times New Roman",«serif»; mso-ansi-language:EN-US">mod
), для нахождения неполного частного вТурбо-Паскале используется <span Times New Roman",«serif»; mso-ansi-language:EN-US">div.Пример 3: (сиспользованием составного оператора). Пусть даны две переменные типа <span Times New Roman",«serif»;mso-ansi-language:EN-US">real
.Требуется поменять местами значения этихпеременных, если <span Times New Roman",«serif»; mso-ansi-language:EN-US">a1>a2.<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">a1,a2,buf :real;<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">.........
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">if
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US"> a1>a2 then begin<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US"> buf:=a1;
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US"> a1:=a2;
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US"> a2:=buf;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">end
<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">;<span Courier New";mso-bidi-font-family:«Times New Roman»">Следующий пример использует вложенные операторы <span Times New Roman",«serif»;mso-ansi-language:EN-US">if
.<span Times New Roman",«serif»;mso-ansi-language:EN-US">Пример 4: Поисккорней квадратного уравнения.
<span Courier New";mso-bidi-font-family:«Times New Roman»">program
<span Courier New";mso-bidi-font-family:«Times New Roman»">SqEquation;<span Courier New";mso-bidi-font-family:«Times New Roman»">var
<span Courier New";mso-bidi-font-family:«Times New Roman»">a,b,c,d: real;<span Courier New";mso-bidi-font-family:«Times New Roman»">begin
<span Courier New";mso-bidi-font-family: «Times New Roman»"> writeln;
<span Courier New";mso-bidi-font-family: «Times New Roman»"> write('Введитекоэффициенты a,b,c квадратного уравнения: ');
<span Courier New";mso-bidi-font-family: «Times New Roman»"> readln(a,b,c);
<span Courier New";mso-bidi-font-family: «Times New Roman»"> d:=sqr(b)-4*a*c;
<span Courier New";mso-bidi-font-family: «Times New Roman»"> if d>=0 then
<span Courier New";mso-bidi-font-family: «Times New Roman»"> if d=0 then writeln('Единственный корень: x=',-b/(2*a):8:3)
<span Courier New";mso-bidi-font-family: «Times New Roman»"> else writeln('Два корня:x1=',(-b+sqrt(d))/(2*a):8:3,
<span Courier New";mso-bidi-font-family: «Times New Roman»"> ',x2=',(-b-sqrt(d))/(2*a):8:3)
<span Courier New";mso-bidi-font-family: «Times New Roman»"> else {d<0} writeln('Корней нет');
<span Courier New";mso-bidi-font-family: «Times New Roman»"> readln;
<span Courier New";mso-bidi-font-family: «Times New Roman»">end.
Чтобы не запутаться в структуре этой программы, следуетпомнить такое правило: <span Times New Roman",«serif»;mso-ansi-language:EN-US">else
всегдаотносится к последнему оператору <span Times New Roman",«serif»;mso-ansi-language:EN-US">if.Если же в программе требуется, чтобы <span Times New Roman",«serif»;mso-ansi-language:EN-US">else относилось кодному из предыдущих<span Times New Roman",«serif»; mso-ansi-language:EN-US"> if,<span Times New Roman",«serif»; mso-ansi-language:EN-US"> то придется воспользоваться составнымоператором:Пример 5:<span Times New Roman",«serif»; mso-ansi-language:EN-US">
пользователь вводит натуральное число,задача программы — поставить слово «ученик» в нужную форму в сочетании счислительным (например: 1 ученик, 3 ученика, 9 учеников и т.п.)<span Courier New";mso-bidi-font-family:«Times New Roman»">begin
write('Число учеников (1..20) --> ');readln(n);
write(n,' ученик');
if n<5 then begin
ifn>1 then writeln('а');
end
else
writeln('ов');
readln;
end.
В этом примере пришлось использовать составной оператор (begin… end;) для тогочтобы часть else относиласьне к оператору if n>1,а к if n<5.
2. Оператор выбора (case)<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">Кроме оператора условного выполнения и циклов в ТурбоПаскале имеется ещё одна управляющая конструкция, одно из названий которой —оператор выбора. На самом деле это усложнённый оператор if,он позволяет программе выполняться не двумя способами, в зависимости отвыполнения условия, а несколькими, в зависимости от значения некотороговыражения. В общем виде этот оператор выглядит так:
caseВыражение of
Вариант1: Оператор1;
Вариант2: Оператор2;
...
ВариантN: ОператорN;
[else ОператорN1;]
end;
(Пояснение: квадратные скобки означают то, что часть <span Times New Roman",«serif»;mso-ansi-language:EN-US">else
может отсутствовать).Выражение в простейших случаях может быть целочисленным илисимвольным. В качестве вариантов можно применять:
<span Times New Roman CYR";mso-bidi-font-family:«Times New Roman CYR»">1. <span Times New Roman"">
case. Константное выражение отличаетсяот обычного тем, что не содержит переменных и вызовов функций, тем самым ономожет быть вычислено на этапе компиляции программы, а не во время выполнения.<span Times New Roman CYR";mso-bidi-font-family:«Times New Roman CYR»">2. <span Times New Roman"">
'a'..'z'.<span Times New Roman CYR";mso-bidi-font-family:«Times New Roman CYR»">3. <span Times New Roman"">
Выполняется оператор case следующим образом: вычисляется выражение после слова case и по порядкупроверяется, подходит полученное значение под какой-либо вариант, или нет. Еслиподходит, то выполняется соответствующий этому варианту оператор, иначе — естьдва варианта. Если в операторе caseзаписана часть else,то выполняется оператор после else,если же этой части нет, то не происходит вообще ничего.
Рассмотрим пример. Пусть пользователь вводит целое число от1 до 10, программа должна приписать к нему слово «ученик» с необходимымокончанием (нулевое, «а» или «ов»).
programSchoolChildren;
varn: integer;
begin
write('Число учеников --> '); readln(n);
write(n,'ученик');
case n of
2..4: write('а');
5..10:write('ов');
end;
readln;
end.
Можно также усовершенствовать программу для произвольногонатурального n:<span Times New Roman",«serif»;mso-ansi-language:EN-US">
<span Times New Roman",«serif»; mso-ansi-language:EN-US">
write(n,' ученик');
case n mod 100 of
11..19:write('ов');
else case n mod 10 of
2..4: write('а');
0,5..9:write('ов');
end;
end;
Лекция 4. Операторы циклов вПаскалеВ реальных задачах часто требуется выполнять одни и те жеоператоры несколько раз. Возможны различные варианты: выполнять фрагментпрограммы фиксированное число раз, выполнять<span Times New Roman",«serif»;mso-ansi-language:EN-US">,
пока некотороеусловие является истинным, и т. п. В связи с наличием вариантов в Паскалесуществует 3 типа циклов.1. Цикл с постусловием (Repeat)На Паскале записывается следующим образом: repeat<оператор> until <условие>. (По-русски: повторятьчто-то пока_не_выполнилось условие).Под обозначением <span Times New Roman",«serif»; mso-ansi-language:EN-US"><
оператор<span Times New Roman",«serif»;mso-ansi-language:EN-US">> здесь понимаетсялибо одиночный, либо последовательность операторов, разделённых точкой сзапятой. Цикл работает следующим образом: выполняется оператор, затемпроверяется условие, если оно пока еще не выполнилось, то оператор выполняетсявновь, затем проверяется условие, и т. д. Когда условие, наконец, станетистинным выполнение оператора, расположенного внутри цикла, прекратится, идалее будет выполняться следующий за циклом оператор. Под условием, вообщеговоря, понимается выражение логического типа.Пример (подсчет суммы натуральных чисел от 1 до 100):
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> i,sum: integer;<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">begin
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> sum:=0; i:=0;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> repeat
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> i:=i+1;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> sum:=sum+i;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> until i=100;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> writeln('Суммаравна: ',sum);
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> readln;
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">end
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">.Важно заметить, что операторы стоящие внутри цикла repeat<span Times New Roman",«serif»;mso-ansi-language:EN-US">
(иначе<span Times New Roman CYR""><span Times New Roman CYR"">–в теле цикла) выполняются хотя бы один раз (только после этого проверяетсяусловие выхода).2. Цикл с предусловием(While)Этот цикл записывается так: while<условие> do<оператор>.<span Times New Roman",«serif»;mso-ansi-language: EN-US">(
Пока условие истинно, выполнять оператор<span Times New Roman",«serif»;mso-ansi-language:EN-US">).Суть в следующем: пока условие истинно, выполняется оператор (в этом случаеоператор может не выполниться ни разу, т.к. условие проверяется до выполнения).Под оператором здесь понимается либо простой, либо составной оператор (т.е.несколько операторов, заключёных в begin… end).Рассмотрим тот же пример, выполненный с помощью <span Times New Roman",«serif»;mso-ansi-language:EN-US">while
:<span Courier New"; mso-bidi-font-family:«Times New Roman»">var
<span Courier New";mso-bidi-font-family:«Times New Roman»"> i,sum: integer;<span Courier New"; mso-bidi-font-family:«Times New Roman»">begin
<span Courier New";mso-bidi-font-family:«Times New Roman»"><span Courier New";mso-bidi-font-family:«Times New Roman»"> sum:=0; i:=0;
<span Courier New";mso-bidi-font-family:«Times New Roman»"> whilei<
<span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">10<span Courier New";mso-bidi-font-family:«Times New Roman»">0 do begin<span Courier New";mso-bidi-font-family:«Times New Roman»"> i:=i+1;
<span Courier New";mso-bidi-font-family:«Times New Roman»"> sum:=sum+i;
<span Courier New";mso-bidi-font-family:«Times New Roman»"> end;
<span Courier New";mso-bidi-font-family:«Times New Roman»"> writeln('Сумма равна: ',sum);
<span Courier New";mso-bidi-font-family:«Times New Roman»"> readln;
<span Courier New"; mso-bidi-font-family:«Times New Roman»">end
<span Courier New";mso-bidi-font-family:«Times New Roman»">.3. Цикл со счетчиком (For)Записывается так: for<переменная>:=<нач> to<кон> do <оператор>. Вместо toвозможно слово downto. Рассмотрим такой пример: требуется вывести на экрантаблицу квадратов натуральных чисел от 2 до 20.
<span Courier New"; mso-bidi-font-family:«Times New Roman»">var
<span Courier New";mso-bidi-font-family:«Times New Roman»"> i: integer;<span Courier New"; mso-bidi-font-family:«Times New Roman»">begin
<span Courier New";mso-bidi-font-family:«Times New Roman»"> for i:=2 to 20 do writeln(i,' ',sqr(i)); end.При выполнении цикла происходит следующее: переменной i присваивается начальноезначение (2), затем выполняется оператор (простой или составной), после этого кi прибавляется 1, ипроверяется, не стало ли значение i равно конечному (20). Если нет, то вновь выполняется оператор,добавляется 1, и т. д. В случае, когда вместо toиспользуется downto, все происходит наоборот: единица не прибавляется, авычитается. Например, следующий цикл выведет ту же таблицу, но в обратномпорядке:
<span Courier New"; mso-bidi-font-family:«Times New Roman»">for
<span Courier New";mso-bidi-font-family:«Times New Roman»"> i:=20 <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">down<span Courier New"; mso-bidi-font-family:«Times New Roman»">to<span Courier New";mso-bidi-font-family:«Times New Roman»"> 2 do writeln(i,' ',sqr(i));<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">В завершение запишем программу о подсчете суммы чисел от 1до 100 с помощью for:
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">var
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> i, sum: integer;<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">begin
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> sum:=0;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> for i:=1 to 100 do sum:=sum+i;
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"> writeln(sum);
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">end
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">.<span Courier New"; mso-bidi-font-family:«Times New Roman»">Лекция 5. Символьные и строковыепеременныеВ математике под переменной обычно понимают некую величину,значения которой могут быть только числами. В языках программирования почти вседанные, с которыми работают программы, хранятся в виде переменных. В частности,бывают переменные для хранения текстовых данных: предложений, слов и отдельныхсимволов.
1. Символьный типТип данных, переменные которого хранят ровно один символ(букву, цифру, знак препинания и т.п.) называется символьным, а в Паскале — char. Объявить переменную такого типа можно так:<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">varch: char;
. Для того чтобы положить в эту переменную символ, нужноиспользовать оператор присваивания, а символ записывать в апострофах, например:<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">ch:='R';. Для символьных переменных возможнотакже использование процедуры readln,например:write(‘Выйтииз игры?(Да/Нет)’); readln(ch);
ifch=’Д’ then ...{выходить}...
else...{продолжать}...;
<span Times New Roman",«serif»; mso-ansi-language:EN-US">
Символьные переменные в памяти компьютера хранятся в виде числовых кодов, иначеговоря, у каждого символа есть порядковый номер. К примеру, код пробела равен32, код <span Times New Roman",«serif»; mso-ansi-language:EN-US">‘A’
— <span Times New Roman",«serif»; mso-ansi-language:EN-US">65, <span Times New Roman",«serif»; mso-ansi-language:EN-US">‘B’ — 66, <span Times New Roman",«serif»;mso-ansi-language:EN-US">‘C’ — 67, код символа<span Times New Roman",«serif»;mso-ansi-language: EN-US">‘1’ — 48, <span Times New Roman",«serif»; mso-ansi-language:EN-US">‘2’ — 49, <span Times New Roman",«serif»;mso-ansi-language:EN-US">‘.’ — 46 и т. п.Некоторые символы (с кодами, меньшими 32) являются управляющими, при выводе таких символов на экран происходит какоелибо действие, например, символ с кодом 10 переносит курсор на новую строку, скодом 7 — вызывает звуковой сигнал, с кодом 8 — сдвигает курсор на одну позициювлево. Под хранение символа выделяется 1байт (байт состоит из 8 бит, а бит может принимать значения 0 или 1), поэтомувсего можно закодировать 28=256 различных символов.<span Times New Roman",«serif»;mso-ansi-language:EN-US"> Кодировкасимволов, которая используется Турбо-Паскале, называется ASCII (American Standard Code for InformationInterchange — американский стандартный код для обмена информацией<span Times New Roman",«serif»;mso-ansi-language:EN-US">).<span Times New Roman",«serif»;mso-ansi-language:EN-US">Для того чтобы получить в программе код символа нужноиспользовать функцию <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">chr
,например:vari: byte; {число,занимающее 1 байт, значения — от 0 до 255}
ch: char;
...
readln(i); writeln('символ с кодом',i,' — это',chr(i));
Если в качестве кода используетсяконкретное число, а не выражение и не переменная, то можно использовать символ <span Times New Roman",«serif»;mso-ansi-language:EN-US">«#»
,скажем так<span Times New Roman",«serif»; mso-ansi-language:EN-US">: <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">ch:=#7;. Для того перехода от кода к символуиспользуется функция <span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">ord<span Times New Roman",«serif»;mso-ansi-language:EN-US">(от слова ordinal<span Times New Roman",«serif»;mso-ansi-language:EN-US">— порядковый<span Times New Roman",«serif»; mso-ansi-language:EN-US">). Имеющиеся знания позволяют нам написатьпрограмму, которая выдаёт на экран таблицу с кодами символов:programASCII;
varch: char;
begin
for ch:=#32 to #255 dowrite(ord(ch),'—>',ch,' ');
readln;
end.
В этой программе в качестве счётчика цикла была использованасимвольная переменная, это разрешается, поскольку цикл for может использовать в качествесчётчика переменные любого типа, значения которого хранятся в виде целых чисел.
С использованием кодов работают ещё две функции, значениякоторых символьные:
<span Times New Roman CYR"; mso-bidi-font-family:«Times New Roman CYR»">1. <span Times New Roman"">
succ (от succeedent — последующий), она выдаёт символ соследующим кодом.<span Times New Roman CYR"; mso-bidi-font-family:«Times New Roman CYR»">2. <span Times New Roman"">
pred (от predecessor — предшественник), выдаёт символ с предыдущимкодом.Если попытаться в программе получитьsucc(#255)</spa