Есть программа, код приложу,нужно ее переделать используя счетчик.Если не сложно...

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

Есть программа, код приложу,нужно ее переделать используя счетчик.Если не сложно прокомментируйте нововведения.
program pr3;
const a = 2.12;
const b = 7.45;
const h = 0.34;
var x, f1, f2, y, s: real;
begin
x := a;
s := 0;
REPEAT
f1:=3*ln(exp(1/5)*ln(sin(x)+sqr(x)));
f2:=((2*x+1)/(x*x*x*x*x));
y := f1 / f2;
s := s + y;
x := x + h;
UNTIL x > b;
Writeln('S=', s:10:5);
end.


Информатика (166 баллов) | 47 просмотров
0

У Вас программа с ошибками: нет завершающей конструкции until для цикла repeat.

0

скопировал плохо(

0

что то я не пойму как его тут применить(

0

да

0

Ой... счетчик - это цикл со счтчиком for...do?

0

xtnxbr - 'nj wbrk cj cxtnxbrjv&

0

но уже поставил нужный вариант,гляньте пожалуйста

Дан 1 ответ
0 голосов
Правильный ответ

Program pr3;

const {убраны лишние описатели - чистая косметика}
  a = 2.12;
  b = 7.45;
  h = 0.34;

var
  x, f1, f2, y, s: real;
  i, n: integer; {описание, необходимое для цикла}

begin
  { x := a; этот оператор не нужен }
  s := 0;
  n := Trunc((b - a) / h)+1; {стандартная формула числа повторений цикла }
  for i := 1 to n do { Заголовок цикла }
  begin   {начало блока для выполнения в цикле }
    x := a + (i - 1) * h;  { перенесено из конца цикла }
    f1 := 3 * ln(exp(1 / 5) * ln(sin(x) + sqr(x)));
    f2 := ((2 * x + 1) / (x * x * x * x * x));
    y := f1 / f2;
    s := s + y;
  end;  {конец блока для выполнения в цикле }
  Writeln('S=', s:10:5);
end.

Тестовое решение:

S=26390.53751






(142k баллов)
0

слово "неявной" тут лишнее, случайно влетело

0

Т.е. при i=1 мы получаем x=a*(1-1)*h=a, при i=2 получим x=a+(2-1)*h=a+h,... И при i=n получаем x=a+(n-1)*h, т.е. b

0

x=a+(i-1)*h позволяет снизить ошибки накопления, потому что значение х каждый раз получается "с нуля".

0

х у нас меняется от a до b с шагом h. Можно было просто написать до входа в цикл х:=a, а в конце тела цикла поставить x:=x+h. Но беда в том, что это дурной тон. Наращивание значения на h в каждом шаге цикла - не лучшее решение, потому что и a, и h могут точно в машине не представляться (например, нельзя представить шаг 1/3 в виде десятичной дроби, поэтому в программе, если написать 1/3+1/3+1/3, то 1 никогда не получится). И на каждом шаге цикла ошибка накапливается.

0

без + 1 в конце

0

ну там правда и сама формула цикла была другая

0

можете пояснить формулу для получения х?Просто все примеры которые я встречал были с формулами х:= a+c (начальное число + шаг)

0

Эта формула в Паскале не сработает, только в Бейсике, да и то не в любом, потому что нельзя в Паскале или Си присвоить целочисленной переменной вещественное значение неявной из-за потери дробной части. А Trunc говорит, что дробную часть надо отбросить.

0

Там изменения в трех строках, обратите внимание, еще два комментария

0

вроде понял,спасибо за объяснение