1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Вычисления произведения

Тема в разделе "Вопросы новичков и не только", создана пользователем wanty, 25 дек 2010.

Статус темы:
Закрыта.
  1. wanty

    wanty Гость

    Репутация:
    0
    Delphi: Задание: составить программу вычисления произведения, и закинуть получившееся число в файл, вот два первых члена(n-ый член представлен в самой программе): (1/2-cos|x|)(2/3-cos^2|x|)... (^2 я представил вам степень косинуса).Произведение бесконечное. Вот то что я надумал:
    Код:
    var
    n,i:integer;
    x,s:double;
    f:textfile;
    
    procedure t(var x,s:double;n,i:integer);
    
    begin
    s:=1;
    for i:=1 to n do
    x:=i/(i+1)-exp(i*ln(cos(abs(x))));
    s:=s*x;
    end;
    begin
    n:=strtoint(edit1.text);
    x:=strtofloat(edit2.text);
    assignfile(f,'data.txt');
    rewrite(F);
    t(x,s,n,i);
    writeln(f,s);
    closefile(F);
    end;
    программа работает, но неправильно, например при умножении первых трёх членов друг на друга он выдаёт не правильно число, а при четырёх выдаёт отрицательное число, при том что оно должно быть положительное ! Подскажите что делать, не могу понять, может у меня не правильно составлен код последовательного умножения??? n я в программе заменил на i ! если по заданию то n-ый член выглядит так:
    n/(n+1)-exp(n*ln(cos(abs(x))));
     
  2. nayke

    nayke Well-Known Member

    Репутация:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    а надо

    Код:
    s:=1;
    for i:=1 to n do
    begin
    x:=i/(i+1)-exp(i*ln(cos(abs(x))));
    s:=s*x;
    end;
    Это из того что бросилось в глаза.
    P.S. такие ошибки легко отлавливаются дебаггером
     
  3. wanty

    wanty Гость

    Репутация:
    0
    бросилось в глаза то да ! то считает он не правильно !я пробовал делить на калькуляторе !
     
  4. nayke

    nayke Well-Known Member

    Репутация:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    в этой строке на каждой итерации x-меняется, т.е. меняется аргумент у косинуса не уверен что так должно быть, попробуйте

    Код:
    s:=1;
    for i:=1 to n do
    begin
    y:=i/(i+1)-exp(i*ln(cos(abs(x))));
    s:=s*y;
    end;
    p.s. В функцию cos аргумент(угол) надо передавать в радианах, ну так на всякий случай.
     
  5. wanty

    wanty Гость

    Репутация:
    0
    Спс ! я уже всё сделал ! Операторные скобки не нужны, и надо было написать не так:
    y:=i/(i+1)-exp(i*ln(cos(abs(x))));
    s:=s*y;
    а так:s:=s*(i/(i+1)-exp(i*ln(cos(abs(x)))));(извините подправил)
     
  6. nayke

    nayke Well-Known Member

    Репутация:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    А разница?))
    И что-то я не вижу где у вас скобок меньше стало.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей