Скачать презентацию Алгоритм это четко определенный план действий для Скачать презентацию Алгоритм это четко определенный план действий для

Для зачета.ppt

  • Количество слайдов: 78

Алгоритм – это четко определенный план действий для исполнителя. Свойства алгоритма • дискретность: состоит Алгоритм – это четко определенный план действий для исполнителя. Свойства алгоритма • дискретность: состоит из отдельных шагов (команд) • понятность: должен включать только команды, известные исполнителю (входящие в СКИ) • определенность: при одинаковых исходных данных всегда выдает один и тот же результат • конечность: заканчивается за конечное число шагов • массовость: может применяться многократно при различных исходных данных • корректность: дает верное решение при любых допустимых исходных данных 1

Программа – это • алгоритм, записанный на каком-либо языке программирования • набор команд для Программа – это • алгоритм, записанный на каком-либо языке программирования • набор команд для компьютера Команда – это описание действий, которые должен выполнить компьютер. • откуда взять исходные данные? • что нужно с ними сделать? Оператор – это команда языка программирования высокого уровня. 1970 – язык Паскаль (Н. Вирт) 2

Простейшая программа название программы program qq; begin { начало программы } end. { конец Простейшая программа название программы program qq; begin { начало программы } end. { конец программы } комментарии в фигурных скобках не обрабатываются ? Что делает эта программа? 3

Вывод текста на экран program qq; begin write('2+'); { без перехода } writeln('2=? '); Вывод текста на экран program qq; begin write('2+'); { без перехода } writeln('2=? '); { на новую строку} writeln('Ответ: 4'); end. Протокол: 2+2=? Ответ: 4 4

5 Переменные Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол: Введите 5 Переменные Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол: Введите два целых числа 25 30 пользователь 25+30=55 компьютер считает сам! ? 1. 2. 3. 4. Как ввести числа в память? Где хранить введенные числа? Как вычислить? Как вывести результат?

Программа program qq; begin { ввести два числа } { вычислить их сумму } Программа program qq; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. Псевдокод: алгоритм на русском языке с элементами Паскаля. ! Компьютер не может исполнить псевдокод! 6

7 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно 7 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Значение a Имя Другой тип данных ! ? Поместится? В переменной хранятся данные определенного типа!

Имена переменных В именах МОЖНО использовать • латинские буквы (A-Z) заглавные и строчные буквы Имена переменных В именах МОЖНО использовать • латинские буквы (A-Z) заглавные и строчные буквы не различаются • цифры имя не может начинаться с цифры • знак подчеркивания _ В именах НЕЛЬЗЯ использовать • русские буквы • пробелы • скобки, знаки +, =, !, ? и др. Какие имена правильные? ? AXby R&B 4 Wheel Вася “Pes. Barbos” TU 154 [Qu. Qu] _ABBA A+B 8

9 Переменные Типы переменных: • integer, int 64, word { целая } • real 9 Переменные Типы переменных: • integer, int 64, word { целая } • real { вещественная } • string { строковая } • char { символьная } Объявление переменных: variable – переменная тип – целые var a, b, c: integer; список имен переменных Выделение места в памят

Как записать значение в переменную? Оператор присваивания a : = 5; 5 ! При Как записать значение в переменную? Оператор присваивания a : = 5; 5 ! При записи нового значения старое стирается! Оператор – это команда языка программирования (инструкция). Оператор присваивания – это команда для записи нового значения в переменную. 10

Блок-схема линейного алгоритма начало блок «начало» ввод a, b блок «ввод» c : = Блок-схема линейного алгоритма начало блок «начало» ввод a, b блок «ввод» c : = a + b; блок «процесс» вывод a, b блок «вывод» конец блок «конец» 11

Как ввести значение с клавиатуры Оператор ввода 5 read ( a ); ! 1. Как ввести значение с клавиатуры Оператор ввода 5 read ( a ); ! 1. Программа ждет, пока пользователь введет значение и нажмет Enter. 2. Введенное значение записывается в переменную a. 12

Ввод значений двух переменных read ( a, b ); Ввод значений двух переменных (через Ввод значений двух переменных read ( a, b ); Ввод значений двух переменных (через пробел или Enter). через пробел: 25 a 30 b 25 30 через Enter: 25 30 25 a 30 b 13

Оператор вывода write( a ); { вывод значения переменной a} writeln( a ); { Оператор вывода write( a ); { вывод значения переменной a} writeln( a ); { вывод значения переменной a и переход на новую строчку} writeln( 'Привет!' ); { вывод текста } writeln( 'Ответ: ', c ); {вывод текста и значения переменной c} writeln ( a, '+', b, '=', c ); 14

Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Простейшее решение: program qq; var a, b, c: integer; begin read ( a, b ); c : = a + b; ? Что плохо? writeln ( c ); end. 15

16 Полное решение program qq; var a, b, c: integer; begin writeln('Введите два целых 16 Полное решение program qq; var a, b, c: integer; begin writeln('Введите два целых числа'); read ( a, b ); c : = a + b; writeln ( a, '+', b, '=', c ); end. Протокол: компьютер Введите два целых числа 25 30 пользователь 25+30=55

Как изменить значение переменной? Пример: program qq; a 5 ? 5 var a, b: Как изменить значение переменной? Пример: program qq; a 5 ? 5 var a, b: integer; begin b a : = 5; 5+2 ? 7 b : = a + 2; a a : = (a + 2)*(b – 3); 7*4 28 5 b : = b + 1; end. b 8 7 7+1 17

Арифметические операции + сложение – вычитание * умножение / деление div деление нацело (остаток Арифметические операции + сложение – вычитание * умножение / деление div деление нацело (остаток отбрасывается) mod остаток от деления var a, begin a : = b : = a : = end. b: integer; 7*3 - 4; a * 5; a div 10; a mod 10; { { 17 } 85 } 8 } 5 } 18

Какие операторы неправильные? program qq; var a, b: integer; x, y: real; begin имя Какие операторы неправильные? program qq; var a, b: integer; x, y: real; begin имя переменной должно быть слева от знака : = a : = 5; целая и дробная часть 10 : = x; отделяются точкой y : = 7, 8; нельзя записывать b : = 2. 5; вещественное значение в целую переменную x : = 2*(a + y); a : = b + x; end. 19

Порядок выполнения операций 20 1) вычисление выражений в скобках 2) умножение, деление, div, mod Порядок выполнения операций 20 1) вычисление выражений в скобках 2) умножение, деление, div, mod слева направо 3) сложение и вычитание слева направо 1 2 4 5 3 6 z : = (5*a+c)/a*(b-c)/ b; 2 3 5 4 1 10 6 9 8 7 x: =(5*c*c-d*(a+b))/((c+d)*(d-2*a));

21 Ручная прокрутка программы program qq; var a, b: integer; begin a : = 21 Ручная прокрутка программы program qq; var a, b: integer; begin a : = 5; b : = a + 2; a : = (a + 2)*(b – 3); b : = a div 5; a : = a mod b; a : = a + 1; b : = (a + 14) mod 7; end. a b ? ? 5 7 28 5 3 4 4

22 Вывод целых чисел program qq; var a, b: integer; begin a : = 22 Вывод целых чисел program qq; var a, b: integer; begin a : = 15; b : = 45; 1545 writeln ( a, b ); writeln ( a: 4, b: 4 ); 15 end. символов на число 45

Вывод вещественных чисел 23 program qq; var x: real; всего begin 1, 234568∙ 101 Вывод вещественных чисел 23 program qq; var x: real; всего begin 1, 234568∙ 101 символов x : = 12. 345678; writeln ( x ); 1. 234568 E+001 writeln ( x: 10 ); 1. 23 E+001 writeln ( x: 7: 2 ); 12. 35 end. всего символов в дробной части

24 Программирование на языке Паскаль Тема 2. Ветвления 24 Программирование на языке Паскаль Тема 2. Ветвления

Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися. 25

26 Вариант 1. Блок-схема начало блок «решение» ввод a, b да a > b? 26 Вариант 1. Блок-схема начало блок «решение» ввод a, b да a > b? max: = a; полная форма ветвления нет max: = b; вывод max конец ? Если a = b?

Вариант 1. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых Вариант 1. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); полная форма if a > b then begin условного max : = a; оператора end else begin max : = b; end; writeln ('Наибольшее число ', max); end. 27

Условный оператор if <условие> then begin {что делать, если условие верно} end else begin Условный оператор if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: • перед else НЕ ставится точка с запятой • вторая часть (else …) может отсутствовать (неполная форма) • если в блоке один оператор, можно убрать слова begin и end 28

29 Вариант 2. Блок-схема начало ввод a, b max: = a; да b > 29 Вариант 2. Блок-схема начало ввод a, b max: = a; да b > a? max: = b; вывод max конец нет неполная форма ветвления

Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); неполная форма max : = a; условного if b > a then оператора max : = b; writeln ('Наибольшее число ', max); end. 30

Вариант 2 Б. Программа program qq; var a, b, max: integer; begin writeln('Введите два Вариант 2 Б. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max : = b; if a? ? ? b then > ? ? ? max : = a; writeln ('Наибольшее число ', max); end. 31

32 Программирование на языке Паскаль Тема 3. Сложные условия 32 Программирование на языке Паскаль Тема 3. Сложные условия

Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит» ). Особенность: надо проверить, выполняются ли два условия одновременно. ? Можно ли решить известными методами? 33

34 Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x 34 Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x >= 25? нет 'не подходит' конец 'не подходит'

Вариант 1. Программа program qq; var x: integer; begin writeln('Введите возраст'); read ( x Вариант 1. Программа program qq; var x: integer; begin writeln('Введите возраст'); read ( x ); if x >= 25 then if x <= 40 then writeln ('Подходит') else writeln ('Не подходит'); end. 35

36 Вариант 2. Алгоритм начало ввод x да x >= 25 и x <= 36 Вариант 2. Алгоритм начало ввод x да x >= 25 и x <= 40? 'подходит' нет 'не подходит' конец

Вариант 2. Программа program qq; var x: integer; begin сложное writeln('Введите возраст'); условие read Вариант 2. Программа program qq; var x: integer; begin сложное writeln('Введите возраст'); условие read ( x ); if (x >= 25) and (x <= 40) then writeln ('Подходит') else writeln ('Не подходит') end. 37

38 Сложные условия Простые условия (отношения) равно < <= > >= = <> не 38 Сложные условия Простые условия (отношения) равно < <= > >= = <> не равно Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: • not – НЕ (отрицание, инверсия) • and – И (логическое умножение, конъюнкция, одновременное выполнение условий) • or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) • xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих)

Сложные условия Порядок выполнения (приоритет = старшинство) • выражения в скобках • not • Сложные условия Порядок выполнения (приоритет = старшинство) • выражения в скобках • not • and • or, xor • <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки. Пример 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end 39

40 Сложные условия Истинно или ложно при a : = 2; b : = 40 Сложные условия Истинно или ложно при a : = 2; b : = 3; c : = 4; True not (a > b) True (a < b) and (b < c) True not (a >= b) or (c = d) True (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) FALSE Для каких значений (x (x < < > > 6) 6) x истинны условия: and (x < 10) and (x > 10) or (x < 10) or (x > 10) (- ; 6) (6; 10) (10; ) (- ; 10) (- ; 6) (10; ) (- ; ) (6; ) x<6 x > 10 x < 10 x>6

41 Программирование на языке Паскаль Тема 4. Циклы 41 Программирование на языке Паскаль Тема 4. Циклы

Циклы Цикл – это многократное выполнение одинаковой последовательности действий. • цикл с известным числом Циклы Цикл – это многократное выполнение одинаковой последовательности действий. • цикл с известным числом шагов • цикл с неизвестным числом шагов (цикл с условием) Задача. Вывести на экран 5 раз слово «Привет» . Особенность: одинаковые действия выполняются 5 раз. ? Можно ли решить известными методами? 42

43 Циклы program qq; begin writeln('Привет'); writeln('Привет'); end. ? Что плохо? 43 Циклы program qq; begin writeln('Привет'); writeln('Привет'); end. ? Что плохо?

44 Циклы program qq; ? Как отсчитать ровно 5 раз? begin { сделай 5 44 Циклы program qq; ? Как отсчитать ровно 5 раз? begin { сделай 5 раз } writeln('Привет'); end. ? Как запоминать, сколько раз уже сделали? i : = i + 1;

45 Алгоритм начало еще не сделали ни одного раза i : = 0; проверить, 45 Алгоритм начало еще не сделали ни одного раза i : = 0; проверить, все ли сделали i = 5? нет Привет! i : = i + 1; да конец вывод на экран считаем очередной шаг

Циклы program qq; «Для всех i от 1 до 5 var i: integer; делай Циклы program qq; «Для всех i от 1 до 5 var i: integer; делай …» begin for i: =1 to 5 do writeln('Привет'); end. Если в цикле более одного оператора: for i: =1 to 5 do begin write('Привет'); writeln(', Вася!'); ? Что получится? end; 46

47 Циклы Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 47 Циклы Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b). Особенность: одинаковые действия выполняются 8 раз. ? Можно ли решить известными методами? i : = 1; { очередное число } i 2 : = i*i; { его квадрат } i 3 : = i 2*i; { куб } writeln(i: 4, i 2: 4, i 3: 4); i : = 2; . . . ? А если начальное и конечное значения вводятся с клавиатуры?

48 Алгоритм начало задать начальное значение переменной цикла i : = 1; проверить, все 48 Алгоритм начало задать начальное значение переменной цикла i : = 1; проверить, все ли сделали i <= 8? да i 2 : = i * i; i 3 : = i 2 * i; нет конец вычисляем квадрат и куб вывод результата i, i 2, i 3 i : = i + 1; перейти к следующему i

Алгоритм (с блоком «цикл» ) начало i : = 1, 8 i 2 : Алгоритм (с блоком «цикл» ) начало i : = 1, 8 i 2 : = i * i; i 3 : = i 2 * i; i, i 2, i 3 блок «цикл» конец тело цикла 49

50 Программа program qq; var i, i 2, i 3: integer; begin начальное значение 50 Программа program qq; var i, i 2, i 3: integer; begin начальное значение переменная цикла конечное значение for i: =1 to 8 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end.

Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы целых чисел от Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке). Особенность: переменная цикла должна уменьшаться. Решение: for i: =8 downto 1 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; 51

Цикл с переменной Увеличение переменной на 1: for <переменная> : = <начальное значение> to Цикл с переменной Увеличение переменной на 1: for <переменная> : = <начальное значение> to <конечное значение> do begin {тело цикла} end; Уменьшение переменной на 1: for <переменная> : = <начальное значение> downto <конечное значение> do begin {тело цикла} end; 52

Цикл с переменной Особенности: • переменная цикла может быть только целой (integer) • шаг Цикл с переменной Особенности: • переменная цикла может быть только целой (integer) • шаг изменения переменной цикла всегда равен 1 (to) или -1 (downto) • если в теле цикла только один оператор, слова begin и end можно не писать: for i: =1 to 8 do writeln('Привет'); • если конечное значение меньше начального, цикл (to) не выполняется ни разу (проверка условия в начале цикла, цикл с предусловием) 53

Цикл с переменной Особенности: • в теле цикла не разрешается изменять переменную цикла (почему? Цикл с переменной Особенности: • в теле цикла не разрешается изменять переменную цикла (почему? ) • при изменении начального и конечного значения внутри цикла количество шагов не изменится: n : = 8; for i: =1 to n do begin writeln('Привет'); нет n : = n + 1; зацикливания end; 54

55 Как изменить шаг? Задача. Вывести на экран квадраты и кубы нечётных целых чисел 55 Как изменить шаг? Задача. Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9. Особенность: переменная цикла должна увеличиваться на 2. Проблема: в Паскале шаг может быть 1 или -1. Решение: выполняется for i: =1 to 9 do begin только для if i mod 2 = 1 then begin ? ? ? нечетных i i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; ? Что плохо?

Как изменить шаг? – II Идея: Надо вывести всего 5 чисел, переменная k изменяется Как изменить шаг? – II Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2. Решение: i : = ? ? ? 1; for k: =1 to 5 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); ? ? ? i + 2; i : = end; 56

57 Как изменить шаг? – III Идея: Надо вывести всего 5 чисел, переменная k 57 Как изменить шаг? – III Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k, надо рассчитать i. k 1 2 3 4 5 i 1 3 5 7 9 Решение: for k: =1 to 5 do begin i ? ? ? 2*k – 1; : = i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; i = 2 k-1

58 Программирование на языке Паскаль Тема 5. Циклы с условием 58 Программирование на языке Паскаль Тема 5. Циклы с условием

Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача: Ввести целое число (<2000000) и определить число цифр в нем. Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик. n count 123 0 12 1 1 2 0 3 Проблема: Неизвестно, сколько шагов надо сделать. Решение: Надо остановиться, когда n = 0, т. е. надо делать «пока n <> 0» . 59

60 Алгоритм начало обнулить счетчик цифр ввод n count : = 0; выполнять «пока 60 Алгоритм начало обнулить счетчик цифр ввод n count : = 0; выполнять «пока n <> 0» n <> 0? нет да count : = count + 1; n : = n div 10; count конец

61 Программа program qq; , n 1: integer; var n, count: integer; begin writeln('Введите 61 Программа program qq; , n 1: integer; var n, count: integer; begin writeln('Введите целое число'); read(n); n 1 : = n; выполнять count : = 0; «пока n <> 0» while n <> 0 do begin count : = count + 1; n : = n div 10; end; writeln('В числе ', n 1, ' нашли ', n, count, ' цифр'); end. Что плохо? ?

Цикл с условием while <условие> do begin {тело цикла} end; Особенности: • можно использовать Цикл с условием while <условие> do begin {тело цикла} end; Особенности: • можно использовать сложные условия: while (a < b) and (b < c) do begin {тело цикла} end; • если в теле цикла только один оператор, слова begin и end можно не писать: while a < b do a : = a + 1; 62

Цикл с условием Особенности: • условие пересчитывается каждый раз при входе в цикл • Цикл с условием Особенности: • условие пересчитывается каждый раз при входе в цикл • если условие на входе в цикл ложно, цикл не выполняется ни разу a : = 4; b : = 6; while a > b do a : = a – b; • если условие никогда не станет ложным, программа зацикливается a : = 4; b : = 6; while a < b do d : = a + b; 63

Замена for на while и наоборот for i: =1 to 10 do begin {тело Замена for на while и наоборот for i: =1 to 10 do begin {тело цикла} end; for i: =a downto b do begin {тело цикла} end; i : = 1; while i <= 10 do begin {тело цикла} i : = i + 1; end; i : = a; while i >= b do begin {тело цикла} i : = i - 1; end; Замена цикла for на while возможна всегда. Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла. 64

65 Последовательности Примеры: • 1, 2, 3, 4, 5, … an = n a 65 Последовательности Примеры: • 1, 2, 3, 4, 5, … an = n a 1 = 1, an+1 = an + n • 1, 2, 4, 7, 11, 16, … • 1, 2, 4, 8, 16, 32, … a 1 = 1, an+1 = an+1 an = 2 n-1 a 1 = 1, an+1 = 2 an • b 1 = 1, bn+1 = bn+1 c 1 = 2, cn+1 = 2 cn

66 Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше 0, 001: 66 Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше 0, 001: Элемент последовательности (начиная с № 2): n 1 2 3 4 5 . . . b 1 2 3 4 5 . . . c 2 4 8 16 32 . . . z -1 1 -1 . . . b : = b+1; c : = 2*c; z : = -z;

67 Алгоритм начальные значения начало S : = 0; b : = 1; S 67 Алгоритм начальные значения начало S : = 0; b : = 1; S : = 0; c : = 2; z : = -1; a : = 1; |a| > 0. 001? новый элемент изменение первый элемент нет да S S : = S + a; конец a : = z*b/c; b : = b + 1; c : = 2*c; z : = -z; ? Перестановка?

68 Программа program qq; начальные var b, c, z: integer; значения S, a: real; 68 Программа program qq; начальные var b, c, z: integer; значения S, a: real; begin S : = 0; z : = -1; b : = 1; c : = 2; a : = 1; while abs(a) > 0. 001 do begin увеличение S : = S + a; суммы a : = z * b / c; z : = - z; расчет элемента b : = b + 1; последовательности c : = c * 2; end; переход к writeln('S =', S: 10: 3); end. следующему слагаемому

Цикл с постусловием Задача: Ввести целое положительное число (<2000000) и определить число цифр в Цикл с постусловием Задача: Ввести целое положительное число (<2000000) и определить число цифр в нем. Проблема: Как не дать ввести отрицательное число или ноль? Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!). Особенность: Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием). Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла. 69

Цикл с постусловием: алгоритм начало ввод n нет n > 0? да основной алгоритм Цикл с постусловием: алгоритм начало ввод n нет n > 0? да основной алгоритм конец тело цикла условие ВЫХОДА блок «типовой процесс» 70

Программа program qq; var n: integer; begin repeat writeln('Введите положительное число'); read(n); условие ВЫХОДА Программа program qq; var n: integer; begin repeat writeln('Введите положительное число'); read(n); условие ВЫХОДА until n > 0; until n. . . { основной алгоритм } end. Особенности: • тело цикла всегда выполняется хотя бы один раз • после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла 71

72 Программирование на языке Паскаль Тема 6. Оператор выбора 72 Программирование на языке Паскаль Тема 6. Оператор выбора

Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом месяце. Решение: Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом месяце. Решение: Число дней по месяцам: 28 дней – 2 (февраль) 30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь) 31 день – 1 (январь), 3 (март), 5 (май), 7 (июль), 8 (август), 10 (октябрь), 12 (декабрь) Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от номера месяца. ? Можно ли решить известными методами? 73

74 Алгоритм начало ввод M M = 1? нет M = 2? да да 74 Алгоритм начало ввод M M = 1? нет M = 2? да да выбор D : = 31; D : = 28; нет M = 12? ни один вариант не подошел нет ошибка конец да D : = 31; вывод D

75 Программа program qq; var M, D: integer; begin writeln('Введите номер месяца: '); read 75 Программа program qq; var M, D: integer; begin writeln('Введите номер месяца: '); read ( M ); case M of 2: begin D : = 28; end; 4, 6, 9, 11: begin D : = 30; end; 1, 3, 5, 7, 8, 10, 12: D : = 31; else D : = -1; end; ни один вариант не подошел if D > 0 then writeln('В этом месяце ', D, ' дней. ') else writeln('Неверный номер месяца'); end.

Оператор выбора Особенности: • после case может быть имя переменной или арифметическое выражение целого Оператор выбора Особенности: • после case может быть имя переменной или арифметическое выражение целого типа (integer) case i+3 of 1: begin a : = b; end; 2: begin a : = c; end; или символьного типа (char) var c: char; . . . case c of 'а': writeln('Антилопа'); 'б': writeln('Барсук'); else writeln('Не знаю'); end; 76

Оператор выбора Особенности: • если нужно выполнить только один оператор, слова begin и end Оператор выбора Особенности: • если нужно выполнить только один оператор, слова begin и end можно не писать case i+3 of 1: a : = b; 2: a : = c; end; • нельзя ставить два одинаковых значения case i+3 of 1: a : = b; 1: a : = c; end; 77

Оператор выбора Особенности: • значения, при которых выполняются одинаковые действия, можно группировать перечисление диапазон Оператор выбора Особенности: • значения, при которых выполняются одинаковые действия, можно группировать перечисление диапазон смесь case i of 1: a : = b; 2, 4, 6: a : = c; 10. . 15: a : = d; 20, 21, 25. . 30: a : = e; else writeln('Ошибка'); end; 78