Уменя есть рабочий код на паскале 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 #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++) { 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 шаге условие должно быть соблюденино в чем ошибка и как ее исправить?

biv12448 biv12448    2   19.09.2019 23:50    1

Ответы
seropyan2006 seropyan2006  08.10.2020 03:20
#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);
}
ПОКАЗАТЬ ОТВЕТЫ
victoria6178 victoria6178  08.10.2020 03:20
Не правильно используешь cout
Уменя есть рабочий код на паскале var a, k, s, b, x1, x2, y1, y2, h: real; n, j: integer; begin a :
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика