Условные и циклические конструкции.ppt
- Количество слайдов: 56
Условные и циклические конструкции if. . then. . else, case. . of, for. . to(downto). . do, while. . do, repeat. . until, синтаксис, блок-схема, назначение, примеры
УСЛОВНЫЕ ОПЕРАТОРЫ
Разветвляющийся алгоритм Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма. Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий - простые и составные.
Блок-схема – способ представления алгоритма
Блок-схема – способ представления алгоритма
Назначение условного оператора На практике решение большинства задач не удается описать с помощью программ линейной структуры. Для описания ветвящихся процессов используют управляющие операторы. Условные операторы используется для реализации разветвлений в программе, которые происходят при выполнении некоторого условия. В качестве условий выбора используется значение логического выражения. В Pascal имеются два условных оператора: if. . then и case. . of.
Оператор альтернативы if…then
Синтаксис условного оператора if…then if <логическое выражение> then <оператор 1> else <оператор 2>
Выполнение оператора if…then if <логическое выражение> then <оператор 1> else <оператор 2> Сначала вычисляем выражение, записанное в условии. В результате его вычисления получается значение булевского типа. В первом случае, если значение выражения есть true (истина), выполняется <оператор 1>, указанный после слова then (то). Если результат вычисления выражения в условии есть false (ложь), то выполняется <оператор 2>.
Пример 1 Задача. Вывести на экран большее из двух данных чисел. Program Example 1; Var x, y: integer; {вводимые числа} Begin Writeln(‘введите два числа’) ; {вводим два целых числа через пробел} Readln (x, y); If x>y then Writeln (x) {если x больше у, то выводим х} else Writeln (y); {иначе выводим у} Readln; end.
Пример 2 Задача. Написать программу расчёта функции. cos 2 x, если 0 < x < 2 у = 1 – sin 2 x, если 0 ≥ x≥ 2. Program Example 2; Var x, y: real; Begin Writeln(‘x=’) ; Readln (x); {ввод x} If (x>0) and (x<2) then y: =Sqr(cos(x)) else y: =1 – sin(sqr(x)); {вычисление значения у} Writeln (‘y(‘, x: 8: 2, ‘)=‘, y: 8: 2); {вывод значения у на экран} Readln; End.
Пример 3 Задача. По заданным коэффициентам решить квадратное уравнение. Program Example 3; Var a, b, c, d, x 1, x 2 : Real; {a, b, c, d - для хранения аргументов, x 1, x 2 - результат} Begin Writeln ('Введите коэффициенты квадратного уравнения'); Readln (a, b, c); {Вводим аргументы с клавиатуры} d: =b*b-4*a*c; If d<0 then Writeln ('Корней нет! ') {Если d<0, то результата нет} else begin x 1 : =(-b+sqrt(d))/2/a; x 2 : =(-b-sqrt(d))/2/a; Writeln (' x 1=', x 1: 8: 3, ' x 2=', x 2: 8: 3) end; End.
Вложенные условные операторы Когда оператор if появляется внутри другого оператора if, он считается вложенным. Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, однако одновременно он уменьшает наглядность программы.
Вложенные условные операторы Не рекомендуется использовать более одного - двух уровней вложения if. За вторым уровнем вложения становится трудно восстановить последовательность проверки условий каждым условным оператором. Если часть else используется во вложенных if, то каждое else соответствует тому if, которое ему непосредственно предшествует.
Вложенные условные операторы if (<условие>) then begin оператор 1; оператор 2; . . . end else begin оператор 1; оператор 2; . . . end; Иными словами, надо заключить операторы в групповой оператор – begin. . end.
Пример вложенного оператора Задача. Вычислить: Program Example 4; Var x, y: real; Begin Write(‘x=’) ; Readln (x); {ввод x} If x<0 then y: =x+3 {вычисление значения у} else if x>4 then y: =exp(x-6) else y: = sqr(x); Writeln(‘y=‘, y: 8: 2); {вывод значения у на экран} Readln; End.
Оператор выбора case…of
Назначение оператора выбора Язык Паскаль предоставляет управляющую структуру (оператор выбора case), которая позволяет построить ветвление по ряду условий в форме, более удобной для чтения программ. Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит так называемый ключ выбора (или селектор) – выражение порядкового типа.
Синтаксис оператора выбора case…of case <Селектор> of список констант1: оператор1; список констант2: оператор2; . . список констант. N: оператор. N; else оператор. E; end;
Выполнение оператора case…of case <Селектор> of список констант1: оператор1; список констант2: оператор2; . . список констант. N: оператор. N; else оператор. E; end; Выполнение оператора начинается с вычисления значения селектора. Если селектор принимает одно из значений списка констант1, то выполняется оператор1, а остальные операторы пропускаются.
Выполнение оператора case…of case <Селектор> of список констант1: оператор1; список констант2: оператор2; . . список констант. N: оператор. N; else оператор. E; end; Если значение селектора не совпадает ни с одним из значений списков констант, то выполняется оператор. Е. После выполнения оператора case управление передается на оператор, следующий за конструкцией case.
Пример 1 Задача. В зависимости от значения переменной а на экран вывести наименование оценки. Наличие варианта else обеспечивает вывод сообщения об ошибке в случае, когда введено число вне интервала 2. . 5. Program Examplecase 1; Var a : integer; Begin Write (‘Введите оценку: ‘); Read(a); case a of 2 : Write(‘неудовлетворительно’); 3 : Write(‘удовлетворительно’); 4 : Write(‘хорошо’); 5 : Write(‘отлично’) else Write(‘Ошибка!’) end; End.
Пример 2 Задача. В зависимости от значения переменной Hour на экран наименование времени суток: Program Examplecase 2; Var hour : integer; Begin Read( hour ); case hour of 0, 24 : Write(‘Полночь’); 1. . 4 : Write(‘Ночь’); 5. . 7 : Write(‘Раннее утро’); 8. . 11 : Write(‘Утро’); 12 : Write(‘Полдень’); 13. . 17 : Write(‘День’); 18. . 23 : Write(‘Вечер’) else Write(‘Введено число вне диапазона 0. . 24!’) end; End.
Циклические операторы
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Пример циклического алгоритма
Пример циклического алгоритма
Назначение циклического оператора Оператор цикла задает повторное выполнение определенных операторов. Один повтор такой последовательности называется итерацией цикла. Если число повторений заранее известно, то подходящей конструкций является оператор for. . to(downto). . do. В противном случае следует использовать операторы while. . do или repeat. . until.
Оператор цикла с предусловием while. . do
Назначение цикла с предусловием Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Циклы с предусловием используются тогда, когда выполнение цикла связано с некоторым логическим условием. Оператор цикла с предусловием имеет две части: условие выполнения цикла и тело цикла.
Синтаксис оператора while. . do while <логическое выражение> do <оператор> while <логическое выражение> do begin <группа операторов> end;
Выполнение оператора while…do while <логическое выражение> do <оператор> При выполнении этого оператора вначале вычисляется значение логического выражения. Если это значение истинно, выполняется оператор. Затем значение выражения проверяется вновь, и всё повторяется до тех пор, пока выражение не примет значение false. Если выражение принимает значение false при первой же проверке, то оператор ни разу не выполнится.
Пример 1 Примерами операторов цикла с предусловием могут служить следующие операторы: while data[i] <> x do i : = i + 1; … while i > 0 do begin if Odd(i) then z : = z * x; i: = i div 2; x: = Sqr(x); end; … while not Eof(In. File) do begin Readln(In. File, Line); Process(Line); end;
Пример 2 Задача. Вычисление факториала 10! = 1· 2· 3· 4· 5· 6· 7· 8· 9· 10 Var factorial, n : Integer; Begin factorial : = 1; {стартовое значение факториала =0! } n: = 1; {стартовое значение для условия цикла } while n<=10 do {заголовок цикла, условие } begin {начало тела цикла } factorial : = factorial*n; {вычисление факториала N! } n: = n + 1 {N должно меняться в цикле} end; {конец тела цикла } writeln(’ 10!= ’, factorial); {вывод результата расчета } End.
Оператор цикла с постусловием repeat. . until
Назначение цикла с постусловием Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В Паскале этот цикл реализует оператор repeat. . until. В языке Паскаль условие такого цикла трактуется как условие выхода (цикл завершается, когда условие истинно, в русской терминологии такие циклы называют ещё «цикл до» ).
Синтаксис оператора repeat. . until repeat оператор1; оператор2; ··· оператор. N; until <логическое выражение>;
Выполнение оператора repeat. . until repeat оператор1; оператор2; ··· оператор. N; until выражение; Операторы, заключенные между ключевыми словами repeat и until, выполняются последовательно, до тех пор пока результат выражения не принимает значение true. Последовательность операторов выполнится по крайней мере один раз, поскольку вычисление выражения производится после выполнения последовательности операторов.
Пример 1 Задача. В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число. Var n : Integer; begin . . . repeat Write(‘Введите целое число от 0 до 10: ’); Readln (n); until (n>=0) and (n<=10); . . . end.
Пример 2 Задача. Пусть требуется сложить произвольные вводимые пользователем числа до тех пор, пока их сумма не превысит 1000. С помощью цикла repeat этот алгоритм записывается так: sum : = 0; repeat write(' Введите число '); readln (a); sum : = sum + a; until sum > 1000; writeln(' Сумма равна ', sum);
Пример 2 а с помощью цикла while так: sum : = 0; while sum <= 1000 begin write ('Введите число '); read(a); sum : = sum + a end; writeln(' Сумма равна ', sum); Сумму накапливаем в переменной sum, а очередное число помещаем в переменную a. Эти переменные могут быть как целыми, так и вещественными.
Пример 3 “Вечный цикл” REPEAT UNTIL False; Этот цикл пустой и никогда не прекращается. Организовать такой цикл можно так: repeat операторы until false; Прервать цикл можно специальными операторами Break, Exit и Halt. Это имеет смысл, если условий завершения программы много или они очень сложны.
Оператор цикла с параметром FOR
Цикл со счётчиком – цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for, в котором указывается переменная счетчик, требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик.
Назначение цикла со счётчиком, или с параметром Оператор цикла с параметром вводится для организации “строгих” циклов, которые должны быть проделаны заданное число раз. Кроме того, циклы с параметром позволяют организовать автоматическое изменение значения некоторой переменной в определенном диапазоне. N 1 – начальное значение N 2 – конечное значение
Синтаксис оператора for 1. Цикл с увеличением переменной счетчик. for переменная счетчик: = нач. значение to конечное значение do оператор; Начальное значение а будет изменяться следующим образом: а, а+1, а+2, . . , n 2. Цикл с уменьшением переменной счетчик. for переменная счетчик: = нач. значение downto конечное значение do оператор; Начальное значение а будет изменяться следующим образом: а, а-1, а-2, . . , n. n – конечное значение переменной счетчик
Выполнение оператора for переменная счетчик: = нач. значение to конечное значение do оператор; При выполнении оператора for сначала вычисляется начальное значение выражения, затем вычисляется конечное значение выражения. Далее управляющая переменная цикла последовательно пробегает все значение от начального до конечного. В том случае, если начальное значение сразу оказывается больше конечного, тело цикла не будет выполняться вовсе.
Ограничения Существуют ограничения при использовании цикла for: Должно быть известно начальное и конечное значение переменной счетчика; Нельзя задавать шаг изменения значения параметра, отличный от 1 или -1; Переменная счетчик должна быть порядкового типа.
Пример 1 Задача. Вычислим факториал числа n, который определяется как произведение чисел от 1 до n. … factorial : = 1; for i: =1 to n do factorial : = factorial * i; writeln (n, '! = ', factorial ); … Для переменной factorial лучше выбрать тип double, поскольку факториал числа - очень быстро растущая функция.
Пример 2 Задача. С клавиатуры вводится целое число N, после чего вычисляется сумма всех целых чисел от 1 до N. Program Primer; Uses Crt; Var i, n, s: integer; Begin Clr. Scr; Write (‘n= '); Readln (n); {C клавиатуры ввели целое число в переменную “n”} s: =0; {Задали начальное значение суммы} for i: =1 to n do s: =s+i; { Во время каждого из повторов значение суммы “s" увеличивается на новую величину счётчика "i" } Writeln(‘s= ', s: 6); Readln; End.
Пример 3 Задача. Вывести на экран таблицу умножения. Uses Crt; Var i, j: byte; Begin Clr. Scr; Write('': 4); for i: =1 to 10 do Write(i: 4); Writeln; for i: =1 to 10 do begin Write(i: 4); for j: =1 to 10 do Write(i*j: 4); Writeln; end; Readln; End.
Безусловные циклы Иногда в программах используются циклы, выход из которых не предусмотрен логикой программы. Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле заменяется константным значением (while true do … в Паскале).
Вложенные циклы Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Вложенный цикл по отношению к циклу, в тело которого он вложен, будет именоваться внутренним циклом, и наоборот, цикл, в теле которого существует вложенный цикл, будет именоваться внешним по отношению к вложенному. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности как правило не ограничивается.
Контрольные вопросы Для чего предназначены условные опреаторы? Как выполняется оператор if? Приведите пример использования оператора if. В каких случаях применяется оператор case? Какого типа данных «переключатель» в операторе case? Приведите пример использования оператора case. Когда применяется цикл for? Какого типа данных должна быть переменная «счетчик» в операторе for?
Контрольные вопросы Какие вы знаете символы(блоки), предназначенные для представления алгоритма в виде блок-схемы? Для чего предназначены циклические конструкции? В чём отличия между циклами while и repeat? В каких случаях рациональнее использовать цикл while, repeat? Как выглядят разветвляющийся и циклический алгоритмы? Что такой «вечный цикл» ? Как организовать вложенный цикл? Что такое безусловный цикл?
Список используемых источников Немнюгин, С. А. Turbo Pascal: программирование на языке высокого уровня / С. А. Немнюгин. – 2 -е изд. – СПб. : Питер, 2006. – 544 с. Фаронов, В. В. Turbo. Pascal: учебное пособие / В. В. Фаронов. – М. : Изд. : ОМД Групп, 2007. – 368 с. Марченко, А. И. Программирование в среде Turbo Pascal 7. 0. / А. И. Марченко, Л. А. Марченко. – М. : Бином Универсал, К. : ЮНИОР, 2007. – 496 с. Культин, Н. Б. Turbo Pascal в задачах и примерах / Н. Б. Культин. – СПб. : БХВ-Петербург, 2007. – 256 с. Коффман, Э. М. Turbo Pascal / Э. М. Коффман. 5 -е изд. – М. : Вильямс, 2005. – 896 с.


