Название: Алгоритмы и программы (Афанасьева Т. В.) Жанр: Информационные системы и технологии Просмотров: 1366 |
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.
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.
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) корнями системы уравнений
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. Назначение оператора безусловного перехода |
|