Advertisement
Leeen

lab for Gaidel' №2 var 4

Oct 20th, 2018
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. // Лабораторная работа для Гайделя №2 (Геометрическая прогрессия)
  2. #include <iostream>
  3. #include <cmath>
  4. #include <iomanip> // для нуля после целого числа
  5.  
  6. using namespace std;
  7.  
  8. // функция продолжения
  9. bool Prod()
  10. {
  11.     cout << "Continue Y/N" << endl;
  12.     char yn;
  13.     cin >> yn;
  14.     cin.clear(); // очистка потока
  15.     // если пользователь ввел 'Y' или 'N'
  16.     if (yn == 'Y' && cin.get() == '\n') return true;
  17.     else if (yn == 'N' && cin.get() == '\n') return false;
  18.     // обработка ошибки ввода символа
  19.     else
  20.     {
  21.         while (cin.get() != '\n');
  22.         cout << "Error. Try again" << endl;
  23.         Prod();
  24.     }
  25. }
  26.  
  27. // функция ввода b(1)
  28. double fElem() {
  29.     cout << "Enter a value for b(1), q and n" << endl;
  30.     cout << "b(1) = ";
  31.     double b1;
  32.     cin >> b1;
  33.     cin.clear();
  34.  
  35.     //обработка ошибки ввода символа
  36.     if (cin.get() != '\n') {
  37.         while (cin.get() != '\n');
  38.         cout << "error inputing! try again" << endl;
  39.         return fElem();
  40.     }
  41.  
  42.     return b1;
  43. }
  44.  
  45. // функция ввола q
  46. double denom() {
  47.     double denominator;
  48.     cout << "q = ";
  49.     cin >> denominator;
  50.     cin.clear();
  51.  
  52.     //обработка ошибки ввода символа
  53.     if (cin.get() != '\n') {
  54.         while (cin.get() != '\n');
  55.         cout << "error inputing! try again" << endl;
  56.         return denom();
  57.     }
  58.  
  59.     return denominator;
  60. }
  61. // функция ввода n
  62. double iter() {
  63.     double iteration;
  64.     cout << "n = ";
  65.     cin >> iteration;
  66.    
  67.     cin.clear();
  68.  
  69.     //обработка ошибки ввода символа (номер элемента не может быть отрицательным)
  70.     if (cin.get() != '\n' || iteration <= 0) {
  71.         while (cin.get() != '\n');
  72.         cout << "error inputing! try again" << endl;
  73.         return iter();
  74.     }
  75.  
  76.     return iteration;
  77. }
  78.  
  79. // подсчет суммы геометрической прогрессии
  80. double getSum(double b1, double q, double n)
  81. {
  82.     return (b1*(pow(q, n) - 1)) / (q - 1);
  83. }
  84.  
  85.  
  86.  
  87. int main()
  88. {
  89.     do {
  90.         // вызываем функции, получающую b(1), q and n
  91.         double firstElement = fElem();
  92.         double denominator = denom();
  93.         double iteration = iter();
  94.        
  95.         //получаем сумму элементов прогрессии
  96.         double sum = getSum(firstElement, denominator, iteration);
  97.  
  98.         //при выводе результата получаем значение с 1 знаком после запятой
  99.         cout.setf(ios::fixed);
  100.         cout.precision(1);
  101.         cout << "Resultat = " << sum << endl;
  102.  
  103.     } while (Prod()); // продолжаем работу программы, пока пользователь не введет 'N'
  104.     system("pause");
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement