Buscar

Forum Estruturas de Dados 6 a 10

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

03/11/12 Campus Virtual Estácio
1/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
2012.3-EAD - ESTRUTURA DE DADOS
(CCT0174/1242205) 9002 - Fórum de Discussão
Aulas 6 a 10
 
Criado pelo(a) Professor (a) .PRODUÇÃO EAD em 05/08/2012 00:29:01
Caros Alunos,
Esse é o espaço destinado para discussão dos conteúdos e conceitos abordados nas aulas 6 a 10. Contribua com suas anotações, dúvidas e pontos de vista,
visto que sua nota de participação será apurada por meio da colaboração nas discussões desse tópico. Além disso, o (a) tutor (a) a distância irá lançar
questionamentos para interação de todos.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 39 dias atrás
Assita a aula 6 e poste aqui uma aplicação para pilha sequencial, mostre também a implementação em C++ da aplicação escolhida.
Abcs
Alexandre
 
 Aluno (a) WELLINGTON PEREIRA DE OLIVEIRA respondeu a 35 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Essa aplicação converte um numero decimal em binário
 
 #include <iostream>
using namespace std;
int main()
{
int pilha=0;
int n,j,quo,resto, op;
int vet[30];
do{
system( "cls" );
cout <<" 1 - Entrar no programa \n 0 - Sair"<<endl << endl;
cin >> op;
if ((op>1) || (op<0))
cout << "NAO EXISTE ESTA OPÇÃO! POR FAVOR, DIGITE NOVAMENTE A opção: ";
else if (op == 1) {
cout <<"\t\tTRANSFORME NUMERO DECIMAL PARA BINARIO!!!"<<endl << endl;
cout <<"Digite um numero: ";
cin>> n;
do
{
quo=n/2;
resto=n%2;
vet[pilha]=resto;
pilha++;
n=quo;
}
while (n!=0);
cout<<"\n\nO numero em binario e': ";
for (j=pilha-1;j>=0;j--)
cout << vet[j];
cout<<endl<<endl;
system( "pause" );
cout<< endl;
}
}while(op != 0);
cout<< "voce saiu do programa!!\n";
 
}
03/11/12 Campus Virtual Estácio
2/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 35 dias atrás 
Comentário da postagem de WELLINGTON PEREIRA DE OLIVEIRA
Oi Wellington,
A aplicação que apresentou sobre pilha, apesar de ser clássica está correta. Porém não apresentou a implementação completa, onde estão
as funções de inserção e remoção de dados na pilha?
Melhore sua postagem, se quiser tente imaginar alguma outra aplicação para a pilha, veja esta é uma estrutura que guarda a ordem reversa
dos dados armazenados, sendo assim pode buscar várias aplicações que necessitem deste conceito.
[]s
Alexandre
 Aluno (a) WELLINGTON PEREIRA DE OLIVEIRA respondeu a 33 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 /*
O Estacionamento do seu Mário contém uma única passagem por onde os carros devem entrar e sair e por onde passa somente
um carro de cada vez.
Se chegar um cliente para retirar um carro que não seja o mais próximo da saída, todos os carros bloqueando seu caminho
sairão do estacionamento.
O carro do cliente será manobrado para fora do estacionamento, e os outros carros voltarão a ocupar a mesma sequência inicial.
Para retirar algum carro, é necessário primeiro retirar o carro que se encontra na frente.
Para o cadastro será pedido a placa, o tempo, o preço. O total a ser pago será gerado automáticamente
A capacidade do Estacionamento é para guardar até cinco carros.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Número maximo de chars nas vars
#define MAX 8
// Número maximo de vagas
#define BOX 05
void opcao_menu() {
int i;
char *banner[] = {
"--------------------------",
"Programa Estacionamento",
"(1)Listar vagas",
"(2)Estacionar",
"(3)Retirar",
"(4)Sair do programa",
"--------------------------",
"> "
};
for(i=0; i<=7; i++) printf( "%s\n",banner[i]);
}
// estrutura usada
typedef struct vaga {
char placa[MAX];
int tempo;
float valor;
} vaga;
//pegando entrada do usuário e retorna com os mesmos
vaga adiciona_vaga() {
vaga p;
printf( "informe alguns dados\n" );
printf( "o Placa: \n" );
fgets(p.placa, sizeof(p.placa), stdin);
p.placa[strlen(p.placa)-1] = '\0';
printf( "A quantidade de tempo:\n" );
scanf( "%d",&(p.tempo));
// maximo de tempo por vaga é 12 setamos isso aqui numa condição simples
p.tempo=(p.tempo>12)?12:p.tempo;
printf( "O preco:\n" ); scanf( "%f",&(p.valor));
return p;
}
int main(int args, char * arg[]) {
int x,y,op=0;
float total;
// ponteiro da nossa estrutura
vaga *cad;
y=0;
// alocamos dados na memória
cad=(vaga *)calloc(BOX,sizeof(vaga));
while(op!=4) {
opcao_menu();
scanf( "%d",&op);
getchar();
if(op==1) {
// Mostra a lista de vagas
printf( "\n Placa Tempo Preco Total\n" );
03/11/12 Campus Virtual Estácio
3/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
printf( "\n Placa Tempo Preco Total\n" );
for(x=y-1; x>=0; x--) printf( " %6s %8d %12.2f %7.2f\n",
cad[x].placa,
cad[x].tempo,
cad[x].valor,
total=cad[x].tempo*cad[x].valor);
}
// Adiciona uma vaga e chama a função "adiciona vaga"
if(op==2) {
cad[y]=adiciona_vaga();
y++;
}
// remove vaga,subtrai o apontador da proxima adição de dados substitui o dado pelo
// Escolhido
if(op==3) y--;
}
free(cad);
return 0;
}
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 33 dias atrás 
Comentário da postagem de WELLINGTON PEREIRA DE OLIVEIRA
Oi Wellington
O conceito está correto, mas o exemplo que apresentou é uma implementação de uma pilha encadeada. Ainda não
estudamos este tipo de estrutura. Aqui a tarefa é tentar aplicar o conceito de pilha sequencial, cuja implementação é
feita através de um vetor. Deve imaginar alguma aplicação e desenvolver por si só um programa em C++ que
implemente seu exemplo. ( Implementação do exemplo que apresentou está em C e não em C++)
[]s
Alexandre
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 33 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Editado por TÉRCIO MARTINS DUARTE em 30/09/2012 18:39
Resposta ao questionamento 01:
Professor, levando em conta a lista dada, sobre a implementação de um programa que converta decimal em binário, implementei a pilha da seguinte
maneira: o usuário digita o numero escolhido em decimal para conversão em qualquer base desejada (de 2 a 9):
#include <iostream>
#define tam 30
using namespace std;
void push(int[],int&,int&);
int pop(int[],int&);
int b;
int main()
{
int topo=-1, n, r[tam];
cout<<"\n\nDigite o numero decimal: ";
cin>>n;
do
{
cout<<"\n\nDigite a base desejada(entre 2 e 9): ";
cin>>b;
}while (b<2 || b>9);
int inicio=n;
do
{
push(r,n,topo);
}while(n!=0);
system( "cls" );
cout<<"\n\nO numero "<<inicio<<" na base "<<b<<" eh ";
do
{
cout<<pop(r,topo);
}while(topo!=-1);
cout<<"\n\n";
system( "pause" );
return 0;
}
void push(int r[],int &n, int &topo)
{
topo++;
r[topo]=n%b;
n=n/b;
}
int pop(int r[],int &topo)
{
topo--;
return r[topo+1];
}
 
Abraço
03/11/12 Campus Virtual Estácio
4/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
Abraço
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 33 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
Excelente Tércio,
Você mostrouque realmente aprendeu o conceito de pilha, pois além de conseguir imaginar uma aplicação para o conceito conseguiu
também construir uma implementação em C++ para sua aplicação, conforme pedia o exercício.
Agora para que todos possam compreender bem a sua implementação, responda:
Por que está passando por referência a variável topo, na função int pop(int r[],int &topo) e também na função void push(int r[],int &n, int &topo)
?
[]s
Alexandre
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 32 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Olá professor.
A passagem por referência da variável topo nas funções supracitadas é necessária, pois já que usei o conceito de pilha, ao se
incluir um elemento na pilha (função push) o topo da pilha será alterado, o mesmo acontecendo para o desempilhamento (função
pop). Para que isso aconteça, ao ser enviado como parâmetro para afunção e ser alterado ao voltar à função main, ela precisa ser
passada por referência (o tratado será o endereço da variável).
Abraço.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 32 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
Oi Tércio,
Muito bem, acho que agora ficou bem claro para que seus colegas possam entender o seu código completamente.
Agora assista apróxima aula e aguarde, logo estarei postando a próxima tarefa para discussão.
Continue participando e interagindo com seus colegas.
[]s
 
Alexandre
 Aluno (a) EDSON JUNIOR SANTOS respondeu a 20 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Editado por EDSON JUNIOR SANTOS em 14/10/2012 14:43
Tutor,
Tércio fez uma implementação com as funções push e pop o valores serão por referência. ok. ficou claro.
Isso porque todos os parâmetros precisam ter seus endereços passados porque serão alterados dentro da
função.
O que eu não entendi é porque as funções abaixo não acontecem a mesma coisa. Por que somente a
função desempilha todas as passagens terão serão por referência "&" e na de empilhar a variável "v" não
acontece isso?
void empilha(int p[], int &t, int v); // porque a passagem aqui não é por referência?
int desempilha(int p[], int &t, int &v);
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de EDSON JUNIOR SANTOS
Oi Edson,
Na função empilhar será empilhado o conteúdo da variável v, portanto este será copiado para
dentro da pilha não é necessário alterar o valor da variável. Enquanto que a variável que
representa o indexador de topo da pilha sempre que um valor for empilhado ou desempilhado
seu conteúdo deve ser alterado, por isto é passado a referência, para que as modificações
ocorram no conteúdo desta variável
[]s
Alexandre
 Aluno (a) EDSON JUNIOR SANTOS respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
03/11/12 Campus Virtual Estácio
5/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
ok, grato pelos esclarecimentos. 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de EDSON JUNIOR SANTOS
Oi Edson,
Espero que tenha esclarecido, mas qualquer dúvida me avise. Agora aproveite e visite as demais
postagens de seus colegas existem muitas postagens interessantes, que estão contribuindo
bastante para enriquecer nosso fórum.
[]s
Alexandre
 Aluno (a) DANILO CHIQUETTI respondeu a 30 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Boa noite a todos!
minha aplicação foi pensada em um empilhamento de produtos em um pallet. Se fosse mais complexo, poderia ser utilizado para controle
de estoque em uma central de abastecimentos, para saber onde os produtos estão localizados. Para fazer, adaptei um dos exemplos da aula.
#include <iostream>
#define TAM 10
using namespace std;
void empilha(int p[], int &t, int v);
int desempilha(int p[], int &t, int &v);
void ultMaterial(int p[], int &t);
void situacaoPilha(int p[], int &t);
int main()
{
int op, val, topo= -1, pilha[TAM],resp;
do
{ system( "cls" );
system( "color f0" );
cout<<"\nCONTROLE DE EMPILHAMENTO LIFO - Last In - First Out\n\n";
cout<<"\n1- EMPILHAR MATERIAL";
cout<<"\n2- DESEMPILHAR MATERIAL";
cout<<"\n3- ULTIMO MATERIAL EMPILHADO";
cout<<"\n4- MOSTRAR SITUACAO DA PILHA"; 
cout<<"\n5- SAIR"; 
cout<<"\nOpcao: ";
cin>>op;
system( "cls" );
switch(op)
{ case 1: cout<<"Digite o codigo do produto a ser empilhado: ";
cin>>val;
empilha(pilha, topo, val);
break;
case 2: resp=desempilha(pilha,topo,val);
if(resp==0)
cout<<"\nATENCAO. Pilha Vazia\n";
else
cout<<"\nproduto removido: "<<val; 
break;
case 3: ultMaterial(pilha,topo);
break;
case 4: situacaoPilha(pilha,topo);
break;
case 5: cout<<"\nOBRIGADO POR USAR O PROGRAMA\n";
break;
default: cout<<"\nOPCAO INVALIDA\n"; 
} 
cout<<"\n\n";system( "pause" ); 
}while(op!=5);
}
//inserir material
void empilha(int p[], int &t, int v) 
{
if(t == TAM-1)
cout<<"\nATENCAO! PALLET CHEIO\n";
else
{
t++; 
p[t]=v;
}
}
//remover material
int desempilha(int p[], int &t, int &v)
{
if(t == -1)
return 0;
else
{ 
v=p[t];//guarda o valor do topo
t--; //atualiza o topo 
return 1; 
}
} 
// Mostra o último material
void ultMaterial(int p[], int &t)
03/11/12 Campus Virtual Estácio
6/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
void ultMaterial(int p[], int &t)
{ 
if(t == -1)
cout<<"\nATENCAO! PALLET VAZIO\n";
else
cout<<"\nCÓDIGO DO PRODUTO QUE ESTÁ NO TOPO: "<<p[t];
}
// Mostrar situacao da Pilha 
void situacaoPilha(int p[], int &t)
{ 
if(t == -1)
cout<<"\nATENCAO! PALLET VAZIO\n"; 
else if (t == TAM - 1 )
cout<<"\nATENCAO! PALLET CHEIO!\n";
else
{ cout<<"\nTOTAL DE PRODUTOS NO PALLET: "<<t+1<<"\n";
cout<<"\n\nESPACO DISPONIVEL NO PALLET: "<<TAM-(t+1)<<"\n"; }
}
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 30 dias atrás 
Comentário da postagem de DANILO CHIQUETTI
Oi Danilo,
Vejo que entendeu bem o conceito de Pilha, sua implementação está muito boa, pois a aplicação utiliza o algoritmo LIFO, atingindo o objetivo
desta tarefa.
Visite as postagens de seus colegas e se quiser pode fazer algum comentário, em seguida assista a aula 7 e faça a segunda tarefa do
fórum.
[]s
Alexandre
 Aluno (a) SANDRO ROBERTO GOMES respondeu a 14 dias atrás 
Comentário da postagem de DANILO CHIQUETTI
Boa noite Danilo, sua aplicação ficou ótima tirei algumas dúvidas com ele muito obrigado.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 14 dias atrás 
Comentário da postagem de SANDRO ROBERTO GOMES
Oi Sandro,
Parabéns, por estar utilizando o fórum de maneira correta, isto é visitando as postagens de seus colegas e conseguindo aprender
com elas, esse é um dos objetiovos de nosso fórum.
[]s
Alexandre
 Aluno (a) FELIPE VACCARI BARBOSA respondeu a 27 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Boa tarde, a todos.
Pensei numa aplicação para que o gerente de uma loja possa visualizar quantas peças foram vendidas em sua ultima negociação. Dessa forma ele
saberá se seus vendedores estão fazendo um bom trabalho. Estruturei também para que, no momento da consulta, ele possa visualizar a pilha inteira,
ter acesso à quantidade de atendimentos e ter acesso também à quantidade de itens que foram vendidos somando todos os atendimentos.
 
#include <iostream>
#define TAM 10
using namespace std;
void push(int p[], int &t, int v);
int pop(int p[], int &t, int &v);
void mostraTopo(int p[], int &t);
void situPilha(int p[], int &t);
int main()
{
int op, valor, topo= -1, pilha[TAM], resp;
do
{
system( "cls" );
cout<<"\nControle de Vendas\n\n";
cout<<"\n1- Empilhar quantidade de itens vendidos na ultima transacao.";
cout<<"\n2- Desempilhar ultima quantidade de itens vendidos.";
cout<<"\n3- Consultar a quantidade de itens vendidos na ultima transacao.";
cout<<"\n4- Mostrar situacao da pilha"; 
cout<<"\n5- Fechar"; 
cout<<"\nOpcao: ";
cin>>op;
system( "cls" );
03/11/12 Campus Virtual Estácio
7/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
system( "cls" );
switch(op)
{
case 1:
cout<<"Quantos itens foram vendidos na ultima transacao? ----> ";
cin>>valor;
push(pilha, topo, valor);
break;
case 2:
resp=pop(pilha,topo,valor);
if(resp==0)
cout<<"\nATENCAO: Pilha vazia!\n";
else
cout<<"\nQuantidade '"<<valor<<"' removida do topo da pilha."; 
break;
case 3:
mostraTopo(pilha,topo);
break;
case 4:
situPilha(pilha,topo);
break;
case 5:
cout<<"\nEste foi o sistema de PILHA (LIFO).\n\n\nObrigado por testar o programa.";
break;
default:
cout<<"\nOpcao invalida.\n"; 
} 
cout<<"\n\n";system( "pause" ); 
}while(op!=5);
}
//empilhar
void push(int p[], int &t, int v) 
{
if(t == TAM-1)
cout<<"\nATENCAO: Pilha cheia!\n";
else
{
t++; // atualiza o topo
p[t]=v; // pilha RECEBE o valor
cout<<"\n\nAdicionado com sucesso, confira abaixo!\n\n";
for(int x=t;x>-1;x--)cout<<"\nPosicao "<<x+1<<": "<<p[x]; 
}
}
//remover
int pop(int p[], int &t, int &v)
{
if(t == -1)
return 0;
else
{ 
v=p[t];// GUARDA o valor do topo
t--; // atualiza o topo 
return 1; 
}
}
// Mostrar valor do topo e 'visualizacao' da pilha
void mostraTopo(int p[], int &t)
{ 
int aux=0;
if(t == -1)
cout<<"\nAtencao! Pilha vazia\n";
else
cout<<"\nQuantidade de itens vendidos na ultima transacao [topo]: "<<p[t];
cout<<"\n\nVisualize abaixo como esta sua pilha:\n\n"; 
for(int x=t; x>-1; x--)
cout<<"\nPosicao "<<x+1<<": "<<p[x];
for(int y=0; y<=t; y++)
aux = aux + p[y];
cout<<"\n\nTotal de itens vendidos: "<<aux;
}
// Mostrar situacao da Pilha
void situPilha(int p[], int &t)
{
{
if(t == -1)
cout<<"\nATENCAO: Pilha vazia!\n"; 
else if (t == TAM - 1 )
cout<<"\nATENCAO: Pilha cheia!\n";
else
{
cout<<"\nQuantidade de vendas na pilha: "<<t+1<<"\n";
cout<<"\n\nEspaco disponivel: "<<TAM-(t+1)<<"\n"; }
}
-------
Abraços
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 27 dias atrás 
Comentário da postagem de FELIPE VACCARI BARBOSA
Oi Felipe,
Ficou excelente sua aplicação, mostrou que entendeu bem o conceito de pilha sequencial e já consegue até utilizá-lo em uma aplicação.
Agora adiante para a próxima tarefa do fórum, qualquer dúvida me avise.
não se esqueça de visitar as postagens de seus colegas, sempre há algo interessante a se aprender e/ou a comentar.
[]s
 
Alexandre
 Aluno (a) SANDRO ROBERTO GOMES respondeu a 25 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Boa tarde Professor,
Conforme solicitado na lista de exercícios nº 6 fiz um programa para realizar a conversão binária entre dois números:
#include <iostream>
#define tam 50
using namespace std;
void push(int[],int&,int&);
int pop(int[],int&);
int x;
int main()
{
int topo=-1, n, r[tam];
cout<<"\n\nEntre com o Número decimal: ";
cin>>n;
do
{
cout<<"\n\nInforme a base desejada(Entre 3 e 15): ";
cin>>x;
}
while (x<3 II b>15);
int inicio=n;
do
{
push(r,n,topo);
}
while(n!=0);
system( "cls" );
cout<<"\n\nO número "<<inicio<<"Na base"<<x<<" = ";
do
{
cout<<pop(r,topo);
03/11/12 Campus Virtual Estácio
9/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
cout<<pop(r,topo);
}
while(topo!=-1);
cout"\n\n";
system( "pause" );
return 0;
}
void push(int r[], int &n, int &topo)
{
topo++;
r[topo]=n%x;
n=n/x;
}
int pop(int r[], int &topo)
{
topo--;
return r[topo+1];
}
---------------------------------------------
Fim.
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 25 dias atrás 
Comentário da postagem de SANDRO ROBERTO GOMES
Oi Sandro,
Apesar de ser uma aplicação clássica de pilha, vejo que consegue utilizar em um programa a estrutura de dados estudada.
Agora adiante para a 2a tarefa e qualquer dúvida me avise.
[]s
Alexandre
 Aluno (a) ALBERT DAVID NOGUEIRA DE OLIVEIRA respondeu a 23 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Cadastro de usuários com nome e idade:
#include<iostream>
#define MAX 3
#define MAXNOME 10
using namespace std;
typedef struct candidato{
char nome[MAXNOME];
int idade; // VARIÁVEIS PARA ARMAZENAR DADOS DO CADASTRO
}Tcandidato;
typedef struct Pilha{
int topo; // VARIÁVEL PARA CONTROLAR O TOPO DA PILHA
Tcandidato candidato[MAX];
}TPilha;
int menu();
void iniciapilha (TPilha *p);
int pilhavazia(TPilha *L);
int pilhacheia(TPilha *L);
void empilha(Tcandidato p, TPilha *L); //PROTÓTIPOS DA FUNÇÕES
void topo(TPilha *ptr);
void imprimirpilha(TPilha *L);
void desempilhar(TPilha *L);
int menu(){
int opcoes;
cout<<"1 - Cadastrar Candidato\n";
cout<<"2 - Apagar Ultimo Candidato\n";
cout<<"3 - Mostrar Ultimo Candidato\n"; //MENU DE OPÇÕES
cout<<"4 - Mostrar Todos Os Candidatos\n";
cout<<"5 - Reiniciar Cadastro\n";
cout<<"0 - Sair\n";
cin>>opcoes;
return opcoes;
03/11/12 Campus Virtual Estácio
10/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
return opcoes;
}
int main () {
TPilha Pilha;
TPilha * EPilha=&Pilha;
iniciapilha (&Pilha);
Tcandidato cand;
int opcoes;
do{
opcoes = menu();
switch(opcoes){
case 1:
if(pilhacheia(&Pilha)==1)
cout<< "JA ATINGIMOS O LIMITE MAXIMO DE CADASTROS";
else {
cout <<"INFORME O NOME E A IDADE DO CANDIDATO ==> EX: ANTONIO 29\n"; // ADICIONAR DADOS A PILHA
cin>>cand.nome;
cin>>cand.idade;
empilha(cand, &Pilha);
}
break;
case 2:
if (pilhavazia)
desempilhar(EPilha); // RETIRAR DADOS DA PILHA
break;
case 3:
topo (EPilha); // EXIBIR TOPO
break;
case 4:
imprimirpilha(EPilha); // EXIBIR TODOS OS DADOS DA PILHA
break;
case 5:
iniciapilha (EPilha); // RESETAR PILHA
break;
}
}while(opcoes != 0);
return 0;
}
void iniciapilha(TPilha *L) {
L->topo = 0;
}
int pilhavazia(TPilha *L){
if(L->topo == 0 )
return 1;
else
return 0; 
}
int pilhacheia(TPilha *L){
if (L->topo == MAX)
return 1;
else
return 0;
}
void empilha(Tcandidato p, TPilha *L){
if (pilhacheia(L))
cout<< "LIMITE MAXIMO DE CADASTROS ATINGIDO!\n\n";
else {
L->candidato[L->topo]=p;
L->topo++;
}
}
void topo(TPilha *L){ 
if(L->topo == 0)
cout<<"AINDA NAO POSSUIMOS CADASTROS!\n";
else{
cout<<"Nome: ",L->candidato[L->topo-1].nome;
cout<<"Idade: \n",L->candidato[L->topo-1].idade;
}
}
void imprimirPilha(TPilha *L){
if(L->topo == 0)
cout<<"NAO HA CANDIDATOS CADASTRADOS!\n";
else{
int i;
for(i=0; i<L->topo; i++){
cout<<"Nome: ",L->candidato[i].nome;
cout<<"Idade: \n",L->candidato[i].idade;
}
}
}
void desempilhar(TPilha *L){
if (L->topo == 0)
cout<<"\n NAO HA CADASTROS ATE O MOMENTO!!!\n";
else
L->topo--;
}
03/11/12 Campus Virtual Estácio
11/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
}
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 23 dias atrás 
Comentário da postagem de ALBERT DAVID NOGUEIRA DE OLIVEIRA
Oi Albert
As estruturas de dados são utilizadas para simplificar ou viabilizar os algoritmos. Por isto a nossa tarefa é tentar construir uma aplicação em
que esta seja útil. Veja, no caso de pilhas sequenciais, estas estruras armazenam dados e fornecem a ordem reversa em que estes dados.
Gostaria que discutisse de que modo a estrutura auxilia a sua aplicação.
[]s
Alexandre
 Aluno (a) ALBERT DAVID NOGUEIRA DE OLIVEIRA respondeu a 23 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Olá professor,
 Pensei em uma situação onde, por exemplo, tivessemos 3 pessoas que passaram por um processo de seleção e ficaram
em um banco de espera para 3 vagas dentro de uma empresa X e foram cadastrados por ordem decrescente (baseado em suas
notas). Porém havia um risco de não existirem essas 3 vagas e sim apenas 1 vaga ou 2 vagas. Assim se o número de vagas na
empresa de fato for reduzido descadastramos o candidato de menor pontuação (topo) e deixamos em nossa pilha apenas o(s)
candidato(s) que obtiveram maior pontuação para conquistar as vagas existentes.
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 22 dias atrás 
Comentário da postagem de ALBERT DAVID NOGUEIRA DE OLIVEIRA
Oi Albert,
Posso ver que entendeu bem o conceito de uma pilha e já consegue inclusive utilizar as características de uma pilha
para auxiliar o desenvolvimento de uma aplicação.
Agora adiante para a próxima tarefa e qualquer dúvida me avise.
[]s
Alexandre
 Aluno (a) BRUNO DOMINGOS DE OLIVEIRA respondeu a 23 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
#define StackSize 100
 
Class Pilha {
 
private:
int Topo;
char Itens[ StackSize ];
 
public:
pilha ( ) {
topo=-1 }
 
int isempty ( ) {
if (topo == -1)
return 1;
else return 0; }
 
void push( int x, int &erro) {
if (topo==StackSize-1)
erro = 1;
else {
erro = 0;
topo++;
Itens[topo] = x; } }
03/11/12 Campus Virtual Estácio
12/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…void pop( int &x, int &erro) {
if (topo == -1 )
erro = 1;
else {
erro = 0;
x = Itens[ topo ];
topo--; } }
 
Pilha P; { aloca memória para a pilha P, alocação estática }
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 23 dias atrás 
Comentário da postagem de BRUNO DOMINGOS DE OLIVEIRA
Oi Bruno,
O principal aqui é entender que as estruturas de dados são utilizadas para simplificar ou viabilizar os algoritmos. Por isto a nossa tarefa não
é apresentar simplesmente o código de uma estrutura de dados, mas sim tentar construir uma aplicação em que esta seja útil. Veja, no caso
de pilhas sequenciais, a nossa 1a tarefa, estas estruras armazenam dados e fornecem a ordem reversa em que estes dados. Sendo assim
em qualquer aplicação que este fenômeno seja útil deve se usar uma pilha. Como exemplo de aplicação pode-se citar a conversão de base
numérica pelo processo de divisão sucessivas, pois após empilhar os restos das divisões ao desempilhar estes na sua ordem reversa, o
número estará convertido naturalment.
[]s
Alexandre
 Aluno (a) RICARDO FELISBINO respondeu a 22 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Não consigo execultar diz que tem erro mas não encontrei quem sabe vocês podem me ajudar a arrumar...
#include <iostream>
#define TAM 5
using namespace std;
void AdicionaValor(int p[], int &t, int v);
int RemoveValor(int p[], int &t, int &v);
void VerUltimoValor(int p[], int &t);
void VerEspacosLivres(int p[], int &t);
void VerNumeroDeValores(int p[], int &t);
int main()
{
int op, val, topo=-1, pilha[TAM],resp;
do
{ system( "cls" );
cout<<"\nPILHA\n\n";
cout<<"\n1- Adicionar um Valor";
cout<<"\n2- Remover um Valor";
cout<<"\n3- Ver Ultimo Valor";
cout<<"\n4- Ver Espacos Livres";
cout<<"\n5- Numero de itens na PILHA";
cout<<"\nOpcao: ";
cin>>op;
system( "cls" );
switch(op)
{ case 1: cout<<"Digite o valor para adicionar: ";
cin>>val;
AdicionaValor(pilha, topo, val);
break;
case 2: resp=RemoveValor(pilha,topo,val);
if(resp==0)
cout<<"\nATENCAO. Pilha Vazia\n";
else
cout<<"\nValor removido: "<<val; 
break;
case 3: VerUltimoValor(pilha,topo);
break;
case 4: VerEspacosLivres(pilha,topo);
break;
case 5: VerNumeroDeValore(pilha,topo);
break;
default: cout<<"\nOPCAO INVALIDA\n"; 
} 
cout<<"\n\n";system( "pause" ); 
}while(op!=5);
}
/* Adiciona Valor */
void AdicionaValor(int p[], int &t, int v)
{
if(t == TAM-1) //verifica se pilha esta cheia
cout<<"\nATENCAO. Pilha Cheia\n";
03/11/12 Campus Virtual Estácio
13/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
cout<<"\nATENCAO. Pilha Cheia\n";
else
{
t++; //adiciona um valor
p[t]=v; // pilha recebe valor
}
}
/* Remove valor */
int RemoveValor(int p[], int &t, int &v)
{
if(t == -1) //verifica se está vazia
return 0;
else
{ 
v=p[t];//guarda o valor do topo
t--; //remove um valor
return 1; 
}
} 
/* Ver Ultimo Valor */
void VerUltimoValor(int p[], int &t)
{ 
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia\n";
else
cout<<"\nUltimo valor adicionado: "<<p[t];
}
/* Ver Espacos Livres */
void VerEspacosLivres(int p[], int &t)
{ 
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia sao"<<TAM-(t+1)<<" espacos\n";
else if (t == TAM )
cout<<"\nATENCAO. Pilha Cheia\n";
else
cout<<"\n\nEspaco disponivel na pilha: "<<TAM-(t+1)<<"\n";
} 
/* Ver Numero de Valore */
void VerNumeroDeValore(int p[], int &t)
{ 
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia\n"; 
else if (t == TAM )
cout<<"\nATENCAO. Pilha Cheia\n";
else
cout<<"\nTotal de elementos na pilha: "<<t+1<<"\n";
} 
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 22 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi Ricardo,
Já está funcionando , você estava errando pois chamava VerNumeroDeValore, mas o correto é VerNumeroDeValores .
Veja o código:
#include #define TAM 5
using namespace std;
void AdicionaValor(int p[], int &t, int v);
int RemoveValor(int p[], int &t, int &v);
void VerUltimoValor(int p[], int &t);
void VerEspacosLivres(int p[], int &t);
void VerNumeroDeValores(int p[], int &t);
int main()
{
int op, val, topo=-1, pilha[TAM],resp;
do
{ 
system( "cls" );
cout<<"\nPILHA\n\n";
cout<<"\n1- Adicionar um Valor";
cout<<"\n2- Remover um Valor";
cout<<"\n3- Ver Ultimo Valor";
cout<<"\n4- Ver Espacos Livres";
cout<<"\n5- Numero de itens na PILHA";
cout<<"\nOpcao: ";
cin>>op;
system( "cls" );
switch(op)
{ 
case 1: cout<<"Digite o valor para adicionar: ";
cin>>val;
AdicionaValor(pilha, topo, val);
break;
case 2: resp=RemoveValor(pilha,topo,val);
if(resp==0)
cout<<"\nATENCAO. Pilha Vazia\n";
else
03/11/12 Campus Virtual Estácio
14/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
else
cout<<"\nValor removido: "< break;
case 3: VerUltimoValor(pilha,topo);
break;
case 4: VerEspacosLivres(pilha,topo);
break;
case 5: VerNumeroDeValores(pilha,topo);
break;
default: cout<<"\nOPCAO INVALIDA\n";
}
cout<<"\n\n";
system( "pause" );
}while(op!=5);
}
/* Adiciona Valor */
void AdicionaValor(int p[], int &t, int v)
{
if(t == TAM-1) //verifica se pilha esta cheia
cout<<"\nATENCAO. Pilha Cheia\n";
else
{
t++; //adiciona um valor
p[t]=v; // pilha recebe valor
}
}
/* Remove valor */
int RemoveValor(int p[], int &t, int &v)
{
if(t == -1) //verifica se está vazia
return 0;
else
{
v=p[t];//guarda o valor do topo
t--; //remove um valor
return 1;
}
}
/* Ver Ultimo Valor */
void VerUltimoValor(int p[], int &t)
{
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia\n";
else
cout<<"\nUltimo valor adicionado: "<}
/* Ver Espacos Livres */
void VerEspacosLivres(int p[], int &t)
{
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia sao"< else if (t == TAM )
cout<<"\nATENCAO. Pilha Cheia\n";
else
cout<<"\n\nEspaco disponivel na pilha: "<}
/* Ver Numero de Valore */
void VerNumeroDeValores(int p[], int &t)
{
if(t == -1)
cout<<"\nATENCAO. Pilha Vazia\n";
else if (t == TAM )
cout<<"\nATENCAO. Pilha Cheia\n";
else
cout<<"\nTotal de elementos na pilha: "<}
 Aluno (a) RICARDO FELISBINO respondeu a 21 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
professora tenho uma duvida, se eu quizer fazer mas de 3 critérios em uma função, devo fazer assim?
para 1 condição
 
 if (valor==1) 
 comando1 
 else 
 comando2 
 
para 2 condições
 
 if (valor==1) 
 { 
 comando1 
 } 
 else { 
 if (valor==2) 
 comando2 
 else 
 comando3 
 } 
 } 
para 3 condições
 if (valor==1) 
 { 
 comando1 
 } 
 else { 
 if (valor==2) 
 comando2 
 else { 
 if (valor==3) 
 comando3 
 else 
 comando4 
 } 
 } 
 
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 21 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi Ricardo,
Você tem sempre a opção de cascatear o comando if, criando uma gama de opções. Mas ainda pode usar o comando
switch().
Sugiro que revise a aula sobre o comando escolha (switch()).
[]s
Alexandre
 Aluno (a) RICARDO FELISBINO respondeu a 17 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
era ai que eu gostaria de chegar, ehehhee pensei que o comando switch() não poderia ser
usado dentro de uma função, mas me enganei...
eu sempre programa em HTML e PHP, agoro que estou começando minha vida no C++
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 16 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi Ricardo,
Fico contente que tenha aproveitado o fórum para adquirir um novo conhecimento.
Sempre que praticar, terá oportunidade decriar dúvidas e poderá sanar aqui. Desta forma terá
crescimento de conhecimento.
[]s
Alexandre
 Aluno (a) FRANÇOÁ CORREIA GONÇALVES respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Professor, desenvolvi um programa que converte decimal em hexadecimal, utilizando o conceito de pilha. 
obs: posso também utilizar a própria função 'desempilha' para desempilhar e já imprimir os valores. Tem a vantagem de não precisar do
trecho do programa que chama tal função, além da passagem por referência "&V".Porém, a função ficará bem maior do que a atual.
 
#include <iostream>
#define TAM 40
using namespace std;
void empilha(int p[], int &t, int v);
int desempilha(int p[], int &t, int &v);
int main()
{
float n;
int num,resto,pilha[TAM],sinal,topo=-1;
system( "color f1" );
cout<<"\n*************************************************************";
cout<<"\n* converte numero da base decimal para a base hexadecimal *";
cout<<"\n* digite numeros ou operadores *";
cout<<"\n* digite s para sair *";
cout<<"\n****************************************************";
cout<<"\ndigite numero positivo ate 2147483520. Qualquer outro numero, sai: ";
cin>>n;
if(n>2147483520 || n<-2147483520)
exit(0);
03/11/12 Campus Virtual Estácio
16/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
exit(0);
else
num=(int)n; //converte real para inteiro;
while(num>=0)
{
do//inicio do trecho que empilha os restos que irão gerar o numero hexadecimal
{
resto=num%16;
empilha(pilha,topo,resto);
num/=16;
}while(num>0);//fim do trecho de empilhamento
cout<<"\nconvertido para binario: ";
sinal=desempilha(pilha,topo,resto);//inicio do trecho que desempilha todos
while(sinal==1)//os restos que irão exibir os numeros hexadecimais - note: se o tetorno for 1 então sinal==1
{
switch(resto)
{
case 10: cout<<"A"; break;
case 11: cout<<"B"; break;
case 12: cout<<"C"; break;
case 13: cout<<"D"; break;
case 14: cout<<"E"; break;
case 15: cout<<"F"; break;
default: cout<<resto; 
}
sinal=desempilha(pilha,topo,resto); 
}//fim do trecho desempilhamento
topo=-1;
cout<<"\n\ndigite numero positivo ate 2147483520.Qualquer outro, sai: ";
cin>>n; if(n>2147483520 || n<-2147483520) exit(0);//maximo permitido
else num=(int)n;
}
cout<<"\n\n";
system( "pause" );
} 
void empilha(int p[], int &t, int v)
{
t++;//atualiza o topo
p[t]=v;//pilha recebe valor
} 
int desempilha(int p[], int &t, int &v)
{
char A;
if(t==-1)//testa se a pilha está vazia
return 0;
else
{
v=p[t];//guarda o valor do topo
t--;//atualiza o topo
return 1;
} 
}
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de FRANÇOÁ CORREIA GONÇALVES
Oi Françoá
Vejo que entendeu bem o conceito de pilha, pois já pode inclusive usá-lo em sua aplicação.
Agora gostaria que discutisse, de que modo a estrutura pilha contribui para sua aplicação, isto é, de que modo o algoritmo LIFO caracterísco
de uma pilha contribui para sua aplicação.
[]s
Alexandre
 Aluno (a) FRANÇOÁ CORREIA GONÇALVES respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Uma vez que a PILHA só pode ser acessada por uma única extremidade, no caso, pelo último elemento inserido no
topo, dessa forma, essa característica pecular da pilha torna-o adequado a minha aplicação. Lembro que quando
fazemos as divisões de números, seja para binário, decimal, hexadecimal ou para qualquer outra base, os restos são sempre
armazenados na ordem inversa da impressão dos mesmos, para o caso de utilizarmos pilha. Essa característica peculiar permite
que utilizemos a PILHA para armazenarmos tais números e, emseguida, desempilharmos para serem mostrados tal como
devem ser mostrados.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de FRANÇOÁ CORREIA GONÇALVES
Oi Françoá,
É exatamente isto, as pilhas são uteis nesta aplicação pois os restos das divisões devem ser recuperados na ordem
reversa de seu armazenamento.
[]s
Alexandre
03/11/12 Campus Virtual Estácio
17/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 Aluno (a) ANDRÉIA FERREIRA BARRETO respondeu a 18 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Ola bom dia,
A ideia é que esta implementação faça o armazenamento das matriculas de todos os alunos que passam por esse local, por exemplo, pode ser um
programa implementado em uma biblioteca que para saber quantos e quais alunos passaram por lá ela cadastra na chegada do aluno o seu numero
de matricula e mostra no final do dia, o total de alunos.
Este é um código baseado no modelo da aula.
#include <iostream>
#define TAM 5
using namespace std;
void cadastrar(int p [ ], int &t, int v);
int removerCadastro(int p[ ], int &t, int &v);
void ultimoCadastro(int p [ ], int &t);
void situacaoCadastro(int p[ ], int &t);
int main()
{
Int op, m, topo= -1, pilha[TAM], resp;
do
{system(“cls”);
System(“color f0”);
 cout<<"\nCadastro de matricula\n\n";
 cout<<"\n1- Digite o numero da matricula a ser inserida";
 cout<<"\n2- Remover uma matricula";
 cout<<"\n3- Mostrar a última matricula";
 cout<<"\n4- Mostrar situação do cadastro"; 
 cout<<"\n5- Sair"; 
 cout<<"\nDigite o numero da opção escolhida: ";
 cin>>op;
system(“cls”);
switch(op)
 { case 1: cout<<" Digite o numero da matricula a ser inserida: ";
 cin>>m;
 empilha(pilha, topo, m);
 break;
 
 case 2: resp=desempilha(pilha, topo, m);
 if(resp==0)
 cout<<"\nNão há matricula a ser removida!\n";
 else
 cout<<"\nMatricula removida com sucesso: "<<m; 
 break;
 
 case 3: ultimoCadastro(pilha,topo);
 break;
 case 4: situacaoCadastro(pilha,topo);
 break;
 
 case 5: cout<<"\nPrograma Cadastro Matricula\n";
 break;
 
 default: cout<<"\nOpção inexistente, escolha uma das opções acima.\n"; 
 
 } 
 cout<<"\n\n";system( "pause" ); 
 }while(op!=5);
}
/* Insere */
void cadastrar(int p[], int &t, int v)
{
 if(t == TAM-1)
 cout<<"\nATENCAO. Cadastro Cheio\n";
 else
 {
 t++; //atualiza o topo
 p[t]=v; // pilha recebe valor
 }
}
/* Remove */
int removerCadastro(int p[], int &t, int &v)
{
 if(t == -1)
 return 0;
 else
 { 
 v=p[t];//guarda o valor do topo
 t--; //atualiza o topo 
 return 1; 
 }
} 
/* Mostra o topo */
void ultimoCadastro(int p[], int &t)
{ 
 if(t == -1)
 cout<<"\nATENCAO. Cadastro Vazio\n";
 else
 cout<<"\nUltima matricula cadastrada: "<<p[t];
}
03/11/12 Campus Virtual Estácio
18/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
}
/* Mostra situacao da Pilha */
void situacaoCadastro(int p[], int &t)
{ 
 if(t == -1)
 cout<<"\nAtenção! Cadastro Vazio\n"; 
 else if (t == TAM - 1 )
 cout<<"\nATENCAO. Cadastro Cheio\n";
 else
 { cout<<"\nTotal de matriculas cadastradas: "<<t+1<<"\n";
 cout<<"\n\nEspaco disponivel para cadastro: "<<TAM-(t+1)<<"\n"; }
}
 
Como o professor falou que este codigo está correto mas não tem uma aplicação específica em pilha vou postar outro em que tentei adaptar um
modelo da aula para criar uma calculadora no modo notação polonesa.
até +
 Aluno (a) ANDRÉIA FERREIRA BARRETO respondeu a 18 dias atrás 
Comentário da postagem de ANDRÉIA FERREIRA BARRETO
O outro código ao qual me referi professor...
Eu não estou conseguindo executar ele, quando chega na parte da definição da função ele trava e não vai mais... já conferi com o exemplo
que utilzei e aparentemente está tudo correto, o professor ou algum colega pode dar uma conferida e ver o que está faltando, já testei várias
vezes, apaguei a linha e digitei novamente, mas não consigo solucionar...
#include <iostream>
#include <cstdlib>#define TAM 20// só para exemplificar
using namespace std;
void push(float p[], int &t, float v);
float pop(float p[], int &t);
int main()
{
int t = -1;
float v1, v2, p[TAM];
char s[10];
cout<<”\nCALCULOS NO MODO NOTAÇÃO POLONESA”;
cout<<”\nDigite primeiro o operador e em seguida os números”;
cout<<”\nDigite s para sair”;
do
{
cout<<”: “;
cin>>s;
switch(s[0])
{
case ‘+’:
v1 = pop(p, t);
v2 = pop(p, t);
cout<<”\n”<< v1+v2<<”\n”;
push(p, t, v1+v2);
break;
case ‘-’:
v1 = pop(p, t);
v2 = pop(p, t);
cout<<”\n”<< v1-v2<<”\n”;
push(p, t, v1-v2);
break;
case ‘*’:
v1 = pop(p, t);
v2 = pop(p, t);
cout<<”\n”<< v1*v2<<”\n”;
push(p, t, v1*v2);
break;
case ‘/’:
v1 = pop(p, t);
v2 = pop(p, t);
if(v1==0)
cout<<”\ndivisao por 0\n”;
else
{
cout<<”\n”<< v2/v1<<”\n”;
push(p, t, v2/v1);
break;
defaut: push(p, t, atof(s));
}
} while (s[0] != ‘s’);
system(“pause”);
}
//definição das funções
void push(float p[], int &t, float v)
{
if(t==TAM-1)
cout<<”\nPilha cheia\n”;
else
{
t++;
p[t]=v
03/11/12 Campus Virtual Estácio
19/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
p[t]=v
}
}
float pop(float p[], int &t)
{ float v;
if(t == -1)
{
cout<<”\nPilha vazia\n”;
return 0;
}
else
{
v=p[t];
t--;
return v;
}
}
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 17 dias atrás 
Comentário da postagem de ANDRÉIA FERREIRA BARRETO
Oi Andréia,
Este código está parecendo que foi copiado e colado, pois o problema no código são as aspas duplas e simples que estão com
um formato diferente, se substituir todas as aspas, redigitando-as, o código funciona.
[]s
Alexandre
 Aluno (a) ANDRÉIA FERREIRA BARRETO respondeu a 17 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Oi professor, eu digitei ele no dev e copiei para colar aqui... e a parte que ele para é quando chega na definição, ele não
acusa na de digitação errada, mas vou tentar novamente...
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 16 dias atrás 
Comentário da postagem de ANDRÉIA FERREIRA BARRETO
Bem depois de experimentar e consertar as aspas duplas e simples, poste aqui o código
corrigido para que outros alunos possam experimentar.
[]s
Alexandre
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 17 dias atrás 
Comentário da postagem de ANDRÉIA FERREIRA BARRETO
Oi Andréia,
A implementação de sua aplicação está correta e também vejo que utiliza uma pilha sequencial. Porém gostaria que explicasse o porquê do
uso de uma pilha na sua aplicação. Qual o principal benefício de se usar uma pilha nesta implementação? Para finalidade da sua aplicação
é realmente necessário o uso de uma pilha? Por que não usar uma lista ou uma fila?
[]s
Alexandre
 Aluno (a) ANDRÉIA FERREIRA BARRETO respondeu a 17 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Ola, boa noite.
Eu utilizei a pilha nesta aplicação mais pela questão do exercício mesmo, a nível de exemplificação. Como o professor já havia me
dito via e-mail, ela não teria que necessariamente ser feita utilizando a pilha, poderia usar a fila ou lista, mas como na maioria dos
exemplos dos colegas é utilizado a conversão de números eu não quis fazer outro igual.
A implementação não será utilizada para a sua real função que é ir acumulando e buscando os números novamente quando
necessário, mas ela possibilitará nesta minha implementação voltar a matricula anterior caso seje necessário por algum motivo.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 16 dias atrás 
Comentário da postagem de ANDRÉIA FERREIRA BARRETO
Veja o código que implementa as estruturas de dados são quase que padronizados, ou seja, não há
muito o que alterar numa implementação para fila ou pilha, mas o mais importante é perceber qeu estas estruturas
foram desenvolvidas com o propósito de facilitar, otimizar ou mesmo viabilizar a implementação de programas ou
aplicações que executam tarefas para diferentes propósitos. Por isto a minha proposição tem o intuito de que os
alunos possam praticar o uso das estruturas estudadas em programas que venham produzir. Afinal, este é a principal
razão de se estudar estas estruturas de dado.
03/11/12 Campus Virtual Estácio
20/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
razão de se estudar estas estruturas de dado.
[]s
Alexandre
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 15 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Professor, este fórum ficará aberto até qual data?
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 15 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
Oi Tércio,
Todos os fórum temáticos relativos as aulas 6 a 10 ficarão abertos até dia 01 de novembro.
Qualquer dúvida posterior ao fechamento do fórum poderá ser resolvida no fórum de dúvidas para AV2 que já estará aberto, ou mesmo pela
caixa de mensagens.
[]s
Alexandre
 Aluno (a) NATAN RODRIGUES DA SILVA respondeu a 11 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Editado por NATAN RODRIGUES DA SILVA em 23/10/2012 08:11
Bom dia Professor.... O meu código realiza uma conversão de decimal para binária: (Não sei se esta certo professor, rodando aqui no DEV C++ deu
certinho)
 
#include <iostream>
 
#define tam 40
using namespace std;
void push(int[],int&,int&;
int pop(int[],int&;
int x;
int main()
{
int topo=-1, n, r[tam];
cout<<"\n\nEntre com o Número decimal: ";
cin>>n;
do
{
cout<<"\n\nInforme a base desejada(Entre 3 e 15): ";
cin>>x;
}
while (x<3 II b>15);
int inicio=n;
do
{
push(r,n,topo);
}
while(n!=0);
system( "cls" );
cout<<"\n\nO número "<<inicio<<"Na base"<<x<<" = ";
do
{
cout<<pop(r,topo);
}
03/11/12 Campus Virtual Estácio
21/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
while(topo!=-1);
cout"\n\n";
system( "pause" );
return 0;
}
void push(int r[], int &n, int &topo)
{
topo++;
r[topo]=n%x;
n=n/x;
}
int pop(int r[], int &topo)
{
topo--;
return r[topo+1];
}
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 11 dias atrás 
Comentário da postagem de NATAN RODRIGUES DA SILVA
Oi Natan,
A sua aplicação está boa , mas porque acha a estrutura mais adequada para sua aplicação, isto é de que maneira a estrutura está
contribuindo para a sua aplicação. Não usamos estrutura de dados apenas por usar, elas devem contribuir de alguma maneira para a tarefa
principal.
[]s
Alexandre
 Aluno (a) NATAN RODRIGUES DA SILVA respondeu a 5 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Já que utilizei o conceito de pilha, será necessária a passagem por referência da varíavel nas funções, quando um
elemento for incluso na pilha. Achei interessante por ser um método mais rápido de denvolvimento, o
processamento da pilha também será mais rápido.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 5 dias atrás 
Comentário da postagem de NATAN RODRIGUES DA SILVA
As estruturas de dados tem características bem específicas e os algoritmos se aproveitam destas. Veja
uma estrutura de dados do tipo fila, adota o algoritmo do primeiro a entrar é o primeiro a sair, como em uma fila de
banco o primeiro da fila será o primeiro a ser atendido. Então, por exemplo, quando o sistema operacional gerencia o
uso da CPU, ele armazena os pedidos de uso numa fila de processos, e para isto usa uma estrutura de dados tipo fila,
assim a única preocupação é incluir na fila e retirar da fila, pois a ordem já está garantido pela própria natureza da
estrutura de dados.
Bem, agora que enendeu bem os conceitos e já apresentou sua aplicações aproveit e visite as postagens de seus
colegas, existem várias informações interessantes.
[]s
Alexandre
 Aluno (a) NATAN RODRIGUES DA SILVA respondeu a 3 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Ok. Pode se dizer intão que na minha aplicação, o usuário irá adicionar os números a serem
convertidos, e por se tratar de umapilha, as entradas do usuário já estarão ordenadas,
facilitando assim o processamento das informações, que seria a conversão das bases.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 3 dias atrás 
Comentário da postagem de NATAN RODRIGUES DA SILVA
Agora que entendeu bem os conceitos e já apresentou sua aplicações aproveite e
visite as postagens de seus colegas, existem várias informações interessantes.
[]s
Alexandre
03/11/12 Campus Virtual Estácio
22/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 Aluno (a) NATAN RODRIGUES DA SILVA respondeu a 67 horas atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Tudo bem professor, estarei comentando as outras postagens. Obrigado! 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 52 horas atrás 
Comentário da postagem de NATAN RODRIGUES DA SILVA
Oi Natan,
Aproveite bem as informações de seus colegas.
[]s
Alexandre
 Aluno (a) ANTONIO HENRIQUES PEREIRA respondeu a 6 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Professor, desenvolvi um código para o armazenamento de produtos perecíveis onde o funcionário digita o dia de vencimento e o
programa organiza os dias digitados. Peguei os conceitos das aulas 4 e 6.
Segue:
#include <iostream>
#define TAM 5
using namespace std;
void empilha(int p[], int &t, int v);
int desempilha(int p[], int &t, int &v);
void acessoTopo(int p[], int&t);
void situacaoPilha( int p[], int &t);
void selecao(int p[], int tam);
int main()
{
 int op, val, topo=-1, pilha[TAM], resp;
 do
 { system( "cls" );
 system( "color f0" );
 cout<<"\nPilha(LIFO - Last In - First Out)\n\n";
 cout<<"\n1- Inserira o dia de vencimento";
 cout<<"\n2- Remover ultimo dia";
 cout<<"\n3- Mostrar ultimo dia";
 cout<<"\n4- Mostrar a situacao da pilha";
 cout<<"\n5- Organiza a pilha";
 cout<<"\n6- Sai";
 cout<<"\nOpcao: ";
 cin>>op;
 system( "cls" );
 switch(op)
 { case 1: cout<<"Digite o dia do vencimento: ";
 cin>>val;
 empilha(pilha, topo, val);
 break;
 case 2: resp=desempilha(pilha, topo, val);
 if(resp==0)
 cout<<"\nAtencao, Pilha Vazia\n" ;
 else
 cout<<"\nValor removido: "<<val;
 break;
 case 3: acessoTopo(pilha, topo);
 break;
 case 4: situacaoPilha(pilha, topo);
 break;
 case 5: selecao(pilha,topo);
 break; 
 case 6: cout<<"\nPrograma basico da Pilha\n";
 break;
 
 default: cout<<"\nOpcao Invalida\n";
 }
 cout<<"\n\n"; system ( "pause" );
 }while (op!=6);
 }
 void selecao(int p[], int tam)
 {
 int j,i,aux,a,temp;
 for(i=0;i<tam;i++)
 {
 cout<<"\nOrganizando a partir de "<<i<<"\t";
 for(a=0; a<TAM;a++)
 cout<<p[a]<<"\t";
 aux=i;
 for(j=i+1;j<=tam;j++)
 if(p[aux]>p[j])
 aux=j;
 temp=p[aux];
03/11/12 Campus Virtual Estácio
23/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 temp=p[aux];
 p[aux]=p[i];
 p[i]=temp;
 } 
 } 
 /* Insere */
 void empilha(int p[], int &t, int v)
 {
 if(t==TAM-1)
 cout<<"\nAtencao. Pilha Cheia\n";
 else
 {
 
 t++; //Atualiza o topo
 p[t]=v; //pilha recebe o valor
 }
 }
 
 /*Remove */
 int desempilha (int p[], int &t, int &v)
 {
 if(t==-1)
 return 0;
 else
 {
 v=p[t];
 t--;
 return 1;
 }
 }
 /*Mostra o Topo */
 void acessoTopo(int p[], int &t)
 {
 if( t==-1)
 cout<<"\nAtencao. Pilha Vazia\n";
 else
 cout<<"\nelemento do Topo da Pilha: "<<p[t];
 }
 /*Mostra situacao da Pilha */
 void situacaoPilha(int p[], int &t)
 {
 if(t==-1)
 cout<<"\nAtencao. Pilha Vazia\n";
 else if (t==TAM -1)
 cout<<"\natencao. Pilha Cheia\n";
 else
 { cout<<"\nTotal de elementos na Pilha: "<<t+1<<"\n";
 cout<<"\nEspaço disponivel na Pilha: "<<TAM-(t+1)<<"\n";
 }
 
 
}
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 6 dias atrás 
Comentário da postagem de ANTONIO HENRIQUES PEREIRA
Sua aplicação está boa e a implementação correta. Mas gostaria que discutisse o porquê do uso desta estrutura para a
aplicação, isto é qual a vantagem que a estrutura traz para o desenvolvimento da aplicação.
[]s
Alexandre
 Aluno (a) ANTONIO HENRIQUES PEREIRA respondeu a 5 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Professor, boa tarde.
Antes gostaria de perguntar se está de todo correto implementarmos uma organização em estruturas pilhas, ou este tipo de
estrutura é mais conveniente deixar sem organização já que é pilha (LIFO)? Outra pergunta, com esse código podemos
desenvolver um grande Banco de Dados?
A estrutura permite incerção de dados, remoção, verificação de situação dos dados, ou seja, com pouco código temos um grande
numero de ferramentas dentro do programa.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 5 dias atrás 
Comentário da postagem de ANTONIO HENRIQUES PEREIRA
As estruturas de dados tem características bem específicas e os algoritmos se aproveitam destas. Veja
uma estrutura de dados do tipo fila, adota o algoritmo do primeiro a entrar é o primeiro a sair, como em uma fila de
banco o primeiro da fila será o primeiro a ser atendido. Então, por exemplo, quando o sistema operacional gerencia o
uso da CPU, ele armazena os pedidos de uso numa fila de processos, e para isto usa uma estrutura de dados tipo fila,
assim a única preocupação é incluir na fila e retirar da fila, pois a ordem já está garantido pela própria natureza da
estrutura de dados.
Bancos de daodos são implementados com outro tipo de estrutura, normalmente são organizados em árvores.
[]s
 
03/11/12 Campus Virtual Estácio
24/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
Alexandre
 Aluno (a) ANTONIO HENRIQUES PEREIRA respondeu a 68 horas atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Ok professor. Então isso siginifica que basicamente todas as estruturas já estão prontas e que
cabe a nós apenas aproveita-las no que nos interessa.
E podemos implementa-las de acordo com cada situação.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 52 horas atrás 
Comentário da postagem de ANTONIO HENRIQUES PEREIRA
Você pode até implementar um código de uma estrutura com uma adaptação para o que quiser,
mas normalmente as bibliotecas de linguagem já possuem implementações genéricas destas
estruturas básicas para que possam ser utilizadas em desenvolvimento de aplicações.
[]s
Alexandre
 Aluno (a) JOSE CANINDE DA SILVA respondeu a 32 dias atrás
Mestre, tenho dúvidas no que se refere aplicação. Por exemplo, inserção, remoção, consulta são aplicações? E tipo, valor de pilha o que determina
esse tipo e valor? Apos esclarecimento vou tentar resolver o exercício pedido.
agradeço desde já 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 32 dias atrás 
Comentário da postagem de JOSE CANINDE DA SILVA
Oi José,
As pilhas são estruturas de dados especiais que apresentam duas funções de manipulação de dados que garantem o comportamento LIFO, isto é o
último a entrar é o primeiro a sair. Assim inserção e remoção são as funções que deve implementar. E quanto a aplicação, deve imaginar uma
aplicação para implementar uma pilha, veja seu colega aqui no fórum apresentou um conversor de bases numéricas, e para isto utilizou uma pilha
sequencial.
[]s
Alexandre
 Aluno (a) JOSE CANINDE DA SILVA respondeu a 31 dias atrás
Trecho de mprograma para inserir cadastro de clientes.
Aplicação: inserir cadastro.
 
include <iostream>
 
using namespace std;
int main ( )
void insereCad( int p[ ], int & t,int v )
{
 if(t==Tam -1 )
 cout<<" \ n saia pcheia\n";
 else
 { 
 t++; // topo+1
 p[t ]=v ; // inserir cad
 }
}
 
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 31 dias atrás 
Comentário da postagem de JOSE CANINDE DA SILVA
Oi José,
03/11/12 Campus Virtual Estácio
25/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
Esá indo bem, mas ainda está incompleto seu exercício, pois postou apenas uma função genérica de inserção de dados numa pilha. Veja espero que
desenvolva um exemplo completo que utilize pilha sequencial e então neste exemplo pode usar sua função de inserção, mas também desenvolva a de
remoção.
[]s
Alexandre
 Aluno (a) JOSE CANINDE DA SILVA respondeu a 28 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Editado por JOSE CANINDE DA SILVA em 06/10/2012 23:24
Os sistemas de transportes coletivos usando artifícios tecnólogigosemprenderam em todo país, a bilhetagem eletrônica. O usuário por sua
vez dispõe de um cartão eletrônico onde é inseridos céditos mediante pagamento e quando do seu uso, este é aproximado a uma
maquineta onde é debitado o valor da passagem seja, inteira, vale transporte estudante ou gratuidade ficando armazenado até o descarrego
pela empresa.
Este programa baseia-se nesse sistema de bilhetagem eletrônica, utilizando as aplicações empilha e desempilha e situação da pilha.
 
# include
# usingnamespace std;
voidempilha(int p[ ], int valor,& int deb valor)
voidempilhaPassagem(int p[ ], int valor,& int debvalor)
{
 if(t==T-1),
 cout<<"\pilha cheia\n";
 else
 {
 t++;//topo+1
 p[ t ]=v;//receba(intvalor, int debvalor)
 }
 
}
int desempilha(int p[ ], intvalor,& intdebvalor)
{
 if(t==-1)
 return0;
 else
{
 v=p[ t ];//guarda valor topo
 t-1; atualiza topo
 return 1;
void situaçãoPilha(int p[ ], int valor,& int debvalor)
{
 if(t==-1)
 cout<<"\n pilha vazia
 else
 cout<<"\\pilha cheia
 else
 cout<<"\\n tot elem pilha:" 
 }
}
 
 
 
 
 
 
 
03/11/12 Campus Virtual Estácio
26/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 
 
 
 
 
 
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 28 dias atrás 
Comentário da postagem de JOSE CANINDE DA SILVA
Oi José,
Preste atenção na sua implementação, o parâmetro t que toma conta do topo da pilha está sendo por valor e não por referência,
assim sempre que for usado deveria ter seu valor alterado o que não ocorre no seu programa, pois quando se passa um
parâmetro por valor o que é passado na verdade é uma cópia deste parâmetro, o que impede da variável ter seu valor real
alterado.
Sugiro que reveja sua postagem.
[]s
Alexandre
 Aluno (a) JOSE CANINDE DA SILVA respondeu a 27 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Profº Alexandre boa tarde,
Então o desenvolvimento do programa está correto, no caso o erro está no tipo da função que para este tipo deve-se
usar passagem por refencia e não por valor. É essa a sua explicação?caso positivo entendi e vou corrigir.
obrigado pela explicação!
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 27 dias atrás 
Comentário da postagem de JOSE CANINDE DA SILVA
Oi José, Com a correção que sugeri você terá conseguido implementar uma pilha sequencial,
isto é uma estrutura que utiliza o algoritmo LIFO, " o último a entrar é o primeiro a sair ", para manipular os
dados.
Então bastará apenas pensar numa aplicação para usar esta estrutura e fazer uma adaptação no código
para usá-lo em sua aplicação.
[]s
Alexandre
 Aluno (a) EDSON JUNIOR SANTOS respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Questionamento 1
Procedimento para inserir e apagar dígitos ao serem discados em uma chamada telefônica,
num total de 8 dígitos.
Gostaria de ter feito uma aplicação em que o usuário pudesse acompanhar na tela as
inserções e remoções dos dígitos, mas não consegui fazer isso. Quem souber, me auxilie por
favor.
Optei por não adicionar a função topo da pilha, não achei necessário neste contexto.
#include <iostream>
//inserção e remoção de 8 dígitos no aparelho telefonico
# define MAX 8
using namespace std;
void push(int p[], int &t, int v); 
int pop(int p[], int &t, int &v);// & porque serão alterados
void situacaoPilha(int p[], int &t);
int main()
{
int op, digito, topo= -1, pilha[MAX], resp;
do
{
system( "cls" );
cout<<"\nDIGITOS INSERIDOS PARA DISCAGEM\n\n";
cout<<"\n1- Inserir digitos.";
cout<<"\n2- Apagar digitos.";
cout<<"\n3- Quantos numeros foram digitados"; 
cout<<"\n4- Sair"; 
cout<<"\nOpcao: ";
cin>>op;
system( "cls" );
03/11/12 Campus Virtual Estácio
27/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
switch(op)
{
case 1:
cout<<"Insira os numeros a serem discados?";
cin>>digito;
push(pilha, topo, digito);
break;
case 2:
resp=pop(pilha,topo,digito);
if(resp==0)
cout<<"\nATENCAO: Nenhum digito inserido!\n";
else
cout<<"\nApaguei '"<<digito<<"' ultimo digito inserido por voce."; 
break;
case 3:
situacaoPilha(pilha,topo);
break;
case 4: cout<<"\nGrato por testar!\n";
break;
default:
cout<<"\nOpcao invalida.\n"; 
}
cout<<"\n\n";system( "pause" ); 
}while(op!=4);
}
//inserir dígito
void push(int p[], int &t, int v) 
{
if(t == MAX-1)
cout<<"\nATENCAO! Voce ja inseriu o numero maximo de digitos\n";
else
{
t++; 
p[t]=v;
}
}
int pop(int p[], int &t, int &v)
{
if (t==-1)
return 0;
else
{
v=p[t];
t--;
return 1;
}
}
// Mostrar numeros digitados no celular
void situacaoPilha(int p[], int &t)
{
if(t == -1)
cout<<"\nATENCAO: Voce nao inseriu nenhum valor!\n"; 
else if (t == MAX - 1 )
cout<<"\nATENCAO: Voce ja digitou os 8 numeros solicitados!\n";
else
{
cout<<"\nTotal de digitos em tela: "<<t+1<<"\n";
cout<<"\n\nFalta inserir na tela: "<<MAX-(t+1)<<"\n"; }
}
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de EDSON JUNIOR SANTOS
Oi Edson,
Vejo que entendeu bem o conceito de pilha, pois já pode inclusive usá-lo em sua aplicação.
Agora gostaria que discutisse, de que modo a estrutura pilha contribui para sua aplicação, isto é,
de que modo o algoritmo LIFO caracterísco de uma pilha contribui para sua aplicação.
[]s
Alexandre
 Aluno (a) EDSON JUNIOR SANTOS respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
A aplicação permite ao usuário digitar um sequência númerica a qual corresponde o
número do telefone a ser discado. Agora entendi por qual motivo a variável "v" não é passada por
referência já que na função push não ocorre alteração de valores na pilha, sua função é apenas
inserir os dígitos do telefone sem quaisquer alteração.
inserir os dígitos do telefone sem quaisquer alteração.
Já na função pop todos precisam ser por referência já que os valores serão alterados.
O exemplo mostra que só podemos alterar o último número inserido. Caso o segundo número
da fila for digitado for o errado o usuário deverá desempilhar a fila até que faça a correção deste
número.
Existem aplicações que permitem a correção direta no número errado, como acontece na tela de
nossos celulares, só que a função pilha não dá suporte a esta necessidade.
Achei esta aula excelente!!!
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de EDSON JUNIOR SANTOS
Oi Edson,
Veja já está descobrindo como é importante o desenvolvimento das tarefas do fórum e a
participação interagindo com os colegas, sempre se aprende algo novo, além é claro, de ter
possibilidade de experimentar na prática o que está estudando.
[]s
Alexandre
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 30 dias atrás
2ª Tarefa
Assita a aula7 e poste aqui uma aplicação para fila sequencial, mostre também a implementação em C++ da aplicação escolhida.
Abcs
Alexandre
 
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 27 dias atrás 
Comentário da postagemde Corpo Docente: ALEXANDRE SOARES ALVES
Resposta ao questionamento 02:
Professor, pensei no seguinte: um programa para um restaurante que possui 10 mesas e um programa que cadastre a mesa a ser atendida por ordem
de chegada. O programa oferece um menu onde pode ser incluído o próximo pedido, excluir o pedido conforme a ordem de chegada, listar os pedidos
faltantes e a o proximo pedido a ser artendido. O programa cadastra até 5 atedimentos. Utiliza o conceito de fila sequencial circular.
#include <iostream>
#include <cstring>
#define tamF 5
#define tamM 10
using namespace std;
struct fila
{
int fill[tamF],in, fim, total;
};
void enqueue(fila&,int);
int dequeue(fila&);
int consultaC(fila&);
int consultaV(fila&);
int main()
{
int cont, i, op, mesa;
fila f;
f.in=0;
f.fim=0;
f.total=0;
int a=1;
cout<<"\MENU\n\n1 - Incluir pedido\n2 - Excluir pedido atendido\n3 - Listar pedidos faltantes de atendimento\n4 - Listar proximo pedido a ser atendido\n5
- Sair: ";
cin>>op; 
do
{
switch(op)
{
case 1: a=consultaC(f);
if(a)
{
cout<<"\n\nDigite mesa a ser atendida: ";
cin>>mesa;
if(mesa<=0||mesa>tamM)
cout<<"\n\nMesa inexistente.\n ";
else
enqueue(f,mesa);
}
system( "pause" );
system( "cls" );
break;
case 2: a=consultaV(f);
if(a)
{
cout<<"\n\nMesa numero "<<dequeue(f)<<" foi atendida e o pedido foi excuido.\n\n";
03/11/12 Campus Virtual Estácio
29/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
cout<<"\n\nMesa numero "<<dequeue(f)<<" foi atendida e o pedido foi excuido.\n\n";
system( "pause" );
system( "cls" );
}
break;
case 3: a=consultaV(f);
if(a)
{
if(f.in<f.fim)
{
cout<<"\n\nOs pedidos a serem atendidos sao ";
for(i=f.in;i<f.fim;i++)
cout<<f.fill[i]<<" ";
cout<<"\n";
}
else
{
cont=f.in;
cout<<"\n\nOs pedidos a serem atendidos sao ";
while(cont<tamF)
{
cout<<f.fill[cont]<<" ";
cont++;
}
i=0;
while(i<f.fim)
{
cout<<f.fill[i]<<" ";
i++;
}
cout<<"\n";
}
} 
system( "pause" );
system( "cls" );
break;
case 4: a=consultaV(f);
if(a)
{
cout<<"\n\nO proximo pedido a ser atendido eh a mesa ";
if(f.in==0)
cout<<f.fill[tamF-1]<<"\n\n\n";
else
cout<<f.fill[f.in]<<"\n\n\n";
}
system( "pause" );
system( "cls" );
break;
case 5: cout<<"\n\nSair.\n\n";
break;
default: cout<<"\n\nValor invalido.\n\n";
break;
}
if(op!=5)
{
cout<<"\MENU\n\n1 - Incluir pedido\n2 - Excluir pedido atendido\n3 - Listar pedidos faltantes de atendimento\n4 - Listar proximo pedido a ser atendido\n5
- Sair: ";
cin>>op; 
}
}while(op!=5); 
system( "pause" );
return 1;
}
void enqueue(fila &f, int mesa)
{
f.fill[f.fim]=mesa;
f.fim++;
f.total++;
if(f.fim==tamF)
f.fim=0;
}
int dequeue(fila &f)
{
int v;
f.in++;
v=f.fill[f.in-1];
f.total--;
if(f.in==tamF)
f.in=0;
return v; 
system( "pause" );
}
int consultaC(fila &f)
{
if(f.total==tamF)
{
cout<<"\n\nNao ha mesas disponiveis\n";
return 0;
}
else
{
return 1;
}
}
system( "pause" );
system( "cls" );
}
int consultaV(fila &f)
{
if(f.total==0)
{
cout<<"\n\nNao ha pedidos a serem atendidos\n\n";
return 0;
}
else
{
return 1;
}
system( "pause" );
system( "cls" );
} 
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 27 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
Oi Tércio,
Excelente sua aplicação para usar a estrutura fila sequencial, visto que no problema das reservas de mesa é prioritário a ordem direta do
cadastramento. Agor me diga, as estruturas de fila sequencial apresentam o problema de esgotamento de memória, como podemos
resolver tal problema.
[]s
Alexandre
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 26 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Professor, a fila circular (conforme usado no programa) resolve o problema de esgotamento de posições, mas em
relação ao esgotamento de memória (ou seja, não tendo mais espaços de memória para alocação de nodos da fila), teremos que
usar alocação dinâmica, ou seja, durante a execução do programa alocar dinamicamente espaços da memória livre com o o uso
do operador new e new[], e consequente desalocação com o operador delete e delete[] e o uso concomitante de ponteiros.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 26 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
Oi Tércio,
Seu programa apresenta a implementação de uma fila circular, pois numa fila circular, após algumas inserções e
remoções os indexadores fim e ini, podem levar o que chamamos de esgotamento de memória, já que em cada
inserção o indexador fim é incrementado e em cada remoção o indexador ini é incrementado, se um destes chegar ao
último campo do vetor base que está servindo de implementação para a fila, esta não poderá receber mais nenhum
elemento. A menos que se use algum artifício que faça que após chegar a última posição do vetor, estes indexadores
sejam atualizados para a posição inicial, como se esta fosse consecutiva a última, isto que dá o efeito circular.
Aliás a solução apresentada por você poderia ser melhorada se usa-se o segunite código:
fim=(fim++)%TAM; e ini=(ini++)%TAM; onde TAM é o tamanho do vetor que inplementa a fila : int fila [TAM];
Veja com este recurso sempre que chegar na última posição os indexadores serão atualizados para zero.
Mas este não é o único problema das filas sequenciais, aliás um grande problema de qualquer estrutura sequencial,
seja fila, pilha ou lista é que estas são implementadas a partir de vetores e estes são estruturas de alocação estática,
isto é devem ter seus tamanhos definidos antes da execução ( chamamos em tempo de compilação). neste caso a
solução é a criação de estruturas encadeadas onde seus tamanhos são definidos de acordo com a demanda em
tempo execução, mas este assunto estudaremos mais adiante.
[]s
Alexandre
 Aluno (a) TÉRCIO MARTINS DUARTE respondeu a 21 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Olá professor. Gostei da dica sobre a inicialização dos indexadores ini e fin.
Obrigado
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 21 dias atrás 
Comentário da postagem de TÉRCIO MARTINS DUARTE
OI Tercio,
Fico contente de você ter aproveitado o fórum para incrementar seu conhecimento. Assim, vocês
perceberão que é muito importante as discussões no nosso fórum.
Continue participando.
[]s
03/11/12 Campus Virtual Estácio
31/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
[]s
Alexandre
 Aluno (a) RICARDO FELISBINO respondeu a 22 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Montei modelo de fila que você pode escolher se vai inserir um valor pelo inicio ou pelo final e também há opcão de ver o primeiro e o
ultimo valor:
 
#include <iostream>
#define TAM 5
using namespace std;
//variavel global
struct queue
{ 
float f[TAM]; 
int inicio,fim; 
}; 
void enfileirafinal(queue &fil);
void enfileirainicio(queue &fil);
void valordofinal(queue &fil);
void valordoinicio(queue &fil);
int main()
{
char resp[10]; int op;
queue fila; //declara a fila
 
// Inicializa a fila
fila.inicio = 0; 
fila.fim = -1; 
do
{ system( "cls" ); 
cout<<"\nFILA\n\n";
cout<<"\n1- Inserir um valor no final da fila";
cout<<"\n2- Inserir um valor no inicio da fila";
cout<<"\n3- Ver o valor no final da fila";
cout<<"\n4- Ver o valor no inicio da fila";
cout<<"\n5- Sai"; 
cout<<"\nOpcao: ";
cin>>resp; op=atoi(resp);
system( "cls" );
switch(op)
{ case 1: enfileirafinal(fila);
break;
case 2: enfileirainicio(fila);
break;
case 3: valordofinal(fila);
break;
case 4: valordoinicio(fila);
break;
case 5: cout<<"\nSaindo do programa\n";
break;
default: cout<<"\nOPCAO INVALIDA\n"; 
} cout<<"\n\n";system( "pause" ); 
}while(op!=5);
}
void enfileirafinal(queue &fil)
{
float valor;
if (fil.fim == TAM -1) //verificando se a fila está cheia
cout<<"\n\n\tATENCAO, Fila cheia\n";
else
{
cout<<"Digite o valor a ser enfileirado:";
cin>>valor;
fil.fim++; //adiciona valor na fila
fil.f[fil.fim] = valor; // guarda o valor no final da fila
}
}
void enfileirainicio(queue &fil)
{
float valor;
if (fil.fim == TAM -1) //verificandose a fila está cheia
cout<<"\n\n\tATENCAO, Fila cheia\n";
else
{
cout<<"Digite o valor a ser enfileirado:";
cin>>valor;
fil.inicio++; //adiciona valor na fila
fil.f[fil.inicio] = valor; // guarda o valor no inicio da fila
}
}
void valordoinicio(queue &fil)
{
if(fil.inicio > fil.fim)
cout<<"\ATENCAO. Fila Vazia\n";
elsa
03/11/12 Campus Virtual Estácio
32/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
cout<<"\nElemento do Inicio da Fila:<<fil.f[fil.inicio];
}
void valordofinal(queue &fil)
{
if(fil.inicio > fil.fim)
cout<<"\ATENCAO. Fila Vazia\n";
elsa
cout<<"\nElemento do Inicio da Fila:<<fil.f[fil.fim];
}
 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 22 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi RICARDO ,
Uma estrutura de dados tem por finalidade otimizar ou viabilizar a construção e um algoritmo. Assim existem diversas aplicações clássicas
que se utilizam das características da estrutura de dados na elaboração de seus algoritmos. Podemos citar no caso de filas por exemplo o
uso de fila de processo pelos sistemas operacionais, já que estes devem gerenciar o uso da CPU seguem o algoritmo LIFO, o primeiro a
chegar é o primeiro que será atendido para o uso da CPU. Sendo assim gostaria que discutisse a sua aplicação sobre este aspecto. Isto é,
qual a vantagem do uso de uma fila na aplicação que apresentou?
[]s
Alexandre
 Aluno (a) RICARDO FELISBINO respondeu a 21 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Pois com essa aplicação podemos decidir com a prioridade da informação e direciona-la para que extremidade
devemos inserir, como você falou, no exemplo da CPU será seguido a ordem da fila, mas se eu tiver uma informação mais
importante e quizer inserir no inicio ou uma informação sem prioridade, com essa aplicação podemos inserir no final ou no inicio
da fila, alem disso este código tambem permite que possa ser visualizado o valor mas relevante (inicio) ou o valor menos
relevante (final).
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 21 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi Ricardo,
Estou vendo que conseguiu entender bemo conceito de fila e já está inclusive desenvolvenfo variações de estruturas de
dado, basado nas estruturas que estudamos,
Parabéns e continue participando de nosso fórum.
[]s
Alexandre
 Aluno (a) RICARDO FELISBINO respondeu a 17 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Estou usando o programa "Dev-C++" para execultar e testar os códigos você sabe me informar
se este programa é o adequado para este tipo de programação ou se exite outro? Algumas vesez ocorre
erro no código e ele não sabe o que hove apenas informa que tem erro.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 16 dias atrás 
Comentário da postagem de RICARDO FELISBINO
Oi Ricardo,
Existem vários IDEs para desenvolvimento de programas em C++, mas os mais famosos em
desenvolvimento são o Eclipse e o Visual C++, gosto muito do Visual, sugiro que experimente
existe versãoe express que são grátis.
[]s
Alexandre
 Aluno (a) DANILO CHIQUETTI respondeu a 19 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 Boa noite Professor e colegas,
minha aplicação é baseada em uma "vitrola", onde a pessoa digita o código da musica que quer ouvir, e aguarda as outras musicas que
estão na fila tocar. Utilizei o código de exemplo da aula 7, modificando algumas coisas.
#include <iostream>
#include <cstdlib>
#define TAM 10
using namespace std;
//variavel global
struct queue
03/11/12 Campus Virtual Estácio
33/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
struct queue
{ 
float f[TAM]; 
int inicio,fim; 
}; 
//declaração de métodos
void addMusica(queue &fil);
void excMusica(queue &fil);
void primMusica(queue &fil);
void filaMusicas(queue &fil);
int main()
{
char resp[10]; int op;
queue fila;
//Inicializa a fila
fila.inicio = 0; 
fila.fim = -1; 
do
{ system( "cls" );
cout<<"\nVitrola Dance - Adicione sua musica e aguarde ela tocar!\n\n";
cout<<"\n1- Inserir uma musica";
cout<<"\n2- Remover uma musica";
cout<<"\n3- Mostrar o nome da musica que esta tocando";
cout<<"\n4- Mostrar situacao da fila de espera"; 
cout<<"\n5- Sair"; 
cout<<"\nOpcao: ";
cin>>resp;op=atoi(resp);
system( "cls" );
switch(op)
{ case 1: addMusica(fila);
break;
case 2: excMusica(fila); 
break;
case 3: primMusica(fila);
break;
case 4: filaMusicas(fila);
break;
case 5: cout<<"\nObrigado por utilizar a Vitrola dance\n";
break;
default: cout<<"\nOPCAO INVALIDA\n"; 
} 
cout<<"\n\n";system( "pause" ); 
}while(op!=5);
}
void addMusica(queue &fil)
{
float valor;
if (fil.fim == TAM - 1) // testando se a fila está cheia 
cout<<"\nATENCAO. vitrola cheia!\n";
else
{
cout<<"Digite o codigo da musica a ser colocado na fila de espera: ";
cin>>valor;
fil.fim++; //atualiza o final da fila
fil.f[fil.fim] = valor; //guarda o valor no final da fila
}
}
void excMusica(queue &fil)
{
if (fil.inicio > fil.fim) // testando se a fila está vazia
cout<<"\nVitrola vazia...\n";
else
{
cout<<"\nCod. musica removida: "<<fil.f[fil.inicio]; // exibe o valor "removido"
fil.inicio++; //atualiza o início da fila
} 
}
void primMusica(queue &fil)
{ 
if(fil.inicio > fil.fim)
cout<<"\nVitrola vazia...\n";
else
cout<<"\nCod. da musica que esta tocando: "<<fil.f[fil.inicio];
}
void filaMusicas(queue &fil)
{ 
if(fil.inicio > fil.fim)
cout<<"\nVitrola vazia...\n"; 
else 
{ 
cout<<"\nTotal de musicas na vitrola: "<<fil.fim+1<<"\n";
cout<<"\n\nEspaco disponivel na vitrola: "<<TAM-(fil.fim+1)<<"\n";
}
} 
03/11/12 Campus Virtual Estácio
34/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
} 
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 19 dias atrás 
Comentário da postagem de DANILO CHIQUETTI
Ótimo Danilo,
Agora gostaria que discutisse, de que modo a estrutura de dados escolhida contribui para que sua aplicação execute a principal tarefa.
[]s
Alexandre
 Aluno (a) DANILO CHIQUETTI respondeu a 18 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
 comentando a aplicação, posso dizer que a estrutura de Fila é ideal porque sempre que for inserida uma musica,
sempre terá uma primeira da fila(que estará tocando), e o restante das musicas estarão em espera, enfileiradas por
ordem de inserção, sendo que as pessoas que inseriram a musica primeiro irão ouví-las primeiro.
 Professor (a) ALEXANDRE SOARES ALVES respondeu a 18 dias atrás 
Comentário da postagem de DANILO CHIQUETTI
Oi Danilo,
Isto mesmo, vejo que conseguiu entender bem para que serve as estruturas, no caso de sua aplicação, você aproveita
a caracterísca FIFO das filas para atender os pedidos em uma ordem direta, que neste caso é o certo.
[]s
Alexandre
 Aluno (a) JOSE CANINDE DA SILVA respondeu a 16 dias atrás 
Comentário da postagem de Corpo Docente: ALEXANDRE SOARES ALVES
Profº este exemplo de fila está baseado no sistema de impressão de avisos de corte da empresa que trabalho,Caern, não sei se esta
correto, mas se não estiver vou tentar acertar porque estou sentindo dificuldade no desenvolvimento desses trabalhos
 
 
#include<iostream>
#define TAM[30]
usingnamespace std;/
//variavel global
struct queue
{
 float f[TAM];
int inicio, fim;
};
void enfileira(queue&fil);
void desenfileira(queue&fil);
void elemPromeiro(queue&fil);
void situacaofila(queue&fil);
int main ( )
{
 charresp[10]; int op;
 queue fila; //declara fila
//inicializa fila
fila.inicio=0;
fila.fim=-1;
do
{ system( "cls" );
 system( "color" );
 cout<<"\nFila(FIFO-First In-Firs tOut)\n\n";
 cout<<"\n1insere valor na fila";
 cout<<"\n2Remove valor na fila";
03/11/12 Campus Virtual Estácio
35/52estacio.webaula.com.br/aluno/forum/comentarios_print.asp?CodTopico=401764&CodTurma=71115…
 cout<<"\n3Mostra elem inicio fila";
 cout<<"\n4Mostra sit da fila";
 cout<<"\n5-sai";
 cout<<"\Opcao:";

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes