- •Министерство образования и науки российской федерации
- •2. Методические указания к выполнению лабораторных работ
- •Лабораторная работа №1 Следование
- •Варианты индивидуальных заданий
- •Лабораторная работа №2 Операторы ветвления
- •Варианты индивидуальных заданий
- •Лабораторная работа №3 Операторы цикла
- •Варианты индивидуальных заданий
- •Лабораторная работа №4 Статические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №5 Динамические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №6 Методы сортировки
- •Варианты индивидуальных заданий Методы сортировки
- •Области сортировки элементов матриц
- •Лабораторная работа №7 Передача имён функций в качестве параметров
- •Варианты индивидуальных заданий
Лабораторная работа №3 Операторы цикла
Цель лабораторной работы: изучение концепций и освоение технологии процедурного программирования, приобретение навыков процедурного программирования на языке C/С++ циклических вычислений.
Задание на программирование: используя технологию процедурного программирования разработать программу решения каждой из двух индивидуальных задач тремя видами циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром).
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание: две задачи. Выполнить постановку обеих задач: сформулировать условие, определить входные и выходные данные.
2) Разработать математическую модель.
3) Построить схему алгоритма, последовательно используя для решения каждой из задач все три циклические управляющие структуры (операторы while,do…while,for). Каждое решение должно быть реализовано в виде отдельной функции.
4) Составить программу на языке C/С++.
5) Входные данные вводить с клавиатуры по запросу.
6) Вывод результатов должен осуществляться в функции main(). Выходные данные выводить на экран в развернутой форме с пояснениями.
7) Использовать стандартные потоковые объекты ввода/вывода cinиcout.
8) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными.
9) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.
Варианты индивидуальных заданий
1.
1) Для введенных с клавиатуры значений X и m вычислить S:
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
Yn = 0.25 sin(Yn-1) + cos(Yn-3); n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn - Yn-1 < .
2.
1) Для введенных с клавиатуры значений X и m вычислить P:
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
Yn = 0.3 sin(Yn-1) + Yn-3; n = 3,.4, 5,...
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
3.
1) Для введенных с клавиатуры значений A, B, n, m и X вычислить S:
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
Yn=0.1 tg (Yn-1) + 0.3 tg (Yn-3); n = 3, 4, 5,...
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
4.
1) Для введенных с клавиатуры значений A, B, n и X вычислить S:
2) Вычислить предел последовательности {Yn} при n , где Y0=0, а Yn вычисляется по формуле:
n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
5.
1) Для введенных с клавиатуры значений A, B, n, m и X вычислить S:
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
Yn = 0.352 * Yn-1 + cos(π/2 + Yn-3); n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
6.
1) Для введенного с клавиатуры значения m вычислить S:
при x = 1.5 + 0.1*i
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
7.
1) Для введенного с клавиатуры значения m вычислить S:
при x = -1 + 0.2*i
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
8.
1) Для введенного с клавиатуры значения X вычислить S:
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
9.
1) Для введённого с клавиатуры значения N найти (2*N)!! по формуле:
(2*N)!! = 2*4*6*…*(2*N-2)*(2*N).
2) Вычислить предел последовательности {Yn} при n , где Yn вычисляется по формуле:
n = 3, 4, 5,…
Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
10.
1) Для введённого с клавиатуры значения N найти (2*N+1)!! по формуле
(2*N+1)!! = 1*3*5*…*(2*N-1)*(2*N+1).
2) Вычислить предел последовательности {Yn} при n , гдеYn вычисляется по формулам:
n = 2, 3, 4…
Значение X (0 ≤ X < 1) и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
11.
1) Найти сумму всех целых чисел из отрезка [A,B], которые кратны 5.
2) Вычислить предел последовательности {Yn} при n , гдеYn вычисляется по формулам:
Y1 = X; Yn = Yn-1(2 – X*Yn-1); n = 2, 3, 4,…
Значение X (X > 0) и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
12.
1) Найти сумму всех целых чисел из отрезка [A,B], которые кратны 7.
2) Найти предел произведения для последовательности {Yn}, пользуясь рекуррентной формулой
Y1 = 1; Yn = n*(Yn-1 + 1); n = 2, 3, 4,…
Вычисления закончить при выполнении условия 1/Yn < ε.
13.
1) Найти сумму всех целых чисел из отрезка [A,B], которые при делении на 5 дают остаток 3.
2) Вычислить - корень k-ой степени из положительного числа A, пользуясь последовательным приближением
n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. За корень принять такое Xn, при котором |Xn – Xn-1| < ε.
14.
1) Найти сумму всех целых чисел из отрезка [A,B], которые при делении на 7 дают остаток 4.
2) Для приближенного решения уравнения Кеплера X-q*sin(X)=m, 0 < q < 1
полагают X0 = m, X1 = m + q*sin(X0),…, Xn = m + q*sin(Xn-1),…
Значения m и q и точность вычисления вводятся с клавиатуры. Найти решение уравнения Кеплера, принимая за него такое Xn, при котором |Xn – Xn-1| < ε.
15.
1) Для заданного значения m вычислить .
Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
i = 3, 4, 5,…m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
16.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = tg2(Yi-1) + Yi-3; i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
17.
1) Для заданного значения m вычислить .
Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
18.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1 вводятся с клавиатуры, а Yi вычисляется по формуле
i = 2, 3, 4,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,...
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
19.
1) Для заданного значения m вычислить Ym.
Значения m, Y0 , Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi= sin2 (Yi-1) + cos2 (Yi-3); i=3, 4, 5,…, m
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение A и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
20.
1) Для заданного значения m вычислить .
Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = sin(Yi-1) - cos(Yi-3); i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
21.
1) Для заданного значения m вычислить .
Значения m, Y0 ,Y1 вводятся с клавиатуры, а Yi вычисляется по формуле:
i=2, 3, 4,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
22.
1) Члены последовательностей {Xi} и {Yi} вычисляются по двум рекуррентным формулам. Для введённого с клавиатуры значения m вычислить Xm ,Ym, если
Xi+1 = X0 = 3.5
Yi+1 = ; Y0 = 2.2
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия Yn – Yn-1 < .
23.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = ctg(Yi-1) + sin(Yi-3); i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
24.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = lg(|Yi-1|) + 4arctg(Yi-3); i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
25.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = cos(Yi-1) + 3sin(Yi-3); i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
26.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = lg2(|Yi-1|) + Yi-3 – cos(Yi-2); i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
27.
1) Для заданного значения m вычислить Ym.
Значения m, Y0, Y1,Y2 вводятся с клавиатуры, а Yi вычисляется по формуле
Yi = sin2(Yi-1) + ctg(Yn-2) - 5Yi-3; i = 3, 4, 5,…, m.
2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:
; n = 1, 2, 3,…
Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия Yn – Yn-1<.
Пример программы
//1.Пользуясь рекуррентной формулой yi=yi-1 + yi-3^2, где i=3,4,...n,
//для заданного значения n вычислить yn, если известны y0, y1, y2.
//2.Последовательность {an} задана равенствами:
// a1=0.5; an=n*(an-1+0.5).
// Вычислить предел произведения (1+1/a1)*...*(1+1/an).
// Вычисления закончить при |1/an| < eps.
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<limits.h>
int recur1(int n, int y0, int y1, int y2) ;
int recur2(int n, int y0, int y1, int y2) ;
int recur3(int n, int y0, int y1, int y2) ;
float predel1(float eps) ;
float predel2(float eps) ;
float predel3(float eps) ;
int main()
{int var, n ;
int re1, re2, re3 ; //результаты решения первой задачи
float rez1, rez2, rez3 ; //результаты решения второй задачи
float eps ; //точность вычисления результата
float y0, y1, y2 ; //исходные данные для первой задачи
clrscr() ;
for(;;)
{
//Выбор вида действия
cout << " Вид действия:\n" ;
cout << " 1 - вычисление по рекуррентной формуле\n" ;
cout << " 2 - вычисление предела произведения\n" ;
cout << " 3 - завершение задачи\n" ;
cout << " Введите вид действия -> " ;
cin >> var ;
switch(var)
{case 1:
//Ввод исходных данных для первой задачи
cout << " Введите n -> " ;
cin >> n;
cout << " Введите y0, y1, y2 -> " ;
cin >> y0 >> y1 >> y2 ;
re1 = recur1(n, y0, y1, y2) ;
re2 = recur2(n, y0, y1, y2) ;
re3 = recur3(n, y0, y1, y2) ;
//Вывод результата
cout << " Для цикла WHILE результат = " << re1 << endl ;
cout << " Для цикла DO..WHILE результат= " << re2 << endl ;
cout << " Для цикла FOR результат = " << re3 << endl ;
break ;
case 2:
//Ввод исходных данных для второй задачи
cout << " Введите точность вычисления -> " ;
cin >> eps ;
rez1 = predel1(eps) ;
rez2 = predel2(eps) ;
rez3 = predel3(eps) ;
//Вывод результата
cout.precision(4) ;//число знаков после дес. точки
cout << " Для цикла WHILE результат =" << rez1 << endl ;
cout.precision(4) ;
cout << " Для цикла DO..WHILE результат=" << rez2 << endl ;
cout.precision(4) ;
cout << " Для цикла FOR результат =" << rez3 << endl ;
break ;
default: return 0 ;
}//switch
}//for
}
//вычисление значения рекуррентного выражения циклом while
int recur1(int n, int y0, int y1, int y2)
{int i = 3, y ;
while(i <= n)
{y = y2 + y0 * y0 ;
y0 = y1 ;
y1 = y2 ;
y2 = y ;
i++ ;
}
return y ;
}
//вычисление значения рекуррентного выражения циклом do..while
int recur2(int n, int y0, int y1, int y2)
{int i = 3, y ;
do
{y = y2 + y0 * y0 ;
y0 = y1 ;
y1 = y2 ;
y2 = y ;
i++ ;
}
while(i <= n) ;
return y ;
}
//вычисление значения рекуррентного выражения циклом for
int recur3(int n, int y0, int y1, int y2)
{int i, y ;
for(i = 3 ; i <= n ; i++)
{y = y2 + y0 * y0 ;
y0 = y1 ;
y1 = y2 ;
y2 = y ;
}
return y ;
}
//вычисление предела произведения циклом while
float predel1(float eps)
{float pr = 1, an = .5 ;
int n = 1 ;
while(fabs(1 / an) > eps)
{pr *= (1 + 1 / an) ;
n++ ;
an = n * (an + .5) ;
}
return pr ;
}
//вычисление предела произведения циклом do..while
float predel2(float eps)
{float an = .5, pr = 1 ;
int n = 1 ;
do
{pr *= (1 + 1 / an) ;
n++ ;
an = n * (an + .5) ;
}
while (fabs(1 / an) > eps) ;
return pr ;
}
//вычисление предела произведения циклом for
float predel3(float eps)
{float an = .5, pr = 1 + 1 / an ;
for(int n = 2 ; n < INT_MAX; n++)
{an = n * (an + .5) ;
if(fabs(1 / an) > eps) pr *= (1 + 1 / an) ;
else break ;
}
return pr ;
}