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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2013, 02:18   #1
Punk_Killer
 
Регистрация: 25.03.2013
Сообщений: 3
По умолчанию Дано: q =3; dq=-0.2. F вычислять по формуле: f:=√1+0.5*q -1/q+1; Считать до тех пор, пока подкоренное выражение больше



Код:
var q,dq,f,r,t: double;
k:real;
begin
 q:=3;
 dq:=-0.2;
 k:=0;
 t:=(1+0.5*q);
 while t>0 do
 begin
    q:=dq+q;
    f:=(sqrt(1+0.5*dq)-(1/(dq+1)));
    writeln('',f:0:6);
    writeln(f:0:0);
    if f>0 then  k:=k+1;
    t:=(1+0.5*q);
end;
readln;
writeln('Quantity of numbers ',k:0:6);
end.
Нашёл похожую задачу на форуме, но она не работает и условие чуть другое. Надеюсь на вас

Последний раз редактировалось Punk_Killer; 25.03.2013 в 02:22.
Punk_Killer вне форума Ответить с цитированием
Старый 25.03.2013, 08:51   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

условие задачи кривенькое.. ибо, ещё до того, как подкоренное выражение станет равным нулю, раньше q станет равна -1 и, соответственно, знаменатель дроби станет равным нулю. (попробуйте на калькуляторе подсчитать значение F для q = -1).

а у Вас в коде много недостатков. Например, почему Вы в вычислении выражения используете dq ? Ведь у Вас для этого предназначена переменная q (посмотрите на формулу внимательно)...

Исключительно потому, что Вы пытались написать решение данной задачи,
вот готовый код, разбирайте мой вариант решения:
Код:
var q, dq, f, t: double;
  k: integer;
begin
  q := 3;
  dq := -0.2;
  k := 0;
  t := (1 + 0.5 * q);
  while t > 0 do
  begin
    inc(k);
    if abs(q + 1)>0.000000001 {это сравнение знаменателя дроби с нулём} 
    then begin
      f := (sqrt(t) - (1 / (q + 1)));
      writeln(k:2,') q=', q:0:1,'  f=', f:0:6);
    end
    else
      WriteLn(k:2,') при q=', q:0:1, ' функция неопределена (деление на ноль)');
    q := dq + q;
    t := (1 + 0.5 * q);
  end;
  writeln('Quantity of numbers ', k);
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2013, 01:20   #3
Punk_Killer
 
Регистрация: 25.03.2013
Сообщений: 3
По умолчанию

Ваша программа почему-то не работает.

Мне ещё написали вот так вот, и она работает. Она правильная?
Код:
program zzz;
var
        i,k:integer;
        f,q:real;
begin
        q:=3.2;
        k:=0;
        while 1+0.5*q>0 do
        begin
                q:=q-0.2;
                k:=k+1;
                f:=sqrt(1+0.5*q)-1/(q+1);
        end;
        writeln('f: ',f:0:2);
        writeln('q: ',q:0:2);
        writeln('k: ',k-1);
end.
а ещё можете подсказать, как составить алгоритм программы из блок схем?
Punk_Killer вне форума Ответить с цитированием
Старый 01.04.2013, 04:51   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
и она работает
странно
Код:
while 1+0.5*q>0 do
        begin
                q:=q-0.2;
                k:=k+1;
                f:=sqrt(1+0.5*q)-1/(q+1);
        end;
при q=-1 получаем division by zero ==> вылет
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считать до тех пор, пока подкоренное выражение больше 0. Определить k - количество вычисленных F. Циклы. KatruKot Паскаль, Turbo Pascal, PascalABC.NET 2 14.06.2011 13:17
Элементы заданной матрицы A(N, N) переписывайте построчно в одномерный массив до тех пор, пока не встрети Bleize Помощь студентам 3 27.12.2010 23:13
Ваше сообщение не будет отображено до тех пор, пока модератор не проверит его. GoodDA О форуме и сайтах клуба 5 24.08.2010 01:24
Результат перевода из 10й сис-мы в 16-ю занести в табл(10-е число - 16), до тех пор пока не будет введено Maemi_IT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.01.2010 21:27
Машина случайным образом генерирует натуральные числа в промежутке [0, 1, 2, … 10] до тех пор, пока не 0 JustinTI Помощь студентам 3 21.12.2008 14:31