Ir ao conteúdo
  • Cadastre-se

C Exércicio de Pilha e TAD


Gabriel LTC

Posts recomendados

Pessoal to fazendo um curso de Estrutura de Dados e foi passado o seguinte exercício:

 

                                                                                                                                   Objetivo

O seu objetivo é construir uma simples IDE para LISP. Nesta IDE, dado um código e uma posição de um caracter, você deve dizer se o código está sintaticamente correto e qual o nível que o caracter na posição dada está. Um código de LISP está sintaticamente correto se para cada parêntese aberto, há um fechado equivalente. Outras características sintáticas da linguagem podem ser ignoradas neste trabalho.

A posição dos caracteres começam a contar a partir de 1 e o primeiro nível é dado dentro do primeiro parêntese aberto. Um código em LISP pode possuir qualquer caracter do teclado, sem acentos, incluindo espaços e quebras de linha. O código abaixo representa o fatorial em LISP.

(defun factorial (n)(if (<= n 1) 1 (* n (factorial (- n 1)))))

Para o código acima, que está correto, o caracter na posição 3 é a letra 'e' e ela está no nível 1, já na posição 29 temos o caracter 'n' no nível 3.

Entrada e Saída

A entrada consiste do valor de n (número de caracteres no programa), seguido do valor de i (posição do elemento específico que queremos saber o nível). Seguido desses dados, na linha seguinte, temos o programa em si que pode conter qualquer caracter existente na Tabela ASCII (lembre-se de que a quebra de linhas, ou \n, é um caracter. Um parênteses nunca é dado como elemento e se o programa estiver incorreto não é necessário dar o nível do elemento.

Você deve utilizar o arquivo pilha.h ( a biblioteca pilha.h está no final do post ) para criação de um Tipo Abstrato de Dados para uma pilha que obrigatoriamente deve ser utilizada na resolução do problema. Mudanças no TAD ou a não utilização de uma pilha na resolução do problema acarretarão em nota ZERO.

Exemplos

Nos exemplos abaixo a cor azul representa a entrada que deve ser lida pelo seu programa, e a cor vermelha, a saída que deve ser gerada pelo seu programa na saída padrão.

Exemplo 1:

62 29

(defun factorial (n)(if (<= n 1) 1 (* n (factorial (- n 1)))))

O programa está correto e o elemento n esta no nivel 3.

Exemplo 2:

62 29

(defun factorial (n](if (<= n 1) 1 (* n (factorial (- n 1)))))

O programa está incorreto.

Exemplo 3:

106 10

;;; This function simply returns the string Hello World that is in quotes.

(DEFUN HELLO ()

"HELLO WORLD"

)

O programa está correto e o elemento f esta no nivel 0.

 

 

Eu estou com muita duvida de como faze-lo então se alguém puder me ajudar de alguma forma serie muito grato, principalmente com a questão da pilha.h. Qualquer ajuda é bem vinda!

 

 

biblioteca pilha.h:

 

#ifndef PILHA_H_
#define PILHA_H_

#include <stdio.h>

#define MAX 100

typedef struct pilha {
       char elementos[MAX];
       int topo;
} Pilha;

Pilha create();
char pop(Pilha *p);
void push(Pilha *p, char c);
int isEmpty(Pilha p);
int isFull(Pilha p);
int size(Pilha p);

#endif
 

 

Link para o comentário
Compartilhar em outros sites

@Gabriel Lannes , não conheço muito bem a linguagem LISP, porém a pergunta que eu lhe faço é:

Você recebeu o arquivo de cabeçalho do seu programa de pilha ( .h), você não sabe implementar esses métodos?

Você teve aulas sobre Pilha e LIFO? Sabe a "teoria" sobre pilhas?

Abraço!

Link para o comentário
Compartilhar em outros sites

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