русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вложенные циклы


Дата добавления: 2014-11-27; просмотров: 855; Нарушение авторских прав


Поставим себе задачу - напечатать таблицу умножения. В следующем виде:

 

1*1= 1*2= 1*3= 1*4= 1*5= 1*6= 1*7= 1*8= 1*9=
2*1= 2*2= 2*3= 2*4= 2*5= 2*6= 2*7= 2*8= 2*9=
3*1= 3*2= 3*3= 3*4= 3*5= 3*6= 3*7= 3*8= 3*9=
4*1= 4*2= 4*3= 4*4= 4*5= 4*6= 4*7= 4*8= 4*9=
5*1= 5*2= 5*3= 5*4= 5*5= 5*6= 5*7= 5*8= 5*9=
6*1= 6*2= 6*3= 6*4= 6*5= 6*6= 6*7= 6*8= 6*9=
7*1= 7*2= 7*3= 7*4= 7*5= 7*6= 7*7= 7*8= 7*9=
8*1= 8*2= 8*3= 8*4= 8*5= 8*6= 8*7= 8*8= 8*9=
9*1= 9*2= 9*3= 9*4= 9*5= 9*6= 9*7= 9*8= 9*9=

 

Начнем с малого - пусть нужно напечатать

1*1=1

Вот фрагмент программы:

Фрагмент 1

a:=1;

b:=1;

proizv:=a*b;

Write(a, ’*’ ,b, ’=’ ,proizv)

Здесь в операторе Write 5 элементов:

* сомножитель a,

* символ знака умножения ’*’,

* сомножитель b,

* символ ’=’,

* значение произведения proizv

Усложним задачу. Попробуем заставить компьютер напечатать первую строку таблицы:

 

1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9

 

Замечаем, что здесь нам нужно решить 9 элементарных задач на вычисление произведения, первую из которых решает фрагмент 1. Все они очень похожи и различаются лишь значением второго сомножителя. Таким образом, для решения каждой из 9 задач подошел бы наш фрагмент 1, если бы в нем в операторе b:=1 вместо единицы стояла нужная цифра. В данном случае идеально подходит оператор for:



Фрагмент 2

a:=1;

for b:=1 to 9 do begin

proizv:=a*b;

Write(a, ’*’ ,b, ’=’ ,proizv, ’ ’ )

end {for}

Для того, чтобы печать была аккуратной, оператор Write мы дополнили символом пробела ’ ’. Он нужен для того, чтобы отдельные столбцы таблицы не сливались.

Следующая ступень усложнения - последняя - напечатать не одну строку таблицы, а девять. Для этого фрагмент 2 должен быть выполнен 9 раз, каждый раз - с новым значением a. Чтобы этого достичь, “обнимем” фрагмент 2 оператором for точно так же, как мы это сделали с фрагментом 1.

 

Фрагмент 3

for a:=1 to 9 do

for b:=1 to 9 do begin

proizv:=a*b;

Write(a, ’*’ ,b, ’=’ ,proizv, ’ ’ )

end {for b}

end {for a}

Печатать фрагмент 3 будет неаккуратно. Приведем окончательную запись программы с необходимыми добавлениями для аккуратной печати, а также для удобства объяснений снабдим программу комментариями с нумерацией строк:

VAR a,b,proizv: Integer; {1}

BEGIN {2}

for a:=1 to 9 do begin {3}

WriteLn; {4}

for b:=1 to 9 do begin {5}

proizv:=a*b; {6}

Write(a, ’*’ ,b, ’=’ ,proizv:3, ’ ’ ) {7}

end {for b} {8}

end {for a} {9}

END. {10}

WriteLn нужен для того, чтобы каждая новая строка таблицы начиналась с новой строки экрана.

Формат :3 означает, что на изображение произведения на экране отведено три позиции. Формат в нашем примере нужен для того, чтобы разные по количеству цифр произведения (например, 4 и 25) занимали на экране одинаковое по размеру место, а то не получится у нас аккуратных столбиков в таблице.

В целом программа иллюстрирует идею вложенных циклов, когда один, внутренний, цикл вложен внутрь другого, внешнего. У нас тело внешнего цикла (строки 4 и 5) выполняется 9 раз, а тело внутреннего (строки 6, 7 и 8) - 81 раз, так как на каждое выполнение строки 5 оно выполняется 9 раз.

Задания 53-56:

53) Распечатать все возможные сочетания из двух цифр - первая цифра может быть любой от 3 до 8, вторая - любой от 0 до 7. Например, 36, 44, 80.

54) Распечатать все возможные сочетания из четырех цифр, каждая из которых может принимать значения 1,2,3. Например, 2123, 3312, 1111.

55) Подсчитать количество таких сочетаний.

56) Подсчитать количество неубывающих сочетаний, то есть таких, где каждая следующая цифра не меньше предыдущей - 1123, 1223, 2222 и т.п., но не 3322.




<== предыдущая лекция | следующая лекция ==>
Сумматоры | Поиск максимального из чисел


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.32 сек.