1 Курс «Паскаль. Программирование на языке высокого уровня»
Osnovnye_konstrukcii_jazyka_Lekcii_3_4_5.ppt
- Количество слайдов: 33
1 Курс «Паскаль. Программирование на языке высокого уровня»
2 Управляющие операторы языка Рассматриваются управляющие операторы языка (ветвления, циклы, передача управления).
3 Операторы ветвления
4 Разветвляющийся алгоритм — алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.
5 Разветвляющийся алгоритм полная форма если условие, то… иначе… неполная форма если условие, то...
6 Условный оператор if if a < 0 then b := 1; if (a < b) and ((a > d) or (a = 0)) then inc(b) else begin b := b * a; a := 0 end; if a < b then if a < c then m := a else m := c else if b < c then m := b else m := c; if выражение then оператор_1 [else оператор_2;]
7 Типовые задачи: Нахождение значения функции Квадратное уравнение Принадлежность точки указанной области
8 Пример1 Составить блок-схему алгоритма нахождения значения функции Y:
9 НАЧАЛО X Y = X2 Y = X - 1 Y = 2*X Y КОНЕЦ
10 Пример2 Составить блок-схему алгоритма решения квадратного уравнения aX2+ bX + c = 0
11 Пример 3. Определить принадлежность точки указанной области program shot; var x, y: real; begin writeln(‘ Введите значения х и у:’); readln(x, y); if (sqr(x) + sqr(y) <= 1) or (x <= 0) and (y <= 0) and (y >= - x - 2) then writeln(‘ Точка попадает в область’) else writeln(‘ Точка не попадает в область’); end.
12 Программа, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика
13 Описание алгоритма в неформальном словесном виде Ввести значение аргумента х. Определить, какому интервалу из области определения функции оно принадлежит, и вычислить значение функции y по соответствующей формуле. Вывести значения х и y.
14 Второй пункт алгоритма следует детализировать
15 program calc_function_1; var x, y : real; begin writeln(' Введите значение аргумента'); readln(x); if x < –2 then y := 0; if (x >= –2) and (x < –1) then y := –x – 2; if (x >= –1) and (x < 1) then y := x; if (x >= 1) and (x < 2) then y := –x + 2; if x >= 2 then y := 0; writeln('Для x = ', x:6:2, ' значение функции y = ', y:6:2); end.
16 По введенному значению аргумента вычислить значение функции, заданной в виде графика
17 Запись условий Нужно сократить количество проверок, т.е. использовать вложенные условия
18 Оператор варианта case case выражение of константы_1 : оператор_1; константы_2 : оператор_2; константы_n : оператор_n; [ else оператор ] end;
19 Пример 1 Program primer3; Uses crt; Var day: byte; Begin Wtiteln (‘введите номер дня недели’ ); Case day of 1..5: writeln(‘рабочий день’); 6: writeln(‘суббота’); 7: writeln(‘воскресенье’) else writeln (‘ошибка ввода данных’) end; readkey; end.
20 Пример 2 program cursor_keys; uses Crt; var key : char; begin writeln('Нажмите одну из курсорных клавиш '); key := readkey; if ord(key) <> 0 then writeln('обычная клавиша') else begin key := readkey; case ord(key) of 77: writeln('стрелка вправо'); 75: writeln('стрелка влево');0 72: writeln('стрелка вверх'); 80: writeln('стрелка вниз'); else writeln('не стрелка'); end; end; end.
21 Операторы цикла
22 Структура оператора цикла Усл-е Начальные значения Тело цикла Модиф-я параметра
23 Цикл с предусловием while выражение do оператор program tabl_fun; var Xn, Xk, dX, t, x, y : real; begin writeln('Введите Xn, Xk, dX, t'); readln(Xn, Xk, dX, t); writeln('| X | Y |'); x := Xn; while x <= Xk do begin y := t * x; writeln('|', x:9:2,' |', y:9:2,' |'); x := x + dX; end; writeln(' --------------------------- '); end. y = tx
24 Цикл с постусловием repeat тело цикла until выражение program square_root; var X, eps, Yp, Y : real; begin repeat writeln('Введите аргумент и точность : '); readln(X, eps); until (X > 0) and (eps > 0); Y := 1; repeat Yp := Y; Y := (Yp + X / Yp) / 2; until abs(Y - Yp) < eps; writeln('Корень из ', X:6:3, ' с точноcтью ', eps:7:5, 'равен ', Y:9:5); end. yn = ½ (yn–1 + x/yn–1)
25 Цикл с параметром for параметр := выражение_1 to выражение_2 do оператор for параметр := выражение_2 downto выражение_1 do оператор var i : integer; begin for i := 1 to 10 do writeln(i) end.
26 Примеры цикла с параметром var i, sum : integer; begin sum := 0; for i := 10 downto 1 do begin writeln(i); inc(sum, i) end; writeln(sum); end. var ch : char; begin for ch := ’a’ to ’z’ do writeln(ch) end.
27 Рекомендации не забывать о том, что если в теле циклов while и for требуется выполнить более одного оператора, нужно заключать их в блок; убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а также возможно ли выполнение других операторов; проверить, изменяется ли в теле цикла хотя бы одна переменная, входящая в условие продолжения цикла; предусматривать аварийный выход из итеративного цикла по достижению некоторого предельно допустимого количества итераций.
28 Процедуры передачи управления
29 Процедуры передачи управления break — завершает выполнение цикла, внутри которого записана; continue — выполняет переход к следующей итерации цикла; exit — выходит из программы или подпрограммы, внутри которой записана; halt — немедленно завершает выполнение программы.
30 Пример Написать программу вычисления значения функции sin с помощью степенного ряда с точностью по формуле:
31 program sinus; const MaxIter = 500; { максимально допустимое количество итераций } var x, eps : double; { аргумент и точность } c, y : double; { член ряда и его сумма } n : integer; { номер члена ряда } done : boolean; { признак достижения точности } begin writeln('Введите аргумент и точность:'); readln(x, eps);
32 done := true; c := x; y := c; n := 1; while abs(c) > eps do begin c := -c * sqr(x) / 2 / n / (2 * n + 1) ; y := y + c; inc(n); if n <= MaxIter then continue; writeln('Ряд расходится!'); done := false; break end; if done then writeln('Аргумент: ', x:10:6, #13#10, 'Значение функции: ', y:10:6, #13#10, 'Вычислено с точностью ', eps:8:6, ' за ', n, ' итераций'); end.
33 Оператор перехода goto Использование оператора безусловного перехода оправдано, как правило, только в двух случаях: принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей; переход из нескольких мест программы в одно (например, если перед выходом из программы необходимо всегда выполнять какие-либо действия).