Ir para conteúdo
Fórum Script Brasil
  • 0

Pilhas


noelioyuyu

Pergunta

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 noelioyuyu
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...