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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2011, 18:03   #1
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию Функция pow

Помогите разобраться с программой(пишу на чистом Си), вот условие:"Получить все числа состоящие из четырёх цифр, которые удовлетворяют условию: abcd=a^4+b^4+c^4+d^4". Когда компилируешь выдаёт ошибку на функцию pow, может я не так что написал, подскажите
|Dima| вне форума Ответить с цитированием
Старый 18.07.2011, 18:45   #2
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от |Dima| Посмотреть сообщение
Помогите разобраться с программой(пишу на чистом Си), вот условие:"Получить все числа состоящие из четырёх цифр, которые удовлетворяют условию: abcd=a^4+b^4+c^4+d^4". Когда компилируешь выдаёт ошибку на функцию pow, может я не так что написал, подскажите
покажите как вы написали и какая именно ошибка.
там 3 числа получаются: 1634; 8208; 9474;
TDrive вне форума Ответить с цитированием
Старый 18.07.2011, 19:05   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Чтобы пользовать функцию pow, нужно включить math.h . Вы это сделали?
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.07.2011, 22:13   #4
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

вот что выдаёт

Код:
error C2668: pow: неоднозначный вызов перегруженной функции
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): может быть 'long double pow(long double,int)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): или       'float pow(float,int)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): или       'double pow(double,int)'
1>        при попытке сопоставить список аргументов '(int, int)'
|Dima| вне форума Ответить с цитированием
Старый 18.07.2011, 22:14   #5
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

забыл код программы выложить)
вот:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
int main() 
{
    int i;
    for(i = 1000; i < 10000; ++i)
        if (pow(i / 1000, 4) + pow((i / 100) - (i / 1000) * 10, 4) + pow(((i % 100) - (i % 10)) / 10, 4) + pow(i % 10, 4) == i)
            printf("%d ", i);
    getch();
    return 0;
}
|Dima| вне форума Ответить с цитированием
Старый 18.07.2011, 22:29   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

А напишите свою pow для целых)
Такую, например
Код:
int pow(int x,int n){
    int xx = x,r = 1;
    while(n){
        if(n%2){
            r *= xx;
        };
        xx *= x;
        n >>= 1;
    };
    return r;
};
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 18.07.2011, 22:32   #7
TDrive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 95
По умолчанию

компилятор не может понять с какими типами данных вы вызываете pow и какой тип данных вернуть. "i / 1000" - дробное число если не указать тип int

попробуйте:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main (){
	int i,i1,i2,i3,i4;
	for(i=1000; i<=9999; i++){
	    i1=i/1000;
            i2=(i%1000)/100;
            i3=(i%100)/10;
            i4=i%10;
            if(i==pow(i1,4)+pow(i2,4)+pow(i3,4)+pow(i4,4)){printf("%d \n",i);}
        }
        getch();
        return 0;
}

Последний раз редактировалось TDrive; 18.07.2011 в 22:38.
TDrive вне форума Ответить с цитированием
Старый 18.07.2011, 23:23   #8
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от TDrive Посмотреть сообщение
компилятор не может понять с какими типами данных вы вызываете pow и какой тип данных вернуть. "i / 1000" - дробное число если не указать тип int

попробуйте:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main (){
	int i,i1,i2,i3,i4;
	for(i=1000; i<=9999; i++){
	    i1=i/1000;
            i2=(i%1000)/100;
            i3=(i%100)/10;
            i4=i%10;
            if(i==pow(i1,4)+pow(i2,4)+pow(i3,4)+pow(i4,4)){printf("%d \n",i);}
        }
        getch();
        return 0;
}
выдаёт теже самые ошибки
|Dima| вне форума Ответить с цитированием
Старый 18.07.2011, 23:27   #9
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Следует выполнять преобразование первого аргумента в double. Пример:
Код:
pow(10, 4); //неоднозначность
pow((double)10, 4); //все ок
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 18.07.2011, 23:30   #10
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Следует выполнять преобразование первого аргумента в double. Пример:
Код:
pow(10, 4); //неоднозначность
pow((double)10, 4); //все ок
Спасибо, вроде заработало
вот код:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main (){
	int i,i1,i2,i3,i4;
	for(i=1000; i<=9999; i++){
	    i1=i/1000;
            i2=(i%1000)/100;
            i3=(i%100)/10;
            i4=i%10;
            if(i==pow(static_cast<double>(i1), 4)+pow(static_cast<double>(i2), 4)+pow(static_cast<double>(i3), 4)+pow(static_cast<double>(i4), 4)){
				printf("%d \n",i);}
        }
        getch();
        return 0;
}
|Dima| вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C. Что-то с math.h. Не работает pow. CofeIn Помощь студентам 7 18.02.2011 22:55
функция pow(double x, double y) Не могу понять в чем ошибка Vlashel Помощь студентам 3 07.10.2010 16:28
Call to undefined function 'pow' fs444 Общие вопросы C/C++ 4 14.01.2010 14:34
не работает ф-я pow Denni$ Общие вопросы C/C++ 2 09.06.2009 02:44
delphi pow? Happyman Помощь студентам 2 13.05.2008 19:40