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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2013, 15:30   #1
NataPl
Пользователь
 
Аватар для NataPl
 
Регистрация: 26.02.2013
Сообщений: 38
Печаль C: Расчет логарифма без math.h

Задание - написать программу для расчета логарифма, по основе 3, без подключения math.h. Написал такой код:
Код:
#include <stdio.h>
#include <conio.h>
#define E 3

int pow(int a, int b);
int getln(int x);

int main()
{
    int x,u;
    printf("Function ln(x).\nInput x: ");
    scanf("%d",&x);
    u =getln(x);
    printf("%d",u);
    getch();
    return 0;
}

int getln(int x)
{
    int cur_step;
    cur_step=0;
    while (pow(E,cur_step)!=x)
    {
        cur_step++;
    }
    return cur_step;
}

int pow(int a, int b)
{
    int c,start_a;
    c=1;
    start_a=a;
    while (a!=c)
    {
        c++;
        a=a*start_a;
    }
    return a;
}
Вроде алгоритм правильный, но консольная программа просто переходит на следущую строку и ничего не выдает...В чем проблема, подскажите?
NataPl вне форума Ответить с цитированием
Старый 06.10.2013, 16:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит цикл бесконечный получился. Отладкой умеешь пользоваться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2013, 20:12   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
pow(E,cur_step)!=x
здесь равенство - строгое. Т.е если pow(E,cur_step) > x цикл не остановится
Igor95 вне форума Ответить с цитированием
Старый 07.10.2013, 01:05   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А что , надо именно методом приближения степенной функции?
Даже если вместо != поставить >= , у вас там все сплошь int , уж слишком грубые приближения. Например, получится , что
log(4)=log(5)=log(6)=log(7)=log(8)= log(9)= 2.
Может, лучше использовать разложение в ряд Тейлора?
Или хотя бы шаг уменьшить?
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма ряда без экспонента и логарифма Sturmgewehr Паскаль, Turbo Pascal, PascalABC.NET 3 15.12.2010 09:32
Расчет даты без учета выходных! Доктор Microsoft Office Excel 4 20.05.2010 17:56
C# ф-я возведения вещ числа в целую степень без include<math.h> Mitya999 Помощь студентам 5 14.12.2009 16:30
Возведение в степень без подключения <math.h> ManInBlack Помощь студентам 9 23.12.2008 12:57
Задание на типовой расчет: Какое наибольшее целое число без знака может быть записано в N двоич.разрядах? Бубликова Фриланс 10 06.12.2008 10:35