
Чурилов / лаб 3
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
(ГУАП)
КАФЕДРА № 44
Преподаватель
канд. техн. наук, доцент Бариков Л.Н.
Отчёт
по лабораторной работе №3
по дисциплине ОСНОВЫ ПРОГРАММИРОВАНИЯ
на тему: «Операторы цикла: заданное число повторений»
Работу выполнил
студент гр. Z9411 Чурилов А.С.
Санкт-Петербург
2020
Для заданного
значения m
вычислить
Значения m, Y0, Y1, Y2 вводятся с клавиатуры, а Yi вычисляется по формуле:
Математическая модель
Вводятся значения m, Y0, Y1, Y2.
Вычисляется значение суммы первых трёх слагаемых (i=0,1,2).
На основе значений Y0, Y1, Y2 для параметра i=3 вычисляется значение Yi по заданной формуле, вычисляется значение очередного слагаемого и увеличивается текущее значение суммы.
Для вычисления следующего значения Yi увеличивается на 1 значение i, значение Y1 переписывается в Y0, значение Y2 переписывается в Y1, значение Yi переписывается в Y2. Для текущего значения параметра i вычисляется значение Yi по заданной формуле, вычисляется значение очередного слагаемого и увеличивается текущее значение суммы.
Действия повторяются до превышения параметром i значения m.
Вычисленное значение суммы умножается на коэффициент 0.1(m+1).
Задача решена.
Схемы алгоритмов решения (пример 1)
а) решение с использованием цикла while (функция recur1)
i=0
recur1(m,y0,y1,y2)
sum=0
sum+=(y0
)/10
i++
sum+=(y1
)/10
i++
sum+=(y2
)/10
i++
i<=m
нет
да
y=
sum+=(y1
)/10
y0=y1
y1=y2
y2=y
i++
Sum+=
return(sum)
б) решение с использованием цикла do…while (функция recur2)
recur2(m,y0,y1,y2)
i=0
sum=0
sum+=(y1
)/10
i++
sum+=(y1
)/10
i++
sum+=(y1
)/10
i++
y=
sum+=(y1
)/10
y0=y1
y1=y2
y2=y
i++
i<=m
нет
Sum+=
return(sum)
в) решение с использованием цикла for (функция recur3)
recur3(m,y0,y1,y2)
i=0
sum=0
sum+=(y1
)/10
i++
sum+=(y1
)/10
i++
sum+=(y1
)/10
i=3;
i<=m;
i++
y=
sum+=(y1
)/10
y0=y1
y1=y2
y2=y
Sum+=
return(sum)
Текст программы
//Пример 1. Для произвольного значения m вычислить значение суммы.
//Значения m, y0, y1, y2 вводятся с клавиатуры. Значение yi
//вычисляется по формуле y[i]=lg( |y[i-3] |)-1.5 cos( y[i-1])+(2+i)/5;i=3,4,5,...,m.
#include<iostream>
#include<locale.h>
#include <math.h>
using namespace std;
float recur1(int m, float y0, float y1, float y2);
float recur2(int m, float y0, float y1, float y2);
float recur3(int m, float y0, float y1, float y2);
//main_begin_______________________________________________________________
int main()
{
int var, m;
float re1, re2, re3; //результаты решения задачи
float y0, y1, y2; //исходные данные
setlocale(LC_ALL, "Russian");
for (;;)
{//Выбор действия
cout << "\n Вид действия:" << endl;
cout << " 1 - вычисление суммы по рекуррентной формуле" << endl;
cout << " 2 - завершение задачи" << endl;
cout << " Введите вид действия -> ";
cin >> var;
switch (var)
{
case 1://Ввод исходных данных
cout << " Введите m -> ";
cin >> m;
cout << " Введите y0, y1, y2 -> ";
cin >> y0 >> y1 >> y2;
re1 = recur1(m, y0, y1, y2);
re2 = recur2(m, y0, y1, y2);
re3 = recur3(m, y0, y1, y2);
//Вывод результата
cout.precision(3);//число знаков после запятой при выводе
cout << " Для цикла WHILE результат = " << re1 << endl;
cout << " Для цикла DO..WHILE результат = " << re2 << endl;
cout << " Для цикла FOR результат = " << re3 << endl;
break;
default: return 1;
}//switch
}//for
}
//main_end_________________________________________________________________
//recur1_beg_______________________________________________________________
//вычисление значения суммы циклом while
float recur1(int m, float y0, float y1, float y2)
{
int i = 0; //текущий номер слагаемого
float y, //очередное значение y[i]
sum = 0; //начальное значение суммы
sum += (y0 - (pow(i, 2))) / 10.; i++;
sum += (y1 - (pow(i, 2))) / 10.; i++;
sum += (y2 - (pow(i, 2))) / 10.; i++;
while (i <= m)
{
//// y = y2 + y0 * y0;
///// log (| y0 | ) - 1.5 cos(y2) + (2 + i) / 5;
y = (log(fabs(y0)) - 1.5 * (cos(y2)) + (2. + i) / 5.);
sum += (y2 - (pow(i, 2))) / 10.;
y0 = y1;
y1 = y2;
y2 = y;
i++;
}
return(10.0 / m + sum);
}
//recur1_end_______________________________________________________________
//recur2_beg_______________________________________________________________
//вычисление значения суммы циклом do..while
float recur2(int m, float y0, float y1, float y2)
{
int i = 0; //текущий номер слагаемого
float y, //очередное значение y[i]
sum = 0; //начальное значение суммы
sum += (y0 - (pow(i, 2))) / 10.; i++;
sum += (y1 - (pow(i, 2))) / 10.; i++;
sum += (y2 - (pow(i, 2))) / 10.; i++;
do
{
//// y = y2 + y0 * y0;
y = (log(fabs(y0)) - 1.5 * (cos(y2)) + (2. + i) / 5.);
sum += (y2 - (pow(i, 2))) / 10.;
y0 = y1;
y1 = y2;
y2 = y;
i++;
} while (i <= m);
return(10.0 / m + sum);
}
//recur2_end_______________________________________________________________
//recur3_beg_______________________________________________________________
//вычисление значения суммы циклом for
float recur3(int m, float y0, float y1, float y2)
{
int i = 0; //текущий номер слагаемого
float y, //очередное значение y[i]
sum = 0; //начальное значение суммы
sum += (y0 - (pow(i, 2))) / 10.; i++;
sum += (y1 - (pow(i, 2))) / 10.; i++;
sum += (y2 - (pow(i, 2))) / 10.; i++;
for (; i <= m; i++)
{
//// y = y2 + y0 * y0;
y = (log(fabs(y0)) - 1.5 * (cos(y2)) + (2. + i) / 5.);
sum += (y2 - (pow(i, 2))) / 10.;
y0 = y1;
y1 = y2;
y2 = y;
}
return(10.0 / m + sum);
}
//recur3_end_______________________________________________________________
Скриншот результатов выполнения программы