Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 158
#1

Найти факториал числа, пользуясь только указателями - C++

17.04.2014, 21:08. Просмотров 1209. Ответов 7
Метки нет (Все метки)

В общем задание - "Найти факториал числа, пользуясь только указателями."
Код написал, но не могу понять в чем ошибка. (Error 1 error LNK2001: unresolved external symbol "int __cdecl fact(int)" (?fact@@YAHH@Z) C:\Users\Леонид\Documents\Visual Studio 2010\Projects\Test\Test\Test.obj Test
)

Сам код:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
int fact(int);
int *sum= new int;
void main(){
    setlocale(LC_ALL,"rus");
    int *n= new int;
    cout<<"Введите число"<<endl;
    cin>>*n;
    fact(*n);
 
    system("pause");
}
 
 
int fact(int *n){
    if(*n==0){
        return 1;
    }else{
        *sum=fact(*n-1)*(*n);
        cout<<*sum<<endl;
        return *sum;
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2014, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти факториал числа, пользуясь только указателями (C++):

Написать программу, которая находит факториал числа пользуясь только указателями - C++
Написать программу, которая находит факториал числа пользуясь только указателями (использовать только динамическую память).

Обработать строки, пользуясь указателями - C++
Помогите решить, заранее спасибо: Вводится строка в символьный массив размером 80. Задание: Рядом с заданным пользователем символом...

Найти простые числа пользуясь методом решета Эратосфена НЕ используя массивы - C++
Задача формулируется простыми словами: найти простые числа 0..N пользуясь методом решета Эратосфена НЕ используя массивы. Препод сказал...

Найти факториал числа - C++
помогите!пожалуйста!=)

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа - C++
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие значения факториала N! и двойного факториала N!!...

Найти факториал числа заданного условием - C++
Вычислить R=p! , где p третье по счету число ,делящееся на 9 в диапазоне от M1 до M2 Давайте своим темам осмысленные названия!

7
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.04.2014, 21:12 #2
Цитата Сообщение от Леонид Каруна Посмотреть сообщение
C++
1
int fact(int);
Сравните с:
Цитата Сообщение от Леонид Каруна Посмотреть сообщение
C++
1
int fact(int *n){
1
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 158
17.04.2014, 21:30  [ТС] #3
Точно не в этом дело, там просто пишется тип переменной.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
17.04.2014, 21:34 #4
Леонид Каруна, дело точно в этом. Вы объявили, но не определили функцию. Вот компилер и плюётся.
0
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 158
17.04.2014, 21:41  [ТС] #5
Исправил, выбило ошибку:

Код
Error	1	error C2664: 'fact' : cannot convert parameter 1 from 'int' to 'int *'	C:\Users\Леонид\Documents\Visual Studio 2010\Projects\Test\Test\Test.cpp	10	1	Test
Не поленитесь, скомпилируйте.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
17.04.2014, 21:47 #6
Леонид Каруна, учите мат.часть. int и int* - разные типы данных. Вы объявляете функцию и обязаны определить её с теми же параметрами.
C++
1
2
3
4
5
void foo(int); //у нас есть 1 функция foo, принимает int, но не определена ==> работать не будет
//промежуток
void foo(int* a){ //мы ПЕРЕопределяем foo, эта принимает int*. Теперь у нас есть 2 функции foo: одна принимает int и не определна, вторая int* и определена.
 //some code
}
Если в коде выше в "промежутке" попытаться вызвать foo и передать ей int* - работать не будет, ибо такая там ещё не определена

Добавлено через 2 минуты
Таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
void foo(int);
int main() {
    // your code goes here
    int a[10];
    foo(a);
    return 0;
}
 
void foo(int* n){
    std::cout << "foo(int*)";
}
Работать не будет. Будет выдавать Can not convert int to int *
И это вполне логично, ибо ему foo(int*) не известен до его объявления/определения.

Если передать туда int, то выдаст, как раз, вашу ошибку (которая в посте).
1
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,843
Завершенные тесты: 1
17.04.2014, 21:48 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int fact(int*);
int main()
{
    setlocale(LC_ALL,"rus");
    int *n= new int;
    cout<<"Введите число"<<endl;
    cin>>*n;
    int res=fact(n);
    delete n;
    cout<<res<<endl;
    system("pause");
    return 0;
}
int fact(int *n)
{
    if( (*n)<=1)
        return 1;
    int t=(*n) -1;
    return (*n)*fact( &t );
 }
3
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 158
17.04.2014, 21:58  [ТС] #8
Всем спасибо, особенно Zss, сам код факториала числа отличается, что интересно.
0
17.04.2014, 21:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2014, 21:58
Привет! Вот еще темы с ответами:

Известен факториал числа. Найти это число - C++
Известен факториал числа. Найти это число ( факториал числа n=1*2*...*n) Помогите пожалуйста сделать! Надо на Visual C++! Очень нужно!

Факториал. Использовать только одну функцию main и только один цикл - C++
задача вообщем простая, но условия осложняют: \sum_{i=0}^{n-1} {x}_{i}/i! использовать только одну функцию main и только один...

Пользуясь только умножением, получить - C++
Пользуясь только умножением, получить a2 a5 a17 за 6 операций

Пользуясь только операцией умножения, получить a^2, a^5 и a^17 за 6 операций - C++
Всем привет! Нужно написать программку на вывод функции, только начал учить С++ Условие: Дано вещественное число a. Пользуясь только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru