Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Чурилов / лаб 3

.docx
Скачиваний:
0
Добавлен:
14.10.2024
Размер:
163.29 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

      1. федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

(ГУАП)

КАФЕДРА № 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)

б) решение с использованием цикла dowhile (функция 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_______________________________________________________________

Скриншот результатов выполнения программы