Знакомство с Fortran. Знакомство с оболочкой Compaq Development Studio. Операторы IF, DO. Вложенные циклы. Массивы в Фортране. Отладчик, страница 3

·  <выр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)

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