Министерство образования и науки Кыргызской Республики Кыргызский государственный технический университет им. И.Раззакова Институт информационных технологий Кафедра «Программное обеспечение компьютерных систем» Направление: 710400 «Программная инженерия» дисциплина: «Введение в программную инженерию» ОТЧЕТ По лабараторной работе № 3 Тема: «Программирование алгоритмов циклической структуры» Выполнилa: студент группы ПИ(б)-6-23 Суйумбеков Самат Проверил: доцент Искаков Р.Т. Бишкек – 2023 Задача № 1 Вычислить значение функции y=(cos2x+sinx2)-etgx, при х изменяющемся от -1 до 1 с шагом 0.1. Реализовать с помощью всех трех операторов цикла. Код: //лаб_3_1 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); double x, y;//1.1 for (x = -1.0; x <= 1.0; x += 0.1) { y = (pow(cos(x), 2) + sin(x * x)) }; //1.2 y, x = -1.0; while (x <= 1.0) { y = (pow(cos(x), 2) + sin(x * x)) x += 0.1; } //1.3 y, x = -1.0; do{ y = (pow(cos(x), 2) + sin(x * x)) cout << "x=" << x << " y=" << y << x += 0.1; } while (x <= 1.0); return 0; } exp(tan(x)); exp(tan(x)); exp(tan(x)); endl; 2 Задача № 2 Вычислить значение функции, где x изменяется от -10 до 10 с шагом 0.5. Значения а и b ввести с клавиатуры. b a cos x, при x 2 ex a b S , при x 6 x 1 e x sin x, при 2 x 6 Код: //лаб_3_2 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); double x = -10.0, a, b, S; cout << "Введите числа a и b: "; cin >> a >> b; for (x = -10.0; x <= 10.0; x += 0.5) { if (x < 2) { S = a + (b / exp(x)) + cos(x); cout << "S=" << S << endl; } else if (x >= 6) { S = (a + b) / (x + 1); cout << "S=" << S << endl; } else if (2 <= x && x < 6) { S = exp(x) + sin(x); cout << "S=" << S << endl; }; } return 0; } 3 Задача № 3 Даны целые числа А и В (А < В). Найти сумму и произведение всех целых чисел от А до В. Реализовать с помощью всех трех операторов цикла. Код: //лаб_3_3 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int a, B, sum = 0, product = 1; cout << "Введите число А: "; cin >> a; cout << "Введите число В (больше числа А): "; cin >> B; // Цикл for for (int i = a; i <= B; i++) { sum += i; product *= i; } // Цикл while 4 sum = 0; product = 1; int i = a; while (i <= B) { sum += i; product *= i; i++; } // Цикл do-while sum = 0; product = 1; i = a; do { sum += i; product *= i; i++; } while (i <= B); cout << "Сумма всех чисел: " << sum << endl; cout << "Произведение всех чисел: " << product << endl; return 0; } Задача № 4 Дано натуральное число n. Вычислить: 2 2 ... 2 ; n –корней Код: //лаб_3_4 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); double res = 0.0; int n, i; tryaga: cout << "Введите количество корней n: "; cin >> n; if (n <= 0) { cout << "Ошибка: n должно быть натуральным числом." << endl; goto tryaga; }; for (i = 1; i <= n; i++) 5 { res = sqrt(2 + res); cout << res << endl; } cout << "Значение равняется: " << res; return 0; } Задача № 5 Дано натуральное число n. Вычислить: cos 1 cos 1 cos 2 cos 1 cos 2 .... cos n * * .... * sin 1 sin 1 sin 2 sin 1 sin 2 ... sin n Код: //лаб_3_5 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); double n, i, res = 1.0, s = 0.0, d = 0.0; cout << "Введите значение для n: "; cin >> n; if (n <= 0) { cout << "Ошибка: n должно быть натуральным числом." << endl; return 0; } for (i = 1; i <= n; i++) { s += cos(i); d += sin(i); res *= s / d; cout << "Текущий результат для i = " << i << ": " << res << endl; } cout << "Значение равняется: " << res; 6 return 0; } Задача № 6 Посчитать сумму и количество всех целых чисел кратных 3 и не кратных 7 в диапазоне от А до В (А<B). Вывести на экран все эти числа. Код: //лаб_3_6 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int A, B, sum = 0, count = 0; cout << "Введите A и B (A<B): "; cin >> A >> B; cout << "Целые числа кратных 3 и не кратных 7 : "; for (int i = A; i <= B; i++) { if (i % 3 == 0 && i % 7 != 0) { cout << i << " "; sum += i; count++; } } cout << "\nСумма: " << sum << endl; cout << "Кол-во: " << count << endl; return 0; } 7 Задача № 7 Начав тренировки, лыжник в первый день пробежал 10 км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. Определить: а) пробег лыжника за второй, третий, ..., десятый день тренировок; б) какой суммарный путь он пробежал за первые 7 дней тренировок. Код: //лаб_3_7 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "RU"); int gD; double sumK = 10, sD, per = 10, sumT; cout << "Введите общее количество дней которое он проехал: "; cin >> gD; cout << 1 << "-й день катания на лыжах, " << per << " км пройдено за день" << endl; for (int i = 2; i <= gD; i++) { per += per * 0.1; sumK += per; cout << i << "-й день катания на лыжах, " << per << " км пройдено за день" << endl; if (i == 7)sD = sumK; if (i == 10)sumT = sumK; }; cout << endl << "За " << gD << " дней лыжник пробежал " << sumK << "км" << endl; cout << "За 7 дней лыжник пробежал " << sD << "км" << endl; cout << "За 10 дней лыжник пробежал " << sumT << "км" << endl; return 0;} 8 Задача № 8 Гражданин 1 марта открыл счет в банке, вложив 1000 сом. Через каждый месяц размер вклада увеличивается на 2 % от имеющейся суммы. Определить: а) за какой месяц величина ежемесячного увеличения вклада превысит 30 сом; б) через сколько месяцев размер вклада превысит 2000 сом. Код: //лаб_3_8 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "RU"); double dt = 1000, dtt = 1000, p = 0.02; int b = 1, a = 1; while (dt <= 2000) { dt *= (1 + p); b++; } for (; dtt * p <= 30;) { dtt *= (1 + p); a++; } cout << "а)Величина ежемесячного увеличения вклада превысит 30 сом через " << a << " месяцев." << endl; cout << "б)Размер вклада превысит 2000 сом через " << b << " месяцев." << endl; return 0; } Задача № 9 9 Вычислить: Код: //лаб_3_9 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "RU"); double sum = 0; int fact = 1; for (int i = 1; i <= 10; i++) { fact *= i; sum += 1.0 / fact; } cout << sum << endl; return 0; } Задача № 10 Вычислить: Код: //лаб_3_10 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "RU"); double sum = 0; 10 for (int i = 1; i <= 100; i++) { for (int j = 1; j <= 50; j++) { sum += 1.0 / (i + pow(j, 2)); } } cout << sum << endl; return 0; } Контрольные вопросы 1. Функциональная схема цикла и назначение ее отдельных частей. 2. Какие виды циклов существуют, в чем их принципиальные отличия? 3. Назначение цикла for и его отдельных компонентов. 4. Как работают операторы while и do-while? 5. Укажите, сколько операторов можно разместить в теле цикла? 6. Можно ли в теле цикла изменять значение параметра цикла? 7. Можно ли вне тела цикла использовать значение параметра цикла? Ответы: 1.Функциональная схема цикла включает в себя инициализацию (начальные значения переменных), проверку условия выполнения цикла, выполнение блока кода, обновление переменных (инкремент/декремент) и повторное выполнение цикла или выход из него в зависимости от условия. 2.В языке C++ существуют три вида циклов: for, while и do-while. Отличия между ними заключаются в порядке и условиях выполнения цикла. Цикл for имеет установленное начальное значение, условие выполнения и шаг изменения переменной. Цикл while повторяет выполнение блока кода, пока условие истинно. Цикл do-while выполняет блок кода, а затем проверяет условие для продолжения выполнения цикла. 3.Цикл for предназначен для выполнения повторяющихся действий определенное количество раз. Он состоит из инициализации переменных, условия выполнения цикла и инкремента/декремента переменных. 11 4.Оператор while выполняет блок кода, если условие истинно, и продолжает его выполнение до тех пор, пока это условие остается истинным. Оператор do-while сначала выполняет блок кода, а затем проверяет условие. Если оно истинно, цикл повторяется. 5.В теле цикла можно разместить любое количество операторов, даже другие циклы. 6.Да, в теле цикла можно изменять значение параметра цикла. 7.Да, значение параметра цикла может быть использовано вне тела цикла, если переменная объявлена в области видимости, доступной для других частей программы. 12