Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 18:36   #1
pilot76
Пользователь
 
Регистрация: 13.08.2009
Сообщений: 13
Печаль операторы цикла

Доброго времени суток.
решая контрольную возникли вопросы.
"Вычислить сумму s значений функции f в точках xi, которые берутся с заданного интервала [a;b] через равные отрезки длинной h. Длинна отрезка рассчитывается по формуле . Здесь i = 1,2,3….n – номер точки; n – задаваемое кол-во точек; a – начало и b – конец интервала измерения x.
Вывести на экран результаты вычислений, полученные при помощи следующих циклов:
While логическое выражение Do тело цикла;
Repeat тело цикла Until логическое выражение;
For параметр :=мин. Значение To макс. Do тело цикла;
For параметр :=макс. Значение DownTo мин. Do тело цикла.

Интервал x [1;5] кол-во точек n=25."

вот что я сделал.

"
Код:
program zadanie_2;
 Const a=1; b=5; n=25;
 var x,y,s,h:real;
         i:integer;
 begin
   x:=a;
   s:=0;
 begin
  Repeat
  h:=(b-a)/(n-1);
  x:=x+h;
  y:=ln(cos((6*x-x*x)/8))/(sin((6*x-x*x)/8));
  s:=s+y;
  until
  x>=b;
  Writeln('Summa_1 ', s: 0: 3);
  Readln
  end;
 begin
  While x<=b do begin
  end;
  Writeln('Summa_2 ', s: 0: 3);
  Readln
  end;
 begin
  if x=b then
  end;
  Writeln('Summa_3 ', s: 0: 3);
  Readln;
 begin
  if x<=b then
  end;
   Writeln('Summa_4 ', s: 0: 3);
  Readln
  end."
вот рецензия преподавателя

"В программе много ошибок и работать она будет неправильно. Не все в порядке с аргументом функции х. Слишком много составных операторов. Следует убрать лишнее.
Неужели величина шага зависит от аргумента функции х или типа цикла? Почему значение переменной h рассчитывается в каждом цикле?"

помогите.

Последний раз редактировалось Stilet; 10.09.2009 в 10:14.
pilot76 вне форума Ответить с цитированием
Старый 09.09.2009, 18:55   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Неужели величина шага зависит от аргумента функции х или типа цикла?
В условии ничего про это не сказано, наоборот, изходя из условия длина шага зависит лишь от количества точек и отрезка, на котором рассматривается функция.

Цитата:
Почему значение переменной h рассчитывается в каждом цикле?
У вас рассчитывается. По-моему, это нецелесообразно.

Код:
h:=(b-a)/(n-1);
Вполне себе это можно вынести за цикл.

Из того, что бросилось в глаза:
Код:
x:=x+h;
Внутри цикла при первом же шаге такое присваивание перед пересчетом значения функции делать нельзя, поскольку значение функции в точке x=a вы не узнаёте. В таком случае отдельно еще посчитайте перед циклом значение в этой точке.

Ах да, и еще. Научитесь пользоваться табом и поубирайте все эти ненужные конструкции begin ... end. Глаз режет, код читать неприятно. Хотите выделить отдельные куски программы оставьте просто пустую строку.

Последний раз редактировалось mMAg; 09.09.2009 в 19:05.
mMAg вне форума Ответить с цитированием
Старый 10.09.2009, 14:33   #3
GenniY
Форумчанин
 
Регистрация: 09.09.2009
Сообщений: 181
Счастье

Код таков. {не проверял}

Код:

Const a=1; b=5; n=25;
var x,y,s,h:real;
         i,j:integer;
 begin
   x:=a;
   s:=0;
   h:=(b-a)/(n-1);
   i:=0;

 Repeat
      y:=ln(cos((6*x-x*x)/8))/(sin((6*x-x*x)/8));
      s:=s+y;
      x:=x+h;
      Inc(i);
 until x>b;
 Writeln('Summa_1 ', s: 0: 3);
 Readln;

 s:=0; x:=a;
 While x<=b do
  begin
     y:=ln(cos((6*x-x*x)/8))/(sin((6*x-x*x)/8));
     s:=s+y;
     x:=x+h;
     Inc(i);
  end;//while
 Writeln('Summa_2 ', s: 0: 3);
 Readln;

 s:=0; x:=a;
 for j:=a to 25 do
 begin
    y:=ln(cos((6*x-x*x)/8))/(sin((6*x-x*x)/8));
    s:=s+y;
    x:=x+h;
 end; // for
  Writeln('Summa_3 ', s: 0: 3);
  Readln;

s:=0; x:=a;
 for j:=25 downto 1 do
 begin
   y:=ln(cos((6*x-x*x)/8))/(sin((6*x-x*x)/8));
   s:=s+y;
   x:=x+h;
 end; // for
 Writeln('Summa_4 ', s: 0: 3);
 Readln;

end.
Получил помощь — отблагодарил.

Последний раз редактировалось Stilet; 10.09.2009 в 14:50.
GenniY вне форума Ответить с цитированием
Старый 10.09.2009, 15:43   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
оставьте просто пустую строку.
и все последующие / вложенные begin ... end; сдвигайте на два (три) пробела вправо.
Это называется хороший стиль программирования.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 10.09.2009, 19:08   #5
pilot76
Пользователь
 
Регистрация: 13.08.2009
Сообщений: 13
По умолчанию

Спасибо все работает, в понедельник попробую сдать. что скажет отпишусь.
pilot76 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
операторы цикла semennn Помощь студентам 5 19.05.2009 17:44
Операторы цикла. Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 4 14.04.2009 20:07
Операторы цикла Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 4 14.04.2009 19:28
Операторы цикла Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 1 08.04.2009 16:02
Операторы цикла Paul Oakenfold Помощь студентам 10 23.03.2009 16:08