Основы программирования Pascal ABC. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл.

Презентация:



Advertisements
Похожие презентации
Программирование на языке Паскаль. 3 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл.
Advertisements

Цикл со счетчиком. Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным числом.
1 Программирование на языке Паскаль Тема 4. Циклы.
1 Программирование на языке Паскаль Циклы. 2 Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов.
1 Программирование на языке Паскаль Тема: Циклы по счётчику. © К.Ю. Поляков,
1 Программирование на языке Паскаль 1. Циклы с параметром.
1 Программирование на языке Паскаль © К.Ю. Поляков, ВведениеВведение 2.ВетвленияВетвления 3.Сложные условияСложные условия 4.ЦиклыЦиклы 5.Циклы.
1 Программирование на языке Паскаль Тема 2. Ветвления.
1 Тема 4. Циклы на языке Паскаль.
Основы программирования. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов цикл с неизвестным.
1 Программирование на языке Паскаль Тема 4. Циклы.
1 Программирование на языке Бейсик Тема. Циклы. 2 Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом.
Вложенные циклы. Написать 5 раз «Привет» program qq; begin writeln('Привет'); end.
Решение квадратного уравнения. Решение квадратного уравнения зависит от значения дискриминанта. Пример: Решение квадратного уравнения. Решение квадратного.
Программирование на Pascal. Темы Повторение. Составные логические условия Повторение. Составные логические условия Повторение. Составные логические условия.
Pascal Алгоритмы циклической структуры, программирование на языке Pascal Часть 2 8 «Б» и 10 «Б» классы.
1 Программирование на языке Паскаль Тема 1. Введение.
Организация повторений в Паскале. Найди ошибки: Program new Uses crt; Var a, b, c integer Begin clrscr Readln(a,b); C:=a*a+b*b Wreteln(c); End.
Практическое занятие 5 Циклы с условием. 2 Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой?
АЛГОРИТМ ПОВТОРЕНИЯ ЦИКЛ FOR TO DO FOR DOWNTO DO.
Транксрипт:

Основы программирования Pascal ABC

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

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

program Z; label m1; begin m1: writeln('Привет'); goto m1; end. Бесконечный цикл Программа не завершится никогда!!!

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

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

program Z; label m1; var i:integer; begin i:=0; m1: if i5 then begin writeln('Привет'); i:=i+1; goto m1; end; end. Цикл с помощью оператора goto и условия

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

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

10 Алгоритм начало i, i2, i3 конец нет да i

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

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

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

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

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

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

17 Цикл с переменной Особенности: после выполнения цикла во многих системах устанавливается первое значение переменной цикла, при котором нарушено условие: for i:=1 to 8 do writeln('Привет'); writeln('i=', i); for i:=1 to 8 do writeln('Привет'); writeln('i=', i); for i:=8 downto 1 do writeln('Привет'); writeln('i=', i); for i:=8 downto 1 do writeln('Привет'); writeln('i=', i); i=9 i=0 НЕ ДОКУМЕНТИРОВАНО

18 Сколько раз выполняется цикл? a := 1; for i:=1 to 3 do a := a+1; a := 1; for i:=1 to 3 do a := a+1; a = 4a = 4 a = 4a = 4 a := 1; for i:=3 to 1 do a := a+1; a := 1; for i:=3 to 1 do a := a+1; a = 1a = 1 a = 1a = 1 a := 1; for i:=1 downto 3 do a := a+1; a := 1; for i:=1 downto 3 do a := a+1; a = 1a = 1 a = 1a = 1 a := 1; for i:=3 downto 1 do a := a+1; a := 1; for i:=3 downto 1 do a := a+1; a = 4a = 4 a = 4a = 4

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

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

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

команда if a=3 then continue; команда команда Иногда, при выполнении в теле цикла какого- либо условия, нужно экстренно прервать цикл, не доводя до конца очередной повтор. В таких случаях используется команда break Экстренные события в теле цикла Иногда, при выполнении в теле цикла какого- либо условия, нужно экстренно перейти к следующему повтору, не доводя до конца очередной повтор. В таких случаях используется команда continue. (Если это происходит в цикле FOR, то счётчик получает при этом следующее значение.) Команды break и continue могут применяться в любом из видов циклов. Вне цикла их использование запрещено.

Многие специалисты (в том числе и автор языка Паскаль) не рекомендуют использовать команду goto, считая её потенциально опасной (источником логических ошибок). Поэтому в некоторых реализациях Паскаля (в том числе и Pascal ABC) эта команда отсутствует! Оператор goto запрещен!

Пример. Дано натуральное число N. Определить, является ли оно простым. Для решения задачи: формируем тело программы и описываем переменные; вводим натуральное число N; в интервале от 2 до N/2 берем натуральные числа и проверяем, являются ли они делителями числа N; в зависимости от значения флага F выводим результат. program pN; var i, n, f : integer; begin f := 0; for i := 2 to n div 2 do if n mod i = 0 then f := 1; if f = 0 then writeln('Число ', n:6, ' простое') else writeln('Число ', n:6, ' нe простое') end.

Пример. Вводится последовательность из N целых чисел. Найти, сколько в ней нулей (нулевых значений). Для решения задачи: формируем тело программы и описываем переменные; вводим длину последовательности N и устанавливаем начальное зна­чение К; последовательно считываем числа, и если число равно нулю, то уве­личиваем значение счетчика К; в зависимости от значения К выводим результат. program pNULL; var n, x, k, i : integer; begin k := 0; for i := 1 to n do begin write('Ввeдитe x ='); readln(x); if x = 0 then k := k + 1 end; if k = 0 then writeln('Нулей нет') else writeln('Количество нулей равно k = ', k); end.

26 Домашнее задание по теме ЦИКЛЫ 1. Ввести a и b и вывести квадраты и кубы чисел от a до b. Пример: Введите границы интервала: Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, … Пример:

3. На продуктовый склад привезли в понедельник продукции на сумму 1000 р. Каждый следующий день недели кроме воскресенья привозят продукции на 10% больше. Со следующего понедельника опять начинают с 1000 руб. Когда на складе накапливается продукции не менее, чем на руб, со склада увозят потребителям партию стоимостью ровно руб. На какую сумму будет иметься на складе продукция через a дней после начала его работы? 4. Пойманную мышь посадили в клетку. За первый день она съела s граммов сыра. Каждый следующий день ей давали на 10% больше, чем в предыдущий. Но каждый 5-й день сыра давали меньше, чем в предыдущий день на 1 грамм. Сколько сыра съела мышь за d дней? 5. Агент 007 узнал, что в секретном сейфе трёхзначный код, в котором все три цифры разные. При этом средняя цифра равна разности крайних цифр. Составить программу, которая напечатает для него все такие числа.