Файл: Отчет по лабораторной работе 3 Название лабораторной работы Программирование циклического процесса. Типы циклов.doc
Добавлен: 27.04.2024
Просмотров: 10
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Федеральное государственное бюджетное образовательное учреждение высшего образования
| «Московский государственный технический университет имени Н.Э. Баумана» (национальный исследовательский университет) (МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ ФУНДАМЕНТАЛЬНЫЕ НАУКИ________
КАФЕДРА ВЫЧИСЛИТЕЛЬНАЯ МАТЕМАТИКА И МАТЕМАТИЧЕСКАЯ ФИЗИКА (ФН11)_
НАПРАВЛЕНИЕ ПОДГОТОВКИ МАТЕМАТИКА И КОМПЬЮТЕРНЫЕ НАУКИ (02.03.01)
Отчет
по лабораторной работе № _3__
Название лабораторной работы: Программирование циклического процесса. Типы циклов.
Вариант №10
Дисциплина: _______Информатика___________________________
Студент гр. _ФН11-11Б __ 18.09.2021__ ___А.Д.Куприн___
(Подпись, дата) (И.О. Фамилия)
Преподаватель к.т.н. доцент __________________ ____Т.Н.Ничушкина__
(Подпись, дата) (И.О. Фамилия)
Москва, 2021
Цель:
Изучение операторов организации циклов, приемов создания программ, обеспечивающих выполнение циклических процессов.
Задание:
Рассмотреть решение предложенной задачи с использованием всех трех видов циклов. Отладить программу с рациональным вариантом цикла. Обосновать выбор.
Найти номера двух соседних членов последовательности Фибоначчи, разность между которыми превышает число k. Последовательность определяется законом: F0=F1=1; Fn=Fn-1+Fn-2, для n 2. Вывести на экран числа, их номера и разность между числами.
Схема алгоритма:
Счетный цикл невозможно использовать для поиска двух искомых чисел Фибоначчи
, так как неизвестно, каким образом вычислить их индексы, а счетный цикл можно использовать только зная требуемое количество итераций.
Структурная схема:
Текст программы:
На схеме алгоритма показаны есть цикл с предусловием и постусловием, в программе я выбрал использовать цикл с предусловием, так как его запись короче.
#include
using namespace std;
unsigned long fib(int n)
{
unsigned long previous = 0;
unsigned long current = 1;
unsigned long tmp;
if (n < 1)
{
return 0;
}
for (int i = 1; i < n; i++)
{
tmp = current;
current += previous;
previous = tmp;
}
return (current);
}
void preduslovie(int k)
{
int i = 0;
unsigned long int previous = fib(i);
unsigned long int current = fib(i + 1);
while (current - previous <= k)
{
previous = current;
current = fib(++i);
}
cout << "Pred-uslovie:" << endl;
cout << "indexes: " << i - 1 << " " << i << endl;
cout << "numbers: " << previous << " " << current << endl;
cout << "difference: " << current - previous << endl;
cout << endl;
}
int main()
{
int k;
cout << "k = ";
cin >> k;
cout << endl;
preduslovie(k);
return 0;
}
Тесты:
Входные данные | Ожидаемый результат | Полученный результат |
1 | indexes: 4 5 numbers: 3 5 difference: 2 | indexes: 4 5 numbers: 3 5 difference: 2 |
10 | indexes: 8 9 numbers: 21 34 difference: 13 | indexes: 8 9 numbers: 21 34 difference: 13 |
689 | indexes: 17 18 numbers: 1597 2584 difference: 987 | indexes: 17 18 numbers: 1597 2584 difference: 987 |
999999 | indexes: 32 33 numbers: 2178309 3524578 difference: 1346269 | indexes: 32 33 numbers: 2178309 3524578 difference: 1346269 |
Правильность ожидаемых значений проверена с помощью онлайн математического калькулятора WolframAlpha.
Выводы:
В результате данной лабораторной работы я научился использовать три типа циклов:
-
С предусловием (цикл-пока) – при поиске нужных по заданию чисел Фибоначчи -
С постусловием (цикл-до) – при поиске нужных по заданию чисел Фибоначчи -
Счетный цикл – при вычислении чисел Фибоначчи
При отладке программы ошибок не обнаружено. Все тесты пройдены верно. Поставленная задача выполнена.
Контрольные вопросы:
-
Что такое «цикл»? В каких случаях используется эта конструкция? -
Как показать циклический процесс в схеме алгоритма? -
Какие операторы реализуют ветвление в программе? -
Какой синтаксис имеют эти операторы? -
Объясните, почему в вашей программе следует использовать цикл? -
Почему вы выбрали именно такой тип цикла?
Ответы на контрольные вопросы:
-
Циклическая структура процесса вычислений определяет, что для получения результата некоторые действия необходимо выполнить несколько раз. Примерами подобных циклов являются определение значения степени числа, факториала некоторого числа, суммы определенного числа членов некоторой последовательности и т.д -
Различные виды циклов на схеме алгоритма:-
Счетный цикл -
Цикл-пока -
Цикл-до
-
-
Операторы:-
for -
while
-
-
Синтаксис:-
Счетный цикл
for (<Выражение1>;<Выражение2>;<Выражение3>) <Оператор>;
где:
Выражение1 – инициализирующее выражение; представляет собой последовательность описаний, определений и выражений, разделенных запятыми. Выполняется только один раз в начале цикла и задает начальные значения переменным цикла. Может отсутствовать, при этом точка с запятой остается.
Выражение2 –выражение условия; определяет условие завершения цикла, в частности, предельное значение параметра цикла. Может отсутствовать, при этом точка с запятой остается.
Выражение3 – список выражений, которые выполняются на каждой итерации цикла после тела цикла, но до следующей проверки условия. Обычно определяют изменение параметра цикла. Может отсутствовать.
Оператор – тело цикла. Может быть любым оператором С++, в том числе и составным оператором (блоком операторов). Составной оператор применяется, если тело цикла содержит более одного простого оператора. Оператор тела цикла может отсутствовать, в этом случае вместо него ставится точка с запятой. -
Цикл с предусловием (цикл-пока)
while (<Выражение>) <Оператор>;
где:
Выражение - совокупность выражений, разделенных запятой, определяющая условия выполнения цикла. Результат такого составного выражения – значение последнего выражения.
Цикл выполняется до тех пор, пока результат выражения отличен от нуля. Как видно из синтаксиса, если условие не выполняется, то тело цикла может не выполниться ни разу.
Оператор – любой оператор С++, в том числе составной оператор. -
Цикл с постусловием (цикл-до)
do <Оператор > while (<Выражение>);
где:
Выражение - совокупность выражений, разделенных запятой, определяющая условия выполнения цикла.
Оператор – любой оператор С++, в том числе составной оператор.
-
-
В моей программе следует использовать цикл по нескольким причинам:-
Числа Фибоначчи определяются рекуррентно, чтобы вычислить число с номером N, нужно знать числа с номерами N-1; N-2. Использование цикла позволяет пройтись от изначальных условий (первые два числа Фибоначчи считаются равными 1), до искомого числа. -
Неизвестно точно, какие именно два числа будут удовлетворять условию, что разность между ними будет больше k. Поэтому целесообразен перебор чисел с помощью цикла.
-
-
Я выбрал именно такой тип цикла:-
В вычислении числа Фибоначчи – счетный цикл. Я выбрал его, так как данная функция принимает конкретный номер вычисляемого числа в качестве аргумента. То есть требуемое количество шагов для получения результата заранее известно. Поэтому использовать счетный цикл целесообразно. Функция пройдет от первых, заданных по умолчанию чисел, до искомого, складывая их по заданным правилам. -
В поиске двух последовательных чисел с разностью больше k – цикл-до или цикл-пока. Цикл-до легко преобразуется в цикл-пока, поэтому варианты решения через каждый из них будем рассматривать вместе. Главное, что эти циклы выполняются неопределенное количество раз, так как во время поиска мы не знаем, какие конкретно числа мы ищем и не можем вычислить сколько шагов нужно проделать до них. Выход из цикла происходит только тогда, когда будет получен результат.
-