Olá, preciso de ajuda pelo amor de Deus de alguém para me ajudar a resolver um exercício em C usando pilha e se puder me explicar a maneira mais fácil de entender a resolvê-lo?
A lógica do meu código está muito errada provavelmente, mesmo assim irei colocar ele para analisarem. Obrigado!!!
Segue o problema: https://www.urionlinejudge.com.br/judge/pt/problems/view/1944
.Main
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include "pilha.h"
int main()
{
setlocale(LC_ALL, "Portuguese");
Pilha p = Cria_pilha();
char sequencia[100], comparar[100],comparar2[100], comparar3[100], comparar4[100];
int i = 0;
int opc = 0;
int retorno = 0;
int premio = 0;
char fixa[4] = {'E','C','A','F'};
printf("MARATONA DE PROGRAMAÇÃO");
do
{
if ((E_vazia) == 1)
{
for (i=0; i<strlen(fixa); i++)
{
comparar = Push(p, fixa); // comparar = fixa; } printf("\nDigite a sequência de 4 letras a ser inserida: "); fflush(stdin); gets(sequencia); for (i=0; i<4; i++) { comparar2 = Push(p, sequencia); } if (strcmp (comparar, comparar2) == 0) { premio++; for (i=0; i<4; i++) { comparar = Pop(p); } } else { for (i=0; i<4; i++) { comparar = comparar2; } } printf("\nNúmero de Prémios: %d",premio); } else { { printf("\nDigite a sequência de 4 letras a ser inserida: "); fflush(stdin); gets(sequencia); } for (i=0; i<4; i++) { comparar2 = Pop(p); } for (i=0; i<4; i++) { comparar3 = comparar2; } if (strcmp (comparar2, comparar3) == 0) { premio++; } printf("Número de Prémios: %d",premio); } printf("\nDeseja inserir mais equipes? Digite 1 para sim e 0 para não: "); scanf("%d",&opc);
} while(opc == 1); return 0; }
.H
#ifndef PILHA_H_INCLUDED #define PILHA_H_INCLUDED
#define MAX 100
#include <stdio.h> #include <stdlib.h>
struct pilha { int pilha[MAX]; int topo; }; typedef struct pilha* Pilha;
int E_cheia(Pilha Ptp); int E_vazia(Pilha Ptp); Pilha Cria_pilha(); int Push(Pilha Ptp, int elem); int Pop(Pilha Ptp); int Top(Pilha Ptp); void Libera_pilha(Pilha Ptp);
#endif // PILHA_H_INCLUDED
.C
#include "pilha.h"
Pilha Cria_pilha() { Pilha Ptp;
Ptp = (struct pilha*)malloc(sizeof(struct pilha));
Ptp->topo = -1;
return Ptp; }
int E_cheia(Pilha Ptp) { if (Ptp->topo == MAX-1) return 1; else return 0; }
int E_vazia(Pilha Ptp) { if (Ptp->topo == -1) return 1; else return 0; }
int Top(Pilha Ptp) { if (Ptp->topo == -1) return -1; else return Ptp->pilha[Ptp->topo]; }
int Push(Pilha Ptp, int elem) { if (E_cheia(Ptp) == 1) return 0; else { (Ptp->topo)++; Ptp->pilha[Ptp->topo] = elem; return 1; } }
int Pop(Pilha Ptp) { int elem; if (E_vazia(Ptp) == 1) return -1; else { elem = Ptp->pilha[Ptp->topo]; (Ptp->topo)--; return elem; } }