Все вышеперечисленные языки – вычислительные. Более молодые – декларативные (непроцедурные) языки, отличительная черта которых – задание связей и отношений между объектами и величинами и отсутствие определения последовательности выполнений действий. Такие языки сыграли важную роль в программировании, так как они дали толчок к разработке специализированных языков искусственного интеллекта и языков знаний.
2.2 Язык программирования Паскаль.
Язык программирования Паскаль (назван в честь выдающегося французского математика и философа Блеза Паскаля (1623 – 1662)), разработан в 1967 – 1971гг. Никлаусом Виртом, профессором, директором института информатики Швейцарской высшей политехнической школы. Язык Паскаль, созданный первоначально для обучения программированию как систематической дисциплине, скоро стал широко использован для разработки программных средств в профессиональном программировании.
Широкой популярностью Паскаля среди программистов способствовали следующие причины:
- Благодаря своей компактности, удачному первоначальному описанию Паскаль оказался достаточно лёгким для обучения.
- Язык программирования Паскаль . Отображает фундаментальные и наиболее важные концепции (идеи) алгоритмов в очевидной и легко воспринимаемой форме, что предостовляет программисту средства, помогающие проектировать программы.
- Язык Паскаль позволяет чётко реализовать идеи структурного программирования и структурной организации данных.
- Язык Паскаль сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической проверки и правильности программ.
- Применения языка Паскаль значительно подняло “планку” надёжности разрабатываемых программ за счёт требований Паскаля к описанию используемых в программе переменных при компиляции без её выполнения.
- Использование в Паскале простых и гибких структур управления: ветвлений, циклов.
2.3 Условный оператор в Паскале.
Условные операторы предназначены для выбора к исполнению одного из возможных действий ( операторов) в зависимости от некоторого условия (при этом одно из действий может быть пустым, т.е. отсутствовать) В качестве условий выбора используется значение логического выражения. В Турбо Паскале имеются два вида условных операторов: if иcase.
Оператор условиа if. Оператор условия if является одним из самых популярных средств, имеющих естественный порядок выполнения операторов программы. Синтаксическая диаграмма оператора if выглядит таким образом:
Операторы условия if выполняются следующим образом. Сначала выражается выражение, записанное в условии. В результате его вычисления получается значение булевского типа. В первом случае, если значение выражения есть true (истина), выполняется <оператор 1>, указанный после слова Then (то). Если результат вычисления выражений в условии естьFalse (ложь), то выполняется <оператор 2>. Во втором – если результат выражения true, то выполняется <оператор>, если false – оператор, следующий сразу за оператором if. Операторы if могут быть вложенными.
Read (Ch);
If Ch=’N’ then parol:= True
Else Parol := False;
Read (x);
If Parol = True then
If x = 100 then Writeln (‘пароль и код правельны’)
Else begin
Writeln (‘Ошибка в коде’);
End;
В данном примере с клавиатуры считывается значение переменной символьного типа Ch. Затем проверяется условие Ch=’N’. Если оно выполняется, то переменной Parol булевского типа присваеватся значение True, если условие не выполняется, False. Затем с клавиатуры считывается значение кода Х. Далее оператор проверяет условие Parol = True. Если оно имеет значение True, то выполняется проверка введённого пароля оператором if X=100. Если условие Х=100 имеет значение True, то выводится сообщение “Пароль и код правельны”, и управление в программе передаётся на оператор, следующий за словом end, если оно имеет значение False, выполняется соствной оператор, стоящий после слова else, который выводит на экран видеомонитора сообщение “ошибка в коде”, и вызывает стандартную процедуру Halt(1) для остановки программы.
2.3.1 Составной оператор (оператор варианта).
Условный оператор позволяет осуществить ветвление программы только по двум направлениям, одно из которых соответствует выполнению проверяемого условия. Если для переменной необходимо осуществить ряд действий, зависящих от других условий, то надо записывать либо вложенные условные операторы, либо несколько операторов подряд. Для такой операции удобно использовать оператор варианта.
Вход в структуру содержит вычисление или ранее полученное значение переменной (индекса варианта). Это значение может совпасть с меткой, стоящей перед оператором на одной из ветвей переключаются. В таком случае выполняется оператор, помеченный этой меткой, и происходит выход из структуры. Оператор бывает простым или составным, ограниченым операторными скобками begin … end; Если значение индекса варианта не совпало ни с одной из меток, то выполняется оператор с номером n + 1 из строки else. Если оператор варианта содержит строку else , то это - полная форма оператора, если такой строки нет, то используется сокращённая форма оператора варианта.
Метки оператора варианта могут быть константами любого типа. Их тип должен совпадать с переменной индекса варианта. Возможно, чтобы индекс варианта должен был как именем переменной, так и выражением соответствующего типа.
В рассмотренных до сих пор алгоритмах и программах все команды (операторы) выполнялись последовательно одна за другой в том порядке, в котором они были записаны. Однако таким образом может быть построен алгоритм для решения далеко не всякой задачи.
В практике хорошо известны задачи, дальнейший ход решения которых зависит от выполнения какого либо условия.
Рассмотрим простой пример задачи из курса алгебры. Требуется построить алгоритм вычисления значений функции у = |х|. Она задаётся соотношением:
Y =
На языке Паскаль оператор варианта имеет вид:
Case индекс варианта of
Метка 1: оператор 1;
Метка 2: оператор 2;
…
Метка n: оператор n;
Else оператор n + 1
End;
Пример:
Составить программу-решатель.
Дано: молярная масса вещества М, плотность данного вещества Р, масса R или объём V. Требуется найти число молекул К: 1) в единице массы вещества; 2) в теле заданной массой: 3) в единице объёма вещества; 4) в теле заданным объёмом. Для решения задачм воспользуемся формулой:
K = (NА/M)R,
Где NA = 6,022 * 10²³г/моль – число Авогадро.
На основании этой формулы получаем расчётные формулы для программы:
1)K=NA/M; 2)K=NAR; 3)K=NAPV/M 4)K=NAP/M.
Программа имеет вид:
Program E20;
Const NA = 6.022 E20;
Var N: integer; M, R, P, V, K: real;
Begin
Writeln (‘зная постоянную Авогадро, Плотность P данного вещества’);
Writeln (‘и его молярную массу М, можно найти число молекул в’);
Writeln (‘1. в единице массы вещества’);
Writeln (‘2. в теле массой R’);
Writeln (‘3. в единице объёма’);
Writeln (‘4. в теле объёмом V’);
Write (‘введите номер решающей задачи’);
Readln (N);
Write (‘введите исходные данные: М =’);
Readln (M);
Case N of
1: K: = NA / M;
2: begin
Write (‘R = ‘);
Readln (R);
K: = NA *R/M;
End;
3: begin
write (‘плотность вещества Р = ’);
Readln (P);
Write (‘V = ‘);
Readln (V);
K: = NA *P*V/M;
End;
4: begin write (‘плотность вещества P = ’);
Readln (P);
K: = NA *P/V
End;
End;
Write (‘число молекул K = ’, K’);
End.
2.3.2 Вложенные условия.
Существуют задачи в которых по одной из ветки ветвления нужно рассмотреть ещё одно условие.
Рассмотрим задачу: сравнить 3 целых числа и вывести на печать максимальное.
Program chisla;
Var a, b, c: integer;
Begin
Writeln (‘Введите три числа’);
Read (a, b, c);
If a<b then
If a>c then writeln (‘ максимально число ’, a)
Else if b>c then writeln (b максимально число’, b)
Else writeln (‘c максимальное число’, c);
End.
Вот блок – схема данной задачи:
2.3.3 Логические выражения.
Алгоритм решения квадратного уравнения содержит проверку условия D<0. Два значения, D и 0, связаны отношением < - меньше. Если условие выполняется то говорят что соответствующее выражение истинно, если не выполняется то ложь.
Речь идёт о логическом выражении. Примером логических выражений могут служить математические отношения связанные знаками >, <, =, логические выражения имеют два значения True( истина) и False (ложно). Логические выражения такие могут иметь логические операции: отрицания (NOT), конъюнкций (OR) и дизъюнкции (AND).
Логические операции имеют следующую таблицу истинности:
A | B | Not (A) | (A) AND (B) | (A) OR (B) |
True | True | False | True | True |
True | False | False | False | True |
False | True | True | False | True |
False | False | True | False | False |
Пусть требуется определить, принадлежит ли точка с координатой x отрезку [a; b]. Если записать это условие двойным неравенством, то читать его надо так: x меньше либо равен b и больше либо равен a (a<x<b). Отношение “меньше или равно” в Паскале записывается двумя знаками. Аналогично записывается и “больше либо равно”. Однако в Паскле нельзя записывать двойное неравенство. Используя логическую операцию and (и), запишем: