Файл: ОСНОВНЫЕ СТРУКТУРЫ АЛГОРИТМОВ: сРАВНИТЕЛЬНЫЙ АНАЛИЗ И ПРИМЕРЫ ИХ ИСПОЛЬЗОВАНИЯ (Алгоритмы и их структура).pdf
Добавлен: 31.03.2023
Просмотров: 244
Скачиваний: 1
Зависимость, предписывающая повторение цикла, либо выход из него, называется условием повторения цикла.
Все циклические процессы по признаку определения количества повторений разделяются на два класса.
Арифметическим называется циклический процесс, число повторений в котором может быть определено заранее, т.е. не зависит от результатов счёта в теле цикла. Такой цикл еще называют счетчиком (рис.7)
Рисунок 7 – цикл со счетчиком
Итерационным является циклический процесс, число повторений в котором зависит от результатов вычислений в теле цикла и не может быть определено заранее.
Такие циклы делятся на цикл с пост условием и предусловием. Цикл с предусловием на входе проверяет условие и после производит действие либо заканчивает цикл (рис.8)
Рисунок 8 – цикл с предусловием
Цикл с постусловием сначала проводит действием потом проверяет условие если оно правдиво заканчивает цикл если ложно то возвращается обратно и снова проводит действие (рис.9).
Рисунок 9 – цикл с постусловием
Самое сложное в создании программ целенаправленное и осознанное использование алгоритмических структур. Линейная структура алгоритма самая простая и не позволяет реализовать элементы программы в зависимости от условий, однако на ней базируется остов всей программы. Более сложные задачи выполняются со структурами ветвления и циклов.
3.Основные структуры алгоритмов на практике в turbo pascal и turbo с++
3.1 Линейный алгоритм
На практике линейные алгоритмы в чистом виде встречаются редко: при расчете арифметических и алгебраических выражений, при расчете по формулам, при решении ряда бытовых задач.
Возьмем простенькую задачу вычисления объема пирамиды при известных: площади основания и высоте. Формула вычисления V=(1/3)*s*h.
Рисунок 10 – решение задачи в Turbo pascal
Описание программы:
Называем программу p1; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные V,s,h вещественным типом real; очищаем экран clrscr; просим ввести s и h командой writeln ; считываем их с клавиатуры командой read; далее считаем V и выводим на экран результат.
Рисунок 11 - результат решения при вводе s=4,h=5
Рисунок 12 - решение задачи в Turbo C++
Описание программы:
#include подключает нужные библиотеки к программе, math.h заголовочный файл стандартной библиотеки языка программирования С, разработанный для выполнения простых математических операций, iostream.h заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C, conio.h заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы, очищаем экран вывода функцией clrscr(); описываем вещественные переменные V, s, h; просим ввести площадь s и высоту h командой cout, и считываем их с клавиатуры командой cin; вычисляем объем V и выводим на экран; функция getch() задерживает экран вывода.
Рисунок 13 - результат решения при вводе s=4,h=5.
Обе программы полностью линейны в них нет ветвлений и циклов. Выполнение команд идет по порядку одна за другой. Результаты решения идентичны отличаются только порядком цифр после запятой. В основном отличие программ заключается только в самих названиях команд принцип же их работы совпадает.
3.2 Разветвленные структуры алгоритмов
3.2.1 Разветвленный алгоритм
На практике решение большинства задач не удается описать с помощью программ линейной структуры. Такая ситуация возникает тогда, когда решение задачи зависит от какого-либо условия. При этом после проверки некоторого условия выполняется та или иная последовательность операторов, т. е. происходит нарушение естественного порядка выполнения операторов.
Создадим программы решения уравнения:
Рисунок 14 – решение задачи в Turbo pascal
Описание программы:
Называем программу p2; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные y,x целочисленным типом integer; очищаем экран clrscr; просим ввести командой writeln ; считываем его клавиатуры командой read; далее делаем сравнение x c 0 если он больше или равен 0 то считаем y по формуле y=x*x и выводим на экран результат, если меньше 0 то y=2*x и выводим результат на экран.
Рисунок 15 - результат решения при x>0
Рисунок 16 - при x=0
Рисунок 17 - при x<0
Рисунок 18 - решение задачи в Turbo C++
Описание программы:
Подключаем стандартные библиотеки iostream и conio; очищаем экран командой clrscr; описываем целочисленные переменные y,x типом int; просим ввести x с помощью команды cout; считываем x с клавиатуры с помощью cin; далее делаем сравнение x c 0 если он больше или равен 0 то считаем y по формуле y=x*x и выводим на экран результат, если меньше 0 то y=2*x и выводим результат на экран.
Рисунок 19 - результат решения при x>0
Рисунок 20 - при x=0
Рисунок 21 - при x<0
Результаты программ идентичны. Строение конструкции if так же совпадают с некоторыми отличиями в символах.
3.2.2 Множественный выбор
Один из разновидностей разветвления это множественный выбор. Составим программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 99), обозначающего денежную единицу, дописывает слово «Копейка» в правильной форме. Например, 5 копеек, 41 копейка и т. д. на двух языках программирования.
Рисунок 22 – решение задачи в Turbo pascal
Описание программы:
Называем программу p3; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные n целочисленным типом integer; очищаем экран clrscr; просим ввести n командой writeln ; считываем его с клавиатуры командой read; далее делаем сравнение n c 1 и 99 если он больше или равен 1 и меньше или равно 99 то выводим на экран число n, и с помощью case выбирается нужное окончание слова kopeika, добавляется к n ; если n не входит в этот диапазон значений выводим на экран надпись oshibka vvoda dannih .
Рисунок 23 - результат выполнения программы
Рисунок 24 – решение задачи в Turbo C++
Описание программы:
Подключаем стандартные библиотеки iostream и conio; очищаем экран командой clrscr; описываем целочисленную переменную n типом int; просим ввести n с помощью команды cout; считываем n с клавиатуры с помощью cin; далее с помощью оператора множественного выбора switch производим проверку числа n и выводим нужное окончание слова kopeika; если диапазон цифр не верный то командой default выводим надпись oshibka vvoda dannih.
Рисунок 25 - результат выполнения программы
Результаты программы идентичны. Операторы множественного выбора отличаются. В pascal чтобы проверить число на диапазон от 1до 99 мне пришлось использовать конструкцию if в то время как в c++ есть специальный оператор default на который программа переходит если не выполнено не одно из условий выбора case. Но так же в c++ есть минус того, что нельзя в case прописать диапазон цифр идущий по порядку и мне пришлось писать каждую по очереди, это очень увеличило размер программы и усложнило ее составление.
3.3 Алгоритмическая структура цикл
3.3.1 Цикл со счетчиком
Составим программу подсчета суммы чисел от 1 до 100. (1+2+3+…+100) (не используя формулу суммы членов арифметической прогрессии).
Рисунок 26 – решение задачи в Turbo pascal
Описание программы:
Называем программу p4; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные i,S целочисленным типом integer; очищаем экран clrscr; далее выполняем цикл со счетчиком тело цикла будет считать сумму когда i станет 100, после сложения, компилятор не вернется назад а продолжит выполнять следующую команду; эта команда writeln которая выводит сумму .
Рисунок 27 - результат выполнения программы
Рисунок 28 – решение задачи в Turbo C++
Описание программы:
Подключаем стандартные библиотеки iostream и conio; очищаем экран командой clrscr; описываем целочисленные переменные S,i типом int; обнуляем S; далее выполняем цикл со счетчиком тело цикла будет считать сумму когда i станет 100, после сложения, компилятор не вернется назад а продолжит выполнять следующую команду; эта команда cout которая выводит сумму.
Рисунок 29 - результат выполнения программы
Результаты выполнения программы идентичны. Конструкция цикла счетчика for так же совпадают с некоторыми отличиями в символах.
3.3.2 Цикл с предусловием
Если цикл со счетчиком мы используем в случаях, когда необходимо организовать цикл с известным числом повторений, то цикл с предусловием используется, когда число повторений неизвестно.
Решим задачу: в первый день пловец проплыл 3 км. В каждый следующий день он проплывал на 10% больше, чем в предыдущий. В какой по счету день пловец начнет проплывать более 5 км?
Рисунок 30 – решение задачи в Turbo pascal
Описание программы:
Называем программу p5; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные i,S целочисленным типом integer и вещественным real; очищаем экран clrscr; далее выполняем цикл с предусловием, тело цикла будет считать расстояние которое проплыл пловец за день и так же считать дни, после будет сравнение S c 5 и если оно больше или равно цикл останавливается и управление передается дальше; команда writeln выводит на экран количество дней .
Рисунок 31 - результат выполнения программы
Рисунок 32 – решение задачи в Turbo C++
Описание программы:
Подключаем стандартные библиотеки iostream и conio; очищаем экран командой clrscr; описываем переменные S,i целочисленным типом int и вещественным float; присваиваем начальные значения S и I; далее выполняем цикл с предусловием, тело цикла будет считать расстояние, которое проплыл пловец за день и так же считать дни, после будет сравнение S c 5 и если оно больше или равно цикл останавливается и управление передается дальше; команда cout выводит на экран количество дней.
Рисунок 33 - результат выполнения программы
Результаты выполнения программы идентичны. Конструкция цикла c предусловием while так же совпадает с некоторыми отличиями в символах. Если условие сразу оказывается ложным, оператор while не выполняется ни разу. В теле цикла должны быть операторы, которые могут изменить значение условия, сделав его ложным. Иначе цикл будет выполнятся бесконечное число раз.
3.3.3 Цикл с постусловием
Создадим программу нахождение суммы вводимых чисел до первого отрицательного числа.
Рисунок 34 – решение задачи в Turbo pascal
Называем программу p6; добавляем модуль uses crt для того чтобы очищать экран вывода; описываем переменные i,S целочисленным типом integer ; очищаем экран clrscr; S и I делаем равным нулю;далее выполняем цикл с постусловием, тело цикла будет считать сумму введенных чисел, после попросит ввести число и проверится условие если не отрицательное цикл повторяется, иначе выводится сумма на экран командой writeln.