МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Санкт-Петербургский государственный университет аэрокосмического приборостроения»
Кафедра 44
Руководитель
асс Вересов И.В.
Отчет
по лабораторной работе №4
по дисциплине ПРОГРАММИРОВАНИЕ
на тему: «Управляющие структуры “Циклы”»
П_АСП 44.4242.12
Работу выполнил
студент гр. В1441К Пономарев Алексей Валерьевич
СПб
2013 г.
Управляющая структура “Развилка”
Цель лабораторной работы: изучение концепций и освоение технологии структурного программирования, приобретение навыков структурного программирования на языке C/С++ циклических вычислений.
Задание на программирование: используя технологию структурного программирования, разработать программу решения двух индивидуальных задач, содержащую 3 вида циклических управляющих структур: Цикл - Пока (с предусловием), Цикл - До (с постусловием), Цикл - Для (с параметром). Реализовать интерфейс, обеспечивающий заданное расположение и назначение окон на экране при выполнении программы в соответствии с индивидуальным заданием
|
|
Текст программы
#include<iostream.h>;
#include<math.h>;
#include<conio.h>;
#include<stdlib.h>
#include<limits.h>
float recur1(int m, float y0, float y1);
float recur2(int m, float y0, float y1);
float recur3(int m, float y0, float y1);
float summ1(float eps);
float summ2(float eps);
float summ3(float eps);
void okno(int x1, int y1, int x2, int y2, int colfona, int colbukv);
void main()
{int var, m;
float rez1, rez2, rez3, eps, y0, y1, re1, re2, re3;
textbackground(BLACK);
textcolor(15);
clrscr();
for(;;)
{okno(43,5,78,10,1,15);
//vvod ish dannih
cprintf("\n vid deistviya:\n\r");
cprintf(" 1 - vichislenie po recurrentnoi formule\n\r");
cprintf(" 2 - nahojdenie summi ryada\n\r");
cprintf(" 3 - exit\n\r");
cprintf(" vvedite nomer deistviya ->");
cin >> var;
if (var!=1)
if(var!=2)
if(var!=3){
okno(43, 15, 78, 20, 6, 15);
cprintf (" nepravilnii cod deistviya ");}
switch(var)
{case 1: okno(5, 5, 40, 10, 2, 15);
//vvod ish dannih dlya 1
cprintf(" vvedite m ->");
cin >> m;
if (m >= 2){
okno(5, 5, 40, 10, 2, 15);
cprintf(" vvedite y0, y1 ->");
cin >> y0 >> y1;
re1 = recur1(m, y0, y1);
re2 = recur2(m, y0, y1);
re3 = recur3(m, y0, y1);
okno(5,15,40,20,4,15);
//vivod rez
cprintf(" dlya WHILE rezultat =%4.2f\n\r",re1);
cprintf(" dlya DO..WHILE rezultat =%4.2f\n\r",re2);
cprintf(" dlya FOR rezultat =%4.2f\n\r",re3);
}
else {
okno(43, 15, 78, 20, 6, 15);
cprintf ("!m<2 ");}
break;
case 2: okno(5, 5, 37, 10, 2, 15);
//vvod ish dannih dlya 2
cprintf(" vvedite tochnost vichesleniya\n\r");
cin >> eps;
rez1 = summ1(eps);
rez2 = summ2(eps);
rez3 = summ3(eps);
okno(5, 15, 40, 20, 4, 15);
//vivod rezultata
cprintf(" dlya WHILE rezultat =%f\n\r",rez1);
cprintf(" dlya DO..WHILE rezultat =%f\n\r",rez2);
cprintf(" dlya FOR rezultat =%f\n\r",rez3);
break;
case 3: abort();
//default: abort();
}//switch
}//for
}
//vivod okna na ekran
void okno(int x1, int y1, int x2, int y2, int colfona, int colbukv)
{window(x1, y1, x2, y2);
textbackground(colfona);
textcolor(colbukv);
clrscr();
}
//vicheslenie recurrentnogo virajeniya ciklom while
float recur1(int m, float y0, float y1)
{int i = 2;
float y;
while(i <= m)
{y = (y1 + y1 + y0)/3;
|
|
y0 = y1;
y1 = y;
i++;
}
return(y);
}
//vicheslenie recurrentnogo virajeniya ciklom do..while
float recur2(int m, float y0, float y1)
{int i = 2;
float y;
do
{y = (y1 + y1 + y0)/3;
y0 = y1;
y1 = y;
i++;
}
while(i <= m);
return(y);
}
//vicheslenie recurrentnogo virajeniya ciklom for
float recur3(int m, float y0, float y1)
{int i;
float y;
for(i = 2; i <= m; i++)
{y = (y1 + y1 + y0)/3;
y0 = y1;
y1 = y;
}
return(y);
}
//vicheslenie summi ryada ciklom while
float summ1(float eps)
{float rd=0, summa=0;
int n = 1;
while(fabs(rd) > eps)
{rd = 1/(n * n * (sin(n) + 1.1));
summa += rd;
n++;
}
return(summa);
}
//vicheslenie summi ryada ciklom do..while
float summ2(float eps)
{float rd=0, summa=0;
int n = 1;
do
{rd = 1/(n * n * (sin(n) + 1.1));
summa += rd;
n++;
}
while (fabs(rd) > eps);
return(summa);
}
//vicheslenie summi ryada ciklom for
float summ3(float eps)
{float rd=0, summa=0;
int n;
for(n = 1; n < INT_MAX; n++)
{rd = 1/(n * n * (sin(n) + 1.1));
if(fabs(rd) > eps) summa += rd;
else break;
}
return(summa);
}