Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Алгоритмы с повторениями. Цикл с предусловием while. Цикл с постусловием repeatСодержание книги
Поиск на нашем сайте
На прошлом занятии мы познакомились и научились использовать счётный цикл FOR. Продолжим работу по этой теме и познакомимся с ещё двумя циклами: - цикл WHILE с предусловием; - цикл REPEAT...UNTIL c постусловием. Эти циклы удобно использовать тогда, когда заранее неизвестно число повторений. Решим задачу zadacha3_1 используя циклы WHILE и REPEAT и попытаемся понять принцип работы этих циклов.
Найти сумму всех натуральных чисел от 1 до n. 1) цикл FOR program zadacha3_1a; var i,n,s:integer; Begin writeln(' введите натуральное n'); readln(n); s:=0; for i:=1 to n do s:=s+i; writeln('сумма от 1 до',n,' = ',s); End. 2) цикл WHILE program zadacha3_1b; var i,n,s:integer; Begin writeln('введите натуральное n'); readln(n); s:=0; i: =1; while i<=n do begin s:=s+i; i:=i+1; end; writeln('сумма от 1 до',n,'=',s); End. Цикл WHILE будет выполняться до тех пор, пока выполняется условие i<=n. Причем переменную i изменяем внутри цикла. 3) цикл REPEAT program zadacha3_1c; var i,n,s:integer; Begin writeln(' введите натуральное n'); readln(n); s:=0; i:=1; repeat begin s:=s+i; i:=i+1; end; until i>n; writeln('сумма от 1 до',n,' = ',s); End. Цикл REPEAT... UNTIL будет выполняться до тех пор, пока не выполниться условие i>n.
Задано натуральное число n. Вычислить сумму цифр числа. program zadacha3_4; var n,sum,cif:integer; Begin writeln('Введите n'); readln(n); sum:=0; while n>0 do begin cif:=n mod 10; sum:=sum+cif; n:=n div 10; end; writeln('Сумма цифр введённого числа = ',sum); End.
Найти минимальное натуральное число, которое при делении на 2 даёт в остатке 1, при делении на 3 даёт в остатке 2, при делении на 4 - в остатке 3, при делении на 5 - в остатке 4, при делении на 6 - в остатке 5 а при делении на 7 дают в остатке 6. program zadacha3_5; var i, kl:longint; Begin kl:=0; i:=0; while kl=0 do begin i:=i+1; if (i mod 2=1) and (i mod 3=2) and (i mod 4=3) and (i mod 5=4) and (i mod 6=5) and (i mod 7=6) then kl:=1; end; writeln(i); End. Вопросы для повторения: 8. Какие циклы существуют в языке Паскаль? 9. Какой формат записи имеют циклы WHILE и REPEAT? 10. В каких случаях удобно применять эти циклы? 11. Чем отличается цикл WHILE от цикла REPEAT? 12. Будет ли остановлено выполнение данного цикла? Почему? s:=0; i: =1; while i<=4 do s:=s+i; Задания для самостоятельной работы: 1. Дано натуральное число n. a) Сколько цифр в числе n? b) Сколько чётных цифр в числе n? 2. Дано натуральное число n. a) Вычислить, входит ли цифра 3 в запись числа n2. b) Поменять порядок цифр числа n на обратный. c) Переставить первую и последнюю цифры числа n. d) Приписать по единице в начало и в конец записи числа n. e) Является ли число n - палиндромом? (9889 - да, 9878 -нет) 3. Дано натуральное число n. Является ли n степенью 3. 4. Для данного натурального числа m>1 найдите максимальное k, для которого ещё выполняется равенство 2k<m. (например, если m=10, то k=3). Для данного натурального числа m>1 найдите минимальное k, для которого уже выполняется равенство k!>m. (например, если m=10, то k=4). Вложенные циклы. Для решения задачи достаточно часто требуется использовать несколько вложенных друг в друга циклических конструкций. Такие конструкции называют вложенными циклами. Рассмотрим несколько примеров: Дано натуральное число S. Требуется написать программу для нахождения всех прямоугольников, площадь которых равна S и стороны выражены натуральными числами. program zadacha3_6; var s, a, b:longint; Begin writeln('Введите s'); readln(s); for a:=1 to s do for b:=1 to s do if a*b=s then writeln ('стороны ',a,' и ',b); End. Данную задачу можно было решить, используя только один цикл. Подумайте, как это сделать.
Даны натуральные числа n, m. Получить все натуральные числа, меньшие n, сумма квадратов цифр которых равна m. program zadacha3_7; var n, m, i, a, sum, cif:longint; Begin writeln('введите n и m');readln(n, m); for i:=1 to n do begin a:=i;sum:=0; while a>0 do begin cif:=a mod 10; sum:=sum+sqr(cif); a:=a div 10; end; if sum=m then write(i,' '); end; End. Найти все решения заданного числового ребуса. Каждой букве соответствует некоторая цифра. Причём одинаковым буквам соответствуют одинаковые цифры, разным буквам - разные цифры. Поскольку здесь всего три буквы, то для решения достаточно написать три вложенных цикла, и перебрать все варианты сложения трёхзначных чисел. program zadacha3_8a; var k, t, o, kto, kot, tok:longint; Begin for k:=0 to 9 do for t:=0 to 9 do for o:=0 to 9 do begin kto:=k*100+t*10+o; kot:=k*100+o*10+t; tok:=t*100+o*10+k; if (k<>t) and (k<>o) and (t<>o) and (kto+kot=tok) then writeln(kto,'+',kot,'=',tok); end; End. В данном алгоритме тело цикла выполнялось 10∙10∙10=1000 раз. (будем говорить сложность алгоритма =1000) Если же для решения более сложных ребусов потребуется написать 8-10 вложенных циклов, то такой полный перебор будет работать достаточно долго. Можно немного упростить данный алгоритм, если увидеть что 1≤k≤4, t≥2. for k:=1 to 4 do for t:=2 to 9 do for o:=0 to 9 do Теперь сложность алгоритма 4∙8∙10=320. Простое косметическое исправление дало увеличение скорости в 3 раза. Но и данный алгоритм не является оптимальным. Посмотрите, при k =2 и t =2 программа переберёт все 10 вариантов o. В таких случаях когда k = t цикл по o вообще необходимо не выполнять. Назовём такой метод - контролируемый перебор. program zadacha3_8c; var k, t, o, kto, kot, tok:longint; Begin for k:=1 to 4 do for t:=2 to 9 do if k<>t then for o:=0 to 9 do if (k<>o) and (t<>o) then begin kto:=k*100+t*10+o; kot:=k*100+o*10+t; tok:=t*100+o*10+k; if kto+kot=tok then writeln(kto,'+',kot,'=',tok); end; End. Такой алгоритм даже при 8-10 вложенных циклах работает очень быстро. Вопросы для повторения: 59. Может ли во вложенных циклах использоваться одна и та же переменная, например i? 60. Можно ли вкладывать друг в друга различные циклы: FOR в WHILE или REPEAT в FOR? Задания для самостоятельной работы: 1. Старинная задача. Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова – 5 рублей, телёнок – полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота. 2. Задано натуральное n. Для всех чисел от 1 до n найти: a) количество делителей; b) сумму чётных делителей. 3. Найти все решения следующих числовых ребусов: a) БАБКА+ДЕДКА+РЕПКА=СКАЗКА (4 решения) b) КОРОВА+ТРАВА+ДОЯРКА=МОЛОКО (2 решения) c) АЛЁНКА+ИВАН+КОЗЛИК=СКАЗКА (1 решение) d) ВЕТКА+ВЕТКА+СТВОЛ=ДЕРЕВО (3 решения) ВОРОТА+ТРАВА=ФУТБОЛ (3 решения)
|
||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 493; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.241.191 (0.007 с.) |