- •Лабораторная работа 2 Циклы
- •Организация циклов с параметром Цикл while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long
- •Подсчет количества цифр в числе n
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл do-while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Калькулятор
- •Проверка входных данных
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл for в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Организация итерационных циклов Цикл while в итерационных циклах Вычисление числа π
- •Вложенные циклы
- •Вычисление значения многочлена на отрезке (схема Горнера)
- •Разложение функции на отрезке в ряд Тейлора
- •Организация работы с последовательностью чисел, вводимых с клавиатуры
- •Корректная организация циклов
- •Оптимизация программы
- •Алгоритм типа «развилка, вложенная в цикл с параметром»
- •Алгоритмы итерационных циклов Пример 1. Нахождение корня нелинейного уравнения методом итераций
- •Пример 2. Нахождение корня нелинейного уравнения методом половинного деления
- •Пример 3. Вычисление суммы членов бесконечного ряда.
- •Алгоритмы с вложенными циклами
- •Алгоритм вложенного цикла с развилкой
Цикл do-while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
#define N 10
int main ()
{int i=1, summa=0;
do
summa += i++;
while (i<=N);
cout << summa << endl;
_getch();
return 0;
}
Калькулятор
int main()
{ double n1, n2, ans;
char oper, ch;
do {cout << "\nEnter first number, operator, second number: " <<endl;
cin >> n1 >> oper >> n2;
switch (oper)
{ case '+': ans = n1 + n2; break;
case '-': ans = n1 - n2; break;
case '*': ans = n1 * n2; break;
case '/': ans = n1 / n2; break;
default: ans = 0;
}
cout << "Answer = " << ans;
cout << "\nDo another (enter 'y' or 'n')? ";
cin >> ch;
} while( ch != 'n' );
_getch();
return 0; }
Проверка входных данных
В данном примере оператор цикла требует повторного ввода данных до тех пор, пока не будут введены значения из диапазона от 1 до 20:
int r;
do
{cout << "input 1 <= r <=20" << endl;
cin >> r;
} while (r <1 || r>20);
В следующем примере цикл проверяет, чтобы вводимые данные были положительными и отличны от 13:
int r;
do
{cout << "input r >0, r !=13: " <<endl;
cin >> r;}
while (r <0 || r==13);
В этом примере с помощью цикла while реализована проверка до 10 попыток ввода значения 25:
int i=1, rez=0;
while (i++ <=10 && rez !=25)
{cout << "input rez=25"<<endl;
cin >> rez;}
Напомним (см. метод. указания лаб.раб.1), что контроль правильности ввода значения некоторого типа можно реализовать, например, таким образом:
//проверка ввода значения из диапазона значений типа unsigned char
unsigned int uchar; //более широкий тип unsigned int
do {
cout << "input unsigned char:" << endl;
cin >> uchar;
} while(uchar < 0 || uchar > UCHAR_MAX); //диапазон значений типа unsigned char
//проверка ввода значения из диапазона значений типа int
float f; //более широкий тип float
int i;
do {
cout << "input int:" << endl;
cin >> f;
} while(f < INT_MIN || f > INT_MAX);
//диапазон значений типа int
i=f;
cout <<"ok " << i << endl;
Вычисление значений функции на отрезке
Составим программу для вычисления и вывода на печать таблицы значений функции у = а*х2 при а = 17.7, х изменяется от x0 = 25.5 до xn = 35.0 с шагом h = 0.5 с помощью цикла do while:
int main ()
{
double a=17.7, x0=25.0, xn=35.0, x, y, h=0.5;
const double X_end = xn+h/2 ; //35.0 +h/2, чтобы попала точка 35.0
x=x0;
do
{ y = a*x*x;
printf ("x=%7.2lf y=%10.2lf\n", x, y);
_getch(); //вывод результатов «с приостановкой»
x+=h;
} while (x < X_end);
return 0;
}
Вычисление на отрезке значений функции с условием и оформление результатов
Составим программу для вычисления и вывода на печать таблицы значений функции с условием у(х), если х изменяется от x0 = 2.0 до xn = 5.0 с шагом h=0.5 с помощью цикла do while:
int main()
{ double x0=2.0, xn=5.0, x, y, h=0.5;
const double X_end = xn+h/2 ; //5.0 +h/2, чтобы попала точка 5.0
//////////////////////////////////////////////////////////////////////
printf("\ndo-while:\n");
printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
218,196,196,196,196,194,196,196,196,196,196,196,196,196,196,191);
printf ("%c x %c y %c\n",179,179,179);
x=x0;
do
{ if (x<=3.5) y=cos(x);
else y=sin(x);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
195,196,196,196,196,197,196,196,196,196,196,196,196,196,196,180);
printf("%c%4.2lf%c%9.5lf%c\n", 179, x, 179, y, 179);
x+=h;
} while (x< X_end);
printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
192,196,196,196,196,193,196,196,196,196,196,196,196,196,196,217);
_getch();
return 0;
}