Informática, perguntado por felipecervi, 1 ano atrás

A tabela a seguir contém os fatoriais de 0 a 12: Considerando a tabela ao lado e as regras descritas acima, desenvolva o algoritmo conforme regras descritas abaixo: A: Deverá ser solicitado ao usuário para que informe um número inteiro qualquer; B: Caso o valor informado seja negativo, o fatorial não deverá ser calcula, sendo exibida ao usuário a mensagem "Não há fatorial para valores negativos!"; C: Caso seja informado um valor maior do que o maior valor contido na coluna n da tabela 01, o algoritmo deverá informar ao usuário que o fatorial de tal número não pode ser calcula pelo programa, uma vez que o cálculo resulta em um valor muito elevado; D: O valor do fatorial deverá ser mostrado após ser mostrada a descrição de todos os elementos da sequência. Ex.: Cálculo de fatorial 5! = 5 X 4 X 3 X 2 X 1 = 120 E: Resultados esperados: a) 0! = 1 (valor 0,25) b) 1! = 1 (valor 0,25) c) Cálculo de fatorial 5! = 5 X 4 X 3 X 2 X 1 = 120 (valor 1,00) d) Não há fatorial para valores negativos! (valor 0,25) e) O programa não pode resolver o fatorial para o número informado! (valor 0,25)

Soluções para a tarefa

Respondido por epanta
2

Olá,
você não disse qual sintaxe utiliza, então pode ser que tenha que alterar a resposta conforme o que viu em sala. Por exemplo, alguns autores usam IMPRIMA ao invés de ESCREVA, ou então usam { e } ao invés de INÍCIO e FIM, etc.
Coloquei "." no início das linhas para simular a identação e ficar mais fácil de entender.

INICIO
..INTEIRO n,i,resultado;
..ESCREVA("Digite um numero inteiro: ");
..LEIA(n);
..SE n<0 ENTÃO
....ESCREVA("Não há fatorial para numeros negativos!");
..SENÃO SE n>12 ENTÃO
..........ESCREVA("O programa não pode resolver o fatorial para o numero informado!");
........SENÃO SE n<2 ENTÃO
................ESCREVA(n,"! = ");
..............SENÃO
................ESCREVA("Calculo de fatorial ",n,"! = ");
................resultado = 1;
................PARA i DE n ATÉ 2 FAÇA
..................resultado = resultado * i;
..................ESCREVA(i," X ");
................FIMPARA
................SE n>1 ENTÃO ESCREVA (1," = ");
................ESCREVA(resultado);
..............FIMSENÃO
FIM

Para testar o algoritmo, usei o código C:
void main()
{
int n,i,resultado;
//printf("Digite um numero inteiro: ");
//scanf("%d",&n);
n = 5;
if (n<0) printf("Não há fatorial para numeros negativos!");
else if (n>12)
printf("O programa não pode resolver o fatorial para o numero informado!");
else{
if (n<2) printf("%d! = ",n); else printf("Calculo de fatorial %d! = ",n);
resultado = 1;
for (i=n;i>=2;i--){
resultado = resultado * i;
printf("%d X ",i);
}
if (n>1) printf("1 = ");
printf("%d",resultado);
}
}

no qual substituí o LEIA por uma atribuição direta pois usei o compilador online codepad.org.
Para testar os diversos valores de n fui substituindo o comando n=5 por, por ex, n=-1, n=0,
n=12, etc.

Explicando melhor: você pode entrar na página codepad.org e colar o código acima (com a opção da linguagem C marcada). Aí clica em Submit e o site executa o seu código. Só não funcionam comandos de entrada, como scanf (ou seja: LEIA).

Obs: resolvi o exercício conforme solicitado, entretanto uma solução mais "elegante" seria
utilizar uma função recursiva para o fatorial. Caso o tópico de estudo sejam funções
recursivas, por favor escreva outra pergunta deixando isso claro!

Perguntas interessantes