gokernel
(usa Linux Mint)
Enviado em 16/03/2010 - 12:50h
Veja o arquivo MAIS LEGIVEL no meu HD VIRTUAL:
http://www.4shared.com/account/dir/24056491/7a5bc050/sharing.html?rnd=93
ARQUIVO: pilha.zip
OK? T++.
//----------- PILHA.C ----------
#include "biblioteca.h"
// COMPILE:
//-------------------------------------------------
// gcc pilha.c -o pilha.exe biblioteca.c -Wall
//-------------------------------------------------
//
// T++.
//
// gokernel - Francisco G. A.
// gokernel@hotmail.com
//
int main(int argc, char *argv[]) {
//-------------------------------------------------------------
// OBS: Aqui vc esta definindo a FUNCAO... mas essa nao eh usada para criar o PONTEIRO...
// REVEJA...
// O PONTEIRO "p" NAO FOI CRIADO POIS ESSA FUNCAO NAO EH USADA... APENAS DEFINIDA...
//
// ENTENDEU ??? T++.
//-------------------------------------------------------------
Pilha* pilha_cria (void) {
Pilha* p = (Pilha*)malloc(sizeof(Pilha));
p->topo = (-1); //inicializa com zero elementos.
return p;
}
// Entao estou usando/CRIANDO... AGORA VIU.
p = pilha_cria();
char op;
do {
printf ("\nMenu");
printf ("\n\nI - Insere");
printf ("\nR - Remover");
printf ("\nT - Topo");
printf ("\nS - Sair");
printf ("\n\nInforme a operacao desejada: ");
fflush (stdin);
scanf ("%c", &op);
op = my_toupper (op);
// system ("cls");
switch(op){
case 'I':
printf ("Informe o valor que deseja inserir: ");
fflush (stdin);
//ERRO: scanf ("%d",&p);
scanf ("%d", &op); // REVEJA O PARAMETRO 1... OK?
// system ("pause");
// system ("cls");
/*
if (pilha_insere()){ // <-- AQUI PRECISA 2 ARGUMENTOS
//ERRO: printf ("O valor - %d - foi inserido\n", (p));
}
else {
//ERRO: printf ("O valor - %d - NAO foi Inserido - A pilha esta cheia\n\n", p);
}
*/
break;
case 'R':
printf (" -- Removendo dados da pilha --\n");
fflush (stdin);
/*
if (pilha_remove()) { // <-- AQUI PRECISA 1 ARGUMENTOS
//ERRO: printf ("O valor - %d - foi removido\n", p);
}
else {
printf ("NAO foi removido - A Pilha esta vazia\n\n");
}
*/
break;
// system ("pause"); // <-- ISSO NAO TEM EFEITO AQUI.
// system ("cls"); // <-- ISSO NAO TEM EFEITO AQUI.
case 'T': {
printf ("-- Mostra valor do topo da pilha --\n");
fflush (stdin);
int x;
// ERRO: a=pilha_top();
x = pilha_top();
if (x) {
printf ("Elemento do topo %d\n", x);
}
else {
printf ("NAO existe elemento no topo - Pilha vazia\n");
}
} break;
default:
if (op == 'S') {
printf ("Saindo...\n");
}
else {
printf ("Operacao invalida\n");
}
}//END: switch(op)
system ("pause");
system ("cls");
}while (op != 'S');
system("pause");
return 0;
}
//---------- BIBLIOTECA.C ----------
#include "biblioteca.h"
char my_toupper(char op) { //funçao que muda a fonte
if ((op >= 'a') && (op <= 'z')) {
op = op -32;
}
return (op);
}
void pilha_insere (Pilha* p, int v) { /* insere pilha */
if (pilha_cheia (p)) { //verifica se a capacidade do vetor foi esgotada
printf ("A pilha ficou cheia!\n");
//ERRO: return (0);
return;
}
p->PILHA[p->topo] = v; /*insere o novo elemento na próxima posição livre*/
p->topo++;
}
int pilha_remove (Pilha *p) { /* remove pilha */
int v;
if (pilha_vazia (p)) {
printf ("Pilha está vazia!\n");
return (0);
}
// ERRO: v = p->PILHA[ p->(topo-1) ]; /*agora retira o elemento do topo da pilha*/
v = p->PILHA[ p->topo-1 ]; /*agora retira o elemento do topo da pilha*/
p->topo--;
return v;
}
int pilha_vazia (Pilha* p) { /* pilha vazia */
return (p->topo == (-1));
}
int pilha_cheia(Pilha* p) { /* pilha cheia */
//ERRO: return (topo == (N-1));
// ACHO QUE VC QUERIA ASSIM...
return (p->topo == (N-1));
}
int pilha_top (void) { /* topo da pilha */
if (!pilha_vazia(p)){
// ERRO: return (PILHA[topo]);
// ACHO QUE VC QUERIA ASSIM...
return (p->PILHA[p->topo]);
}
return (0);
}
//---------- BIBLIOTECA.H ----------
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
#define N 5
//ERRO: typedef struct pilha { /* cria pilha */
typedef struct Pilha { /* cria pilha */
int n;
int topo;
int PILHA[N];
}Pilha;
Pilha *p; // Defini aqui o PONTEIRO GLOBAL...
char my_toupper(char op);
// ERRO NA DEFINICAO: void pilha_insere (int p, int v);
void pilha_insere (Pilha* p, int v);
//ERRO NA DEFINICAO: int pilha_remove (int p);
int pilha_remove (Pilha *p);
//ERRO NA DEFINICAO: int pilha_vazia (int p);
int pilha_vazia (Pilha* p);
//ERRO NA DEFINICAO: int pilha_cheia(int p);
int pilha_cheia(Pilha* p);
int pilha_top (void);