Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Оператор безусловного перехода. Раздел описания меток
Общий вид оператора 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; просмотров: 241. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |