Структурное программирование
Ввод исходных данных.
Варианты ввода исходной информации покажем на примерах:
- Const х=20; {идентификатору x задается постоянного значения в разделе описания констант}
- y:=20; {идентификатору y присваивается численное значение в теле основной программы}
- read(x); { выполнение программы приостанавливается для ввода значения "x" с клавиатуры. Оператор аналогичен оператору INPUT в Бейсике}
- readln(x); {ввод значения идентификатора с новой строки}
- read(x,y); {ввод двух значений x ,y. Одно значение от другого отделяется нажатием клавишей пробела или Enter}
- Write(‘x= ’); readln(x); {Ввод значения с пояснением. На экране в месте ввода появляется сообщение: ‘х= ’}
Расчет.
Основные математические соотношения и операции Турбо Паскаль:
- + { сложение}
- – { вычитание}
- * { умножение}
- / { деление}
- = {равенство (используется при описании констант, типов и т.д.)}
- := {присваивание}
- > { больше}
- < { меньше}
- >= { больше либо равно}
- <= { меньше либо равно}
- <> { не равно}.
Стандартные функции Турбо Паскаля
- abs(x); {модуль, абсолютная величина}
- exp(x); {еx- экспонента}
- sqr(x); {x2 - квадрат числа}
- sqrt(x); { - корень квадратный}
- ln(x); {вычисление натурального логарифма }
{ - вычисление логарифма по произвольному основанию}
{xa=exp(a*ln(x)) - возведение в степень}
- sin(x); {-вычисление синуса}
- cos(x); {-вычисление косинуса}
{tg(x) = sin(x)/cos(x) - вычисление тангенса}
{ctg(x) = cos(x)/sin(x) - вычисление котангенса}
- arctan(x); {вычисление арктангенса}
- round(x); {округление: x=4.9; y=round(x), ⇒ y=5 }
- trunc(x); { выделение целой части: x=4.9; y=trunc(x), ⇒ y=4}
- i mod j; { остаток целочисленного деления 10 mod 3 → 1 {10:3=3(1)}
- i div j ; { целочисленное деление 10 div 3 → 3}
- chr(i) ; { по порядковому номеру i возвращает символ}
- ord(b); {функция, обратная предыдущей (возвращение порядкового номера)}
- int(r) ;{возвращение целой части числа}
- frac(r) ;{возвращение дробной части числа}
Стандартные процедуры
- Dec(i); {i:=i-1}
- inc(i); {i:=i+1}
- GotoXY(i,j); {перемещение курсора в указанную точку экрана с координатами i, j}
- str(x,S); {идентификатор численного типа x переводит в строковую переменную S: x→S. }{ Требуется модуль Crt}
- Clrscr; {очистка экрана} {Требуется модуль Crt }
Константы
Pi{число π = 3.14…}
Вывод результатов
- Write(x); {вывод на экран значения x: при реальном x=4, на экран выводится "4.0000000000E+00"}
- Write(x:5:1); {вывод форматированных данных, то есть выделение на экране заданного количества позиций для вывода идентификатора: 5 показывает общее число позиций, 1 – число знаков после запятой: при x=4 , на экран выводится "4.0"}
- Writeln(x); {вывод с новой строки}
- Writeln(x,y); {вывод двух значений идентификаторов}
- Writeln(‘x= ’,x:4:1); {вывод с комментариями и форматированием: "x= 4.0"}
- Writeln(‘Площадь круга радиусом 3 м равна’,3.14*sqr(3):4:1); {Вывод с комментариями и выполнением расчетов: "Площадь круга радиусом 3 м равна 28.3"}
Технология программирования
Включает пять технологических операций (этапов):
- Постановка задачи.
- Математическое описание.
- Алгоритм – структограмма.
- Написание текста программы.
- Отладка, получение результатов.
При разработке программ будем последовательно выполнять технологические этапы программирования, для наглядности помещая их в таблицу.
Пример. Определить площадь круга.
Этапы разработки программы сведены в таблицу.
Таблица
N | Этапы программирования | Выполнение | ||||
1. | Постановка задачи | Составить программу для вычисления площади круга радиусом R. | ||||
2. | Математическое описание | Расчетная формула: S=πR2 | ||||
3. | Разработка алгоритма (структограммы) |
| ||||
4. | Написание программы | Program P1; { программа вычисления площади круга} Var r,S:real;{Описание переменных} Begin Read(R); {в этом месте программа останавливается, для ввода числового значения R} {R:=4;}{другой вариант ввода исходных данных} S:=3.14*Sqr(R); {расчет} {S:=Pi*sqr(R);} {другой вариант расчета} Writeln(‘R=’,R:3:1, ‘S=’,S:8:4); {Вывод} end. | ||||
5. | Отладка и получение результатов | R= 4.0 S= 48.7654 |
Структурное программирование
Структурное программирование – это стиль программирования, позволяющий разрабатывать хорошо структурированные программы.
Основные положения структурного программирования:
- Программа разбивается на блоки, каждый из которых имеет один "вход" и один "выход".
- Любая программа может быть составлена из трех структур или блоков, которые представлены в таблице.
- Алгоритмы при структурном программировании представляются в виде структоргамм, элементы написания которых также приведены в таблице.
Таблица
Основные типы структур и примеры их изображения на структограммах
Название | Алгоритм | |
Блок-схема | Структограмма | |
а) линейная структура | ||
б) Ветвящаяся структура | ||
в) циклическая структура: | ||
с предусловием | ||
с постусловием |
Операторы цикла используются для многократного повторения аналогичных вычислений.
Для организации цикла в ТП имеются три различных оператора.
- Счетный оператор цикла For:
For <параметр цикла>:=<начальное значение> to <конечное значение> do Р;
P- простой или составной оператор.
При каждом прохождении цикла < параметр цикла >, начиная с <начального значения>, увеличивается на единицу. Цикл выполняется, пока <параметр цикла> не станет больше <конечного значения>.
Другой вариант записи оператора For:
For <параметр цикла >:=< начальное значение> downto <конечное значение> do Р;
В этом случае при каждом прохождении цикла < параметр цикла > уменьшается на единицу от <начального значения> до <конечного значения>.
- Оператор цикла While с проверкой предусловия:
While <условие> do P; {Пока выполняется условие, делать}
Цикл выполняется, пока условие истинно (true).
- Оператор цикла Repeat … until с проверкой постусловия:
Repeat P until <условие>; {Выполнять до тех пор, пока не будет выполнено условие}
Цикл выполняется, пока условие ложно (false).
Пример.
- Постановка задачи. Найти сумму 5 целых чисел от 1 до 5. Написать программы для определения суммы с помощью трех рассмотренных операторов цикла.
- Математическое описание.
- Структограммы и программы для каждого оператора цикла приведены в таблице:
Таблица
Структограммы и программы
Цикл For … | While… | Repeat… | |
3.1. | 3.2 | 3.3 | |
4.1: Program P2; Var i,S:integer; Begin S:=0; For i:=1 to 5 do S:=S+i; Writeln(‘S=’,S:5); End. | 4.2: Program P2; Var i,S:byte; Begin S:=0; i:=1; While i<=5 do Begin S:=S+i; I:=i+1; End; Writeln(‘S=’,S); End. | 4.3: Program P3; Var i,S:integer; Begin S:=0; i:=1; Repeat S:=S+i; I:=i+1; Until i>=6; Writeln(S); End. |
предназначен для ветвления программы на два направления.
Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие.
Рассмотрим четыре варианта записи оператора IF:
- If <условие> then P1 else P2;
- If <условие> then P1;
- If (<условие1>) or (<условие2>) then P1 else P2;
- If (<условие1>) and (<условие2>) then P1 else P2;
где <условие>,<условие1>, <условие2> - переменные логического типа. Р1, Р2 - простые или составные операторы.
- В первом случае если условие истинно, то выполняется оператор P1, если ложно – то P2.
- Во втором варианте записана краткая форма оператора.
- В третьем и четвертом примерах два условия объединены служебными словами or (или) и and (и). В результате объединения получается новая логическая переменная, истинность которой определяется согласно следующей таблицы.
Таблица
Таблица истинности сложных условий: И - истинно, Л - ложно
(<условие1>) | И | И | Л | Л |
(<условие2>) | И | Л | И | Л |
(<условие1>) or (<условие2>) | И | И | И | Л |
(<условие1>) and (<условие2>) | И | Л | Л | Л |
Пример. Написать программу для решения квадратного уравнения a∙x2+b∙x+c=0.
Технологические операции программирования и их выполнение приведены в таблице
Таблица
N | Этапы программирования | Выполнение |
1. | Постановка задачи | Написать программу для решения квадратного уравнения a∙x2+b∙x+c=0. |
2. | Математическое описание | |
3. | Разработка структограммы | |
4. | Написание программы | Program P3; Var a,b,c,d,x1,x2:real; Begin a:=1; b:=3; c:=5; D:=sqr(b)-4*a*c; If D>=0 then Begin X1:=(-b+sqrt(D))/2/a; X2:=(-b-sqrt(D))/2/a; Writeln(x1,x2); End Else Writeln(‘Действ.корней нет’); End. |
5. | Отладка и получение результатов | Выполнить самостоятельно |