Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Вложение циклов в разветвления и наоборот

Многострочный If | Вложенные операторы If. Логические операции и выражения | Улучшаем калькулятор. | Функция MsgBox | Оператор переходаGoTo. Цикл. Метки | Выход из цикла с помощью If | Операторы цикла Do | Оператор цикла For | Оглядимся вокруг | Отладка программы. Окна отладки. Режимы отладки. |


Читайте также:
  1. Анализ циклов
  2. Виды экономических циклов
  3. Движение потока в узлах разветвления естественных водотоков
  4. Значение рыночных циклов при выборе периода расчета
  5. Из отличных книг получаются ужасные фильмы, и наоборот
  6. КАПИТАЛОВЛОЖЕНИЕ

Реальная процедура на Visual Basic может представлять собой сложную мозаику из циклических и разветвляющихся частей, вложенных друг в друга. Мы уже видели в 6.3, как в оператор цикла были вложены операторы ветвления. В свою очередь в них могут быть вложены операторы цикла, и так до бесконечности.

Для тренировки определите, что напечатает следующий фрагмент:

Private Sub Command1_Click()

For i = 1 To 5

a = 9

If i * i = a Then

For k = 5 To 8

Debug.Print k;

Next k

Else

Debug.Print 1997

End If

Next i

End Sub

Здесь внутрь For i = 1 To 5 вложен If i * i = a, а внутрь него вложен For k = 5 To 8.

Ответ:

5 6 7 8 1997

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

Вложенные циклы или цикл внутри цикла - весьма распространенная конструкция при программировании.

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

 

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

 

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

1*1=1

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

 

Фрагмент 1

a=1

b=1

proizv = a * b

Print a, "*",b, "=",proizv

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

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

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

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

* символ "=",

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

 

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

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

 

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

 

Фрагмент 2

a = 1

For b = 1 To 10

proizv = a * b

Print a; "*"; b; "="; proizv;

Next b

Прокрутите программу в пошаговом режиме.

 

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

 

Фрагмент 3

For a = 1 To 10

For b = 1 To 10

proizv = a * b

Print a; "*"; b; "="; proizv;

Next b

Next a

Прокрутите программу в пошаговом режиме, для удобства заменив 9 на 4.

 

Печатается все, что надо, но в одну строчку. Добавим в нужное место пустой Print, чтобы после окончания очередной строки печать начиналась с новой:

 

Фрагмент 4

For a = 1 To 10

For b = 1 To 10

proizv = a * b

Print a; "*"; b; "="; proizv;

Next b

Print

Next a

Прокрутите программу в пошаговом режиме. Прочувствуйте то, что пустой Print мы поместили именно в нужное место, строчкой выше или ниже он все бы испортил.

 

Печатает фрагмент 4 плохо. Акуратных столбцов не получается. Мы не будем добиваться идеальной картинки. Просто поменяем точку с запятой в конце оператора Print на запятую, чтобы результаты были выровнены по столбцам. Столбцы расположены на расстоянии 14 символов друг от друга. Поменяем шрифт (свойство Font) формы на Courier, потому что у этого шрифта в отличие от многих других символы имеют одинаковую ширину.

В целом программа иллюстрирует идею вложенных циклов, когда один, внутренний, цикл вложен внутрь другого, внешнего. У нас тело внешнего цикла выполняется 10 раз, а тело внутреннего - 100 раз, так как на каждое выполнение внешнего цикла он выполняется 10 раз.

 

Задание 57:

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

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

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

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


Дата добавления: 2015-11-16; просмотров: 64 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Глава 8. Типичные маленькие программы| Объекты. Их свойства, их события, их методы

mybiblioteka.su - 2015-2024 год. (0.009 сек.)