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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2010, 21:03   #1
serj-07
Пользователь
 
Аватар для serj-07
 
Регистрация: 07.03.2009
Сообщений: 68
По умолчанию циклы?

помогите разобраться, а то сам запутался.
Есть значение например Х= 0.999542.
задаем значение n=5
в процедуре идет расчет площади S
потом находим погрешность X-S=G
если G>0.0001 то n умножаем на 2 до тех пор пока G<= 0.0001
Всем спасибо!!!
Мы все учились понемногу
Чему-нибудь и как-нибудь!!!
serj-07 вне форума Ответить с цитированием
Старый 27.01.2010, 21:14   #2
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

вычисляешь площадь
цикл с условием до тех пор пока х-s<=G
умножаешь n
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 27.01.2010, 22:17   #3
serj-07
Пользователь
 
Аватар для serj-07
 
Регистрация: 07.03.2009
Сообщений: 68
По умолчанию

задание:

Составить программу для вычисления интеграла - I
с заданной точностью а по формуле трапеций - S1
где h=1/n. Для достижения необходимой точности число n следует удваивать, пока не будет достигнуто такое n, для которого
Начальное число узлов n = 5. Требуемая точность q = 0,0001.
Вывести значения n, Ỉn и погрешности q .



интеграл I = 0.9547

Это расчет Трапеции S1


Код:
begin
    n:= 5;
    h:=0;
    s1:=0;
    step:=1/n;
      begin
         while h<1 do
            begin
              h:=h+step;
              f1:=sin(h)/h;
              f2:=sin(h+step)/(h+step);
              s1:=s1+(((f1+f2)/2)*step);

            end;

      end;
    end;
надо вычислить погрешность q<=0.0001

умножая n на 2 в преведущем коде.

этот код вставляю не получается.

куда мне его поставить?

Код:

   begin
        while q<=0.0001 do
          begin
            q:= I-S1;
            n:=n*2
Мы все учились понемногу
Чему-нибудь и как-нибудь!!!

Последний раз редактировалось Stilet; 29.01.2010 в 10:14.
serj-07 вне форума Ответить с цитированием
Старый 27.01.2010, 22:34   #4
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

подправь тэги, а то тут пластыри уже летают))
у тебя условие в цикле неверное по-моему.
и зачем ты находишь сумму?

Код:
begin
n:= 5;
h:=0;
s1:=0;
step:=1/n;
begin
while q>=0.0001 do
begin
h:=h+step;
f1:=sin(h)/h;
f2:=sin(h+step)/(h+step);

s1:=((f1+f2)/2)*step;
q:=abs(I-s1);
I:=s1;

n:=n*2;
end;

end;
end;
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 27.01.2010, 23:49   #5
serj-07
Пользователь
 
Аватар для serj-07
 
Регистрация: 07.03.2009
Сообщений: 68
По умолчанию

погрешность счетает один раз, n не перемножает до указоной погрешности

Код:

procedure TForm1.Button1Click(Sender: TObject);
 var
   q,I, h,f1,f2,s1,step: real;
    n, cnt: word;


begin

    I:= 0.945967;
                       try
    n:=5;
                       EXCEPT
                         MessageDlg('Íåâåðíûå äàííûå', mtError, [mbOK],0);
                             Exit
                             END;

    q:=0;
    h:=0;
    s1:=0;
    cnt:=0;
    step:=1/n;
    chart1.Series[0].Clear;

   begin
        while q<=0.0001 do

       begin

            n:=n*2;

          begin
              while h<1 do

           begin
              h:=h+step;
              f1:=sin(h)/h;
              f2:=sin(h+step)/(h+step);
              Chart1.Series[0].AddXY(h,f1);
              s1:=s1+(((f1+f2)/2)*step);
              inc(cnt)
           end;
         end;
       

 q:= I-s1;
     

  end;
   end;
     begin
        caption:=IntToStr(cnt);
        Label1.Caption:= FloatToStr(s1);
        Label5.Caption:= FloatToStr(n);
        Label4.Caption:= FloatToStr(q);
      end;
 end;
end.
Мы все учились понемногу
Чему-нибудь и как-нибудь!!!

Последний раз редактировалось serj-07; 27.01.2010 в 23:54.
serj-07 вне форума Ответить с цитированием
Старый 28.01.2010, 00:36   #6
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Цитата:
Код:
    try
    n:=5;
    EXCEPT
    MessageDlg('Íåâåðíûå äàííûå', mtError, [mbOK],0);
    Exit
    END;
Оо
это вообще что?
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 29.01.2010, 00:00   #7
serj-07
Пользователь
 
Аватар для serj-07
 
Регистрация: 07.03.2009
Сообщений: 68
По умолчанию

неполучается, пруга виснит подскажите где ошибка

Код:
procedure TForm1.Button1Click(Sender: TObject);
 var

   q:currency;
   I, h,f1,f2,s1,step: real;
    n, cnt: word;

begin

    I:= 0.004267;  //  это значение интеграла


                     try
    n:= StrToInt(Edit1.Text); // это  количество узлов


                     EXCEPT
                         MessageDlg('Неверные данные', mtError, [mbOK],0);
                        Exit
                      END;

    q:=0;
    h:=0;
    s1:=0;
    cnt:=0;
    step:=1/n;
    chart1.Series[0].Clear;

       begin
              while h<1 do   // здесь ищем второе значение для сравнения

           begin
              h:=h+step;
              f1:=sin(h)/h;
              f2:=sin(h+step)/(h+step);
              Chart1.Series[0].AddXY(h,f1);
              s1:=((f1+f2)/2)*step;
              inc(cnt);
           end;
        end;

        begin

            q:= s1-I;  // находим погрешность

            repeat   // умножаем n на 2 пока недобьемся погрешности 0,001
             n:=n*2;
            until q<=0.001 ;
         end;

      begin
        caption:=IntToStr(cnt);
        Label1.Caption:= FloatToStr(s1);
        Label5.Caption:= FloatToStr(n);
        Label4.Caption:= FloatToStr(q);
      end;
end;
end.
Мы все учились понемногу
Чему-нибудь и как-нибудь!!!
serj-07 вне форума Ответить с цитированием
Старый 29.01.2010, 00:25   #8
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
 var

   q:currency;
   I, h,f1,f2,s1,step: real;
    n, cnt: word;

begin
    I:= 0.004267;  //  это значение интеграла
    try
         n:= StrToInt(Edit1.Text); // это  количество узлов
    EXCEPT
         MessageDlg('Неверные данные', mtError, [mbOK],0);
         Exit
    END;

    repeat
      q:=0;
      h:=0;
      s1:=0;
      cnt:=0;
      step:=1/n;
      chart1.Series[0].Clear;
      while h<1 do   // здесь ищем второе значение для сравнения
           begin
              h:=h+step;
              f1:=sin(h)/h;
              f2:=sin(h+step)/(h+step);
              Chart1.Series[0].AddXY(h,f1);
              s1:=((f1+f2)/2)*step;
              inc(cnt);
           end;

      q:= s1-I;  // находим погрешность
      n:=n*2; // умножаем n на 2 пока недобьемся погрешности 0,001
    until q<=0.001 ;

    caption:=IntToStr(cnt);
    Label1.Caption:= FloatToStr(s1);
    Label5.Caption:= FloatToStr(n);
    Label4.Caption:= FloatToStr(q);
end;
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклы на Си Darh Помощь студентам 16 08.12.2009 21:54
Циклы lara7727 Microsoft Office Excel 2 02.10.2009 10:31
Циклы Doublefaced Помощь студентам 2 01.07.2009 20:29
C++ циклы KOLYTFR Помощь студентам 5 26.04.2009 23:38
Циклы }{oт@бь)ч Общие вопросы Delphi 4 05.02.2009 16:41