- •Министерство образования российской федерации
- •Var X,y: real;
- •Var X,y: real;
- •Var t:integer; p:char;
- •0..17: Write('детство');
- •20..30: Write('молодость');
- •31..54: Write('зрелость');
- •Var s:char;
- • Оператор цикла с предусловием имеет вид
- •Program p5_8;
- •Var y,X,z: integer;
- •Var I,j:integer; X,y,r:real;
- •Var I,j: integer;
- •Var n,I,j:integer; s,y,sr:real; X: array [1..10,1..5] of real;
- •Var I,j,n,m: integer;
- •X:array [1..10] of integer;
- •Var n,I,j,st,kl,k:integer;
- •Var st: char; sm: string[32]; ss: string;
- •Var n:integer;y:string;
- •Var k,I:integer; X: string;
- •Var X:string[1]; d:string; I:integer;
- •Var X:vr; y:array [1..5] of vr;
- •Ввод и вывод информации для типизированных и текстовых файлов производится процедурами:
- •X,y:real;
- •X,y:real; I:integer;
- •Im: string[4];
- •I: integer;
- •Im: string[4];
- •I: integer;
- •Im:string[4]
- •Im:string;
- •Var d,I,m,rx,ry:integer;
- •Var d,m,rx,ry:integer;
- •X,y,xn,xk,ymin,ymax,dx:real;
- •Ответы на тестовые задания, имеющиеся в тексте пособия:
- •& Тесты по курсу
- •Тираж: 150. Заказ №
Var X,y: real;
begin
readln(x);
if x<0 then y:=5+x;
if (0<=x)and(x<10) then y:=5;
if x>=10 then y:=10–0.5*x;
writeln('y=',y:6:2)
end.
PROGRAM P3_1; {второй вариант}
label m;
Var X,y: real;
begin
readln(x);
if x<0 then begin y:=5+x; goto m end;
if x<10 then begin y:=5; goto m end;
if x>=10 then y:=10-0.5*x;
m: writeln(y:6:2)
end.
Пример 3-2. Даны три произвольных числа А, В, С. Составить программу, которая анализирует их и, если сумма первых двух чисел не меньше третьего, а квадрат второго больше первого – выдает сообщение ВЕРНО. Если хотя бы одно из условий не выполняется, – то сообщение НЕВЕРНО.
“ВЕРНО” если А+В>=C и В2 >A
“НЕВЕРНО” – в противном случае
Несмотря на простое условие и очевидную блок-схему (рис. 3-2), программа (program P3_2) получилась достаточно запутанной. При необходимости выполнять анализ одновременно нескольких условий очень удобно пользоваться логическими функциями. Аргументами логических функций являются высказывания, которые могут быть либо истинными, либо ложными. К таким высказываниям относятся операции отношения (равно, больше, меньше и т.д.). Так, например, отношение вида Х=Y всегда может быть только истинным или только ложным.
PROGRAM P3_2;
label k; var a,b,c: real;
begin
readln(a,b,c);
if a+b>=c then goto k;
writeln('Неверно'); exit;
k: if b*b>a then begin
writeln('Верно'); exit end;
writeln('Неверно')
end.
4. ЛОГИЧЕСКИЕ ФУНКЦИИ
Функция одного аргумента НЕ (NOT) истинна тогда, когда ложен ее аргумент (значение функции обратно аргументу). Поведение функции полностью описывает таблица.
аргумент |
функция НЕ |
|
1-й аргумент |
2-й аргумент |
функция И |
функция ИЛИ |
ложь |
истина |
|
ложь |
ложь |
ложь |
ложь |
истина |
ложь |
|
ложь |
истина |
ложь |
истина |
|
|
|
истина |
ложь |
ложь |
истина |
|
|
|
истина |
истина |
истина |
истина |
Например, следующие два оператора if x<10 then y=5 и if not (x>=10) then y=5 идентичны.
Функций двух аргументов. Функция И (AND) истинна когда истинны все ее аргументы. Функция ИЛИ (OR) истинна, если истинен хотя бы один из аргументов. Если нет скобок, функции вычисляются в следующей последовательности: НЕ, И, ИЛИ. Словам Истина и Ложь в Паскале соответствуют значения True и False. Логические операции имеют приоритет перед операциями отношения, поэтому, если таких условий несколько, последние берутся в скобки. Для иллюстрации снова рассмотрим пример 3-2. Решение будет очень компактным (вспомогательные операторы опущены):
readln(a,b,c);
if (a+b>=c) and (b*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<1) and
(c>0) or (a>0) and (b>0) and (c<0) then ...
В этом решении перебираются все возможные, интересующие нас, комбинации переменных. Иногда проще воспользоваться косвенным способом, например, увеличивать вспомогательную переменную Х, каждый раз, когда встречается число меньше нуля. Если в конце окажется, что Х=1 значит, имеется ровно одно число меньшее нуля.
x:=0; {пока нет ни одного числа <0?}
if a<0 then x:=x+1;
if b<0 then x:=x+1;
if c<0 then x:=x+1;
if x=1 then write('верно') else write('неверно');
Контрольные задания.
Тест 4.1. Какой результат, выдаст программа? 1).1, 2). 2.
var x,y,z: integer;
begin
x:=2; y:=4; z:=3;
if (x>y) or (y>z) and (x<>z) then write write(‘1’) else (‘2’)
end.
Задание 4.1. Имеются числа a, b, c. Вывести их в порядке возрастания.
Задание 4.2. Выяснить, правда ли, что среди чисел a,b,c имеется хотя бы одно отрицательное и одно положительное.
Задание 4.3. Выяснить, правда ли, что среди a,b,c имеется в точности одно отрицательное и одно нулевое числа.
Задание 4.4. На рис.3-3 изображены две пересекающиеся линии 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”
Завершите решение для остальных областей.
Оператор выбора. При необходимости сделать выбор из многих альтернатив конструкция с вложением if становится очень громоздкой. В этом случае полезным оказывается оператор case.