Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
studentka1416
Сообщений: n/a
#1

Написать программу, вычисляющую n! (факториал). - C++

13.05.2011, 23:17. Просмотров 2584. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста написать программу на С++, вычисляющую n! (факториал). Процедуру вычисления факториала реализовать в отдельном потоке.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2011, 23:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу, вычисляющую n! (факториал). (C++):

Написать программу вычисляющую факториал числа, находящегося в поле ввода - C++
Выручайте люди добрые) Программа вычисляющая факториал числа, находящегося в поле ввода. Для вычисления использовать рекурсивную...

составить программу, вычисляющую факториал - C++
1. составить программу, которая выводит на экран все простые числа их интервала от n до m и их кол-во. 2. составить программу,...

Составьте программу, вычисляющую функцию y = x! (факториал). Функция расчета факториала должна быть - C++
Составьте программу, вычисляющую функцию y = x! (факториал). Функция расчета факториала должна быть рекурсивной и вызываться из функции...

Написать программу,вычисляющую первые n - C++
Написать программу, вычисляющую первые n элементов заданной последовательности: b1=-1,b2=1,bn=3bn-1-2bn-2

Написать программу, вычисляющую сумму - C++
Помогите, пожалуйста, в написании программы. {nx}^{n}+{((n-1)x)}^{n-1}+...+{2x}^{2}+x (для определенных n и x, с использованием...

Написать программу, вычисляющую значение выражения - C++
Помогите решить задачку с использованием основных операторов языка С++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
13.05.2011, 23:52 #2
По поводу факториала уже километры текста написаны - ищите.
По поводу потока копайте в сторону _beginthread/pthread_create
igorrr37
1646 / 1274 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
14.05.2011, 00:15 #3
C
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<windows.h>
 
char buf[128];
 
DWORD Factorial(LPVOID x){
    DWORD n=*(LPDWORD)x, res=1;
    while(n){
        res*=n--;
    }
    wsprintf(buf, "%d", res);
    return MessageBox(HWND_DESKTOP, buf, "Result", 0);
}
 
int main(){
    DWORD n=6;
    HANDLE hThread=CreateThread(NULL,
                 0,
                 (LPTHREAD_START_ROUTINE)Factorial,
                 (LPVOID)&n,
                 0,
                 NULL);
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 00:21 #4
igorrr37, чтобы иметь возможность запустить Factorial в CreateThread, ее нужно объявить с атрибутом __stdcall.

А вообще, для C/C++ рекомендуется использовать функцию _beginthread из CRT.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.05.2011, 01:28 #5
Я конечно с бустопотоками не особо дружу. Но если С++ стайл то как-то так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <boost/thread.hpp>
#include <iostream>
 
void factorial(unsigned long long* number)
{
    unsigned long long result = 1;
    for(int i = *number; i >= 2; --i)
        result *= i;
    *number = result;
}
 
int main()
{
    unsigned long long number = 0;
    std::cin >> number;
    boost::thread thread(factorial, &number);
    thread.join();
    std::cout << number << '\n';
}
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 05:45 #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Я конечно с бустопотоками не особо дружу. Но если С++ стайл то как-то так.
Человек не может вычислить факториал - думаете, он сможет собрать boost::thread? Да и смысл это делать для данной задачи?
igorrr37
1646 / 1274 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
14.05.2011, 10:32 #7
через _beginthreadex
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<windows.h>
#include<process.h>
#include<iostream>
 
unsigned WINAPI Factorial(void* x){
    unsigned n=*reinterpret_cast<unsigned*>(x);
    unsigned long long res=1;
    while(n){
        res*=n--;
    }
    std::cout<<res<<"\n";
    return 0;
}
 
int main(){
    unsigned n=4;
    HANDLE hThread=(HANDLE)_beginthreadex(NULL, 0, Factorial, reinterpret_cast<void*>(&n), 0, NULL);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    return 0;
}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.05.2011, 11:43 #8
Jtalk, gcc поддерживает std:thread вроде как
Jtalk
93 / 79 / 4
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 12:21 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Jtalk, gcc поддерживает std:thread вроде как
Только при наличии gthread в поставке, насколько я помню. На Linux заведется, а вот на Windows в MinGW будет ругаться на библиотеки. Ждем официального релиза C++0x и молимся на команду MinGW...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2011, 12:21
Привет! Вот еще темы с ответами:

Написать программу, рекурсивно вычисляющую сумму - C++
Найти сумму ряда с точностью eps , общий член которого равен an=n!/2n Точность считается достигнутой, если следующий член...

Написать программу, вычисляющую степень числа - C++
1.Написать программу, вычисляющую степень числа {DELETED} В теме должна быть только одна задача. Создайте отдельную тему для второй ...

Написать программу, приближенно вычисляющую интеграл - C++
Приближенное вычисление интеграла по формуле прямоугольников. Написать программу, приближенно вычисляющую интеграл по заданным вещественным...

Написать программу, рекурсивно вычисляющую сумму - C++
Найти сумму ряда с точностью е , общий член которого равен an=n!/2n. Точность считается достигнутой, если следующий член последовательности...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.05.2011, 12:21
Ответ Создать тему
Опции темы

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