Лабораторная работа №3
ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ
Цель работы
Получить навыки программирования циклических алгоритмов на языке C++.
Постановка задачи
Cоставить программу вычисления суммы S.
Значение n ввести с клавиатуры.
Описание алгоритма
| |||
|
| |||||||
Текст исходного кода программы с комментариями
#include <iostream>
#include <math.h>
#include <cmath>
#include <cstdlib>
using namespace std;
long double fact(int N) //нахождение факториала числа N
{
if (N < 0)
return 0;
if (N == 0)
return 1;
else
return N * fact(N - 1);
}
long double proizv(int n) { //нахождение произведения n*(n+1)*...*(n^2)
long double sum, sum1, sumpart;
int k;
k = pow(n, 2); //верхняя граница произведения
sum = fact(k);
sumpart = fact(n - 1);
if (sum == 1)
sum1 = 1;
else
sum1 = sum / sumpart;
return sum1;
}
int main() {
setlocale(LC_ALL, "Russian");
int n, k, i, answer;
long double sum1, sumall = 0;
cout << "Введите n: ";
cin >> n;
if (n<1 || cin.fail())
cout << "Неверно. Введите натуральное число." << endl;
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
while (n<1) {
cout << "Введите натуральное число: ";
cin >> n;
if (n<1 || cin.fail()) cout << "Неверно. Введите натуральное число." << endl;
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
}
cout << "Максимальный элемент=" << proizv(n) << endl;
for (int i = 1; i <= n; i++) //цикл нахождения суммы элементов
{
sumall += proizv(i); //сумма элементов
}
cout << "Сумма: " << sumall << endl;
cout << endl;
cout << "Желаете просмотреть слагаемые? Нажмите 1 для их просмотра и 0 для завершения программы." << endl;
cin >> answer;
if (answer<0 || answer>1 || cin.fail())
cout << "Неверно. Нажмите 1 для их просмотра и 0 для завершения программы." << endl;
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
while (answer<0 || answer>1) {
cout << "Сделайте выбор: ";
cin >> answer;
if (answer < 0 || answer > 1 || cin.fail()) cout << "Неверно. Нажмите 1 для их просмотра и 0 для завершения программы." << endl;
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
}
switch (answer) {
case 1:
for (int i = 1; i <= n; i++) //цикл вывода слогаемых
{
cout << i << " слагаемое=" << proizv(i)<<endl; //вывод слогаемых
}
break;
case 0:
exit(0);
break;
}
system("Pause");
return 0;
}
Контрольный прогон программы
Тест №1 – ввод сначала не корректных, и последующий ввод корректных значений с отображением слагаемых.
Рис. 2. Результат теста №1
Вывод
Данная программа позволяет освоить навыки написания циклических алгоритмов на языке С++. Также я получил опыт в написании функций (fact, proizv) и их использовании в главной процедуре (int(main){}).
Список используемых информационных источников
1. Павловская Т.А. С/С++. Программирование на языке высокого уровня- Санкт-Петербург. Питер, 2006.
2. Интернет-ресурс: http://cppstudio.com/post/348/
3. Интернет-ресурс: http://cppstudio.com/post/396/
4. Единая система программной документации (ЕСПД) ГОСТ 19.701-90
5. Сыромятников В.П. «Программирование», МТУ МИРЭА, лекции, 2016/2017.