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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2009, 00:00   #1
bagfinder
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 38
По умолчанию Турбо Паскаль. Циклы.

Здравствуйте. Написал программу для вычисления предела.


Код:
        writeln('Введите Y0, Y1 и точность eps: ');
        readln(Y0,Y1,eps);
          if (eps>0.1) or (eps<0) then
            begin
            writeln('Ошибка! Некорректная точность eps!');
            Halt
            end;
        yn:=0.352*y1+cos(pi2+y0);
        while abs(yn-y1)>eps do
            begin
            y0:=y1;
            y1:=yn;
            yn:=0.352*y1+cos(pi2+y0);
            end;
        writeln('yn);
Написал с использованием Цикла While.
Как будут выглядеть те же расчеты, но с использованием Цикла До (С постусловием, как я понимаю). ?
Буду премного благодарен.

Формулы, если они нужны, в аттаче
Изображения
Тип файла: png form1.png (3.9 Кб, 146 просмотров)
bagfinder вне форума Ответить с цитированием
Старый 20.03.2009, 00:08   #2
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию RE:

Наколько я понял, в строчке
Код:
yn:=0.352*y1+cos(pi2+y0);
должны быть одинаковые аргументы в правой части (оба y1, как я понял, y1 — аналог y_{n-1} в прикрепленной формуле).
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 20.03.2009, 00:25   #3
Феска
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 20
По умолчанию

Код:
writeln('Введите Y0, Y1 и точность eps: ');
        readln(Y0,Y1,eps);
          if (eps>0.1) or (eps<0) then
            begin
            writeln('Ошибка! Некорректная точность eps!');
            Halt
            end;
        yn:=0;
        repeate 
            begin
            y0:=y1;
            y1:=yn;
            yn:=0.352*y1+cos(pi2+y0);
            end;
        until abs(yn-y1)<eps;
        writeln('yn);
или чего то я не так понял??

Последний раз редактировалось Феска; 20.03.2009 в 00:28.
Феска вне форума Ответить с цитированием
Старый 20.03.2009, 00:48   #4
bagfinder
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 38
По умолчанию

From Stilet: Я попрошу не делать твои посты разными постами сообщения если они стоят рядом.
Jean-Esther, да, это ошибка). аргументы одинаковы.
А не могли бы вы сказать, соответствуют ли расчеты данной формуле?

Феска да, вроде бы так, спасибо большое

Код:
        writeln('-----------');
        writeln('Задача 2 - Нахождение лимита');
        writeln('Введите Y0, Y1 и точность eps: ');
        readln(Y0,Y1,eps);
          if (eps>0.1) or (eps<0) then
            begin
            writeln('Ошибка! Некорректная точность eps!');
            Halt
            end;
        yn:=0.352*y1+cos(pi2+y1);
        while abs(yn-y1)>eps do
            begin
            y0:=y1;
            y1:=yn;
            yn:=0.352*y1+cos(pi2+y1);
            end;
        writeln('Циклом Пока: ',yn);
        writeln('-----------');
        
        yn:=0;
        repeat
            begin
            y0:=y1;
            y1:=yn;
            yn:=0.352*y1+cos(pi2+y1);
            end;
        until abs(yn-y1)<eps;
        writeln('Циклом До: ',yn);
как так?
При одинаковых вводных данных получаются разные ответы...

===

Нашел ошибку в условии в формуле. Там Пи/2 складываем с Y(y-2)
т.е Y 0 Это и есть Y (y-2)

===

Я полностью переписал код. Проверьте, пожалуйста, на наличие косяков. На первый взгляд, все считается нормально:

Код:
const pi2 = 1.5707;

var a, b, x, s, y0, y1, yn, eps, yy0, yy1 : real;
    i, n, m : integer;
    flag : boolean; {если флаг тру, 
    то мы делим на 0, а этого нельзя. Исключительная}


begin
     writeln('Введите a, b, x...');
     readln(a, b, x);
     writeln('Введите n, m...');

     readln(n, m);
     s := 0;

     flag := false;
     for i := m to n do begin

         if b + x * i = 0 then begin
             flag := true;
             break;
         end;

         if i mod 2 = 0 then
            s := s + (a + x*i) / (b + x*i)
         else
            s := s - (a + x*i) / (b + x*i);

     end;
     s := a + b * s;

     if flag = true then
         writeln('It is impossible to count such sum')
     else
         writeln('Сумма= ', s:0:5);

     {//////////////////////}

     writeln('Введите Y0, Y1 и точность eps: ');
     readln(yy0, yy1, eps);
     if (eps > 0.1) or ( eps <= 0) then begin
          writeln('Ошибка! Некорректная точность eps!');
          halt(0);
     end;

     yn := 0.352 * yy1 + cos(pi2 + yy0);
     y0 := yy0;
     y1 := yy1;
     while abs(yn - y1) > eps do begin
         y0 := y1;
         y1 := yn;
         yn := 0.352*y1 + cos(pi2 + y0);
     end;

     writeln('While: Предел последовательности равен: ',yn:0:5);

     yn := 0.352 * yy1 + cos(pi2 + yy0);

     y0 := yy0;
     y1 := yy1;
     repeat
         y0 := y1;
         y1 := yn;
         yn := 0.352*y1 + cos(pi2 + y0);
     until (abs(yn - y1) < eps);

     writeln('Repaet: Предел последовательности равен: ', yn:0:5);
     readln;

end.

Последний раз редактировалось bagfinder; 20.03.2009 в 14:01.
bagfinder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо паскаль Gabi Помощь студентам 2 24.12.2008 22:18
Русификитор на турбо Паскаль Дед Ю Помощь студентам 3 15.12.2008 13:10
Турбо Паскаль Jondeer Помощь студентам 3 28.10.2007 12:42
Турбо Паскаль Jondeer Помощь студентам 5 27.10.2007 17:19