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

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

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


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

Электротехнический факультет

Кафедра «Системы Информатики»

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

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


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

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


:          Землякова Е.А.

Проверил:  Дышенов Б.А.


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

2. Загадывается число от 0 до 1000 случайным образом. Пользователь


пытается отгадать число. Если число отгадано, то пользователь выиграл.
Иначе выводится слова «больше» или «меньше» в зависимости какое
загаданное число по сравнению с введенным. А также выводится «в этой
сотне», если пользователь ввел число в той же сотне, что и загаданное (к
примеру, случайное число – 145, а пользователь ввел 189). Пользователь
вводит числа, пока не угадает загаданное число.

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


простых чисел в заданном с клавиатуры диапазоне.
4.
2 Решение задачи 1

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

Входные данные: натуральное число n, которое вводит пользователь.

Выходные данные: c1, c2 – количество чётных и нечётных цифр в записи


числа соответственно.

2.2 Проектирование

Начало

Ввод n

c1 = c2 = 0

Нет
n>0
Да
d = n % 10 Вывод
c1, c2

Нет d % 2 == 1 Да Конец

c2++ c1++

n /= 10

В начале алгоритма производится ввод числа n и обнуляются счётчики


c1, c2. Далее, выполняется цикл с предусловием, который будет выполняться
до тех пор, пока число n больше нуля. На каждой итерации цикла,
рассматривается цифра из младшего разряда числа n. В зависимости от
чётности цифры, увеличивается значение соответствующего счётчика. После
этого, в числе n отбрасывается цифра из младшего разряда и алгоритм
возвращается к проверке условия продолжения цикла. Когда число n станет
равно нулю, значит, что все цифры в записи числа были рассмотрены,
остаётся только вывести получившиеся значения c1 и с2, после чего
алгоритм завершается.

2.3 Реализация

#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int n;
cout << "Введите натуральное число, n = ";
cin >> n;
int c1, c2, d;
c1 = c2 = 0;
while (n > 0)
{
d = n % 10;
if (d % 2 == 1)
c1++;
else
c2++;
n /= 10;
}
cout << "Запись числа содержит" << endl;
cout << "нечётных цифр: " << c1 << endl;
cout << "чётных цифр: " << c2 << endl;
system("Pause");
return 0;
}

2.4 Тестирование
3 Решение задачи 2

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

Входные данные: число y, которое вводит пользователь.

Выходные данные: в качестве выходных данных служат подсказки


«больше», «меньше», «в этой сотне», которые выводятся на экран в
зависимости какое загаданное число по сравнению с введенным.

3.2 Проектирование

Начало

x = rand() % 1001;
hx = x / 100;

Ввод y

hy = y / 100

Да
x>y
Нет
Вывод
Да
x<y «больше»
Нет
Вывод
«меньше»

(x != y) && (hx == hy) Да

Нет Вывод «в
этой сотне»

Да
x != y
Нет
Вывод
«Вы угадали!»

Конец
В начале алгоритма случайным образом формируется число x в
интервале от 0 до 1000 и вычисляется сотня, в которой это число находится.
Далее, начинается тело цикла с постусловием, где условием продолжения
цикла является неравенство числа y, введённого пользователем и числа x. В
цикле происходит ввод пользователем числа y, вычисления сотни, в которую
входит это число. Если загаданное число x больше числа y, заданного
пользователем, то выводится сообщение «больше», в противном случае, если
загаданное число x меньше числа y, заданного пользователем, то выводится
сообщение «меньше». Если числа x и y не равны, но номера сотен, в которых
они находятся равны, то выводится сообщение «в этой сотне». На этом тело
цикла заканчивается, происходит проверка условия продолжения цикла, и
если оно выполняется, то цикл возвращается к вводу числа пользователем.
Если условие цикла не выполняется, т.е. пользователь угадал число, то
выводится сообщение «Вы угадали!» и программа завершается.

3.3 Реализация

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
srand(time(0));
int x = rand() % 1001;
int hx = x / 100;
int y, hy;
cout << "Угадайте число от 0 до 1000" << endl;
do {
cout << "> ";
cin >> y;
hy = y / 100;
if (x > y)
cout << "больше" << endl;
else if (x < y)
cout << "меньше" << endl;
if ((x != y) && (hx == hy))
cout << "в этой сотне" << endl;

} while (x != y);
cout << "Поздравляю, Вы угадали!" << endl;
system("Pause");
return 0;
}
3.4 Тестирование
4 Решение задачи 3

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

Входные данные: числа a и b, являющиеся границами диапазона, числа


из которого будут рассмотрены.

Выходные данные: число c – произведение всех простых чисел в


заданном диапазоне (a, b). Если в заданном диапазоне нет простых чисел, то
c будет равно нулю.

4.2 Проектирование

Начало

Ввод a, b

c=0

i = a; i <= b; i++

Да
isPrime = true c == 0

Нет
j = 2; j <= sqrt(i); j++ Вывод «в
диапазоне
Вывод с
нет простых
Нет i % j == 0 чисел»
Да
isPrime = false
Конец

Нет isPrime == true


Да
Нет Да
c == 0

c *= i c=i
Алгоритм выполнения программы начинается с ввода границ
диапазона, в котором будут искаться простые числа. Затем нулём
инициализируется переменная c, в которой будет накапливаться
произведение всех простых чисел в заданном диапазоне. Далее, начинается
цикл с параметром, где перебираются все числа из заданного диапазона.
Счётчик цикла – целочисленная переменная i. В теле цикла первым делом
инициализируется значением true переменная логического типа isPrime, по
значению которой будет далее будет принято решение об изменении
текущего результата. После инициализации isPrime начинается вложенный
цикл с параметром, внутри которого будут перебираться числа от 2 до корня
квадратного из i. Если будет найдено число, которое является делителем
числа i, то переменной isPrime будет присвоено значение false, а вложенный
цикл будет прерван оператором break. После выполнения вложенного цикла,
проверяется условие истинности переменной isPrime. Если значение этой
переменной равно true, то мы нашли простое число и переходим к проверке
значения переменной c. Если значение переменной c равно нулю, значит
найденное простое число является первым в заданном диапазоне и это
значение присваивается переменной c. Иначе, если значение переменной c не
равно нулю, значит найденное простое число уже не первое и переменная c
домножается на это значение. На этом заканчивается тело внешнего цикла с
параметром по переменной i. По окончанию выполнения цикла, вновь
происходит проверка равенства переменной c нулю. Если это условие
выполняется, значит в диапазоне не было найдено ни одно простое число, и
выводится соответствующее сообщение, иначе на экран выводится число c,
являющееся произведением всех простых чисел в заданном диапазоне. На
этом алгоритм завершается.
4.3 Реализация

#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int a, b;
cout << "Введите границы диапазона [a, b]" << endl;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
int c = 0;
for (int i = a; i <= b; i++)
{
bool isPrime = true;
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime == true)
{
if (c == 0)
c = i;
else
c *= i;
}
}
if (c == 0)
cout << "В заданном диапазоне нет простых чисел" << endl;
else
cout << "Прризведение всех простых чисел в диапазоне: " << c << endl;
system("Pause");
return 0;
}

4.4 Тестирование
Заключение

В результате выполнения данной работы были изучены операторы


цикла и написаны программы с циклической последовательностью действий.
Также изучена разница в результатах вычислений при использовании
вещественных типов float и double.