Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_F2.doc
Скачиваний:
1
Добавлен:
21.11.2019
Размер:
112.13 Кб
Скачать

If (условие) exit

END DO

Задание: Решите задачу 1203 - использовать цикл с постусловием

Условием выхода из цикла здесь будет выступать условие задачи.

Так как в решении этой учебной задачи требуется ОББЯЗАТЕЛЬНО использовать цикл с постусловием, то можно сразу добавить в программу этот цикл, и написать УСЛОВИЕ для выхода из цикла. А затем дописать программу сверху! Получится решение задачи «с конца».

Цикл DO (с перебором)

Оператор цикла позволяет несколько раз повторить выполнение некоторой последовательности операторов (тело цикла) при различных значениях некоторой переменной (счетчика цикла). Простейшая форма оператора имеет вид:

DO <переменная> = <выр1>, <выр2> [,<выр3>]

<Операторы -- тело цикла>

ENDDO

где

  • <переменная>- цeлaя, вещественная или вещественная с двойной точностью пepeмeннaя -- счетчик цикла,

  • <выр1>, <выр2>, <выр3> - арифметические (не комплексные) выражения, перечисленные через запятую. Последнее выражение может отсутствовать. Значение первого выражения указывает начальное значение счетчика цикла, значение второго выражения -- конечное, а значение третьего -- шаг счетчика цикла. Если третье выражение отсутствует, то шаг счетчика цикла равен единице.

Пример. В результате выполнения группы операторов

SUM = 0.0

DO I=1,15

SUM = SUM + I

ENDDO

значение переменной SUM станет равным сумме 1+2+3+...+15 т.е. 140.

Операторы тела цикла могут не выполняться ни разу, если начальное значение счетчика цикла превосходит конечное, а шаг счетчика положителен, либо, при отрицательном шаге, если начальное значение счетчика цикла меньше конечного.

Простые правила, которые НЕОБХОДИМО запомнить !!! :

Если в цикле суммирование, то сумматор перед циклом надо обнулить = 0.

Если в цикле умножение, то произведение перед циклом надо =1 .

Задание: Решите задачу 1204. - использовать цикл с перебором

Обратите внимание и проверьте свои программы: Вывод заголовка программы должен предшествовать основной РАБОТЕ программы

В отличии от предыдущей задачи в этой задаче точно известно сколько всего чисел в последовательности. Поэтому используется Цикл С ПЕРЕБОРОМ.

4. Вложенные Циклы do и работа отладчика

Разбор работы программы MARKI.FOR (загрузите программу)

Простая задача:

Купить на 5 рублей 20 марок достоинством по 40, 20 и 5 копеек (должна быть хоть одна марка каждого типа).

Напечатать все возможные варианты покупки.

Если таких вариантов нет, то вывести строчку: No solution

Ищем не эффективное, но простое решение.

N_40, N_20, N_5 – обозначают колличество марок, купленных по 40, 20 и 5 копеек.

Марок каждого типа может быть от 1 до 20 (по условию их >=1 и <=20).

Поэтому переберём все возможные варианты (составим ВСЕ ВОЗМОЖНЫЕ комбинации), когда количество марок по 40, 20 и 5 копеек меняется от 1 до 20 (для этого используем три вложенных цикла DO – END DO)

Т.е. сформируются комбинации вида

N_40 N_20 N_5

1 1 1 - комбинация в которой купили по 1 марке по 40, 20 и 5 копеек.

1 1 2

. . .

. . .

20 20 20 - комбинация в которой купили по 20 марок по 40, 20 и 5 копеек.

Затем, отберем из этих комбинаций те, которые удовлетворяют условиям задачи: число марок = 20, стоимость марок = 5 руб. (для этого используем два вложенных «блочных» оператора IF)

Это типичная задача:

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

Для отслеживания варианта отсутствия решений вводится переменная Nosolution=1

Если мы найдём хоть одно решение, то значение этой переменной станет 0. После окончания работы всех циклов мы анализируем значение Nosolution и печатаем “ No solution “, если решений нет.

Обратите внимание Вам следует чётко показать структуру записи оперераторов:

Начало и конец «блочных» операторов DO – END DO и IF - END IF выровнены по вертикали,

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

Так же пустые строки служат для выявления структуры программы: Заголовок – Начало программы- Описания – Тело программы – Вывод результатов – Конец программы

Проверьте работоспособность программы:

  1. Компиляция

  2. Компоновка

  3. Запуск

Отладка

Установить курсор на строку MARKS=20 и

набрать Build: Start DEBUG ^ Run to Cursor (CTRL-F10)

(отладку начинаем с исполняемых операторов, т.е установив курсор на исполняемую инструкцию!!! , чтобы пропустить часть ассемблерных команд, связанных с заданием размещения программы в памяти, выделения памяти под переменные и т.д.)

Отвечаем на вопрос ДА.

Окно MARKI.FOR

Появление желтой стрелочки около MARKS=20 - это место, где остановилось выполнение программы.

Пошаговый проход (F10 – выполнить инструкцию

F11 – зайти в подпрограмму)

Слева внизу расположено “Окошко переменных” (если его нет, то “Окошко переменных” открывается через меню: View – Debug Windows – Variables).

Там же, можно обратиться и к другим окнам, например, окно, куда нас иногда выбрасывает, но которое нам не нужно: Окно Disassembly – перевод программы в машинные коды (дисассемблирование) и вывод названий соответствующих машинных команд (вывод команд языка Ассемблера)

Понаблюдайте за изменением переменных при пошаговом выполнении программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]