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

    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 шаге условие должно быть соблюденино

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

Ответы 6

  • #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++; if (abs(s-k)<0,01) { cout<<"1"; break; } break; } while(n>0); cout<<s;return(0); }
    • Автор:

      charlee
    • 6 лет назад
    • 0
  • выводит 12, это правильно?
    • Автор:

      donovan
    • 6 лет назад
    • 0
  • #include "stdafx.h"#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 %d ", s,n); system("pause"); return(0);}
    • Автор:

      dear
    • 6 лет назад
    • 0
  • 100 Проц правильно
    • Автор:

      richard
    • 6 лет назад
    • 0
  • #include "stdafx.h" - это что за мусор ?
  • #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);}
    answer img
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years