Pessoal fiz um programinha com a estrutura de Pilhas, uma calculadora que dentre dela tem varias funçoes. Por exemplo função Fatorial de um numero. Gostaria de saber como faço para chamar a função fatorial dentro do case.
Olhem só o programa:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define MAX 100
int *p; /* apontar para uma regiao de memoria livre */
int *tos; /* aponta para o topo da pilha */
int *bos; /* aponta para o fundo da pilha */
int fat,n;
int *d;
void push(float i);
float pop(void);
int main(void){
int i,fat=1,n;
float a, b;
char s[80];
p = (int *) malloc(MAX*sizeof(int)); /*obtem memoria da pilha*/
if(!p) {
printf("falha de alocacao\n");
exit(1);
}
tos = p; // recebe endereco do topo da pilha
bos = p+MAX-1; // recebe endereco do fundo da pilha
printf("Opcoes da CALCULADORA: \n\n");
printf("#########################\n#\t\t\t#\n# + -> para soma\t#\n# ");
printf("- -> subtracao\t#\n# ");
printf("* -> multiplicacao\t#\n# ");
printf("/ -> divisao\t\t#\n#");
printf(" r -> Raiz Quadrada\t#\n#");
printf(" p -> X elevado a Y\t#\n#");
printf(" f -> Fatorial de X \t#\n#");
printf("'s'-> para sair\t#\n#");
printf("\t\t\t#\n#########################\n\n");
printf("\nDigite alguma operacao");
do { printf(": ");
gets(s);
switch(*s) {
case '+':
a = pop();
b = pop();
printf("%f\n", a+B);
push(a+B);break;
case '-':
a = pop();
b = pop();
printf("%f\n", b-a);
push(b-a);break;
case '*':
a = pop();
b = pop();
printf("%f\n", b*a);
push(b*a);break;
case '/':
a = pop();
b = pop();
if(a==0) {
printf("divisao por 0\n");break;
}
printf("%f\n", b/a);
push(b/a);break;
case '.': /* mostra o conteudo do topo da pilha */
a = pop();
push(a);
printf("O valor atual no topo da pilha ‚: %f\n", a);break;
Pergunta
noelioyuyu
Pessoal fiz um programinha com a estrutura de Pilhas, uma calculadora que dentre dela tem varias funçoes. Por exemplo função Fatorial de um numero. Gostaria de saber como faço para chamar a função fatorial dentro do case.
Olhem só o programa:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define MAX 100
int *p; /* apontar para uma regiao de memoria livre */
int *tos; /* aponta para o topo da pilha */
int *bos; /* aponta para o fundo da pilha */
int fat,n;
int *d;
void push(float i);
float pop(void);
int main(void){
int i,fat=1,n;
float a, b;
char s[80];
p = (int *) malloc(MAX*sizeof(int)); /*obtem memoria da pilha*/
if(!p) {
printf("falha de alocacao\n");
exit(1);
}
tos = p; // recebe endereco do topo da pilha
bos = p+MAX-1; // recebe endereco do fundo da pilha
printf("Opcoes da CALCULADORA: \n\n");
printf("#########################\n#\t\t\t#\n# + -> para soma\t#\n# ");
printf("- -> subtracao\t#\n# ");
printf("* -> multiplicacao\t#\n# ");
printf("/ -> divisao\t\t#\n#");
printf(" r -> Raiz Quadrada\t#\n#");
printf(" p -> X elevado a Y\t#\n#");
printf(" f -> Fatorial de X \t#\n#");
printf("'s'-> para sair\t#\n#");
printf("\t\t\t#\n#########################\n\n");
printf("\nDigite alguma operacao");
do { printf(": ");
gets(s);
switch(*s) {
case '+':
a = pop();
b = pop();
printf("%f\n", a+B);
push(a+B);break;
case '-':
a = pop();
b = pop();
printf("%f\n", b-a);
push(b-a);break;
case '*':
a = pop();
b = pop();
printf("%f\n", b*a);
push(b*a);break;
case '/':
a = pop();
b = pop();
if(a==0) {
printf("divisao por 0\n");break;
}
printf("%f\n", b/a);
push(b/a);break;
case '.': /* mostra o conteudo do topo da pilha */
a = pop();
push(a);
printf("O valor atual no topo da pilha ‚: %f\n", a);break;
case 'r':
a=pop();
printf("Raiz quadrada : %f\n",pow(a,1/2.0));
push(pow(a,1/2.0));break;
case 'p':
a=pop();
b=pop();
printf("Potencia : %f\n",pow(a,B));
push(pow(a,B));break;
case 'f':
a=pop();
printf("Fatorial : %f\n", a=fat);
push(fat);break;
default:
push(atoi(s));
}
} while(*s!='s');
}
/* poe um elemento na pilha */
void push(float i){
if(p>bos)
{
printf("Pilha cheia\n");
return;
}
*p = i;
p++;
}
/* Recupera o elemento do topo da pilha */
float pop(void){
p--;
if(p<tos)
{
printf("Pilha vazia\n");
return 0;
}
return *p;
}
/* Função Fatorial da pilha */
int fat(int n){
int f=1;
while(n!=0){
f*=n;
n--;
}return f; }
Editado por noelioyuyuLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.