Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Charles Arnoud

[Resolvido] Fatoriais

Recommended Posts

bom, mais um exercicio da minha facul.

o exercicio eh para ler um numero do teclado e calcular o seu fatorial.

eu jah fiz e pelo q eu vi tah tudo certo. soh q com numeros realmente grandes ele perde a precisao, tipo depois de umas 15 casas ele fica tudo zero.

alguem sabe como posso fazer para aumentar a precisao, ou isso eh o maximo q eu posso fazer em c?

se tiverem alguma ideia para melhorar o programa eu agradeço.

/*Nome: Charles Arnoud
lê um numero do teclado e retorna o seu fatorial.
entradas: num.
saídas: fat.*/
#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
int main()
{
	char segue;
	int num;
	double fat, temp;
	printf("Calcula o fatorial de um numero.");
	do
	{
		do
		{
			printf("\n\nDigite numero natural: ");
			scanf("%i", &num);
		}
		while (num<0);
		if ((num==0)||(num==1))
		   fat=1;
		else
			for (temp=2, fat=1; temp<=num; temp++)
				fat=temp*fat;//acumula o fatorial, multiplicando pelo numero
		printf("Fatorial de %i (%i!) eh igual a %.0lf.", num, num, fat);
		do
		{	
			 printf("\nDeseja continuar (s/n)? ");
			 fflush(stdin);//limpa para ler caracteres
			 scanf("%c", &segue);
			 segue=tolower(segue);
		}
		while ((segue!='n')&&(segue!='s'));
	}
	while (segue=='s');
	system("pause");
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você pode estruturar melhor o seu programa...

um programador nunca faz uma função destroiBagda(), mas sim destroiCidade(Bagda).... entendeu a idéia?

 

NÃO USE FFLUSH(STDIN)

http://forum.imasters.com.br/index.php?showtopic=336835

 

Outra coisa que eu notei...

você manda mostrar 1 casa decimal do resultado do fatorial... que sempre é um número inteiro. não entendi tbm...

 

Um exemplo:

double fatorial(int);

int main()
{
int i;
char p='s';

	while (p != 'n')
	{
		printf("Digite um numero: ");
		scanf("%d%*c", &i);
		printf("%d! = %.0f\n\n", i, fatorial(i));
		printf("Deseja continuar  (s/n)?");
		scanf("%c%*c", &p);
	}

	return 0;
}

double fatorial(int a)
{
double result=1;
int aux;

	for (aux = a; aux > 0; aux--)
		result *= aux;

	return result;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmn pois eh, eu li sobre o fflush aki no forum, mas como a professora disse para usar esse comando eu ainda to pensando de que jeito eu faço, mas pelo q eu vi o jeito de vcs eh mais certo.

 

aquela parte q parece o 1 na verdade eh a letra "L" minuscula q ficou daquele jeito ^^ q eu usei pra ficar long float, q pelo q eu entendi eh a forma de representar o double. eu usei isso pra ver se fica ficar mais preciso.

 

tah pelo q eu entendi você fez uma funçao auxiliar (double fatorial(int a)), mas a minha aula eh programaçao estruturada dai eh cheio de frescura. tpw tem algumas restriçoes, por exemplo, a gente faz tudo na funçao int main() e tambem nao pode usar go to, e break soh no switch.

 

valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu sempre representei doubles e floats com %f... aprendi mais uma! =D

 

Se a sua professora insiste em usar o comando fflush(stdin), ela não entende muito de C....

Ou, se ela quer vos ensinar a programar com "atalhos" ela está fazendo um erro enorme. Esse tipo de coisa acaba gerando um vício mais pra frente.

No tópico que eu te mandei, há um link para a documentação da função. Envie isso pra ela.

 

o.O que estranho...

Pelo que sei, diria que programação estruturada defende o uso de funções auxiliares, massss....

 

Bom, então acho que o seu código está bom, se você não pode criar funções auxiliares.... (eu imagino a confusão que ficaria um código maior...:P)

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

aham tipo eu to começando em programaçao entao com certeza nao sei mta coisa.

talvez seja pq nos estamos no inicio das aulas q nao usamos funçoes auxiliares.

 

entao tah valeu.

 

abraço, topico resolvido

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.