Примечание. Если вложенными условными операторами являются неполные условные операторы (как, например, в задаче, рассмотренной выше), то могут возникать неясности, связанные с установлением границ условных операторов. В таких случаях служебное слово Else относится к ближайшемуif.
Задание
В приведенной выше программе изменим условный оператор следующим образом:
If (a<=b) and (b<=c) Then
Begin
a:=sqr(a); b:=sqr(b); c:==sqr(c)
If (a>b) and (b>c) Then
Begin c:=a; b:=aEnd
ElseBegin a:=-a; b:=-b; c:=-cEnd;
End;
Как изменится выполнение данной программы? Сформулируйте условие задачи, которую теперь решает данная программа.
Решение задач
Задача 1
Написать программу, которая определяет, принадлежит ли точка х отрезку [a,b].
Program Example_21;
{определение принадлежности точки заданному
отрезку}
var a,b,x: real;
begin
writeln('Введите значение
переменной х');
readln(x);
writeln('Введите значения границ
отрезка');
readln(a,b);
if (x<a) or (x>b) then
writeln ('точка не принадлежит
отрезку)
else writeln ('точка принадлежит
отрезку');
end.
Задача 2
Точка плоскости задана своими координатами (x,y). Написать программу, определяющую, принадлежит ли она окружности радиуса 4 с центром в точке (2,2).
Program Example_22;
Var x, y: real;
begin
writeln('Введите координаты точки');
readln(x,y);
if (x-2)*(x-2)+(y-2)*(y-2)<=16
then writeln('точка принадлежит
окружности')
else writeln('точка не принадлежит
окружности’)
end.
Задача 3
Написать программу, вычисляющую значение функции y(x) для заданного х.
210, пр и х≤10,
y(x)=
x3 , при x>10.
Program Example_23;
{вычисление значения функции y(x)}
var x,y: real;
begin
writeln('Введите значение x');
readln(x);
if x<=10 then y:=210 else y:=x*x*x;
writeln('y(', x,')=',y);
end.
Задача 4
Написать программу вычисления значения функции y(x) для заданного x.
x2 , при x>5,
y(x)= 17x-1, при –7≤x≤5,
25, при x≤-7
Program Example_24;
{вычислить значение функции};
var x,y: real;
begin
writeln('Введите значение x');
readln(x);
if x>5 then y:=x*x
else if x>-7 then y:=25
else y:=17*x-1;
writeln('y(',x,')=',y);
end.
Задача 5
Написать программу определения наименьшего из трех чисел.
Program Example_25;
{определение наименьшего из трех чисел}
var a,b,c, min: real;
begin
writeln('Введите три числа');
readln(a,b,c);
min:=a;
if b<min then min:=b;
if c<min then min:=c;
writeln('Наименьшее число= ',min);
end.
Задача 6
Даны два числа. Написать программу, которая меньшее из них возводит в квадрат, а большее оставляет без изменения. Если числа равны, то они не должны быть изменены.
Program Example_26;
var a,b,x,y: real;
begin
writeln('Введите два числа');
readln(a,b);
if a=b then begin x:=a; y:=b end;
if a>b then begin x:=b*b; y:=a end
else begin x:=a*a; y:=b end;
writeln(x,' ', y);
end.
Задача 7
Даны три числа x, y, z. Написать программу, в результате выполнения которой числа удвоятся, если x≤y≤z, и будут заменены на их абсолютные величины в противном случае.
Program Example_27;
var x,y,z: real;
begin
writeln('Введите три числа');
readln(x,y,z);
if (x<=y) and (y<=z) then
begin
x:=2*x;
y:=2*y;
z:=2*z
end
else
begin
x:=abs(x);
y:=abs(y);
z:=abs(z);
end;
writeln (x, ' ', y, ' ', z);
end.
Задача 8
Написать программу решения квадратного уравнения вида ax2+bx+c=0.
Program Example_28;
var a, b, c, d, x1, x2, x: real;
begin
writeln('Введите коэффициенты квадратного
уравнения’);
readln(a,b,c);
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d)/(2*a);
x2:=(-b-sqrt(d)/(2*a);
writeln('уравнение имеет два корня:
x1=',x1, 'и x2=',x2);
end
else if d=0 then
begin
x:=(-b)/(2*a);
writeln('Уравнение имеет один
корень x=',x);
end
else
writeln('уравнение не имеет корней');
readln;
end.
Задача 9
Определить по номеру года, является ли он високосным. Пример выдачи результата:
2000 – високосный год
1900 – невисокосный год.
Примечание. Год является високосным тогда и только тогда, когда его номер делится на 4 или, если номер года оканчивается на два ноля, − 400.
Program Example_29;
var n: integer;
begin
writeln('Введите год:');
readln(n);
if n mod 100=0 then
begin
if n mod 400=0 then
writeln(n,'- високосный год')
else writeln(n, '-невисокосный
год’);
end
else
begin
if n mod 4=0 then
writeln(n, '-високосный год')
else
writeln(n, '-невисокосный год');
end;
readln
end.
Задача 10
Даны три неравных числа a, b, c. Вычислить и вывести значение z, равное квадрату большего из них.
Program Example_30;
var a, b, c, z: real;
begin
wtiteln('введите 3 числа');
readln(a, b, c);
if a>b then z:=a
else z:=b;
if c>z then z:=c;
z:=sqr (z);
writeln(‘квадрат максимального числа
z=’,z);
readln;
end.
§14. Цикл с параметром
Оператор цикла с параметром:
For <параметр>:= А То В Do
<тело цикла>;
For <параметр>:=А Downto В Do
<тело цикла>;
где А − начальное значение параметра, В − конечное значение параметра.
Оператор цикла с параметром применяют тогда, когда заранее известно число повторений одной и той же последовательности операторов.
Начальное и конечное значения параметра цикла могут быть представлены константами, переменными или арифметическими выражениями,
Рассмотрим, как выполняется оператор цикла с параметром вида
For <параметр>:=А То В Do
<тело цикла>
Сначала вычисляются значения выражений А и В. Если А<В, то <параметр> последовательно принимает значения, равные А, А+1,..., В-1, В и для каждого из этих значений выполняется <тело цикла>. Если А>В, то <тело цикла> не выполняется ни разу.
Оператор цикла с параметром
For <параметр>:=А Downto В Do
<тело цикла>
выполняется аналогичным образом, но значение <параметра> изменяется с шагом, равным -1.
Если <тело цикла> состоит из нескольких операторов, то операторы тела цикла заключаются в операторные скобкиBegin-End.
Пример 1
Составить программу вычисления значения выражения у=((...(202-192)2-182)2-...-12)2.
Решение:
В данном случае целесообразно организовать цикл с параметром, изменяющимся от 19 до 1, то есть шаг изменения параметра равен -1.
Обозначим через у очередное значение квадрата числа, а через n − параметр цикла.
ProgramExample_31;
Varу, n: Integer;
Begin
y:=sqr(20);
For n:=19 Downto 1 Do y:=sqr(y-sqr(n));
Writeln('Значение выражения равно');
Writeln(у);
End.
Пример 2
Из чисел от 10 до 99 вывести те, сумма цифр которых равна s (0<n<18).
Обозначим через k очередное число, p1 − старшую цифру числа k, р2 − младшую цифру числа k, s − сумму цифр числа k. Число k будем печатать только в том случае, когда сумма р1 и р2 будет равна s.
Program Example_32;
Var k,n,p1,p2,s:Integer;
Begin
Writeln('введите целое число ');
Readln(n); {вводим целое число}
For k:=10 To 99 Do
{для (For) k от 10 до(То) 99 делать(Do)}
Begin
p1:=k div 10; {выделяем старшую цифру}
p2:=k mod 10; {выделяем младшую цифру}
s:=p1+p2; {находим сумму цифр}
If s=n Then Writeln(k);
{если сумма равна n, то выводим k}
End;
Readln;
End.
Пример 3
Следующая программа предназначена для вывода таблицы соответствия между температурными шкалами Цельсия и Фаренгейта в интервали температур от точки замерзания воды до точки ее кипения. Температурная шкала Фаренгейта была предложена немецким физиком Габриэлем Фаренгейтом и используется в настоящее время в ряде англоязычных стран. В этой шкале при стандартном атмосферном давлении температура замерзания воды равна 320F, а температура кипения составляет 2120F. В более привычной для нас шкале Цельсия аналогичными опорными точками являются соответственно 00С и 1000С. Эти значения и используются для пересчета одних температур в другие. Нетрудно проверить, что формула для пересчета имеет вид: tf=9/5*tc+32, где tf − температура по Фаренгейту, а tc − температура по Цельсию.
program Example_33;
var i, Celsius, Fahrenheit: Word;
begin
Writeln ('Таблица соответствия между
температурными шкалами',);
Writeln (' Цельсия и Фаренгейта');
for i:=0 to 20 do
begin
Celsius:=5*i;
Fahrenheit:=32+Celsius*9 div 5;
Write(' C=' , Celsius);
Write(' F=' , Fahrenheit);
Writeln;
end;
Writeln(' Нажмите <Enter>');
Readln;
end.
§15. Работа с окнами.
Метод пошагового выполнения программ
Каждый файл располагается в своем окне. Можно открывать любое количество окон, но активным является только одно окно, в котором находится курсор. Активное окно находится над всеми другими окнами. Чтобы сделать окно с номером N активным, необходимо нажать комбинацию клавиш [Alt] и номер окна (клавишу с цифрой n).
Все команды для работы с окнами находятся в пункте Window главного меню. При открытии нескольких файлов они загружаются в окна, которые накладываются одно на другое.
Чтобы посмотреть список открытых окон, можно воспользоваться комбинацией клавиш [Alt^0]или командойList менюWindow.
Для закрытия окна можно воспользоваться командойClose менюWindow (или комбинацией клавиш [Alt^F3]. Для закрытия всех окон нужно выбрать командуClose all менюWindow.
При выборе пунктаSize/Move менюWindowограничивающие линии окна меняют цвет. В это время с помощью клавиш управления курсором и клавиши [Shift] можно изменять размеры окна, без нажатия клавиши [Shift] можно изменять положение окна на экране. После выбора нужного размера и положения нажмите клавишу [Enter]. Выбор командыZoom увеличивает размеры активного окна до максимального.
При составлении программ нередко возникает ситуация, когда программа работает не так, как предполагает программист. В этом случае требуется проследить выполнение программы по шагам. В среде Турбо Паскаль есть такая возможность. Для выполнения программы в пошаговом режиме требуется выполнить команду Step Over менюRun или нажать функциональную клавишу [F8].
Примечание. Прежде чем проводить пошаговую отладку программы, необходимо убедиться, что опцияOptions/Debugger/Integrated активизирована.
Чтобы проследить за выполнением программы, нужно знать, как изменяются значения переменных. Активизируйте окноWatches, выполнив командуWatch меню Debug. Чтобы ввести в окноWatches какую-либо переменную, воспользуйтесь комбинацией клавиш [Ctrl^F7] (или выполнив командуAdd Watch меню Debug), после чего откроется диалоговое окноAdd Watch, в которое необходимо ввести имя переменной.
Примечание. Чтобы облегчить процесс ввода переменных в окно Watches, можно перед нажатием комбинации клавиш [Ctrl^F7]установить курсор имени переменной, которую вы хотите ввести.
Для удаления переменной из окнаWatches войдите в окноWatches, с помощью клавиш управления курсором выберите нужную переменную и нажмите клавишу [DELETE].
Иногда в процессе отладки возникает необходимость отладить в пошаговом режиме не всю программу, а лишь ее часть. В этом случае можно воспользоваться командой Go To Cursor меню Run (или просто нажать клавишу [F4]), предварительно установив курсор на так называемую строку останова (строка, до которой хотим выполнить программу). Программа будет выполнена до этой строки, а далее вы сможете выполнять программу в пошаговом режиме либо снова воспользоваться командой Go To Cursor и выполнить программу до вновь выбранной строки останова.
Кроме того, можно установить в некоторой строке так называемую точку останова (можно установить несколько точек останова). Программа будет выполняться до тех пор, пока не достигнет точки останова. Чтобы установить точку останова, переместите курсор в нужную строку и нажмите комбинацию клавиш [Ctrl^F8](или выполните командуAdd breakpoint меню Debug), соответствующая строка будет отмечена подсветкой. После повторного нажатия [Ctrl^F8] точка останова снимается.
Какими свойствами обладает точка останова? Активизируйте командуBreakpoint менюDebug.Появится таблица с указанием имени файла, номера строки, в которой находится точка останова, здесь же можно указать условие, выполнение которого будет приводить к прерыванию работы программы, или количество проходов контрольной точки (после выполнения которых произойдет останов). Загрузите любой файл, установите точку останова на интересующей Вас строке и нажмите клавишуEdit. Запустите программу.