Файл: ОСНОВНЫЕ СТРУКТУРЫ АЛГОРИТМОВ: сРАВНИТЕЛЬНЫЙ АНАЛИЗ И ПРИМЕРЫ ИХ ИСПОЛЬЗОВАНИЯ (Алгоритмы и их структура).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 247

Скачиваний: 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.