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

Pilha[Ajuda]


Samuel Fernandes

Pergunta

Bom boa noite pessoal, eu sou inciante em C e estou estudando pilha.Foi me passado um exercício onde eu deveria criar uma pilha para armazenar um

certo número de carros(marca,modelo,cor e placa).

Então e dividi o problema e tentei primeiro alocar dinamicamente as pilhas na memória e assim ficou meu código

#include <stdio.h>
#include <stdlib.h>

struct carro {
       char cor[10],modelo[10],marca[10];
       int placa;
       };
typedef struct carro tcarro;


struct p {
    int inicio;
    tcarro *pilha;
    };
typedef struct p tpilha;

tpilha* incrementar_pilha ();
void menu ();

        int main () {
            tpilha *p;
            tcarro *c;
            int op;
            do {
                menu();
                scanf(" %d",&op); 
                switch (op) {
                       case 1 :
                            p=incrementar_pilha();
                            break;
                       }
            }while (op != 'c');
            system("pause");
            return 0;
        }
        
        tpilha* incrementar_pilha () {
                tpilha *p;
                int max;
                printf("Digite o numero maximo de carros");
                scanf(" %d",&max);
                p->pilha=(tcarro*)malloc(max*sizeof(tcarro));
        return p;
        }

        void menu () {
             printf("1. Adicionar Carro\n");
             printf("2. Retirar Carro\n");
             printf("3. Sair\n");
        }

Mas pelo visto o erro está aqui : " p->pilha=(tcarro*)malloc(max*sizeof(tcarro)); ".

Alguém sabe como eu poderia criar uma pilha alocar esses carros?

Estou completamente perdido, obrigado pela ajuda.

OBS: esse é o enunciado : Uma aplicação para gerenciar informações sobre carros que ficam em um estacionamento: placa, marca, modelo e cor. A aplicação deve permitir inserir, alterar e excluir as informações de um carro.Utilizando Pilhas.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Bom dia!

Antes de qualquer coisa, quero comentar um pouco sobre pilhas. Elas são o que o nome diz: um conjunto de objetos agrupados de forma sequencial, como uma pilha de pratos ou mesmo uma fila de banco. Basicamente existem dois tipos de pilhas, que foram exemplificados nestes exemplos: a FILO (First In, Last Out - Primeiro a entrar, Último a sair - a pilha de pratos) e a FIFO (First In, First Out - Primeiro a entrar, Primeiro a sair - a fila de banco).

Para o controle de um estacionamento seria mais normal uma lista e não uma pilha mas já que foi pedido assim, tudo bem... :)

Agora sobre o seu código:

As estruturas estão ok. Eu só mudaria uma coisa na definição da pilha: ao invés da variável início eu teria outras duas: tamanho e itens.

Tamanho armazenaria o total de elementos que podem ser inseridos e itens seria a quantidade de elementos que existem na pilha.

Outra coisa: a placa tem letras também então, a não ser que o professor falou para ser feito assim, você precisaria mudar para um char[10] como você fez com as outras variáveis.

Sobre o seu "erro" o que acontece é que essa é a função cria a pilha e não a que incrementa. Incrementar a pilha seria adicionar um item a ela.

Essa função cria a pilha corretamente, não há erro nenhum... :)

Depois, para adicionar, use um código como o abaixo:

void incrementa_pilha(tpilha *p)
{
    if(p->itens < p->tamanho) {
        printf("Marca: ");
        scanf("%s",  p->pilha[p->itens].marca);
        printf("Modelo: ");
        scanf("%s",  p->pilha[p->itens].modelo);
        printf("Cor: ");
        scanf("%s",  p->pilha[p->itens].cor);
        printf("Placa: ");
        scanf("%d",  p->pilha[p->itens].placa);
        p->itens++;
   } else {
        printf("Pilha cheia!\n");
}

Este código eu fiz de cabeça, no celular e dentro do tem mas acho que está correto! :D

Qualquer coisa avise!

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia!

Antes de qualquer coisa, quero comentar um pouco sobre pilhas. Elas são o que o nome diz: um conjunto de objetos agrupados de forma sequencial, como uma pilha de pratos ou mesmo uma fila de banco. Basicamente existem dois tipos de pilhas, que foram exemplificados nestes exemplos: a FILO (First In, Last Out - Primeiro a entrar, Último a sair - a pilha de pratos) e a FIFO (First In, First Out - Primeiro a entrar, Primeiro a sair - a fila de banco).

Para o controle de um estacionamento seria mais normal uma lista e não uma pilha mas já que foi pedido assim, tudo bem... :)

Agora sobre o seu código:

As estruturas estão ok. Eu só mudaria uma coisa na definição da pilha: ao invés da variável início eu teria outras duas: tamanho e itens.

Tamanho armazenaria o total de elementos que podem ser inseridos e itens seria a quantidade de elementos que existem na pilha.

Outra coisa: a placa tem letras também então, a não ser que o professor falou para ser feito assim, você precisaria mudar para um char[10] como você fez com as outras variáveis.

Sobre o seu "erro" o que acontece é que essa é a função cria a pilha e não a que incrementa. Incrementar a pilha seria adicionar um item a ela.

Essa função cria a pilha corretamente, não há erro nenhum... :)

Depois, para adicionar, use um código como o abaixo:

void incrementa_pilha(tpilha *p)
{
    if(p->itens < p->tamanho) {
        printf("Marca: ");
        scanf("%s",  p->pilha[p->itens].marca);
        printf("Modelo: ");
        scanf("%s",  p->pilha[p->itens].modelo);
        printf("Cor: ");
        scanf("%s",  p->pilha[p->itens].cor);
        printf("Placa: ");
        scanf("%d",  p->pilha[p->itens].placa);
        p->itens++;
   } else {
        printf("Pilha cheia!\n");
}

Este código eu fiz de cabeça, no celular e dentro do tem mas acho que está correto! :D

Qualquer coisa avise!

Abraços,

Marcelo Utikawa da Fonseca

Marcelo muito obrigado pela ajuda vou tentar rodar o código aqui =D.

Link para o comentário
Compartilhar em outros sites

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...