Ir ao conteúdo

Posts recomendados

Postado

Faça uma função que recebe como parâmetro duas pilhas e 1 vetor de int e para cada um:

Caso o número seja positivo, insira numa pilha;

Caso o número seja negativo, insira noutra pilha;

Caso o número seja zero, retire um elemento de cada pilha

 

preciso de ajuda urgente com esse programa!!!

 

não tenho ideia de por onde começar...alguém me dê uma luz por favor!!!

 

  • Triste 1
Postado

@arfneto Consegui fazer isso aqui, mas não não está funcionando. Você pode me ajudar? preciso muito, é urgente!!!

Citação

 

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

#define MAX 50

 

typedef struct pilha {
    int vet[MAX];
    int n;
} Pilha;

 

Pilha* cria () {
    Pilha *p = (Pilha*) malloc(sizeof(Pilha));
    p->n = 0;
    return p;
}

 

int vazia (Pilha *p) {
    return (p->n == 0);
}

 

void push (Pilha *p, int v) {
    if (p->n == MAX) {
        printf("\nOVERFLOW - Capacidade da pilha estourou.\n");
        exit(1);
    }
    p->vet[p->n] = v;
    p->n++;
}

 

int pop (Pilha *p) {
    int v;
    if (vazia(p)) {
        printf("\nUNDERFLOW - Pilha vazia.\n");
        exit(1);
    } else {
        v = p->vet[p->n-1];
        p->n--;
    }
}

 

void imprime (Pilha* p) {
    int i;
    for (i=p->n-1; i>=0; i--) {
        printf("%d\n", p->vet[i]);
    }
}

 

void FUNCAO (Pilha *P1, Pilha *P2, int vet[]) {
    int i, tam = sizeof vet / sizeof vet[0];
    for (i = 0; i < tam; i++) {
        if (i > 0) {
            push(P1, vet[i]);
        } else if(i < 0) {
            push(P2, vet[i]);
        } else {
            pop(P1);
            pop(P2);
        }
    }
}

 

int main (void) {
    Pilha *P1 = (Pilha*) malloc(sizeof(Pilha));
    P1 = cria();
    Pilha *P2 = (Pilha*) malloc(sizeof(Pilha));
    P2 = cria();
    
    int vet[] = {1, 2, 3, -4, -5, -6, 0};
    
    FUNCAO(P1, P2, vet);
    imprime(P1);
    imprime(P2);
    return 0;
}

 

 

Postado

 

8 minutos atrás, Antônio da Silva disse:

void FUNCAO (Pilha *P1, Pilha *P2, int vet[]) {
    int i, tam = sizeof vet / sizeof vet[0];

 

Isso não funciona. Faça o simples e passe o tamanho do vetor. Seu compilador não deu uma mensagem explicando isso? vet é (*)int[]. O tamanho é o tamanho de um ponteiro. vet[0] é int. O tamanho é o tamanho de um int. Já imagina quanto vai dar a conta...

Postado
5 minutos atrás, Antônio da Silva disse:

Meu compilador não exibiu nenhuma mensagem e não estou conseguindo entender o que você disse, poderia ser mais claro por gentileza? Não consigo corrigir meu código! Preciso entregar para meu professor amanhã!

 

Desculpe. Achei que estava claro. E que seu compilador teria dito algo. Não teve qualquer mensagem? Talvez deva usar outro compilador, ou configurar para exibir mais mensagens, ou os dois.

 

27 minutos atrás, arfneto disse:

tam = sizeof vet / sizeof vet[0];

 

Isso não funciona. Está claro? É correto sintaticamente. Mas não faz sentido para o que você quer.

 

27 minutos atrás, arfneto disse:

Seu compilador não deu uma mensagem explicando isso? vet é (*)int[]. O tamanho é o tamanho de um ponteiro

 

Se vet é um ponteiro para um vetor de int o tamanho dele é o tamanho de um ponteiro para int. 4 ou 8 bytes em Windows, por exemplo. O compilador gcc dá um aviso, mscv não dá. gcc é mais amigo nos warnings. MSVC é mais profissional e como está certo deixa pra lá. 

 

Use -Wall no compilador de todo modo.

 

28 minutos atrás, arfneto disse:

vet[0] é int. O tamanho é o tamanho de um int

 

Pois é: vet[0] é int e o tamanho é o tamanho de um int na sua máquina, Provavelmente 4.

 

29 minutos atrás, arfneto disse:

Já imagina quanto vai dar a conta...

 

Vai dar 8/4 ou 4/4, no popular 2 ou 1.

 

Numa maquina comum, Linux em Windows via WSL2, gcc 9.3:

 

toninho@DSK-2009:~/projects/tcursor$ cc asilva.c
asilva.c: In function FUNCAO’:
asilva.c:63:25: warning: sizeof on array function parameter vet will return size of int *’ [-Wsizeof-array-argument]
   63 |     int i, tam = sizeof vet / sizeof vet[0];
      |                         ^~~
asilva.c:62:40: note: declared here
   62 | void FUNCAO (Pilha *P1, Pilha *P2, int vet[]) {
      |                                    ~~~~^~~~~
toninho@DSK-2009:~/projects/tcursor$ ./a.out
tam calculado = 2

UNDERFLOW - Pilha vazia.
toninho@DSK-2009:~/projects/tcursor$ 

 

Acrescentei uma linha:

 

void FUNCAO (Pilha *P1, Pilha *P2, int vet[]) {
    int i, tam = sizeof vet / sizeof vet[0];

    printf( "tam calculado = %d\n", tam);

 

Faça o simples e acrescente o tamanho na lista de parâmetros

 

 

Postado
41 minutos atrás, Antônio da Silva disse:

Obrigado amigo, você é um amigo. Consegui corrigir o meu código graças a sua ajuda!! Muito obrigado mesmo!

 

Bom que funcionou. Seu programa está bem escrito. Não fosse esse detalhe teria terminado muito antes.

Um printf() teria te mostrado o problema...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!