суббота, 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.

вторник, 13 марта 2018 г.

Ввод и вывод, оператор присваивания, линейные программы

Размещаю шпаргалку по пройденному материалу

Pascal – язык программирования структурного типа, т.е. любая программа, написанная на этом языке, имеет определенную структуру:

Program <имя программы>;
Const <раздел описания констант>;
Var <раздел описания переменных>;
Begin
  <раздел операторов>
End.

Все разделы программы отделяются друг от друга знаком «;».
Begin и End – «операторные скобки». Они используются для обозначения начала и конца группы команд, но сами командами не являются. Поэтому точка с запятой после Begin и перед End не ставится. 
Имя программы, а также имена переменных, констант и других используемых в программе объектов называются идентификаторами.
- Идентификаторы задает сам программист
- В качестве идентификатора может использоваться любая последовательность латинских букв, цифр и знака подчеркивания, начинающаяся с буквы
- Имена идентификаторов не могут совпадать
- Строчные и прописные буквы не различаются

Существуют стандартные и пользовательские (создаваемые самим программистом) типы данных (переменных).
Некоторые стандартные типы:
Integer – целые числа (-10; 0; 1; 2; … )
Real – вещественные числа (-10; -7,241; 0; 1; 4,25; …)
Boolean – логический тип (true и false)
Char – символьный тип (’а’; ’б’; ’1’; ’*’ …)
String – строковый тип (’а’; ’б’; ’1’; ’123’; ’абв’; ’*’ …)

Пример задания переменных: Var x:integer; Y:char; a:integer; b:integer;
Переменные одного типа можно описывать вместе: Var x,a,b:integer; Y:char;

Вывод данных на экран осуществляется с помощью оператора Write (или Writeln):
Write (список вывода) или Writeln (список вывода)
Элементами списка могут быть константы, переменные, выражения. Указанные данные выводятся на экран в порядке их перечисления в списке. Для вывода на экран определенного текста он указывается в кавычках.
При использовании оператора Writeln после вывода на экран осуществляется переход на следующую строку, при использовании оператора Write перехода на следующую строку не происходит. 
Например, 
1. Write(a) – вывод на экран значения переменной (или константы) a;
2. Write(’a’) – вывод на экран буквы а;
3. Write(’a’, b, c) – вывод на экран буквы а и значений переменных (или констант) b и c;
4. Write(’a,’, b, ’,’, c) – вывод на экран буквы а и значений b и c через запятую;
5. Write(’a’);    – вывод на  экран букв a и b (в строку)
    Write(’b’)
6. Writeln(’a’);     – вывод на  экран букв a и b (в столбик)
    Write(’b’)
Ввод данных с клавиатуры осуществляется с помощью оператора Read(список переменных) или Readln(список переменных)
При выполнении этого оператора компьютер ожидает ввода с клавиатуры значений переменных в том порядке, в каком они указаны в списке. Вводить значения следует через пробел, после окончания ввода нажимают клавишу Enter. При использовании оператора Readln после ввода значений осуществляется переход на следующую строку, при использовании оператора Read перехода на следующую строку не происходит. 
С клавиатуры можно вводить только значения переменных.
Например,
1. Read(a)– ввод значения переменной a;
2. Read(’a’)  – неверная команда, т. к. вводить можно только значения переменных;
3. Read(a,b,c) – ввод значений переменных a, b, c;

Пример. Программа выводит на экран введенное число с одним знаком после запятой
Program chislo;
Var N:Real;
Begin
  Write(’Введите число: ’);
  Readln(N);
  Writeln(’N=’, N:5:1)
End.

Вид экрана после выполнения программы, будет следующим:
Введите число: . . .
N=. . .
Если введут число 7, вид экрана после выполнения программы, будет следующим:
Введите число: 7
N=  7.0

Оператор присваивания
Значения переменных можно изменять в процессе выполнения программы с помощью оператора присваивания. Команда присваивания имеет следующий вид:
переменная: =выражение
Оператор присваивания выполняется следующим образом:
1. вычисляется значение выражения
2. переменная получает это значение
При этом тип выражения (тип выражения определяется типом его значения) должен быть совместим с типом переменной. Например, числовой переменной нельзя присвоить в качестве значения символ или строку символов и наоборот; переменной символьного типа Char нельзя присвоить в качестве значения строку символов, а переменной типа Integer – значение, тип которого Real и т.д. Но при этом обратное возможно: переменной типа String можно присвоить значение типа Char, а переменной типа Real – значение типа Integer.

Выражение может включать в себя константы, переменные, знаки операций, функции, скобки.
Некоторые операции:
+ сложение
вычитание
* умножение
/ деление
div деление нацело (например, значением выражения 7div4 будет 1)
mod остаток от деления нацело (например, значением выражения 7mod4 будет 3)

Некоторые функции:
Abs(x) модуль х
Cos(x) косинус х,    Sin(x) – синус х
Sqr(x) квадрат х, Sqrt(x) – корень из х
Random случайное число из отрезка [0, 1], Random(x) – случайное число из отрезка [0, х]

Обратите внимание, что аргументы  функций записываются в скобках!

Например,
1. a:=14.2     – переменной а присваивается значение 14,2
2. k:=’слово’   – переменной k присваивается значение ’слово’
3. x:=x–4          – значение переменной x уменьшается на 4
4. c:=a+b    – переменной c присваивается сумма значений переменных (или констант) a и b
5. с:=sin(sqr(a+b))  – переменной c присваивается значение синуса от квадрата суммы         переменных  (или констант) a и b
6. x1:=(–b+sqrt(sqr(b)–4*a*c))/(2*a)
        x2:=(–b–sqrt(sqr(b)–4*a*c))/(2*a)
 – значения переменных x1 и x2 вычисляются по формуле корней квадратного уравнения