- •Www.Msta.Ru
- •Москва – 2005
- •1 Цель и задачи дисциплины
- •2 Тематическое содержание программы
- •3 Перечень рекомендуемых лабораторных работ
- •4 Экзаменационные вопросы по дисциплине
- •1. Введение
- •Var a,d: integer; X: real; d: string;.
- •2. Простейшие операторы языка
- •3. Организация ветвлений
- •Var a,b,c: real;
- •4. Логические функции
- •5. Организация циклов
- •Program p5_2; {другой вариант}
- •Var X,y: real;
- •С помощью этого оператора гораздо проще решить пример 5-2 (program p5_2). Оператор цикла с постусловием:
- •6. Массивы
- •Var X,z: array [1..8] of real;
- •Var I,j: integer;
- •Var n,I,j:integer; s,y,sr:real; X: array [1..10,1..5] of real;
- •Var n,I,j,st,kl,k:integer;
- •7. Символьные данные
- •Var n:integer;y:string;
- •Var X:string[1]; d:string; I:integer;
- •8. Записи
- •Var X:vr; y:array [1..5] of vr;
- •9. Файлы
- •Ввод и вывод информации для типизированных и текстовых файлов производится процедурами:
- •X,y:real;
- •X,y:real; I:integer;
- •Im: string[4];
- •I: integer;
- •Im: string[4];
- •I: integer;
- •10. Подпрограммы
- •11. Графика
- •Var d,I,m,rx,ry:integer;
- •Var d,m,rx,ry:integer;
- •X,y,xn,xk,ymin,ymax,dx:real; msy,msx:real;
“
program
P3_2; label
k;
begin readln(a,b,c); if
a+b>=c then goto k;
writeln('Неверно');
exit; k:
if b>a then begin
writeln('Верно');
exit end;
writeln('Неверно') end.
Var a,b,c: real;
“НЕВЕРНО” – в противном случае
Несмотря на простое условие, программа (program P3_2) получилась достаточно запутанной. При необходимости выполнять анализ одновременно нескольких условий удобно пользоваться логическими функциями. Аргументами логических функций являются высказывания, которые могут быть либо истинными, либо ложными. К таким высказываниям относятся операции отношения (равно, больше, меньше и т.д.). Так, например, отношение вида Х=Y всегда может быть только истинным или только ложным.
4. Логические функции
Функция одного аргумента НЕ (NOT) истинна тогда, когда ложен ее аргумент (значение функции обратно аргументу). Поведение функции полностью описывает таблица. Например, следующие два оператора идентичны
if x<10 then y=5 if not (x>=10) then y=5
Функций двух аргументов. Функция И (AND) истинна когда истинны все ее аргументы. Функция ИЛИ (OR) истинна, если истинен хотя бы один из аргументов. Если нет скобок, функции вычисляются в следующей последовательности: НЕ, И, ИЛИ. Значениям Истина и Ложь в Паскале соответствуют значения True и False.
аргу- мент |
функция НЕ |
|
1-й аргумент |
2-й аргумент |
функция И |
функция ИЛИ |
ложь |
истина |
|
ложь |
ложь |
ложь |
ложь |
истина |
ложь |
|
ложь |
истина |
ложь |
истина |
|
|
|
истина |
ложь |
ложь |
истина |
|
|
|
истина |
истина |
истина |
истина |
Логические операции имеют приоритет перед операциями отношения, поэтому, если таких условий несколько, последние берутся в скобки. Для иллюстрации снова рассмотрим пример 3-2. Решение будет очень компактным (вспомогательные операторы опущены):
readln(a,b,c);
if (a+b>=c) and (b>a) then writeln('верно') else writeln('неверно');
Пример. Для чисел А, В, С выяснить, правда ли что первое число самое большое, а последнее – самое маленькое.
if (a>b) and (a>c) and (c<a) and (c<b)
then writeln('верно') else writeln('неверно');
Еще. Верно ли, что среди чисел есть отрицательные.
if (a<0) or (b<0) or (c<0) then ...
Еще. Верно ли, что среди чисел ровно одно меньше нуля.
if (a<0)and(b>0)and(c>0) or (a>0)and(b<0)and(c>0) or (a>0)and(b>0)and(c<0)
then writeln('верно') else writeln('неверно');
В этом решении перебираются все возможные, интересующие нас, комбинации переменных. Иногда проще (см. справа) воспользоваться косвенным способом, например, увеличивать вспомогательную переменную Х, каждый раз, когда встречается число меньше нуля. Если в конце окажется, что Х=1 значит, имеется ровно одно число меньшее нуля.
О
CASE
выражение OF
константа1:
оператор1;
константа2:
оператор2;
. . .
ELSE
операторN;
END;
Пример 4-1. Пусть требуется по числу прожитых лет Т отнести человека к какой-то возрастной группе. Решение очевидно, но нуждается в одном пояснении. Поскольку женщины и мужчины уходят на пенсию в разное время (55 и 60 лет), кроме возраста нужно учитывать и пол Р.
Пример 4-2. Положим, введен какой-то знак в переменную S и его нужно отнести к соответствующей группе. Следует сказать, что латинские символы в символьной таблице ПК находятся не вместе. Подряд идут буквы с А по Z, затем идут не буквы, затем буквы с а по z. В виду этого пришлось указать два диапазона констант ('A'..'Z','a'..'z'). Символы русского алфавита состоят из еще большего числа диапазонов (см. раздел ‘Символьные данные’).
Здания для самостоятельного решения
Задание 4.1. Имеются числа a, b, c. Выяснить, правда ли, что они расположены в порядке возрастания.
Задание 4.2. Выяснить, правда ли, что среди чисел a,b,c имеется хотя бы одно отрицательное и одно положительное (ответ Да/Нет)
Задание 4.3. Имеются числа a, b, c. Вывести их в порядке возрастания.
Задание 4.4. Выяснить, правда ли, что среди a,b,c имеется точно один 0.
З адание 4.5. На рис. 4.1 изображены две пересекающиеся линии Y1=X2 и Y2=1–X/2. По произвольным значениям координат некоторой точки X и Y найти область ,, ,, в которой находится эта точка. Ответ должен быть выдан в виде числа 1, 2, 3, 4. Если точка находится вне этих областей, ответом должно быть выражение – “Вне областей”.
Сейчас определим только принадлежность точки к области 2. Сначала выясним диапазон изменения Х в области. Очевидно, он простирается от Х=0 до координаты Х, где пересекаются прямая и парабола (белая точка на рисунке). Чтобы ее найти, надо приравнять выражения для обеих функций X2=1–X/2 и, преобразовав его в квадратное уравнение 2X2+X–2=0, вычислить левый корень Х=–1,28. Отсюда можно записать –1,28<X<0. Для Y можно сказать, что он лежит под прямой Y<1-X/2 и над параболой Y>X2. Таким образом, должны выполняться условия –1,28<X<0 и Y<1–X/2 и Y>X2. Отсюда можно записать оператор IF:
IF (–1,28<X)and(X<0)and(Y<1–X/2)and(Y>X*X) then ?”Это область 2”
Завершите решение для остальных областей.
Задание 4.6. Используя оператор CASE, написать программу, в которой вводятся два числа-операнда Х и Y и знак операции Z (+,–,/,*). Вычислить результат S в зависимости от знака. Предусмотреть реакции на возможный неверный знак операции, а также на ввод Y=0 при попытке выполнить деление ('Деление на ноль не возможно')