Лабораторная самостоятельная работа по теме "Вложенные циклы"

Разделы: Информатика


Цели:

  • закрепление темы "Вложенные циклы";
  • развитие навыков решения задач с применением вложенных циклов;
  • закрепление навыков самостоятельной работы;
  • развитие творческих способностей.

 Оборудование: персональные компьютеры; программная среда Turbo Pascal; раздаточный материал.

Лабораторная работа

Составить программу для решения следующего арифметического ребуса:

КТО + КОТ = ТОК, где разным буквам соответствуют разные цифры, одинаковым- одинаковые.

Program Rebus;

Uses crt;

Var a, b, c : Integer;

k, t, o : Byte;

Begin

Clrscr;

For k:=1 to 9 do {внешний цикл}' первая цифра в числе не может быть 0

  For t:=1 to 9 do

    For o:=0 to 9 do {внутренний цикл}

    begin

      a:=100 * k + 10 * t + o;

      b:=100 * k + 10 * o + t; тело цикла

      c:=100 * t + 10 * o + k;

      if (a+b) = c Then writeln (k, t, o, '+', k, o, t, '=' ,t, o, k);

   end;

  readln;

end.

Какую роль играют переменные a,b,c?

Почему в программе необходимо использовать операторные скобки? Проверьте программу без операторных скобок.

Почему переменные k,t,o имеют тип Byte, а переменные a, b, c - Integer? Могут ли переменные a, b, c иметь тип Byte?

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

Решить задачу за меньшее число шагов.

Составить программу для решения следующего арифметического ребуса

RADAR = (R+A+D)4.

К заданию 1 составить алгоритм.

Какие базовые структуры используются в алгоритме?

Образец оформления лабораторной работы

Составить программу для решения следующего арифметического ребуса:

КТО + КОТ = ТОК

Program Rebus;

Uses crt;

Var a, b, c : Integer;

k, t, o : Byte;

Begin

Clrscr;

For k:=1 to 9 do

  For t:=1 to 9 do

    For o:=0 to 9 do

    begin

      a:=100 * k + 10 * t + o;

      b:=100 * k + 10 * o + t;

      c:=100 * t + 10 * o + k;

      if (a+b) = c Then writeln (k, t, o, '+', k, o, t, '=' ,t, o, k);

    end;

    readln;

  end.

Ответ: 495 + 459 = 954

Какую роль играют переменные a,b,c?

Переменной а присваивается трехзначное число КТО, b - трехзначное число КОТ, c - трехзначное число ТОК. В дальнейшем проверка условия упрощается (a+b=c)

Почему в программе необходимо использовать операторные скобки?

Операторные скобки (begin:end;) необходимо использовать, т.к. тело цикла состоит более чем из одного действия. Если убрать операторные скобки, то будет повторятся всего лишь одно действие (a:=100 * k + 10 * t + o;), а действия b:=:, c:=:. и проверка условия будут выполнены всего один раз после выполнения циклов. В программе будет допущена логическая ошибка, и ответ найден не будет.

Почему переменные k, t, o имеют тип Byte, а переменные a, b, c - Integer? Могут ли переменные a, b, c иметь тип Byte?

Диапазон значений типа Integer (-32768..32767), Byte (0..255). Поэтому переменные a, b, c не могут быть типа Byte, т.к. эти переменные принимают значения, превышающие максимальное значение данного типа (больше 255). Переменные k, t, o - это цифры, поэтому этим переменным достаточно иметь тип Byte. Если в программе присвоить этим переменным тип Integer, то никакой ошибки не будет.

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

Тело цикла выполняется 810 раз. Добавляем в программу переменную s
(Var a, b, c, s : Integer;). В теле цикла добавляем счетчик (s:=s+1; или inc(s);). После закрытия операторных скобок (end;) перед оператором (readln;) добавляем строку (Writeln('s=',s);).

Решить задачу за меньшее число шагов.

В программе используется 3 цикла, поэтому переборов становится много (810). Если исключить цикл по k ({for k:=1 to 9 do }) и в теле цикла сразу после Begin добавим строку k:=(o+t) mod 10 (остаток от деления суммы (o + t) на 10), то тело цикла будет выполняться 90 раз. Алгоритм становится эффективнее, программа будет работать (810 : 90) в 9 раз быстрее.

Составить программу для решения следующего арифметического ребуса

RADAR = (R+A+D)4.

Program Radar;

Uses crt;

Var r, a, d, x, y : integer;

Begin

Clrscr;

For r:=1 to 9 do

  For a:=0 to 9 do

    For d:=0 to 9 do

    begin

      x:=10000 * r + 1000 * a + 100 * d + 10 * a + r;

      y:=sqr(sqr(r + a + d));

      if (x=y) Then writeln(r, a, d, a, r);

    end;

    readln;

end.

Ответ: 14641 r=1, a=4, d=6.

Домашнее задание: оформить работу и подготовить ее к защите.

Зачетные вопросы:

Какие операторы используются в программе?

Что такое вложенный цикл?

Объясните смысл указанных учителем фрагментов программы.

Что произойдет, если в программе сделать предложенные учителем небольшие коррективы?

Переменные какого типа используются в программе? Нельзя ли заменить этот тип переменных на другой?

Какие базовые конструкции используются в алгоритме?

Применение:

  • подготовка к ЕГЭ, олимпиаде по программированию;
  • самообразование по изучению языка программирования Tutbo Pasсal.

Литература.

  1. Алексеева Е.Р., Чеснокова О.В. Turbo Pascal 7.0
  2. Бабушкина И.А., Бушмелева Н.А., Окулов С.М., Черных С.Ю. Практикум по ТУРБО ПАСКАЛЮ. Конспекты занятий по информатике. Приложение к газете "Первое сентября" // "Информатика",1997, №46, с.7
  3. Попов В.Б. Turbo Pascal для школьников: учебное пособие.