Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Оператор безусловного перехода. Раздел описания меток




 

Общий вид оператора

Goto <метка>

где Goto (итди к) − служебное слово, метка − целое число без знака, определяемое в разделе Label как метка оператора. Раздел описания меток (Label) следует после заголовка программы. Любой оператор в программе можно выделить, поставив перед ним метку − целое число без знака, содержащая не более четырех цифр. Метка от оператора отделяется двоеточием. Появление меток в программе дает возможность сослаться на эти метки для изменения хода выполнения программы. Все метки должны быть перечислены в разделе описания меток, например:

Label 1,12, 999;

Раздел Label может отсутствовать, если в программе меток нет.

Оператор перехода Goto производит передачу управления к оператору, помеченному указанной меткой.

Применение оператора безусловного перехода является необязательным и нежелательным, так как присутствие этого оператора в программе нарушает ее структурную целостность и наглядность, такую программу становится трудно читать, отлаживать и модифицировать. Используют операторы Goto лишь в исключительных случаях, например, для выхода из структурного (составного) оператора при возникновении особой ситуации в программе.

Пример

Найти количество целых четных чисел, вводимых с клавиатуры. Выход из программы по вводу 0.

ProgramExample_19;

Label 1;

var a,k: integer;

Begin

k:=0;

1: Writeln('Введите число');

Readln(a);

If a<>0 then

Begin

   If a mod 2=0 then k:=k+1;

   Goto 1;

End;

Writeln('количество четных чисел= ',k);

Readln;

End.

С помощью оператора безусловного перехода нельзя выйти из подпрограммы, так как метки действуют только в том блоке, в котором они описаны. Для того, чтобы прервать выполнение процедуры или функции, можно воспользоваться стандартными процедурами:

Halt − прерывание программы, независимо от того, в каком месте программы стоит эта процедура;

Exit − завершение выполнения текущего блока, переход в его конец.

 

     

Вложенные условные операторы

 

При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов Then и Else записывается новый условный оператор.

 

Пример

Даны целые числа а, b, с. Если а<b<с, то все числа заменить их квадратами, если а>b>с, то каждое число заменить наименьшим из них, в противном случае сменить знак каждого числа.

Решение

Условие задачи перепишем следующим образом:

а:=а2, b:=b2, c:=c2, если а≤b≤с

а:=с, b:=с, если а>b>с

а:=-а, b:=-b, с:=-с − в остальных случаях.

Program Example_20;

Var a,b,c: Integer;

Begin

Writeln('Введите числа а, b, с');

Readln(a,b,с);

If (a<=b) and (b<=c)

ThenBegin

a:=sqr(a); b:=sqr(b); c:=sqr(c)

End

Else If (a>b) and (b>c)

ThenBegin a:=c; b:=c End

ElseBegin a:=-a; b:=-b; c:=-cEnd;

Writeln(a:3,b:3,c:3);

Readln

End.

Примечание. Если вложенными условными операторами являются неполные условные операторы (как, например, в задаче, рассмотренной выше), то могут возникать неясности, связанные с установлением границ условных операторов. В таких случаях служебное слово 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.  

            

Цикл с параметром

 

Оператор цикла с параметром:

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.

 










Последнее изменение этой страницы: 2018-05-31; просмотров: 206.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...