Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1341


3.2. безусловный оператор

 

В программе можно осуществить переход, прервав последова- тельное выполнение программы. Для этого служит оператор безусловного перехода, имеющий вид:

GOTO < имя метки >;

В качестве меток используются целые числа от 0 до 999 или имена, начинающиеся с буквы. Метка должна быть объявлена в разделе объявления меток (label). Она используется перед оператором и отделяется от него двоеточием.

program es; label 1; var

b,c:integer;

begin

1:writeln ('Введите В и С');

read(b,c);

if b>=c then goto 1

else writeln ('B меньше С);

end.

 

При выполнении данной программы сообщение «Введите В и С» будет выводиться на экран пока вы не введете b < c. В этом случае на экран будет   выдано   сообщение   «В   меньше   С»   и   программа   закончит свою работу.

 

Cтарайтесь обходиться в программах без меток и Вы начнете себя уважать.

 

Рассмотрим некоторые программы, реализующие разветвляющиеся алгоритмы:

Пример 3.1. Поиск максимального из двух введенных чисел. program n;

var a,b :integer;

begin

writeln('Введите два числа ');

write('Введи a= '); readln(a); write('Введи b= '); readln(b);

if a>b then        write('максимальное число a= ',a)

else begin

if a=b then

write('Вы ввели два равных числа ');

if a<b then

write('Максимальное число b= ',b);

end;

readln;

end.

 

Пример 3.2. Поиск максимального четного числа из двух введенных. program kurs4;

var

a, b, max : integer;

begin

writeln('Из двух введенных чисел определить максимальное четное');

writeln('Введите a,b');

read(a,b);

if a mod 2=0 then

if b mod 2=0    then

if a>=b then      max:=a else     max:=b

else      max:=a

else if b mod 2=0 then

max:=b else

writeln('Нет четных чисел '); writeln('Максимальное четное число равно', max:5); writeln('Нажмите enter.');

readln;

end.

 

Пример  3.3.  Программа  проверяющая,  можно  ли  из  отрезков  с длинами x, y, z, построить треугольник.

program gar4;

var

x, y, z: real;    {Длины отрезков, из которых строится треугольник}

r: boolean;     {Переменная логического типа}

begin

writeln('Составить программу проверяющую, можно ли из '); writeln('отрезков с длинами x, y, z, построить треугольник.'); writeln('Введите x, y, z');

read(x, y, z);

r:=((x+y)>z) and ((x+z)>y) and ((z+y)>x) ;

if r then

writeln('Треугольник можно построить')

else

writeln('Треугольник нельзя построить');

writeln('Нажмите enter.');

readln;

end.

Пример 3.4. Вычислить значение y в зависимости от значения x.

Если

x<–0.5,

y=1+sqrt(cos(x)),

 

x>1,

y=1–x*x,

 

 

program gar5;

var y,x:real; begin

в противном случае  y=x+1.

writeln('Вычислить значение y в зависимости от значения x.');

writeln('Если    x<–0.5 y=1+sqrt(cos(x)),'); writeln('    x>1     y=1–x*x.'); writeln('в противном случае       y=x+1.'); writeln('Введите x');

read(x);

if (x>=–0.5)and(x<=1) then y:=x+1

Else      if (x<–0.5) then if  (cos(x)>=0) then

y:=1+sqrt(cos(x));        {Оператор if }

else

begin    {составной оператор} writeln('Для х=',x,' нельзя вычислить функцию'); exit                   {завершение программы} end;

else      if x>1 then y:=1–x*x;

write('Значение y =',y:5:3); writeln('Нажмите enter '); readln;

readln;

end.

 

Пример 3.5. Вычислить значение y в зависимости от x.

Если                x=1,     то y не вычисляется, x>0,    y=2*x,

x>–1 и x<=10, y=1–ln(abs(1–x*x)), x<–1,      y=exp(–x).

program gar6;

var x,y:real; begin

writeln('Вычислить значение y в зависимости от x.'); writeln('Если           x=1     то y не вычисляется,'); writeln('            x>0      y=2*x, '); writeln('        x>–1 и x<=10              y=1–ln(abs(1–x*x)),                 '); writeln('        x<–1    y=exp(–x).                   '); writeln('Введите y');

read(x);

if (x=1) then write('y не вычисляется')

else begin

if(x>0) then       y:=2*x else

if(x>–1)and(x<=10) then          y:=1–ln(abs(1–x*x))

else

 

 

end.

if x<–1 then      y:=exp(–x); writeln('Значение y=',y:5:3); writeln('Нажмите enter');

readln; readln; end;

 

 

Пример           3.6.      Составить      программу      для      решения          квадратного уравнения a*x*x+b*x+c=0.

program gar7; var a,b,c,d,x1,x2:real; begin

writeln('Составить программу для решения квадратного уравнения');

writeln('a*x*x+b*x+c=0.'); writeln('Введите a,b,c'); read(a,b,c); d:=sqr(b)–4*a*c; if(a=0)and(b=0)and(c=0)

then

writeln('Уравнение имеет бесконечное множество решений')

else

if (a=0)and(b<>0)and(c<>0)

then

writeln('Уравнение имеет корень x=',c/b:5:3)

else

if d<0 then writeln('Уравнение имеет комплексные корни')

else

if          d=0      then      writeln('Уравнение     имеет  2          одинаковых    корня

x=',–b/(2*a):6:3)

else begin

x1:=(–b+sqrt(d))/(2*a);

x2:=(–b–sqrt(d))/(2*a);

writeln('x1=',x1:6:3,'     x2=',x2:6:3);

end; writeln('Нажмите enter'); readln;

end.

 

Корни уравнения находятся по формуле

x1,2=(–b+–sqrt(b*b–4*a*c))/2*a.

При составлении программы необходимо предусмотреть следующие

возможности:

1) если a=0, b=0, c=0, то уравнение имеет множество решений;

2) если a=0, b=0, c<>0, то уравнение не имеет решений;

3) если a=0,b<>0,c<>0, то уравнение имеет единственное решение x=c/b;

4) если  a<>0,  b<>0,  c<>0,  то  решение  уравнения  зависит  от  значения дискриминанта d=b*b–4*a*c;

a) если d<0, то уравнение имеет комплексные корни;

b) если d=0, то уравнение имеет два одинаковых корня x = -b/(2a);

с) если            d>0,     то        уравнение      имеет  два      корня  x1=(-b+sqrt(d)/(2a)), x2=(–b–sqrt(d)/(2a)).

 

Пример 3.7. Составить программу для нахождения наибольшего значения функции y:=abs(a)*exp(a*x–x*x) при изменении аргумента x от 0 до b с шагом h.

program kurs2;

label 1;

var

a, h, x, y, ymax, b:real;

begin

writeln('Составить программу для нахождения наибольшего значения'); writeln('функции y:=abs(a)*exp(a*x–x*x) при изменении аргумента '); writeln('x от 0 до b с шагом h.');

writeln('Введите параметры a,h,b');

readln(a, h, b);

ymax:=–1e37;  { Задание начального значения ymax }

x:=0;

1:if x<b then begin y:=abs(a)*exp(a*x–x*x);

writeln('y=',y:4:2,'x=',x:4:2); {Вывод на экран всех значений y,x на}

{отрезке от 0 до b}

if y>ymax then

ymax:=y;          {Выбор максимального значения y}

x:=x+h;

goto 1; {Безусловный переход на начало}

end;

writeln('Наибольшее значение функции','=',ymax:4:2);

writeln('Нажмите ENTER.');

readln;

end.

 

Задания для самостоятельного выполнения

1. Для двух чисел Х, У определить, являются ли они  корнями уравнения

А*Р4+D*P2+C=0.

2. Если среди трех чисел А, В, С имеется хотя бы одно четное, вычислить максимальное, иначе – минимальное.

3. Ввести положительное А. Найти наибольшее число вида 1Р   (Р>=0),

меньшее А.

4. Ввести   два   числа.   Меньшее   заменить   полусуммой,  а   большее   –

удвоенным произведением.

5. Ввести три числа А, В, С . Удвоить каждое из них , если А>=В>=С,

иначе поменять значения А и В.

6. Определить, является ли точка с координатами X, Y  точкой пересечения диагоналей квадрата со стороной R, одна вершина которого расположена в начале координат.

7. Определить, лежит ли точка с координатами (X, Y) вне круга радиуса R

с центром в точке (А, В) или внутри него.

8. Определить являются ли две точки (X1,Y1) корнями системы уравнений

ax + by = c nx + my = d

9. Вычислить

sin X , X<0

y=

tg X , X>=0

 

Контрольные вопросы

1. Напишите условие на языке Turbo Pascal X>0, Y>0 или Z=0.

2. Какие два вида условного оператора используются в программе?

3. Структура и алгоритм работы условного оператора.

4. Назначение составного оператора.

5. Что такое условие в операторе if?

6. Что обозначает ключевое слово if?

7. Что обозначают ключевые слова then, else?

8. Назначение оператора безусловного перехода