Операторы ветвления.
Условный оператор IF. Оператор IF относится к операторам разветвления процесса обработки данных. Он позволяет выбрать для выполнения один из простых или составных операторов или не выбрать ни одного в зависимости от условия разветвления. Условный оператор IF может иметь одну из форм: полную или сокращенную. 1. IF_ условие _THEN_ оператор1 _ELSE_ оператор2; 2. IF_ условие _THEN_ оператор; Условие – выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняется оператор1, если ложно – оператор2. Во втором варианте оператора IF, если выражение ложно, то выполняется оператор, следующий в программе сразу за оператором IF. Один оператор IF может входить в состав другого оператора IF, т.е. этот оператор может быть вложенным. При вложенности операторов каждое ELSE соответствует тому THEN, которое ему непосредственно предшествует. Если необходимо выполнить более одного оператора после ключевого слова then или else, то надо записать составной оператор begin …end: if условие then begin группа операторов1 end else begin группа операторов2 end; Рисунок 2.1. Блок-схема полной формы условного оператора. Рисунок 2.2. Блок-схема сокращенной формы условного оператора.
Оператор выбора. Оператор выбора позволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат: CASE_ выражение-селектор OF константа_1: оператор1; константа_2: оператор2; …………………………… Константа_ N: операторN ELSE оператор E END; Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна вычисленному значению селектора. Если ни одна из констант не равна текущему значению селектора, то выполняется оператор, стоящий после ELSE.
Примеры программ. 1. Найти максимальное из двух чисел a и b Program example1; Var a,b,max:real; begin writeln(‘введите два числа ’); readln(a,b); if a>b then max:=a else max:=b; writeln(‘максимальное значение=’,max:5:2) end. 2. Для произвольных значений аргумента вычислить значение функции, заданной выражением В данной задче вся числовая прямая разбивается на три интервала: [0;0], [- ;0], [0; + ]. Заданная точка х может попасть в один из них. Сначала проверяется, попадает ли точка в первый интервал. Если попадает, то функцию вычисляем по первому выражению. Если нет, то точка может принадлежать второму или третьему интервалу. Поэтому проверяем принадлежность точки второму интервалу. Если точка принадлежит интервалу, то вычисляем функцию по второму выражению. Если нет, то можно без проверки принадлежности точки третьему интервалу вычислять функцию по третьему выражению. Program example2; Var x,y:real; begin writeln(‘введите x ’); readln(x); if x=0 then y:=0 else if x<0 then y:=x+1 else y:=sqr(x)-1; writeln(‘y(‘,x,’)=’,y:5:2) end. 3. Дана точка с координатами x,y. Определить принадлежит ли эта точка заданной заштрихованной области. Program example3; Var x,y:real; begin writeln(‘введите координаты точки ’); readln(x,y); if (abs(x)<4) and (abs(y)<2) then writeln(‘точка внутри области’) else if (abs(x)>4) or (abs(y)>2 then writeln(‘точка вне области’) else writeln(‘точка на границе области’) end. 4. Определить диапазон, в котором находится вводимое с клавиатуры число. Program example4; Var i:integer; begin READ(I); CASE I OF 1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’); 11..20: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 11 до 20’); 21..30: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 21 до 30’); ELSE WRITELN(‘число I=’,I:3,’находится вне диапазона 1 - 30’); end; end. Упражнения. Для произвольных значений аргумента вычислить значение функции 1. 2.. 3. 4. Вычислить . 5. Для произвольных значений аргументов вычислить функцию, заданную следующим образом:
а) ; б) ; в) 6. Найти минимальное число из x1, x2, x3. Расположить эти три числа в порядке возрастания, убывания. 7. Дана точка на плоскости М (х, у). Составить программу, которая дает ответ на вопрос: «Принадлежит ли точка заданной области: окружности с радиусом=2, кольцу с внешним радиусом 10 и внутренним радиусом 2, полукольцу?» 8. Дана точка с координатами x, y. Определить принадлежит ли эта точка заданной области: 9. Дано действительное число а. Для функций у = f(х), графики которых представлены на рисунке, вычислить f(a).
Операторы цикла. Цикл - это повторяющаяся последовательность операторов. Операторы, которые выполняются в ходе цикла, называются телом цикла. В Pascal имеется три типа циклов: while –цикл с предусловием, repeat – цикл с постусловием, for- цикл с параметром. Все операторы цикла могут быть вложенными.
Цикл While. Оператор while организует выполнение оператора или группы операторов неизвестное заранее число раз. Выход из цикла осуществляется, если условие завершения цикла окажется ложным. Формат оператора: WHILE_ условие _DO_ тело цикла; Условие – булевское выражение, тело цикла – простой или составной оператор. Перед каждым выполнением тела цикла вычисляется условие, если условие выполняется, то тело цикла выполняется и снова вычисляется значение условия. Если условие не выполняется, то происходит выход из цикла и переход к первому после WHILE оператору. В этом операторе цикла программист сам должен заботиться об изменении переменных, определяющих выход из цикла. Если необходимо выполнить более одного оператора после ключевого слова do, то надо записать составной оператор begin... end. Блок-схема рассмотренного оператора показана на рис. 3.1. Рис. 3.1. Блок-схема цикла WHILE.
Цикл Repeat. Оператор repeat имеет следующие характерные особенности: тело цикла выполняется, по крайней мере, один раз. Формат оператора: REPEAT тело цикла; UNTIL_у словие; Условие – выражение булевского типа, при его написании допустимы булевские операции и операции отношения. Тело цикла – простой или составной оператор. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если условие не выполняется, то операторы тела цикла выполняются еще раз, если выполняется – происходит выход из цикла (см рис. 3.2).
Рис. 3.2. Блок-схема цикла Repeat.
Цикл FOR. Оператор повтора FOR может иметь два формата: 1. FOR_ параметр-цикла:=S1_TO_S2_DO_ оператор; 2.FOR_ параметр-цикла:=S1_DOWNTO_S2_DO_ оператор; где S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла. FOR…DO – заголовок цикла, оператор – тело цикла. Тело цикла может быть простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу. В операторе повтора FOR Паскаль не допускает изменения параметра цикла на величину, отличную от единицы. В составе оператора запрещены операторы, меняющие значение параметра цикла. Если необходимо выполнить более одного оператора после ключевого слова do, то надо записать составной оператор begin … end; Примеры программ. 1. Найти все натуральные числа от 1 до n, используя оператор цикла while. Program example1; Var i,n:integer; begin writeln(‘введите количество натуральных чисел ’); readln(n); i:=1; while i<=n do begin writel(‘ ’,i); i:=i+1 end end. 2. Найти все натуральные числа от 1 до n, используя оператор цикла repeat. Program example2; Var i, n: integer; begin writeln(‘введите количество натуральных чисел ’); readln (n); i:=1; repeat write(‘ ’,i); i:=i+1; until i>n end. 3. Написать программу приближённого вычисления суммы с точностью По условию задачи считается, что нужное приближение получено, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое по модулю меньше, чем данное малое положительное число - это и все последующие слагаемые уже не надо учитывать. В таких задачах следует вычислять каждый член последовательности из предыдущего с помощью рекуррентного соотношения. В данном примере, если уже получено значение выражения xi-1/(i-1)!, то для получения xi/i! достаточно умножить значение предыдущего выражения на x/i. Program example3; Var i:integer; x, eps, a,s:real; {а - очередной член ряда} begin writeln(‘введите x ’); readln(x); writeln(‘введите eps ’);
readln(eps); i:=0; s:=0; a:=1; while abs(a)>=eps do begin s:=s+a; i:=i+1; a:=a*x/i end; write(‘s=’,s) end. 4. Написать программу для вычисления суммы Знак в формуле означает суммирование слагаемых, каждый из которых имеет вид , где n принимает значения от 1 до k. Program example4; Var i,n:integer; x, s, a:real; {а - очередной член ряда} begin writeln(‘введите n’); readln(n); writeln(‘введите x ’); readln(x); s:=0; a:=-1; for i:=1 to n do begin begin a:=-a*x/i s:=s+a; end; write(‘s=’,s) end.
Упражнения. 1. Даны числа а, b (а>b). Получить все члены последовательности a, a2,a3… меньшие числа b 2.Найти все положительные числа из диапазона от А до В с шагом H. 3. Найти сумму чисел из диапазона А до В(A<=B) с шагом H. 4. Вычислить бесконечную сумму ряда с заданной точностью =0,001: а) б) в) г) 8. Даны действительные числа а1, а2 … аn. Найти: 9. Составить программу нахождения количества делителей заданного натурального числа n (n=1000) Число k является делителем, если при делении n на k остаток от деления равен 0. Поэтому надо перебрать все числа от 1 до n и проверить являются ли они его делителями. 10. Найти факториал числа n. 11. Вычислить y= ,если хi изменяется от 0 с шагом 0,1 одновременно с i.
Читайте также: Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|