Вы находитесь на странице: 1из 17

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение


высшего образования
Восточно-Сибирский государственный университет технологий и
управления
(ФГБОУ ВСГУТУ)

Электротехнический факультет
Кафедра «Системы Информатики»

Дисциплина
«Основы программирования»

Отчет по лабораторной работе №3


На тему:
Циклы
Вариант 4

Выполнил: студент гр. Б660


Писарева П.В.
Проверил: преподаватель
Дышенов Б.А.

г.Улан-Удэ
2020г.
1 Словесная постановка задачи
1. Найти наибольший общий делитель двух введенных чисел методом
Евклида.

2. Используя цикл, написать программу, которая позволяет бесконечно


вводить с консоли числа, сразу определяет, является ли число
простым.

3. Написать программу, которая выводит на экран все числа


Фибоначчи по порядку от первого до того, чей номер введен.

Решение задачи 1

1 Формальная постановка задачи

Входные данные:

a, b – действительные числа, представляющие переменные, которые

пользователь вводит с клавиатуры. Именно их наибольший общий делитель


будет вычислять программа.

Выходные данные:

a – действительное число, представляющее результат вычисления


наибольшего общего делителя.

Метод получения результата:

Метод Евклида заключается в поочередном вычитании из большего из


данных чисел меньшего и формировании из полученных разниц новой пары
до тех пор, пока разницы не будут равны. Полученный результат и будет
наибольшим общим делителем данных чисел.
2 Проектирование
3 Реализация

Текст программы содержит символы кириллицы, поэтому в начало


программы включается файл Windows.h, а в теле функции прописываются
следующие команды:

#include <Windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

В программе используется потоковый ввод-вывод, поэтому в начало


программы также включаются файл iostream и строка, позволяющая
использовать их в Visual Studio:

#include <iostream>
using namespace std;

Текст программы начинается с заголовка главной функции main():

int main()

Далее открывается тело функции и в нее включается описание


переменных.

Кодовая часть программы начинается с приглашения – вывода строки-


константы:

cout << "Введите два числа (через пробел): ";

за которым считываются данные, вводимые пользователем:

cin >> a >> b;

Далее выполняется проверка, не содержится ли среди введенных чисел 0.


Если 0 присутствует, выводится соответствующее сообщение об ошибке, а
если нет, то выполняется алгоритм Евклида. По результатам его работы
выводится сообщение, содержащее полученный наибольший общий
делитель.
Текст программы:

#include <Windows.h>
#include <iostream>
using namespace std;

int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

/* Объявление переменных */
double a, b;

/* Ввод чисел */
cout << "Введите два числа (через пробел): ";
cin >> a >> b;

/* Алгоритм Евклида */
if (a != 0 and b != 0) {
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
cout << "НОД введенных чисел равен " << a;
}
else cout << "Ошибка: среди введенных чисел есть 0";

return 0;
}
4 Тестирование

При работе программы на экран было выведено следующее:

Введите два числа (через пробел): 36 48


НОД введенных чисел равен 12
Решение задачи 2

1 Формальная постановка задачи

Входные данные:

a – целое число, представляющее переменную, которую пользователь

вводит с клавиатуры.

k – целое число, представляющее счетчик делителей.

i – целое число, представляющее каждый новый делитель.

Выходные данные:

Сообщение, содержащее информацию о том, простое введенное число или


сложное.

Метод получения результата:

Поиск делителей введенного числа и их подсчет, на основе которого


делается вывод о том, простое введенное число или сложное.
2 Проектирование
3 Реализация

Текст программы содержит символы кириллицы, поэтому в начало


программы включается файл Windows.h, а в теле функции прописываются
следующие команды:

#include <Windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

В программе используются команды из библиотеки math.h, поэтому он


подключается в начале программы:

#include <math.h>

Также в программе используется потоковый ввод-вывод, поэтому в начало


программы также включаются файл iostream и строка, позволяющая
использовать их в Visual Studio:

#include <iostream>
using namespace std;

Текст программы начинается с заголовка главной функции main():

int main()

Далее открывается тело функции и в нее включается описание


переменных.

Кодовая часть программы начинается с приглашения – вывода строки-


константы:

cout << "Введите число: ";

за которым считываются данные, вводимые пользователем:

cin >> a;

Далее выполняется проверка, не введен ли 0. В случае, если введен,


выводится соответствующее сообщение о завершении программы:
if (a == 0) cout << "Введен 0, программа завершена.";

В остальных случаях выполняется основной алгоритм. Для проверки


числа на простоту необходимо поделить его на все числа, начиная от 1 и
заканчивая квадратным корнем самого числа и посчитать, сколько из этих
частных будут равны нулю (количество делителей). У простого числа будет
только одно такое частное – от деления на 1. На основе этого и реализуется
основной алгоритм:

lim = sqrt(a);
while (i <= a) {
if (a % i == 0) k += 1;
i += 1;
}

По результатам работы этого алгоритма в зависимости от полученного


числа делителей выводится соответствующее сообщение:

if (k > 2) cout << "Число сложное\n";


else cout << "Число простое\n";

Далее происходит обнуление счетчиков и повторный ввод числа с


проверкой на ввод 0, после чего цикл повторяется, пока пользователь не
введет 0:

i = 1;
k = 0;

cout << "Введите число (для выхода введите 0): ";


cin >> a;
if (a == 0) cout << "Введен 0, программа завершена.\n";
Текст программы:

#include <Windows.h>
#include <iostream>
#include <math.h>
using namespace std;

int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

/* Объявление переменных */
int a, i=1, k=0;
double lim;

/* Ввод числа */
cout << "Введите число: ";
cin >> a;

/* Проверка на ввод 0 */
if (a == 0) cout << "Введен 0, программа завершена.";

/* Основной алгоритм */
while (a != 0) {
lim = sqrt(a);
while (i <= a) {
if (a % i == 0) k += 1;
i += 1;
}

/* Вывод результата */
if (k > 2) cout << "Число сложное\n";
else cout << "Число простое\n";

/* Обнуление счетчиков */
i = 1;
k = 0;

/* Повторный ввод числа и проверка на 0 */


cout << "Введите число (для выхода введите 0): ";
cin >> a;
if (a == 0) cout << "Введен 0, программа завершена.\n";
}

return 0;
}
4 Тестирование

При работе программы на экран было выведено следующее:

Введите число: 19
Число простое
Введите число (для выхода введите 0): 1520
Число сложное
Введите число (для выхода введите 0): 121
Число сложное
Введите число (для выхода введите 0): 0
Введен 0, программа завершена.
Решение задачи 3

1 Формальная постановка задачи

Входные данные:

k – целое число, представляющее количество чисел, которые будут

выведены.

Выходные данные:

fib – действительное число, представляющее каждое следующее


выведенное число Фибоначчи.

Метод получения и вывода чисел:

Числа Фибоначчи – это последовательность чисел, где каждое следующее


число является суммой двух предыдущих. При помощи двух
дополнительных переменных fib0 и fib1, которые представляют собой два
предыдущих члена последовательности, считается следующее число.
2 Проектирование
3 Реализация

Текст программы содержит символы кириллицы, поэтому в начало


программы включается файл Windows.h, а в теле функции прописываются
следующие команды:

#include <Windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

В программе используется потоковый ввод-вывод, поэтому в начало


программы также включаются файл iostream и строка, позволяющая
использовать их в Visual Studio:

#include <iostream>
using namespace std;

Текст программы начинается с заголовка главной функции main():

int main()

Далее открывается тело функции и в нее включается описание


переменных.

Кодовая часть программы начинается с приглашения – вывода строки-


константы:

cout << "Введите количество чисел: ";

за которым считываются данные, вводимые пользователем:

cin >> k;

Далее проверяется, не введено ли пользователем число 0, и если введено,


то выводится соответствующее сообщение:

if (k == 0) cout << "Ошибка: введен 0\n";


После этого описываются исключения: для случаев, когда требуется
вывести одно или два числа последовательности. Затем выполняется
вычисление чисел Фибоначчи до указанного пользователем количества.

Текст программы:

#include <Windows.h>
#include <iostream>
using namespace std;

int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

/* Объявление переменных */
int k, i = 0;
double fib = 0, fib0 = 0, fib1 = 1;

/* Ввод количества чисел */


cout << "Введите количество чисел: ";
cin >> k;

/* Описание исключений */
if (k == 0) cout << "Ошибка: введен 0\n";
else if (k == 1) cout << fib0;
else if (k == 2) cout << fib0 << "\n" << fib1;

/* Вычисление чисел Фибоначчи и их вывод */


else {
cout << fib0 << "\n" << fib1 << "\n";
while (i < (k - 2)) {
i += 1;
fib = fib0 + fib1;
cout << fib << "\n";
fib0 = fib1;
fib1 = fib;
}
}

return 0;
}
4 Тестирование

При работе программы на экран было выведено следующее:

Введите количество чисел: 14


0
1
1
2
3
5
8
13
21
34
55
89
144
233

Заключение
В ходе выполнения данной работы были изучены операторы цикла и
написание программ с циклической последовательностью действий.

Оценить