• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fifiapussy

Re: Calculo factorial

7 mensagens neste tópico

Ola!!

Eu tenho um exercício relacionado com o factorial, mas não o consigo resolver. Gostaria que me ajudassem por favor.

somatoriofactorialqo0.jpg

Elabore um programa que calcule o somatório acima representado. Para esse efeito, os

valores inteiros que representam o limite inferior (m) e superior (n) do somatório devem ser

pedidos ao utilizador e obedecer às restrições abaixo. O cálculo do somatório só será

efectuado quando estas restrições forem satisfeitas.

− m >= 1;

− n <=9;

− m < n.

Nota: O factorial de i!=i x (i-1) x (i-2)…x 1.

------------------------------------------------------

Nao consigo resolver a parte do factorial.

o que fiz foi isto:

#include<stdio.h>
#include<conio.h>

void main ()
{
int m, n, somatorio, i;

do
{
	printf("\nIntroduza o limite inferior, o limite superior\n\n\);
	scanf("%d %d", &m, &n);

}while(m<1 || n>9 || m>n);

}

-----------------------------------------------

Obrigada!! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include<stdio.h>

#include<conio.h>

void main ()

{

int m, n, somatorio, i;

do

{

printf("\nIntroduza o limite inferior, o limite superior\n\n\);

scanf("%d %d", &m, &n);

}while(m<1 || n>9 || m>n);

}

-----------------------------------------------

Obrigada!! :)

Bom, esse code está ainda muito verdinho.

Tens um pequeno erro aqui: while(m<1 || n>9 || m>n);

Deverá ser m>= n para estar de acordo com as condições.

Quanto ao resto, o melhor será definires a função que calcule o factorial em separado. Presumo que o objectivo seja criar uma função recursiva.

E depois é só ir chamando a função com um parâmetro, o i neste caso e multiplicar o valor devolvido pelo n, ao mesmo tempo que se vão somando os valores. Mostra o que já tentaste fazer da função recursiva.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Realmente tenho um erro!!! Obrigada!!

Nao é para fazer uma função recursiva. A prof resolveu desta forma:

#include <stdio.h>
#include <conio.h>

void main()
{
int lim_inf,lim_sup,i,j,resultado=0,fact;

do
{
	printf ("Digite o valor do limite inferior e do limite superior");
	scanf ("%d%d",&lim_inf,&lim_sup);
}while (lim_inf<1 || lim_sup>9 || lim_inf>= lim_sup);

for (i=lim_inf;i<=lim_sup;i++)
{
	fact=1;

	for (j=1;j<=i;j++)
		fact=fact*j;

	resultado=resultado+fact*lim_sup;
}
printf ("O resultado é de %d",resultado);
getch();
}

_______________________________________

Eu nao consigo mesmo entender o calculo do factorial  :) Ja estive horas a olhar para isto e ver outra forma de resolver, mas no entanto nao consigo :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma forma de descrever o factorial é recursivamente.

n!= n * (n-1)!= n* (n-1)*(n-2)!= .... = n*(n-1)*(n-2)*...*2*1

P. exemplo:

4! = 4*3! = 4*3*2! = 4*3*2*1! = 4*3*2*1 = 24

Podemos escrever uma função a partir da seguinte definição:

n!=n * (n-1)! , quando n>1

n!=1 , quando n=0 ou n=1

int fact(int n) {

  if (n<=1)

    return 1;

  else

    return n*fact(n-1);

}

Esta função devolve 1 se receber algum número negativo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora se isto ajudar :D

#include <stdio.h>

void main()
{
int num, fact=1, i;

printf("\n\nCalculo do Factorial\n\n");

printf("Numero: ");
scanf("%d", &num);

for( i=1; i<=num; i++)
	fact = fact * i;

printf("\n%d! = %d\n\n", num, fact);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pergunto-me por que é a tua professora apresentou uma solução que calcula o factorial a cada iteração. Só é preciso calcular o factorial de m. Depois basta ir multiplicando os i's.

void main()
{
   int lim_inf,lim_sup,i,j,resultado=0,fact;

   do
   {
      printf ("Digite o valor do limite inferior e do limite superior");
      scanf ("%d%d",&lim_inf,&lim_sup);
   }while (lim_inf<1 || lim_sup>9 || lim_inf>= lim_sup);

  fact=1;
  for(i=2;i<=lim_inf;i++)
    fact=i*fact;

  resultado=fact*lim_sup;

   for (i=lim_inf+1;i<=lim_sup;i++)
   {
      fact=fact*i;
      resultado=resultado+fact*lim_sup;
   }
   printf ("O resultado é de %d",resultado);
   getch();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora