Jump to content
Guest Markito

[Resolvido] factorial de um número

Recommended Posts

Guest Markito

Bom dia. estava aqui a tentar fazer um programa que foi proposto por outro user e achei que seria interessante eu por mãos á obra a tentar resolvê-lo, até porque preciso de praticar.

O problema consiste em achar o factorial de um número.

Eu quero que se calcule o factorial de um número se esse número for maior que 2; caso contrário aparace uma frase a dizer: "Introduza uma numero maior que 2 !!!" e pede ao utilizador que introduza mais uma vez um número.

ora bem o que eu fiz até agora foi este código:

#include<iostream>
using namespace std;
int main()
{


int num=-1;
int soma = 0;
cout << "introduza um inteiro: " << endl;

while(cin >> num)
 {
	 if(num >= 2)
		 {
			 for(int i=0; i<=num; i++)
				 {
					 soma+= i;					
				 }
		 {
	 else if (num < 2)
	 cout << " Introduza uma numero maior que 2 !!!\n";
 }

cout << "O factorial de " << num << " e' " << soma
	 << endl;
system("pause");
return 0;
}

Mas está a dar erro: "expected primary expression before else". Não percebi esta mensagem de erro e já agora gostava de saber a vossa opinião e se existe uma maneira mais aprimorada de fazer o mesmo programa.

Cmps e muito obrigado.

Edited by Markito

Share this post


Link to post
Share on other sites
HappyHippyHippo

#include<iostream>
using namespace std;
int main()
{ // <------------------------------------------------------------- Abrir
   int num=-1;
   int soma = 0;
   cout << "introduza um inteiro: " << endl;

   while(cin >> num)
           { // <------------------------------------------------- Abrir
                   if(num >= 2)
                           { // <--------------------------------- Abrir
                                   for(int i=0; i<=num; i++)
                                           { // <----------------- Abrir
                                                   soma+= i;                                      
                                           } // <----------------- Fechar
                           { // <--------------------------------- Abrir ????
                   else if (num < 2)
                   cout << " Introduza uma numero maior que 2 !!!\n";
           } // <------------------------------------------------- Fechar

   cout << "O factorial de " << num << " e' " << soma
                << endl;
   system("pause");
   return 0;  
} // <------------------------------------------------------------- Fechar

à pouco tempo disponibilizei um conjunto de ficheiros que simplificam a leitura de dados do teclado :

https://www.portugal-a-programar.pt/topic/63688-c-codigo-auxiliar-para-iniciantes-leitura-teclado-linked-list/

ps : o que tens não é o factorial mas sim a soma da progressão aritmética com r = 1

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest Markito

Obrigado pela ajuda e pela referência. Estou a dar uma vista de olhos no teu artigo. Entretanto tive a corrigir o programa.

Que te parece:

#include<iostream>
using namespace std;
int main()
{


int num=-1;
int soma = 0;
cout << "introduza um inteiro: " << endl;

while(cin >> num)
   {      
    if(num >= 2)
        {
               for(int i=0; i<=num; i++)
                        {
                                soma+= i;                                      
                        }
           cout << "O factorial de " << num << " e' " << soma
                << endl;
           system("pause");
           return 0;
       }
    else if (num < 2)
    cout << " Introduza uma numero maior que 2 !!!\n";
   }
}

Já agora qual é a distro de linux que o Hippo usa?

Edited by Markito

Share this post


Link to post
Share on other sites
HappyHippyHippo

Entretanto tive a corrigir o programa.

ps : o que tens não é o factorial mas sim a soma da progressão aritmética com r = 1

Já agora qual é a distro de linux que o Hippo usa?

neste momento tenho o linux mint mas estou a ponderar dar uma vista de olhos nas novas distros como o elementaryOS

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest Markito

No meu curso só trabalham com o MSWin. É uma chatice, em casa tenho um acer com o linux mas para aqui tenho que trazer sempre o outro que tem o windows e que tem todos os meus trabalhos... tens razão este não é o factorial, o factorial é o produto e não a soma, certo?lAqui já está corrigido, assim fica limpo:

#include<iostream>
using namespace std;
int main()
{


int num=-1;
int soma = 0;
cout << "introduza um inteiro: " << endl;

while(cin >> num)
{	  
 if(num >= 2)
	 {
			for(int i=0; i<=num; i++)
					 {
							 soma+= i;									  
					 }
		cout << "A progressao aritmetica de " << num << " com razao = 1 e' " << soma
			 << endl;
		system("pause");
		return 0;
	}
 else if (num < 2)
 cout << " Introduza uma numero maior que 2 !!!\n";
}
}

Acho que vou ter bastantes dúvidas em relação ao linux, pois é diferente, postarei algumas das que tiver na secção correcta.

Muito Obrigado

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
Rui Carlos

soma+= i; 

De certeza que já corrigiste o problema da soma?

Já agora, quando mudares para a multiplicação vais ter outro problema: é que 0 * 1 * 2 * ... * num = 0.

Um outro pormenor, já menos importante. O factorial está definido para qualquer número natural (incluindo 0), i.e., o input não precisa de ser maior ou igual a 2.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Aqui já está corrigido, assim fica limpo:

como foi dito, o código apresentado não é o correcto

para testes :

0! = 1

1! = 1

2! = 2

3! = 6

4! = 24

5! = 120

6! = 720

7! = 5040

8! = 40320

9! = 362880

10! = 3628800

11! = 39916800

12! = 479001600

...

...

...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest Markito

Olá de novo. Só pude responder agora...

Bom o programa faz o que eu pretendia: soma todos os números até ao limite(inclusivé) do numero dado pelo utilizador! Eu errei a chamar-lhe factorial, mas o que eu queria mesmo era a soma de todos os números até aquele. Mas se calhar é um desafio novo que me propõem mas não estou a entender, sinceramente onde é que errei... Se puderem ter a paciência de me dizer por favor!

Já agora aquele que eu postei está um pouco mal identado fica este que é mais arrumadinho:

#include<iostream>
using namespace std;
int main()
{


int num=-1;
int soma = 0;
cout << "introduza um inteiro: " << endl;

while(cin >> num)
{	  
 if(num >= 2)
	 {
		for(int i=0; i<=num; i++)
			 {
				soma+= i;									  
			 }
		cout << "A progressao aritmetica de " << num << " com razao = 1 e' " << soma
			 << endl;
		system("pause");
		return 0;
	}
 else if (num < 2)
 cout << " Introduza uma numero maior que 2 !!!\n";
}
}

E mesmo assim fico á espera de uma resposta vossa. obrigado

Edited by Markito

Share this post


Link to post
Share on other sites
HappyHippyHippo

se é para ficar "arrumadinho";

#include<iostream>
using namespace std;

int main() {
 int num, soma = 0;

 do {
   cout << "introduza um inteiro: " << endl;
   cin >> num;
   if (num < 2)
     cout << "Introduza uma numero maior que 2 !!!" << endl;
 } while (num < 2);

 for(int i = 0; i <= num; soma += i++)
   /* void */;

 cout << "A progressao aritmetica de " << num << " com razao = 1 e' " << soma << endl;

//  system("pause");
 return 0;
}

ps : tenta altera o código para uma razão a ser escolhida pelo utilizador

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Guest Markito

Uauu... muito mais elegante e prático!

ps : tenta altera o código para uma razão a ser escolhida pelo utilizador

Ui, ui... Essa já é mais difícil, mas faz-se! A ver se arranjo um tempinho...

for(int i = 0; i <= num; soma += i++)

/* void */;

Nem sabia que dava para fazer a soma directa dentro do for...

Já agora porquê o ';' a seguir ao for???

Share this post


Link to post
Share on other sites
HappyHippyHippo

Já agora porquê o ';' a seguir ao for???

o ciclo for necessita de pelo menos uma instrução, o ';' é uma instrução vazia


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.