Методический материал: "Циклы"
методическая разработка по информатике и икт

Коркунова Наталья Ивановна

В методическом материале представлен разбор   задач на циклы

Скачать:

ВложениеРазмер
Файл metodicheskiy_material_-_tsikly.docx22.87 КБ

Предварительный просмотр:

Методический материал. Циклы в языке PascalABC

      Цикл - это замечательное изобретение, которое, в сущности, и делает компьютеры такими ценными. Он позволяет многократно повторить любую часть программы.  В Pascale различают три вида циклов: FOIR – цикл с известным количеством повторений; While -  цикл с предусловием; REPEAT -  цикл с постусловием.

 Разбор примеров.

Оператор   цикла FOR

Формат оператора:

FOR  i:= 1  TO  N   do

Begin                      end;

Пример 1. Программа подсчета суммы S первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+...1/N.

Program Summa;

Var S:real;
    I,N:integer;
Begin
  S:=0;  N:=1000;

FOR i:= 1  to  N do
 
  Begin
        S:=s+1/n
  End;
  Writeln(s);
  End.

Цикл WHILE – цикл с предусловием.

  Формат оператора:

  WHILE условие цикла (логическое выражение) DO;

Оператор будет повторятся пока истинно логическое выражение. Перед каждым повторением оператора значение логического выражения вычисляется заново. Если необходимо повторить несколько операторов, их следует объединить в составной оператор, т.е. заключить в операторные скобки begin ... end. Этот цикл может не выполниться ни разу, если условие при входе в него оказалось ложным. Таким образом, цикл WHILE содержит условие повторения цикла.


Пример 1. Вычислить наибольший общий делитель двух натуральных чисел А и В.

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

Program NOD;
Var  a,b:integer;
Begin
  Write ('введите два натуральных числа')
  Readln(a,b)
    While a<>b do

Begin

If a>b then a:=a-b else b:=b-a;  

end;

Writeln('НОД=',a);
 End.

Цикл   REPEAT -  цикл  с постусловием

Формат цикла:

REPEAT                         UNTIL  условие  выхода (логическое выражение);

Пример 1 . Начав тренировки, лыжник в первый день пробегал 10 км. Каждый следующий день он увеличивал длину пробега на 10% от предыдущего дня. Определить в какой день он пробежит больше 20 км, в какой день суммарный пробег за все дни превысит 100км.

Program prim_l;
Var Q,S:real;
    N:integer;
Begin
  S:=10;N:=1;
  REPEAT
      N:=n+1;
    S:=S+S*0.1
  Until  S > 20;
  Writeln(' дневной пробег больше 20 км на ',n,' день');

  S:=10;N:=1;Q:=10;
 REPEAT
    N:=n+1;
    S:=S+S*0.1
 Q:=Q+S; {накапливаем суммарный пробег}

Until  Q > 100;

  Writeln('за ',n,' пробежит больше 100 км');
 End.

Тренировочные задания.

  1.  Даны целые числа, а и b (а>b). Определить: 

 a. Результат целочисленного деления a на b, не используя стандартную операцию целочисленного деления;
 b. Остаток от деления а на b не используя стандартную операцию вычисления остатка.

  1.   Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку "5"?. Условный оператор не использовать.
  2.  Напечатать минимальное число, большее 200, которое нацело делится на 17.
  3.  Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить: за какой месяц величина ежемесячного увеличения вклада превысит 30 руб.; через сколько месяцев размер вклада превысит 1200 руб.
  4. Дано четырехзначное число N. Выяснить:    a. Является ли число палиндромом?

      Для решения этой задачи надо записать число в обратном порядке. Для этого единицы умножаем   на 1000, прибавляем число десятков умноженное на 100, число тысяч умножаем на 10 и прибавляем число десятитысяч. Если полученное число будет равно исходному, значит это палиндром.

Решение:
Program  pr_i5а;
Var  x,y:integer;
Begin
  Write('введите четырехзначное число');
  Readln(х);
  y:=(x mod 10)*1000+((x div 10) mod 10)*100+((x div 100) mod 10)*10+x div 1000;
  If x=y then writeln ('число палиндром ')   
    Else Writeln('это не палиндром ');
  Readln;   
End.

  1. *В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано натуральное число N. Как наименьшим количеством таких денежных купюр можно выплатить сумму N (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.
  2.   Трамвайный билет имеет шестизначный номер. Выяснить, является ли билет "счастливым". Билет назовем "счастливым", если сумма первых трех цифр равна сумме последних трех цифр. Примечание. Так как шестизначное число больше 32767 (тип Integer), необходимо номер билета определит как тип Longint(до 10 знаков).
    Решение:
    Program prim_a6;
    Var  x1,x2:integer;
         x,:longint;   
    Begin
      Write('введите номер билета');
      Readln(х);
      X1:=x div 100000+(x div 10000) mod 10+(x div 1000) mod 10; {сумма первых трех цифр}
      X2:=(x div 100) mod 10+(x div 10) mod 10+x mod 10; {сумма последних трех цифр}
      If x1=x2 then writeln (' билет счастливый ')
        Else Writeln('билет не счастливый ');
      Readln;   
    End.


Тренировочные задания.
1. Введите с клавиатуры 6 чисел и определите их среднее арифметическое.
2. Напишите программу, которая вводит целые числа с клавиатуры и складывает их, пока не будет введено число 0.
3. Напечатайте 20 первых степеней числа 2.
4. Найдите минимальное из N чисел.
5. Дано натуральное число. Выяснить, является ли оно простым, т.е. делится только на 1 и на само себя.

Цикл с известным числом повторений

  Цикл   FOR (прямой).


  Формат оператора:

FOR    переменная := выражение 1   ТО выражение   2    DO      оператор;

  Переменная должна быть порядкового типа. Порядковыми называются все простые типы, значения которых можно расположить в возрастающем порядке. Из известных нам это: INTEGER, WORD, LONGINT, BYTE, CHAR. Выражение 1 и Выражение 2 должны быть того же типа, что и переменная. Чтобы цикл выполнился хотя бы раз выражение1 должно быть не больше выражения2.

  Выполнение начинается с вычисления значений выражения1 и выражения2. затем переменная получает значение выражения1 и делается проверка, не превышает ли значение переменной выражения2. Если не превышает, выполняется оператор, стоящий после служебного слова DO. После завершения оператора переменная получает следующее по порядку значение, и все повторяется, начиная с проверки.

  Когда значение переменной становится равным выражению2, оператор выполняется последний раз.

ПРИМЕР 1. Напечатать ряд из повторяющихся чисел 20 в виде:
20 20 20 20 20 20 20 20 20 20

Решение:

var  i: byte;
begin
  for I:=1 to 10 do write(20,' ');
  readln;
end.

ПРИМЕР 2. Напечатать числа следующим образом:
10 10.4
11 11.4
. . .
25 25.4

Решение:  (переменная используется не только для управления циклом но и для вывода на экран в качестве результата):

var  i: byte;
begin
  for I:=10 to 25 do write(I,' ',I+0.4:0:1);
  {при сложении целого I и вещественного 0.4 получаем
  вещественный результат, значит надо выполнить его
  форматирование при выводе на экран}
  readln;
end.

 Цикл     FOR (обратный).

  Формат оператора:

FOR   переменная := выражение 1   DOWNТО    выражение 2    DO   оператор;

  В этом случае, чтобы цикл выполнился хотя бы раз, выражение1 должно быть не меньше выражения  2. Например:

  For c:='z' downto 'а' do writeln(с);

Тренировочные задания.

  1. Напечатать столбиком: а) все целые числа от 20 до 35;   б) квадраты всех целых чисел от 10 до b (значение d вводится с клавиатуры; b>=10);
      в) третьи степени всех целых чисел от а до 50 (значение а вводится с клавиатуры; а<=50);
      г) все целые числа от а до b (значения а и b вводятся с клавиатуры; d>=a).


  2. 2. Напечатать числа следующим образом
    25 25.5 24.8
    26 26.5 25.8
    . . .
    35 35.5 34.8
  3.  Распечатать в столбик таблицу умножения на 7.
  4.  Вывести столбиком следующие числа: 2,1 2,2 2,3 . . . , 2,8
  5.  Вывести столбиком следующие числа: 2,2 2,4 2,6 . . . , 4,0 4,2
  6.  Вывести столбиком следующие числа: 4,4 4,6 4,8 . . . , 6,2 6,4


 
Решение задач.   Циклы

 Задача 1.
  Дано натуральное число N. Определить, является ли оно простым, т.е. делится нацело только на 1 и на само себя. (Мы решали эту задачу в 12 уроке, но я хочу предложить вам другой алгоритм решения.)
  Для решения необходимо проверить, делится ли исходное число на числа от 2 до N-1. Если число делится хотя бы на одно из чисел без остатка, то число N не будет простым. Мы можем уменьшить интервал проверяемых делителей так, как наибольший из возможных, это N/2. Введем так же дополнительную переменную F, она будет принимать значение 1, если обнаружится хотя бы один из делителей для исходного числа. Первоначально присвоим F значение 0, т.е. предположим, что число простое.
  Переменные:

 N - исследуемое число;
I - переменная цикла;
F - вспомогательная переменная.

Решение:.

Var  I,n,f:word;   
Begin
  Write('Введите натуральное число');
  Readln(n);
  F:=0;
  For I:=2 to n div 2 do if n mod I=0 then f:=1;   
  If f=1 then writeln('число',n:6,' не простое')
  Else writeln('число',n:6,' простое');
  Readln
End.

      Количество выполнения циклов можно еще уменьшить. Ведь на самом деле если число N делится на какое-то число А без остатка (кроме 1 и самого себя), то оно имеет и второй делитель В=N/A, т.е. если число не простое, то его всегда можно записать как N=A*B. При возрастании первого делителя, значение второго будет уменьшаться. Получается, что достаточно проверить все числа от 2 до SQRT(n), но так как результат вычисления корня вещественный, а параметр цикла должен иметь целое значение, применим функцию определения целой части числа TRUNC, и получим:

For I:=2 to trunc(sqrt(n)) do if n mod I=0 then f:=1;

Задача 2.
  Даны натуральные числа M и N. Определить, являются ли они взаимно простыми. Взаимно простые числа не имеют общих делителей, кроме 1.

  Для решения задачи:
- вводим натуральные числа М и N;
- в цикле от 2 до наименьшего числа порождаем I и проверяем, является ли оно одновременно делителем М и N;
- в зависимости от значения F выводим результат.

Var  k,m,n,f:word; 
Begin
  Write('Введите 2 натуральных числа');
  Readln(n,m);
  F:=0;
  if n>m then k:=m else k:=n; {k - наименьшее из 2-х чисел }
  for I:=2 to k do if (n mod I=0) and (m mod I = 0) then f:=1;
  If f=1 then writeln('числа не взаимно простые')
    Else writeln('числа взаимно простые');
  Readln
End.

Дополнительные    задания.

1. Дан интервал натуральных чисел от N до М. Определить все простые числа в этом интервале.
2. Дано натуральное число N. Определить все простые числа не превосходящие N.
3. Дано натуральное число N. Разложить его на простые множители.
4. Дано натуральное число N. Определить, является ли оно совершенным. Совершенное число N равно сумме всех своих делителей, не превосходящих само N.
5. Дано натуральное число N. Определить, является ли оно автоаморфным. Автоаморфное число N равно последним разрядам квадрата этого числа: 5<->25, 6<->36, 25<->625.


По теме: методические разработки, презентации и конспекты

Методическая разработка цикла уроков основ безопасности жизнедеятельности по теме «Раны» для 9 класса

Данная разработка состоит из 3 уроков по 40 мин, а также:Пояснительная записка к разработке.Ход урока.План - карта обучающего.Презентация к разработке - "Раны".По окончанию изучения темы учащиеся долж...

методический материал для проведения цикла классных часов "Моя Малая Родина"

Данная работа представляет собой рекомендации по проведению цикла классных часов по изучению родного города....

Методическая разработка "Цикл уроков по дисциплине лепка тема: "Ледовое шоу"" возраст учащихся 10-11 лет техника папье-маше на каркасе

Методическое пособие предназначено для учащихся художественных школ и школ искусств, для детей обучающихся в учреждениях дополнительного образования по направлению "Изобразительное искусство", педагог...

Методическая разработка цикла уроков с применением метода проектирования

Данный цикл уроков разработан как дополнение к мультимедийному уроку, программного продукта Merits level 11b, по теме «Our future». Я расширила и адаптировала мультимедийный урок, использовала е...

Методическое пособие «Цикл аудиторных занятий по изучению лексико-грамматического материала по специальности 13.02.11 Техническая эксплуатация и обслуживание электрического и электромеханического оборудования."

В данном методическом пособии представлены методические разработки аудиторных занятий для студентов 3 курса, специальности 13.02.11 Техническая эксплуатация и обслуживание электрического и электромеха...

Раздаточный материал "Циклы"

Раздаточный материал для учеников по алгоритмической структуре "Циклы" в рамках образовательной программы "Программирование в ТРИКСтудии"....

Методическое пособие "Цикл аудиторных занятий по изучению лексико-грамматического материала"

Методическое пособие для студентов специальности "Техническая эксплуатация и обслуживание электрического и элктромеханического оборудования"...