Предмет: Информатика,
автор: den4iktv
У меня есть рабочий код на паскале
var
a, k, s, b, x1, x2, y1, y2, h: real;
n, j: integer;
begin
a := -1;
b := 1;
n := 2;
repeat
k := s;
s := 0;
for j := 1 to n do
begin
h := (b - a) / n;
x1 := a + h * (j - 1);
x2 := x1 + h;
y1 := sqr(x1);
y2 := sqr(x2);
s := s + (y1*h + y2*h) / 2;
end;
n := n + 1;
if abs(s-k) < 0.01 then begin writeln(1); break; end;
until n<0;
writeln(s);
writeln(n);
end.
Нужно перевести его в с++, вот что у меня получилось
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a,b,h,x1,x2,y1,y2,k,s;
int j,n;
a=-1;
b=1;
n=1;
s=0;
do{
k=s;
s=0;
for(j=1;j<=n;j++)
{
h=(b-a)/n;
x1=a+h*(j-1);
x2=x1+h;
y1=x1*x1;
y2=x2*x2;
s=s+(y1*h+y2*h)/2;
}
n++;
cout<
if (abs(s-k)<0,01)
break;
}
while(n>0);
cout<
return(0);
}
Проблема в том, что break срабатывает сразу же, проходя цикл do один раз, а затем выходит, хотя условие не соблюденино
Если 0.01 и abs использовать в отдельных переменных, а затем сравнить их, то цикл становится бесконечным, хотя на 8 шаге условие должно быть соблюденино
В чем ошибка и как ее исправить?
Ответы
Автор ответа:
0
Не правильно используешь cout
dar290199:
Ща исправлю
#include <cmath>
using namespace std;
int main()
{
float a,b,h,x1,x2,y1,y2,k,s;
int j,n;
a=-1;
b=1;
n=1;
s=0;
do{
k=s;
s=0;
for(j=1;j<=n;j++)
{
h=(b-a)/n;
x1=a+h*(j-1);
x2=x1+h;
y1=x1*x1;
y2=x2*x2;
s=s+(y1*h+y2*h)/2;
}
n++;
if (abs(s-k)<0,01)
{
cout<<"1";
break;
}
break;
}
while(n>0);
cout<<s;
return(0);
}
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main()
{
float a, b, h, x1, x2, y1, y2, k, s;
int j, n;
a = -1;
b = 1;
n = 2;
s = 0;
do{
k = s;
s = 0;
for (j = 1; j <= n; j++)
{
h = (b - a) / n;
x1 = a + h*(j - 1);
x2 = x1 + h;
y1 = x1*x1;
y2 = x2*x2;
s = s + (y1*h + y2*h) / 2;
}
n++;
if (abs(s - k) < 0.01)
{
cout << "1"<<endl;
break;
}
} while (n>0);
printf("%f \n %d \n", s,n);
system("pause");
return(0);
}
Автор ответа:
1
#include <iostream>
#include <cmath>
using namespace std;
int main() {
float a(-1),b(1),h,x1,x2,y1,y2,k,s(0);
int n(2);
do {
k=s; s=0;
for (int j=1; j<=n; j++) {
h=(b-a)/n;
x1=a+h*(j-1); x2=x1+h;
y1=x1*x1; y2=x2*x2;
s=s+(y1*h+y2*h)/2;
}
n++;
if (abs(s-k)<0.01) {
cout << "1" << endl;
break;
}
}
while(n>=0);
cout << s <<endl << n << endl;
return(0);
}
#include <cmath>
using namespace std;
int main() {
float a(-1),b(1),h,x1,x2,y1,y2,k,s(0);
int n(2);
do {
k=s; s=0;
for (int j=1; j<=n; j++) {
h=(b-a)/n;
x1=a+h*(j-1); x2=x1+h;
y1=x1*x1; y2=x2*x2;
s=s+(y1*h+y2*h)/2;
}
n++;
if (abs(s-k)<0.01) {
cout << "1" << endl;
break;
}
}
while(n>=0);
cout << s <<endl << n << endl;
return(0);
}
Приложения:
Похожие вопросы
Предмет: Алгебра,
автор: pirquliyevasabina
Предмет: Английский язык,
автор: plom45
Предмет: Математика,
автор: vip1983gu8wpvl
Предмет: География,
автор: Аноним
Предмет: Математика,
автор: alenockayarmak