#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <iomanip>
using namespace std;
#define PI 3.14159
unsigned long fact(unsigned long);
using namespace std;
int main()
{
double x,e,s1,s2;
int l,i,k, number;
e = 0.0001;
l=1;
while(l!=0)
{
cout<<"Vichislenie s predusloviem - 1"<<endl;
cout<<"Vichislenie s postusloviem - 2"<<endl;
cout<<"Vichislenie s opredelennim kolichestvom shagov - 3"<<endl;
cout<<"Vihod - 0"<<endl;
cout<<"Vibirete sposob rasscheta:";
cin>>l; if (l==0) break;
cout<<"Vvedite znachenie x: ";cin>>x;
switch(l)
{
case 1:
{ s1=x;
s2=s1-((pow(PI/3, 3))/(fact(3)));
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
break;
}
case 2:
{ s2=x;
do
{
i=3;
k=1;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}while( fabs(s2-s1) > e );
break;
}
case 3:
{ s2=x;
for(int i=3,k=1;i<5; i++,k++)
{
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
}
break;
}
}
}
cout<<"Summa = "<<s2<<endl;
return 0;
}
unsigned long fact(unsigned long number)
{
if(number <= 1)
return 1;
else
return number * fact(number - 1);
}
Функции, Операторы цыкла
Задача: Вычислить значение суммы ряда, используя операторы цикла с предусловием, постусловием и параметром (по выбору пользователя). Выбор пользователя анализировать с помощью оператора switch. Для циклов с предусловием и постусловием принять точность e = 0.0001, для цикла с параметром подобрать количество итераций опытным путем. Выполнить проверку.
Заданный ряд:
Проверка:
Код:
Код:
l=1;
while(l!=0)
{
cout<<"Vichislenie s predusloviem - 1"<<endl;
cout<<"Vichislenie s postusloviem - 2"<<endl;
cout<<"Vichislenie s opredelennim kolichestvom shagov - 3"<<endl;
cout<<"Vihod - 0"<<endl;
cout<<"Vibirete sposob rasscheta:";
cin>>l;
switch(l)
{
case 1:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s1=x;
s2=s1-((pow(PI/3, 3))/(fact(3)));
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
l=0;
break;
}
case 2:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
do
{
i=3;
k=1;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}while( fabs(s2-s1) > e );
l=0;
break;
}
case 3:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
for(int i=3,k=1;i<5; i++,k++)
{
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
}
l=0;
break;
}
case 0:
{
l=0;
break;
}
default:
{
cout <<"Vveden neverniy punkt menu!";
//здесь лучше очистить экран system("sld"); подключить только нужно вроде #include <windows.h>
break;
}
}
}
cout<<"Summa = "<<s2<<endl;
while(l!=0)
{
cout<<"Vichislenie s predusloviem - 1"<<endl;
cout<<"Vichislenie s postusloviem - 2"<<endl;
cout<<"Vichislenie s opredelennim kolichestvom shagov - 3"<<endl;
cout<<"Vihod - 0"<<endl;
cout<<"Vibirete sposob rasscheta:";
cin>>l;
switch(l)
{
case 1:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s1=x;
s2=s1-((pow(PI/3, 3))/(fact(3)));
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
l=0;
break;
}
case 2:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
do
{
i=3;
k=1;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}while( fabs(s2-s1) > e );
l=0;
break;
}
case 3:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
for(int i=3,k=1;i<5; i++,k++)
{
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
}
l=0;
break;
}
case 0:
{
l=0;
break;
}
default:
{
cout <<"Vveden neverniy punkt menu!";
//здесь лучше очистить экран system("sld"); подключить только нужно вроде #include <windows.h>
break;
}
}
}
cout<<"Summa = "<<s2<<endl;
у тебя цикл зацикливался потому что l всегда равен 0 кроме как если нажать выход.
Код:
case 1:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s1=x;
s2=s1-((pow(PI/3, 3))/(fact(3)));
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
l=0;
break;
}
case 2:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
do
{
i=3;
k=1;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}while( fabs(s2-s1) > e );
l=0;
break;
}
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s1=x;
s2=s1-((pow(PI/3, 3))/(fact(3)));
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
l=0;
break;
}
case 2:
{
cout<<"Vvedite znachenie x: ";
cin>>x;
s2=x;
do
{
i=3;
k=1;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}while( fabs(s2-s1) > e );
l=0;
break;
}
опиши что именно не работает или напиши на что ругается и как
Цитата: Antosh
опиши что именно не работает или напиши на что ругается и как
При выборе case1 или выборе case2. Программа зависает :(
Код:
while( fabs(fabs(s2)-fabs(s1)) > e )
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
{
i=5;
k=3;
s1=s2;
s2+=((pow(PI/3, i))/(fact(k)));
i++;
k++;
}
каждый раз, при выполнении цикла, переменной i присваивается значение 5, потом ты вычисляешь s1 s2, и выполняешь операцию инкремента для переменной i, новое значение i=6, но при следующей итерации цикла, переменной i вновь присваивается значение 5, в результате s2 не изменяется, так как i все время равно 5. Соответственно тоже самое и с переменной к. Вынеси i=5 и к=3 перед циклом.
P.S. С циклом do while тоже самое