суббота, 24 марта 2018 г.

If и While

Продолжаю публиковать справочный материал по программированию. Особенно актуален он будет для тех, кто что-либо не понял на уроке или не присутствовал на занятии.

Для осуществления ветвления в программе используется условный оператор.
Он имеет полную и неполную формы:

Полная форма:
If  условие Then оператор1 Else оператор2

Неполная форма: If  условие Then оператор1

Условный оператор выполняется следующим образом:
  1. проверяется условие
  2. если условие выполнено, выполняется оператор1
  3. если условие не выполнено, в полной форме выполняется оператор2, а в неполной форме никаких действий не выполняется
  4. осуществляется переход к следующей команде
Условие может быть простым или сложным.
Простое условие – сравнение значений двух выражений с помощью знаков сравнения:
< – меньше, > – больше, <= – меньше или равно, >=   – больше или равно, =   – равно, <> – неравно

Например:
1) X>=3;       2) A<>B;      3)   sqr(c)=sqr(a)+sqr(b)

Сложное условие – несколько простых условий, соединенных логическими операциями:
Not – не,    And – и,    Or – или,     Xor – исключающее или

Простые условия, входящие в состав сложного, записываются в скобках.
Например:
1) (X>3) and (Y<=17) and (Z<>2) выполнено, если выполнены все простые условия
2) (X<2) or (X=8) or (X>=12) выполнено, если выполнено хоть одно из простых условий
3) (X=7) xor (Y=9) xor (Z=1) выполнено, если выполнено ровно одно из простых условий

Операторы 1 и 2 могут быть простыми и составными. Простой оператор – один оператор.
Составной оператор – несколько операторов, заключенных в операторные скобки (Begin … End).

Примеры:
1. Программа выводит на экран большее из   двух целых чисел
Program max;
Var a,b,m:integer;
Begin
  Write(’Введите 2 числа’);
  Readln(a,b);
  If a>b then writeln(a, ’большее’)
   else writeln(b, ’большее’)
End.

2. Программа вычисляет значение функции  - квадратный корень из х
Program func1;
Var x,f:real;
Begin
  Write(’x=’);
  Readln(x);
  If x>=0 then begin
                 f:=sqrt(x);
                 Writeln(’f=’,f:7:2)
               end
End.

3. Программа вычисляет значение функции
Program func2;
Var x,f:real;
Begin
  Write(’x=’);
  Readln(x);
  If x<2 then f:=-x
         else if x=2 then f:=0
                     else f:=x;
  Writeln(’f=’,f:7:2)
End.



В классе мы успели вспомнить только цикл с предусловием. Здесь же публикую материал по всем видам циклов.

Операторы цикла используются для реализации многократного выполнения одной или нескольких команд. Различают 3 типа циклов:
  • цикл с параметром;
  • цикл с предусловием;
  • цикл с постусловием.
Все 3 типа реализованы операторами языка Pascal.

Цикл с параметром
Цикл с параметром используется тогда, когда заранее известно количество повторений и шаг постоянен. Этот тип цикла реализуется в языке Pascal оператором For, который имеет 2 варианта записи:
1) For параметр цикла:=начальное значение to конечное значение do тело цикла
2) For параметр цикла:=начальное значение downto конечное значение do тело цикла
Параметр цикла – переменная целого типа;
начальное и конечное значения – выражения того же типа;
тело цикла – простой или составной оператор.
- Цикл повторяется, пока значение параметра лежит в интервале между начальным и конечным значениями
- При каждом повторении цикла значение параметра автоматически изменяется: в первом варианте увеличивается, а во втором уменьшается на 1.
- Значение параметра цикла можно использовать, но нельзя изменять внутри цикла.

Примеры:
1. Программа выводит на экран числа от 1 до 7
Program prog1;
var i:integer;
begin
  for i:=1 to 7 do writeln(i);
end.

2. Программа выводит на экран числа от 7 до 1
Program prog2;
var i:integer;
begin
  for i:=7 downto 1 do writeln(i);
end.

3. Программа вычисляет S=1+2+…+N, где N - введенное целое число
Program sum1;
var i,n,s:integer;
begin
  write('n=');
  readln(n);
  s:=0;
  for i:=1 to n do s:=s+i;
  writeln('s=',s);
end.

Цикл с предусловием (цикл – пока)
Цикл с предусловием – наиболее универсальная циклическая структура (с его помощью можно представить любой цикл). В языке Pascal этот вид цикла реализован оператором While:
While условие do begin тело цикла end
Оператор While выполняется следующим образом:
1. проверяется условие
2. если условие выполнено, выполняется тело цикла и происходит переход к п. 1
3. если условие не выполнено, то происходит переход к следующей команде (выход из цикла)
Особенности:
- Цикл повторяется, пока условие выполнено
- Если изначально условие не выполнено, то тело цикла не выполняется ни разу
- Оператор While может зациклиться: если изначально условие выполнено, а в теле цикла его значение не изменяется, то выхода из цикла не происходит

Примеры:
1. Программа вычисляет S=1+2+…+N, где N - введенное целое число
Program sum1;
var i,n,s:integer;
begin
  write('n=');
  readln(n);
  s:=0; i:=1
  While i<=n do
      begin
      s:=s+i; i:=i+1;
      end;
  writeln('s=',s);
end.

2. Написать программу решения уравнения ax + b = 0, если a = 1, 2, 3, 4, 5
Program ur_e;
var a:integer; b,x:real;
begin
  write('введите коэффициент b');
  readln(b);
  a:=1;
 While a <=5 do
  begin
  x:=-b/a;
  writeln(’При a= ’, a, ’x=’, x:5:2);
  a:=a+1;
  end;
end.

Цикл с постусловием (цикл – до)
Цикл с постусловием реализован в языке Pascal оператором Repeat:
Repeat тело цикла until условие
Оператор Repeat выполняется следующим образом:
1. выполняется тело цикла
2. проверяется условие
3. если условие не выполнено, то происходит переход к п. 1
4. если условие выполнено, то происходит переход к следующей команде (выход из цикла)

Особенности:
- Цикл повторяется, пока условие не выполнено (до момента, когда условие выполниться)
- Тело цикла выполняется по крайней мере 1 раз
- Оператор Repeat может зациклиться: если изначально условие не выполнено, а в теле цикла его значение не изменяется, то выхода из цикла не происходит
- Если тело цикла Repeat – составной оператор, то операторные скобки не обязательны (тело цикла в этом операторе всегда ограничено ключевыми словами Repeat и Until)

Пример:
Написать программу решения уравнения ax + b = 0, если a = 1, 2, 3, 4, 5
Program ur_e;
var a:integer; b,x:real;
begin
  write('введите коэффициент b');
  readln(b);
  a:=1;
 repeat
  begin
  x:=-b/a;
  writeln(’При a= ’, a, ’x=’, x:5:2);
  a:=a+1;
  end;
end.

Комментариев нет:

Отправить комментарий