Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие - Основы программирования.doc
Скачиваний:
50
Добавлен:
14.03.2016
Размер:
3.79 Mб
Скачать

Лабораторная работа №3 Операторы цикла

Цель лабораторной работы: изучение концепций и освоение технологии процедурного программирования, приобретение навыков процедурного программирования на языке C/С++ циклических вычислений.

Задание на программирование: используя технологию процедурного программирования разработать программу решения каждой из двух индивидуальных задач тремя видами циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром).

Порядок выполнения работы:

1) Получить у преподавателя индивидуальное задание: две задачи. Выполнить постановку обеих задач: сформулировать условие, определить входные и выходные данные.

2) Разработать математическую модель.

3) Построить схему алгоритма, последовательно используя для решения каждой из задач все три циклические управляющие структуры (операторы while,dowhile,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 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-1 < .

4.

1) Для введенных с клавиатуры значений A, B, n и X вычислить S:

2) Вычислить предел последовательности {Yn} при n  , где Y0=0, а Yn вычисляется по формуле:

n = 1, 2, 3,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-1 < .

6.

1) Для введенного с клавиатуры значения m вычислить S:

при x = 1.5 + 0.1*i

2) Вычислить предел последовательности {Yn} при n, где Yn вычисляется по формуле:

n = 3, 4, 5,…

Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-1 < .

7.

1) Для введенного с клавиатуры значения m вычислить S:

при x = -1 + 0.2*i

2) Вычислить предел последовательности {Yn} при n, где Yn вычисляется по формуле:

n = 3, 4, 5,…

Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-1 < .

8.

1) Для введенного с клавиатуры значения X вычислить S:

2) Вычислить предел последовательности {Yn} при n, где Yn вычисляется по формуле:

n = 3, 4, 5,…

Значения Y0, Y1, Y2 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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) и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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) и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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, при котором |XnXn-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, при котором |XnXn-1| < ε.

15.

1) Для заданного значения m вычислить .

Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле

i = 3, 4, 5,…m.

2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:

; n = 1, 2, 3,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-1<.

17.

1) Для заданного значения m вычислить .

Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле

i = 3, 4, 5,…, m.

2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:

; n = 1, 2, 3,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-1<.

18.

1) Для заданного значения m вычислить Ym.

Значения m, Y0, Y1 вводятся с клавиатуры, а Yi вычисляется по формуле

i = 2, 3, 4,…, m.

2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:

; n = 1, 2, 3,...

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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 и точность вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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,…

Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-1 < .

21.

1) Для заданного значения m вычислить .

Значения m, Y0 ,Y1 вводятся с клавиатуры, а Yi вычисляется по формуле:

i=2, 3, 4,…, m.

2) Вычислить предел последовательности {Yn} при n ∞, где Yn вычисляется по формуле:

; n = 1, 2, 3,…

Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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,…

Значение точности вычисления вводятся с клавиатуры. Вычисления прекратить при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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,…

Значение точности вычисления вводится с клавиатуры. Вычисления прекращаются при выполнении условия YnYn-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 ;

}