Скачать презентацию Оператор цикла с предусловием Оператор цикла с постусловием Скачать презентацию Оператор цикла с предусловием Оператор цикла с постусловием

Л4 Программирование циклов окончание Примеры.ppt

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

Оператор цикла с предусловием Оператор цикла с постусловием Оператор цикла с параметром нет да Оператор цикла с предусловием Оператор цикла с постусловием Оператор цикла с параметром нет да REPEAT WHILE условие DO оператор UNTIL оператор параметр цикла FOR переменная : = выражение 1 TO FOR переменная : = выражение 1 DOWNTO Имя параметра (счетчика) цикла выражение 2 Начальное значение счетчика цикла условие DO оператор выражение 2 DO оператор Конечное значение счетчика цикла Цикл – это многократно выполняемая последовательность операторов (команд). В языке Паскаль используются три основные циклические конструкции: (WHILE. . . DO. . . ), (REPEAT. . . UNTIL. . . ), (FOR. . . TO / DOWNTO. . . DO. . . ). Цикл с параметром (FOR … DO …) является частным случаем цикла с предусловием.

Пример1. Найти сумму квадратов всех натуральных чисел от 1 до 100. С использованием цикла Пример1. Найти сумму квадратов всех натуральных чисел от 1 до 100. С использованием цикла "Пока“ Program Ex 1; Var A : Integer; S : Longint; Begin A: =1; S: =0; While A<=100 Do Begin S: =S+A*A; A: =A+1 End; Writeln(S) End. С использованием цикла "До“ Program Ex 2; Var A : Integer; S : Longint; Begin A: =1; S: =0; Repeat S: =S+A*A; A: =A+1 Until A>100; Writeln(S) End. С использованием цикла "С параметром“ Program Ex 3; Var A : Integer; S : Longint; Begin S: =0; For A: =1 To 100 Do S: =S+A*A; Writeln(S) End.

Массивом будем называть упорядоченную последовательность данных одного типа, объединенных под одним именем. Описание типа Массивом будем называть упорядоченную последовательность данных одного типа, объединенных под одним именем. Описание типа линейного массива выглядит так: Type <Имя типа>=Array [<Диапазон индексов>] Of <Тип элементов>; Например: Type vector=array [1. . 40] of real; В качестве индексов могут выступать переменные любых порядковых типов. При указании диапазона начальный индекс не должен превышать конечный. Тип элементов массива может быть любым (стандартным или описанным ранее). Описать переменную-массив можно и сразу (без предварительного описания типа) в разделе описания переменных: Var <Переменная-массив> : Array [<Диапазон индексов>] Of <Тип элементов>; Примеры описания массивов: Var S, BB : Array [1. . 40] Of Real; N : Array ['A'. . 'Z'] Of Integer; R : Array [-20. . 20] Of Word; T : Array [1. . 40] Of Real; V: vector; Теперь переменные S, BB, T и V представляют собой массивы из сорока вещественных чисел; массив N имеет индексы символьного типа и целочисленные элементы; массив R может хранить в себе 41 число типа Word.

Единственным действием, которое возможно произвести с массивом целиком - присваивание. Var S, BB : Единственным действием, которое возможно произвести с массивом целиком - присваивание. Var S, BB : Array [1. . 40] Of Real; T : Array [1. . 40] Of Real; Для данного примера описания впоследствии допустима следующая запись: S: =BB; Однако, присваивать можно только массивы одинаковых типов. Даже массиву T присвоить массив S нельзя, хотя, казалось бы, их описания совпадают, произведены они в различных записях раздела описания. Никаких других операций с массивами целиком произвести невозможно, но с элементами массивов можно работать точно также, как с простыми переменными соответствующего типа. Обращение к отдельному элементу массива производится при помощи указания имени всего массива и в квадратных скобках - индекса конкретного элемента. Например: R[10] - элемент массива R с индексом 10. BB[15] - прямая адресация; BB[K] - косвенная адресация через переменную K, значение которой будет использовано в качестве индекса элемента массива BB.

Обработка массивов Пример 2. Ввод массива среднемесячных температур. Вычисление среднегодовой температуры. Обработка массивов Пример 2. Ввод массива среднемесячных температур. Вычисление среднегодовой температуры.

Месяц 01 02 03 04 05 06 07 08 09 10 11 12 T Месяц 01 02 03 04 05 06 07 08 09 10 11 12 T [ 1: 12 ] T [1] T [2] T [3] T [4] T [5] T [6] T [7] T [8] T [9] T [10] T [11] T [12] Температура -21 -18 -7 -6 10 18 23 24 17 6 -7 -18 var имя массива : array [ нижняя граница индекса. . верхняя граница индекса ] of тип массива ; начало PROGRAM : i : VAR T i : = 1, 12 Temperature ARRAY ; [ 1. . 12 ] OF REAL INTEGER ; i : = 1 TO 12 BEGIN вывод ” T [ i ] = ” FOR BEGIN ввод T [ i ] WRITE ( ’ T [ ’ , i : 2, ’ ] = ’ ) READLN ( T [ i ] ) END конец DO END. ; ; ;

Ввод массива среднемесячных температур Program Temperature; Var T: array[1. . 12] of real; {Описание Ввод массива среднемесячных температур Program Temperature; Var T: array[1. . 12] of real; {Описание одномерного массива} i: integer; Tsred: real; Begin {Цикл ввода} for i: =1 to 12 do begin Write('T[', i: 2, '] = '); Readln(T[i]) еnd; Вычисление среднегодовой температуры {Цикл суммирования всех значений температуры} Tsred: =0; for i: =1 to 12 do Tsred: =Tsred+T[i]; {Вычисление средней температуры} Tsred: =Tsred/12; {Вывод результата} Writeln('Среднегодовая температура = ', Tsred: 6: 2, ' градусов') End.

 Вычисление ежемесячных отклонений от средней температуры {Вычисление и вывод ежемесячных отклонений от средней Вычисление ежемесячных отклонений от средней температуры {Вычисление и вывод ежемесячных отклонений от средней температуры} for i: =1 to 12 step 1 do begin Dt[i]: =T[i] - Tsred; Writeln('Dt[', i: 2, ']=', Dt[i]: 6: 2) end End.

Результаты работы программы: Ввод массива среднемесячных температур. Вычисление среднегодовой температуры и ежемесячных отклонений от Результаты работы программы: Ввод массива среднемесячных температур. Вычисление среднегодовой температуры и ежемесячных отклонений от средней температуры

Пример 3: Пример 3:

Программа заполняет массив Rand случайными числами в диапазоне от 0 до 50, вводит число Программа заполняет массив Rand случайными числами в диапазоне от 0 до 50, вводит число Х, и вычисляет, сколько раз Х входит в массив Rand Program Example 2; Var Rand: array[1. . 20] of integer; I, X, Number. X : integer ; Begin {Установка датчика случайных чисел} Randomize; {Заполнение массива случайными числами и вывод их на экран} Writeln(‘Массив случайных чисел: ’); For I: =1 to 10 do begin Rand[I]: =random(50); Write(Rand[I]: 4) end; Writeln; {Ввод Х} Write(‘Введите Х: ’); Readln(X); {Подсчет числа вхождений Х в массив} Number. X: =0; For I: =1 to 10 do If Rand[I]=X then Number. X: =Number. X+1; {Анализ и вывод результата} If Number. X=0 then writeln(‘В массиве нет числа ’, X) else writeln(‘Число ’, X, ’ в массиве присутствует ’, Number. X, ’ раза’) End.

Результаты работы программы Результаты работы программы

Пример 4: Определить, является ли введенная строка Пример 4: Определить, является ли введенная строка "перевертышем". Перевертышем называется такая строка, которая одинаково читается с начала и с конца. Например, "казак" и "потоп" - перевертыши, "канат" - не перевертыш". Метод решения: из введенной строки сформируем другую строку из символов первой, записанных в обратном порядке, затем сравним первую строку со второй; если они окажутся равны, то ответ положительный, иначе - отрицательный. Program Str 4; Var S, B : String; i : Byte; Begin Writeln('Введите строку'); Readln(S); B: =‘ ‘; {Переменной B присваиваем значение "пустая строка"} For i: =1 to Length(S) do B: =S[i]+B; {Конкатенация. Символы строки S пристыковываются к} {переменной B слева. Самым левым окажется последний. } If B=S Then Writeln('Перевертыш') else Writeln('Не перевертыш') End.

Пример 5: Рассмотрим решение задачи по подсчету количества цифр данного числа. Program ex 5; Пример 5: Рассмотрим решение задачи по подсчету количества цифр данного числа. Program ex 5; var m, n: longint; k: integer; begin writeln (‘Введите целое число не равное 0'); readln ( n ); m: =n; k: =0; while m<>0 do begin k: =k+1; m: =m div 10; end; writeln (‘В числе ’, n, ‘ - ', k, ' цифр. '); readln; end. Модифицируя данную программу, можно решить следующие задачи: • • • найти сумму цифр числа; найти первую цифру числа, например для числа 7654 это цифра 7; поменять порядок цифр числа на обратный. Например, было 2345, стало 5432; найти количество четных цифр числа; найти сумму цифр числа, больших 5; ответить на вопрос, сколько раз данная цифра встречается в числе?

Пример 6: ПРОСТЫЕ ЧИСЛА. Целое положительное число p называется простым, если оно имеет только Пример 6: ПРОСТЫЕ ЧИСЛА. Целое положительное число p называется простым, если оно имеет только два делителя, а именно 1 и p. Научимся устанавливать факт: является ли число N простым? По соглашению 1 не считают простым числом. Начало последовательности простых чисел имеет вид: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89. . . program ex 6; var i, n: longint; begin writeln ('Введите натуральное число n'); • Считаем, что делители readln ( n ); числа находятся в интервале от 2 до (n div 2), i: =1; {делитель числа n} точнее в интервале от 2 до repeat целой части sqrt( n ). i: =i+1; • Если число n простое, то until (i>n div 2) or (n mod i=0); выведем на экран if i>n div 2 сообщение об этом. then writeln ('Число ', n, ' - простое') • Если оно не является else writeln ('Число ', i, 'первый делитель простым, то выведем на числа ', n); экран первый делитель readln; числа n. End.

Результаты работы программы Результаты работы программы

Пример 7: Сумма ряда Двумя способами (используя, оператор цикла с предусловием и оператор цикла Пример 7: Сумма ряда Двумя способами (используя, оператор цикла с предусловием и оператор цикла с постусловием) для данного значения х найти сумму ряда S с точностью до члена ряда, по абсолютной величине меньшего eps = 0. 0001. Сравнить эту сумму со значением контрольной функции y.

Математическая модель Аргументы 1. Точность eps = 0. 0001 = 1 E-4 2. Аргумент: Математическая модель Аргументы 1. Точность eps = 0. 0001 = 1 E-4 2. Аргумент: x - вещественный тип Промежуточные результаты: 1. Номер очередного члена ряда n: целый тип 2. Член ряда: u - вещественный тип (представляет собой дробь, её числитель: ch, её знаменатель: zn) Результаты 1. Сумма ряда: summa - вещественный тип 2. Значение контрольной функции: y - вещественный тип

Математическая модель • Формулы: Сумма ряда: summa : = summa + u Член ряда: Математическая модель • Формулы: Сумма ряда: summa : = summa + u Член ряда: u= сh/zn • Числитель – знакопеременный, у каждого следующего члена ряда • числитель больше в х*х раз, то есть ch: =(-1)*ch*x*x • Знаменатель = (2 n)!= (2 n-2)!*(2 n-1)*(2 n) (например для 4 члена ряда, n=4, знаменатель = 8!=6!*7*8), то есть zn: =zn*(2*n-1)*2*n • Значение контрольной функции: y=cos(x)

Алгоритм решения 1. Вводим исходные данные и делаем начальные присвоения (для члена ряда с Алгоритм решения 1. Вводим исходные данные и делаем начальные присвоения (для члена ряда с номером =0): readln(x); n: =0; summa: =1; u: =1; ch: = 1; zn: = 1 n: =0 summa: =1 u: =1; ch: = 1; zn: = 1

Алгоритм решения Члены ряда будут уменьшаться с увеличением их номера, т. к. знаменатель (факториал) Алгоритм решения Члены ряда будут уменьшаться с увеличением их номера, т. к. знаменатель (факториал) растет быстрее числителя (степень). 2. Пока очередной член ряда по модулю > 0. 0001 будем вычислять следующий за ним член ряда и находить сумму получившегося ряда: while abs(u) > eps do begin n: = n + 1; ch: =-ch*x*x; zn: =zn*(2*n-1)*2*n; u: = ch/zn; summa : = summa + u; end;

Алгоритм решения 3. Когда очередной член ряда по модулю станет < eps, выходим из Алгоритм решения 3. Когда очередной член ряда по модулю станет < eps, выходим из цикла, вычисляем значение контрольной функции и выводим на экран результаты: y: =cos(x); writeln (Сумма данного ряда при х = ‘, x: 6: 4); writeln (‘ с точностью до 0. 0001 равна', summa: 6: 4); writeln (‘Значение контрольной y=cos(x) функции при том же значении х и с той же точностью равно ', y: 6: 4 );

Program sum; uses crt; const eps = 1 E-4; var n: integer; x, u, Program sum; uses crt; const eps = 1 E-4; var n: integer; x, u, summa, y, ch, zn: real; Вegin clrscr; write(‘Введите значение х: ' ); readln(x); n: =0; summa: =1; u: =1; ch: = 1; zn: = 1; while abs(u) > eps do begin n: = n + 1; ch: =-ch*x*x; zn: =zn*(2*n-1)*2*n; u: = ch/zn; summa : = summa + u; end; writeln (Сумма данного ряда при х = ‘, x: 6: 4); writeln (‘ с точностью до 0. 0001 равна', summa: 6: 4); y: =cos(x); writeln (‘Значение контрольной функции'); writeln (‘при том же значении х и с той же точностью равно ', y: 6: 4 ); End.

Результаты работы программы • Результаты показывают, что значение суммы ряда и значение контрольной функции Результаты работы программы • Результаты показывают, что значение суммы ряда и значение контрольной функции совпадают с заданной точностью. • Чтобы записать программу, используя цикл с постусловием, достаточно слова while abs(u) >= eps do begin заменить на repeat, a end заменить на until abs(u) <= eps;