У меня есть рабочий код ** паскале var a, k, s, b, x1, x2, y1, y2, h: real; n, j:...

0 голосов
99 просмотров

У меня есть рабочий код на паскале

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; <br> writeln(s);
writeln(n);

end.

Нужно перевести его в с++, вот что у меня получилось

#include
#include

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++) <br> {
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) <br> break;
}
while(n>0);
cout< return(0);
}

Проблема в том, что break срабатывает сразу же, проходя цикл do один раз, а затем выходит, хотя условие не соблюденино

Если 0.01 и abs использовать в отдельных переменных, а затем сравнить их, то цикл становится бесконечным, хотя на 8 шаге условие должно быть соблюденино

В чем ошибка и как ее исправить?


Информатика (28 баллов) | 99 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

#include
#include

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++) {<br>         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) {<br>         cout << "1" << endl;<br>         break;
      }
   }
   while(n>=0);
   cout << s <<endl << n << endl;<br>   return(0);
}

(150k баллов)
0 голосов

Не правильно используешь cout

(440 баллов)
0

Ща исправлю

0

#include
#include
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++) <br>{
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) <br> {
cout<<"1";<br> break;
}
break;
}
while(n>0);
cout<<s;<br>return(0);
}

0

выводит 12, это правильно?

0

#include "stdafx.h"
#include
#include
#include
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++)<br> {
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;<br> break;
}
} while (n>0);
printf("%f \n %d \n", s,n);
system("pause");
return(0);

}

0

100 Проц правильно