Ir ao conteúdo
  • Cadastre-se

DeadCold

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por DeadCold

  1. Obrigado BlackScreen, já arrumei o erro, mas mesmo assim, me retorna lixo como memória, estou olhando o código e ainda vejo alguns errinhos, tanto que arrumei. no "if op == 6", meu scanf tá errado :P
    acho que meu problema é que preciso retornar 2 valores da minha função push, preciso retornar o valor que inseri, "val", e o "x" que seria como uma variável contadora, para poder andar pela pilha e controlar se houver Overflow ou Underflow. Mudei meu código e aparentemente tá funcionando aos poucos, nas funções os parâmetros são ponteiros, e quando chamo essas funções na main, uso o "&" para conseguir o valor correto da variavel passada. Ficou confuso, mas isso aí. :P
    Se conseguir progredir mais, vou postar o código aqui

  2. Olá gente, sou novo no fórum, criei uma conta aqui para tirar uma dúvida, pretendo postar mais. Estou estudando Estrutura de Dados em C na faculdade e preciso implementar uma pilha em C, comecei a fazer um código utilizando vetores, de início comecei a fazer com struct e ponteiros, mas o professor liberou para fazer com Vetor. Ele quer que seja criada uma calculadora RPN (notação polonesa reversa) usando o conceito de Pilha. Meu código está rodando, porém não funciona, o problema está na hora de inserção de valores na pilha, porém não sei o que é! Ao invés de me retornar o resultado da conta, e/ou inserir um número, simplesmente me retorna uma posição de memória e não o valor que inseri. 

     

    #include <stdio.h>
    #include <stdlib.h>
     
    #define MAXPUSH 10
    #define true 1
    #define false 0
     
    int pilha[MAXPUSH];
    int push(int val, int x)
    {
    if (pilha[0] == NULL)
    {
    pilha[0] = val;
    x++;
    }
    if (x == MAXPUSH)
    {
    printf("Overflow!\n\n");
            system("pause");
            exit(1);
        }
        pilha[x]=val;
        x++;
     
        return x;
    }
    int pop(int x)
    {
    if(x < 0)
    {
    printf("Underflow!\n\n");
    system("pause");
    exit(1);
    }
    pilha[x] = NULL;
    x--;
    return x;
    }
     
    int main()
    {
        int status=1;
        int val, op, x;
        printf("Bem-vindo! Calculadora RPN usando conceito de Pilha\n");
        printf("Informe uma opcao:\n");
    while (status==1)
        {
            printf("\n\n[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisão\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\n\n");
            printf("Informe o codigo referente ao processo desejado: ");
            scanf("%d",&op);
    while (op!= 1 && op!= 2 && op!= 3 && op!=4 && op!=5 && op!=6 && op!=7)
            {
                system("cls");
                printf("Informe uma opcao:\n");
                printf("[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisao\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\nOpcao desejada: ");
                scanf("%d",&op);
            }
            system("cls");
            if (op==1)
            {
                if (x < 2)
                {
                    printf("Impossivel realizar operacao!\n\n");
                    system("pause");
                    system("clear");
                    exit(1);
                }
    printf("Soma!");
    val = pilha[x-1] + pilha[x];
                pop(x);
                pop(x);
    push(val, x);
                printf("\n\nValor do resultado: %d",val);
            }
            if (op==2)
            {
                if (x < 2)
                {
                    printf("Impossivel realizar operacao!\n\n");
                    system("pause");
                    system("clear");
                    exit(1);
                }
                printf("Subtracao!");
    val = pilha[x-1] - pilha[x];
                pop(x);
                pop(x);
    push(val, x);
                printf("\n\nValor do resultado: %d",val);
            }
            if (op==3)
            {
                if (x < 2)
                {
                    printf("Impossivel realizar operacao!\n\n");
                    system("pause");
                    system("clear");
                    exit(1);
                }
                val = pilha[x-1] * pilha[x];
                pop(x);
                pop(x);
    push(val, x);
                printf("\n\nValor do resultado: %d",val);
            }
            if (op==4)
            {
                if (x < 2)
                {
                    printf("Impossivel realizar operacao!\n\n");
                    system("pause");
                    system("clear");
                    exit(1);
                }
                printf("Divisao!");
    val = pilha[x-1] / pilha[x];
                pop(x);
                pop(x);
    push(val, x);
                printf("\n\nValor do resultado: %d",val);
            }
    if (op==5)
    {
       if (x < 2)
                {
                    printf("Impossivel realizar operacao!\n\n");
                    system("pause");
                    system("clear");
                    exit(1);
                }
    val = pilha[x-1] ^ pilha[x];
                pop(x);
                pop(x);
    push(val, x);
                printf("\n\nValor do resultado: %d",val);
    }
    if (op==6)
    {
    printf("Inserir Numero!\n\nInsira um numero na pilha: ");
    fflush(stdin);
                scanf("&d",&val);
                push(val, x);
                printf("\n\n");
                system("pause");
                printf("\n\n");
    }
    if (op==7)
    {
    printf("Sair!\n\n");
    system("pause");
                status = 0;
    }
        }
    return 0;
    system("pause");
    }
     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!