Ir para conteúdo
Fórum Script Brasil

naldoP

Membros
  • Total de itens

    6
  • Registro em

  • Última visita

Sobre naldoP

naldoP's Achievements

0

Reputação

  1. Mais um vez muito obrigado Kuroi sua dicas resolveu meus probelas valeu mesmo, em relação a matrix a duvida era essa mesmo que voce acobou de tirar, agora vou fazer dessa forma que voce citou
  2. Então Kuroi, fiz exatamente agora a forma que voce citou , eu estava aqui pecando em algumas coisas mas funcionou legal a pilha esta Empilhando e Desempilhando normal, valeu pela dica voce me ajudou de mais meu ! agora eu tenho uma outra duvida em relação a vets[], para eu poder jogar os dados dentro de uma matrix por exemplo mat[3][3], #define MAX 3 void Mat_pilhas( Pilha* p, mat[MAX][3] ){ Essa assinatura seria correta ? Então segue abaixo o struct pilha da qual voce sugeriu funcionou prefeitamente Kuroi: #include <stdio.h> #include <stdlib.h> #define MAX 3 typedef struct Pilha{ int vet[MAX]; int topo; }Pilha; Pilha pi1,pi2,pi3; void Empilhar(Pilha* p, int n); int Desempilhar(Pilha* p); void InicializarPilhas(Pilha* p); void ExibirPilhas(Pilha* p); void Menu(void); int main(){ struct Pilha p; int n; char op; Menu(); do{ scanf("%c",&op); switch(op){ case '1': { printf("\nDigite um valor para empilhar : "); scanf("%d",&n); Empilhar(&pi2,n); InicializarPilhas(&p); ExibirPilhas(&p); scanf("%c",&op); break; } case '2': { Desempilhar(&p); ExibirPilhas(&p); scanf("%c",&op); break; } } } while(op != '1' && op != '2'); system("pause"); } void Empilhar(Pilha* p, int n){ if(p->topo > MAX){ printf("\nA pilha esta cheia : "); return; } p->vet[p->topo] = n; p->topo++; } int Desempilhar(Pilha* p){ int n; p->topo--; if(p->topo<-1){ printf("\nA pilha esta vazia : "); return 0; } n = p->vet[p->topo]; return n; } void InicializarPilhas(Pilha* p){ pi1.topo=-1; pi2.topo=-1; pi3.topo=-1; } void ExibirPilhas(Pilha* p){ int n; for(n=p->topo-1;n>=0;n--){ printf("\n%d",pi1.vet[n]); } for(n=p->topo-1;n>=0;n--){ printf("\n\t%d",pi2.vet[n]); } for(n=p->topo-1;n>=0;n--){ printf("\n\t\t%d",pi3.vet[n]); } printf("\n(A)\t(B)\t©"); } void Menu(void){ int n; char op; printf("\nMenu : "); printf("\n1-Empilhar : "); printf("\n2-Desempilhar : "); }
  3. Então Kuroi, é o seguinte, quando eu tento prototipar as funçoes com ponteiro, da erro no "*", e não copila então tentei usar essa versao sem ponteiro, copila mas não esta empilhando e aparece 0 nas tres pilhas. Segue abaixo o codigo Atualizado: #include <stdio.h> #include <stdlib.h> #define MAX 3 void Empilhar(int n); int Desempilhar(void); void ExibirPilhas(void); void InicializarPilhas(void); void Menu(void); typedef struct Pilha{ int vet[MAX]; int topo; }Pilha; Pilha pi1,pi2,pi3; struct Pilha p; int main(){ int n; char op; Menu(); do{ scanf("%c",&op); switch (op){ case '1': { printf("\nDigite um valor para empilhar : "); scanf("%d",&n); Empilhar(n); ExibirPilhas(); scanf("%c",&op); break; } case '2': { Desempilhar(); scanf("%c",&op); break; } } } while(op != '1' && op != '2'); system("pause"); } void Empilhar(int n){ if(p.topo > MAX){ printf("\nA pilha esta cheia : "); return; } p.vet[p.topo] = n; p.topo++; } int Desempilhar(void){ int n; p.topo--; if(p.topo < -1){ printf("\nA pilha esta vazia : "); return 0; } n = p.vet[p.topo]; return n; } void InicializarPilhas(void){ pi1.topo=0; pi2.topo=0; pi3.topo=0; } void ExibirPilhas(void){ int n; for(n=p.topo-1;n>=0;n--){ printf("\n%d",pi1.vet[n]); } for(n=p.topo-1;n>=0;n--){ printf("\n\t%d",pi3.vet[n]); } for(n=p.topo-1;n>=0;n--){ printf("\n\t\t%d",pi3.vet[n]); } printf("\n(A)\t©\t(D)"); } void Menu(void){ printf("\nMenu : "); printf("\n1-Empilhar : "); printf("\n2-Desempilhar : "); }
  4. E ai Kuroi beleza, então consegui fazer aqui mais ou menos a struct, porem não esta funcionando o codigo esta copilando mas quando executa a janela fecha na hora, gostaria de saber se está certa essa forma do codigo, para poder testar eu so estou usando uma pilha para empilhar e desempilhar, apesar de ter tres pilhas, so estou usando uma para teste ok ! Segue abaixo codigo: #include <stdio.h> #include <stdlib.h> #define MAX 3 void InicializarPilhas(void); typedef struct Pilha { int vet[MAX]; int topo; }Pilha; Pilha pi1,pi2,pi3; int main(){ struct Pilha p; int resp; InicializarPilhas(); void Menu(Pilha* p, int n); } void Empilhar(Pilha* p, int n){ if(p->topo == MAX){ printf("A pilha esta vazia\n "); exit(1); } p->vet[p->topo] = n; p->topo++; } int Desempilhar(Pilha* p){ int n; if(p->topo==0){ printf("A pilha esta vazia\n"); exit(1); } n = p->vet[p->topo-1]; p->topo--; return n; } void InicializarPilhas(void ){ pi1.topo=0; pi2.topo=0; pi3.topo=0; } void ListarPilhas(Pilha* p){ int i; for(i=p->topo-1;i>=0;i--){ printf("\n%d",pi1.vet[i]); } for(i=p->topo-1;i>=0;i--){ printf("\n\t%d",pi2.vet[i]); } for(i=p->topo-1;i>=0;i--){ printf("\n\t\t%d",pi3.vet[i]); } printf("\n(A)\t(B)\t©"); } void Menu(Pilha* p, int n){ char op; printf("\nMenu"); printf("\n 1 - Empilhar"); printf("\n 2 - Desempilhar"); do{ scanf("%c",&op); switch (op){ case '1': { printf("Digite um valor para empilhar: "); scanf("%d",&n); Empilhar(&pi1, n); ListarPilhas(p); break; } case '2': { Desempilhar(&pi1); break; } } } while(op != '1' && op != '2'); system("pause"); }
  5. Primeiramente gostaria de agradecer a sua boa vontade de me ajudar, valeu Kuroi a sua dica realmente vai ser o meu obejtivo agora, em relação as pilhas acontece o seguinte os professores da faculdade falam que tinha mesmo que usar uma struct para tratar as pilhas; mas sabemos que na faculdade os professores não dao muita detalhes por exemplo ele pediu para que agente desenvolvese um jogo a Torre de Hanoi que envolbe tres pinos, por isso eu fiz essas 3 pilhas para testar e entender melhor sobre os movimentos dela, em relação a struct eu tentei fujir o maximo porque não consegui entender direito são muitas duvidas por esse motivo arrisquei a fazer esse codigo sem noção , que por sua vez não funcionou, mas graças a suas dicas agora vi que e possivel fazer a struct, na internet existem muitas implementaçoes mas nada que manipule mais de uma pilhas compartilhando o mesmo dado. sou meio de vagar para pegar as logicas mas com esforço acredito que chego la mas com certeza com ajuda de gente humilde igual a voces ai, valeu pelas dicas. Mas como já estou por que gostari de pedir mais umas dicas se for possivel ok !! A minha duvida agora e o seguinte, voce citou a; typedef sctruct pilha { int itens[MAX]; //Guarda os itens int tos; //Guarda a quantidade de itens }; assim, você declara as pilhas de uma vez só: CODE pilha pi1, pi2, pi3, pi4; Ate aqui eu entendi, mas e no caso dos tos eu inicializo eles já na struct ou na main ? int tos1,tos2,tos3, dessa forma estaria correto ? Outra duvida sera que eu posso fazer uma função paramentrizando todas a pilhas para empilhar e paramentrizando todas as pilhas para desempilha assim como fiz naquele codigo, ou as funçoes de cada pilha tem que ser separadas uma funçao para cada pilha ao de vez ser em uma função so ?
  6. Ola pessoal é o seguinte estou tendo problemas em desenvolver essa pilhas; o objetivo e fazer 3 pilhas no sentido de empilhar na pilha1 e desempilhar empilhar na pilha2 desempilhar e empilhar na pilha3, eu fiz aqui uma implementação com 3 pilhas empilhando e desempilhando, na função empilha esta tudo beleza o problema esta no desempilhar, quando eu empilho na pi1[tos1 peço para desempilhar tudo ok ! ai e mesmo elemento que foi desempilhado vou empilhar na pi2[tos2] tudo ok ! ai o mesmo elemento que foi desempilhado eu empilho na pi3[tos3] tudo ok ! o problema começa aqui na pi3[tos3] eu mando desempilhar não desempilhar ele continua a desempilhar a pi2[tos2] não desempilha a pi3[tos3]. Bom pessoal aqui esta o codigo para analise: #include <stdlib.h> #include <time.h> #define MAX 10 int Empilhar (int pi1[], int pi2[], int pi3[],int pi4[], int dado, int num, int aux2); int Desempilhar(int pi1[], int pi2[], int pi3[],int pi4[], int del); void Nulos(int pi1[], int pi2[], int pi3[], int pi4[]); void ExibirPilhas (int pi1[], int pi2[], int pi3[], int pi4[]); int pi1[MAX],pi2[MAX],pi3[MAX],pi4[MAX],mat[5][3]; int tos1=0,tos2=0,tos3=0,tos4=0,adc,num,aux2=0,aux3=0,aux4=0,dado,del; int main(){ char op; Nulos(pi1,pi2,pi3,pi4); printf("\n\nMenu: \ne - Empilhar\nd - Desempilhar\ni - Inserir\nr - Remover\ns - Sair\n\nDigite sua Opcao: "); do { scanf("%c",&op); switch (op){ case 'E' : { printf("\nDigite a direcao "); scanf("%d",&num); printf("\nDigite um valor "); scanf("%d",&dado); Empilhar(pi1,pi2,pi3,pi4,dado,num,aux2); ExibirPilhas(pi1,pi2,pi3,pi4); scanf("%c",&op); break; case 'D' : { printf("\nDigite a direcao "); scanf("%d",&del); aux2 = Desempilhar(pi1,pi2,pi3,pi4,del); ExibirPilhas(pi1,pi2,pi3,pi4); printf("\nRemovido %d",aux2); } scanf("%c",&op); break; case 'I' : { printf("\nDigite a direcao"); scanf("%d",&num); Empilhar(pi1,pi2,pi3,pi4,dado,num,aux2); ExibirPilhas(pi1,pi2,pi3,pi4); scanf("%c",&op); break; } } } } while(op != 'E' && op != 'D'); system("pause"); } int Empilhar (int pi1[], int pi2[],int pi3[],int pi4[], int dado, int num, int aux2){ if(tos1 > MAX ){ printf("A pilha esta cheia\n"); return; }else{ if(num == 1){ pi1[tos1]= dado; tos1++; }else{ if(tos2 > MAX){ printf("A pilha esta cheia\n"); return; }else{ if(num == 2){ pi2[tos2]=aux2; tos2++; }else{ if(tos3 > MAX){ printf("A pilha esta cheia\n"); return; }else{ if(num == 3){ pi3[tos3]=aux2; tos3++; }else{ if(tos4 > MAX){ printf("A pilha esta cheia\n"); return; }else{ if(num == 4){ pi4[tos4] = aux2; tos4++; } } } } } } } } } int Desempilhar(int pi1[], int pi2[], int pi3[],int pi4[], int del){ tos1--; if(tos1 < -1){ printf("A pilha esta vazia\n "); return 0; }else{ if(del == 1){ return pi1[tos1]; }else{ tos2--; if(tos2 < -1){ printf("A pilha esta vazia\n "); return 0; }else{ if(del == 2){ return pi2[tos2]; }else{ tos3--; if(tos3 < -1){ printf("A pilha esta vazia\n "); return 0; }else{ if(del == 3){ return pi3[tos3]; }else{ tos4--; if(tos4 < -1){ printf("A pilha esta vazia\n "); return 0; }else{ if(del == 4){ return pi4[tos4]; } } } } } } } } } } void Nulos(int pi1[], int pi2[], int pi3[], int pi4[]){ int aux; for(aux=0;aux<=MAX;aux++){ pi1[aux]=0; pi2[aux]=0; pi3[aux]=0; pi4[aux]=0; } } void ExibirPilhas(int pi1[], int pi2[], int pi3[],int pi4[]){ int i; for(i=tos1-1;i>=0;i--){ printf("\n%d",pi1[i]); } for(i=tos2-1;i>=0;i--){ printf("\n\t%d",pi2[i]); } for(i=tos3-1;i>=0;i--){ printf("\n\t\t%d",pi3[i]); } for(i=tos4-1;i>=0;i--){ printf("\n\t\t\t%d",pi4[i]); } printf("\n(A)\t(B)\t(C)\t(D)"); }
×
×
  • Criar Novo...