Скачиваний:
12
Добавлен:
25.12.2018
Размер:
269.31 Кб
Скачать

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

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

«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

КАФЕДРА № 2

Преподаватель

доцент, к.т.н. Куртяник Д.В.

Отчёт

по лабораторной работе №4

по дисциплине Информатика

на тему: « Операторы цикла: вычисления с заданной точностью»

Работу выполнил

студент гр. 4616 Павлов А.В.

Санкт-Петербург

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

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

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

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

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

3) Построить схему алгоритма, последовательно используя для решения задачи все три циклические управляющие структуры (операторы while, dowhile, for). Каждое решение должно быть реализовано в виде отдельной функции.

При этом запрещается использовать оператор if для проверки условия входа в циклы и в качестве одного из операторов тела цикла;

4) Составить программу на языке C/С++.

5) Входные данные вводить с клавиатуры по запросу.

6) Вывод результатов должен осуществляться в функции main(). Выходные данные выводить на экран в развернутой форме с пояснениями.

7) Использовать стандартные потоковые объекты ввода/вывода cin и cout.

8) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными.

9) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.

1-3)

Вариант 10

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

n = 2, 3, 4…

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

Ввод X и EPS => Проверка х на условие 0 ≤ X < 1, если прошло то проверка на (y1-y0)>=eps && n<SHRT_MAX) => Дальше цикл y0=y1; y1=0.5*(x+y0*y0); и вывод n при условии n>SHRTMAX

Текст программы.

/*последовательность (Yn) задана равенствами:

X (0<=X<1)

Y1=X/2

Yn=1/2*(X+Yn-1^2)

n=2,3,4...

Вычисления закончить при |Yn-yn-1|<eps*/

#include <iostream>

#include <locale.h>

#include <limits.h>

#include <math.h>

#include <stdio.h>

using namespace std;

float predel1(float eps, float x);

float predel2(float eps, float x);

float predel3(float eps, float x);

int main(){setlocale(LC_ALL,"Russian") ;

int var;

float rez1,rez2,rez3; //результат решения задачи

float eps, x; //точность вычисления

bool bo=true;

for(;;){

//Выбор вида действия

cout<<"\nВид действия:\n1 - вычисления предела произведения\n2 - завершения задачи\nвведите вид действия -> ";

cin>>var;

switch(var){

case 1:

//ввод исходных данных и вывод результата

while(bo){

cout<<"\nВведите X (0<=X<1): ";

cin>>x;

if(x<0||x>=1)cout<<"\nХ должен находиться в указаном диапозоне";

else bo=false;

}

while(!bo){

cout<<"\nВведите точность: ";

cin>>eps;

if(eps>0)bo=true;

else cout<<"\nточность должна быть больше нуля";

}

rez1=predel1(eps,x);

printf("\nДля цикла while результат = %1.8f",rez1);

rez2=predel2(eps,x);

printf("\nДля цикла do..while результат = %1.8f",rez2);

rez3=predel3(eps,x);

printf("\nДля цикла for результат = %1.8f\n",rez3);

break;

case 2: return 0;

}//switch

}//for

}

//вычисление придела произведения циклом while

float predel1(float eps, float x){

float y0=x/2,y1=0.5*(x+y0*y0);

int n=2;

while(fabs(y1-y0)>=eps&&n<SHRT_MAX){

y0=y1;

y1=0.5*(x+y0*y0);

n++;

}//while

if(n<SHRT_MAX) cout<<"\nКоличество слагаемых: "<<n;

else cout<<"\nТочность не достигнута, количество слагаемых: "<<n;

return y1;

}

//вычисление придела произведения циклом do..while

float predel2(float eps, float x){

float y0,y1=x/2;

int n=1;

do{

y0=y1;

y1=0.5*(x+y0*y0);

n++;

}while(fabs(y1-y0)>=eps&&n<SHRT_MAX); //do..while

if(n<SHRT_MAX) cout<<"\nКоличество слагаемых: "<<n;

else cout<<"\nТочность не достигнута, количество слагаемых: "<<n;

return y1;

}

//вычисление придела произведения циклом for

float predel3(float eps, float x){

float y0=x/2,y1=0.5*(x+y0*y0);

int n;

for(n=2;fabs(y1-y0)>=eps&&n<SHRT_MAX;n++){

y0=y1;

y1=0.5*(x+y0*y0);

}//for

if(n<SHRT_MAX) cout<<"\nКоличество слагаемых: "<<n;

else cout<<"\nТочность не достигнута, количество слагаемых: "<<n;

return y1;

}

Примеры.

Соседние файлы в предмете Основы программирования и алгоритмизации