Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bobrinha

Dificuldades em resolver exercícios com pilhas e filas

Recommended Posts

Olá pessoal, estou precisando muito de ajuda sobre esse assunto e fico muito grato por qualquer ajuda.

 

Qual é a diferença entre pilha e fila? Se forem semelhantes qual a mais usada? como por exemplo em php existe o if e o switch que fazem a mesma coisa, porem cada um escolhe qual e como deve usar da melhor forma chegando ao mesmo resultado.

 

Por favor me ajudem a responder essa pergunta porem com explicações

 

Crie um algoritmo para ler uma sequência de 20 números informados pelo usuário e inserir os números lidos em uma fila. Em seguida o algoritmo deverá imprimir a cabeça e cauda da fila.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara são muitos nomes, Arrays, pilha, fila, vetor cada um chama de uma maneira mas são todas a mesma coisa em essência. Linguagens diferentes tratam um pouco diferente cada tipo de coisa obviamente. No seu caso você tem um vetor de 20 posições, o usuário vai colocar os valores e você vai adicionando, primeiro na posição 1, depois na 2 e assim por diante. Então no final você vai exibir a posição 1 e 20 do vetor.

 

https://www.google.com.br/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0CDIQtwIwAg&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DDE0GtQJ9EFg&ei=axZKVZT9D4WMNuCwgYgI&usg=AFQjCNG_A3GZ_CnALH30b1YxDTduM-g4cg&bvm=bv.92291466,d.eXY

 

http://forum.imasters.com.br/topic/500184-algoritmos-vetores-em-portugol/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obg por explicar, eu realmente fiquei com duvidas visto que falam disso o tempo todo mais os professores tem mania de citar um nome só seria tão mais facil se falassem como vc falou

 

Então dessa forma que fiz está correta?

 

algoritmo "Fila"

var

Fila : vetor [1..20] de inteiro

Indice, Cabeca, Cauda : inteiro

inicio

para Indice de 1 ate 20 faca

escreva ("Digite o ",Indice," º número: ")

leia (Fila[Indice])

fimpara

Cabeca <- Fila[1]

Cauda <- Fila[1]

para Indice de 2 ate 20 faca

se (Cabeca < Fila[Indice]) entao

Cabeca <- Fila[Indice]

fimse

se (Cauda > Fila[Indice]) entao

Cauda <- Fila[Indice]

fimse

fimpara

escreva ("Cabeca: ",Cabeca)

escreva ("Cauda: ",Cauda)

fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode definir constantes:

 Cabeca <- 1
 Cauda  <- 20

Então ele pede para você imprimir a cabeça e a cauda, logo o código de loop são desnecessários, basta você printar assim:

escreva ("Cabeca: ",Fila[Cabeca]) 
escreva ("Cauda: ",Fila[Cauda]) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por toda ajuda que está me dando, eu fiz da seguinte forma abaixo e fui informado pelo professor que confesso acho que não entende muito de logica de programação que eu estou errado no meu exercicio mais acho que estou certo veja o meu e veja o dele e se puder me diga se o meu nao faz exatamente o que pede o exercicio porem com muito menos linhas

 

Meu




algoritmo "Exercicio1"


// Crie um algoritmo para ler uma sequência de 20 números informados pelo usuário e inserir os


//números lidos em uma fila. Em seguida o algoritmo deverá imprimir a cabeça e cauda da fila.


// Autor : Ronaldo Aires


var

Fila : vetor [1..20] de inteiro

Indice, Cabeca, Cauda : inteiro

inicio

para Indice de 1 ate 20 faca

escreva ("Digite o ",Indice," º número: ")

leia (Fila[Indice])

fimpara


Cabeca <- Fila[1]

Cauda <- Fila[20]


escreval ("Cabeca: ",Cabeca)

escreval ("Cauda: ",Cauda)

fimalgoritmo

 

 

O mesmo exercício feito pelo professor

 


 

algoritmo "fila"

//Autor : Professor
//Versão : 0.0.1
//Removido o procedimento inicializafila
//Variável "cauda" recebe zero no começo
var
fila:vetor[1..5] de inteiro
cabeca, cauda, qtde, valor, cont:inteiro
//Sistema que checa se a fila esta Vazia
funcao filavazia :logico
inicio
se(qtde=0)entao
retorne verdadeiro
senao
retorne falso
fimse
fimfuncao
//Sistema que checa se a fila esta cheia
funcao filacheia :logico
inicio
se (qtde=5)entao
retorne verdadeiro
senao
retorne falso
fimse
fimfuncao
//Sistema de enfileiramento
//Corrigido o da apostila apresenta pois apresenta bug
procedimento enfileirar(v:inteiro) //Removido a variável "elemento"
inicio
se filacheia entao
escreval("Erro fila Cheia")
senao
// fila[cauda]:=elemento estar no local errado foi realocado para baixo
se cauda<5 entao
cauda:=cauda+1
senao
cauda := 1
fimse
fila[cauda]:= v
qtde := qtde+1
fimse
fimprocedimento
//Sistema de Desenfileiramento
//Correção e melhoramentos
//FUNÇÃO desenfileirar deixa de ser inteiro para ser logico
//variável "retorno" foi removida
procedimento desenfileirar
inicio
se filavazia entao
// "-999" foi substituído por "falso"
escreveal("Erro fila vazia")
senao
// "retorno" foi substituído por "valor"
valor := fila[cabeca]
qtde := qtde-1
se cabeca <5 entao
cabeca:= cabeca+1
senao
cabeca:=1
fimse
escreval("Foi removido o valor ",valor," da fila")
fimse
fimprocedimento
//Imprima a Fila na tela em ordem de chegada
//Criado procedimento mostrafila
//levei muito tempo para criar e muito erros foi removido
//mais não esta 100%
procedimento mostrarfila
var i, mqtde, memoria:inteiro
inicio
se (filavazia) entao
escreval ("Erro não a ninguém na fila para ser mostrado tenta mais tarde")
senao
// Não sei explicar ele ainda mais vou criar um tópico só para ele com explicação
repita
mqtde:=mqtde+1
se(cabeca+mqtde-1<=5)entao
escreva(fila[cabeca+mqtde-1])
senao
memoria:=mqtde
para i:=1 ate (qtde+1-memoria)faca
mqtde:=mqtde+1
escreva(fila)
fimpara
fimse
ate mqtde >=qtde
fimse
fimprocedimento
//Programa
inicio
cabeca := 1
para cont:=1 ate 5 faca
escreval("Digite um numeroa para fila")
leia(valor)
enfileirar(valor)
fimpara
escreval(fila[cabeca])
escreval(fila[cauda])
fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele tem algumas validações a mais, por exemplo, vendo se a fila está vazia ou não, muitas coisas ele fez em métodos, talvez seja isso que ele quer dizer com "Está errado", porque o seu modelo está adicionando 20 valores em um vetor enquanto o dele utiliza métodos para inserir na fila, todo o seu método está contido aqui no dele:

cabeca := 1
para cont:=1 ate 5 faca
   escreval("Digite um numeroa para fila")
   leia(valor)
   enfileirar(valor)
fimpara
escreval(fila[cabeca])
escreval(fila[cauda])

A diferença é que ele transformou em métodos. O método enfileirar pega o valor e coloca na próxima posição da fila, se a fila estiver cheia ele vai retornar uma mensagem de fila cheia. Existem algumas coisas ai que realmente não fazem sentido se este for o enunciado correto.

 

Você já rodou este programa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodei os dois programas no visualg e os dois fazem a mesma coisa ou seja pede os numeros a gente digita e no final mostra a cabeça e a calda ou seja o primeiro e ultimo numero.

 

Veja o que ele falou sobre o meu codigo

 

o erro ta que você não estruturo seu codigo, não criou o métodos da fila que seria método de enfileirar desenfileirar, fila cheia e fila vazia. Mais porque eu devo criar isso deve? Bom para aprender a "estruturar dados", e a falar do seu código é que as pessoas só entra na fila e nao podem sair e só você sabe que é a cabeça(primeiro da fila) e a cauda(o utimo da fila) , pois foi você que informo manualmente, desta forma toda vez que uma pessoa sair você deve informa que é a cabeça da fila e toda vez que entra deve informa a cauda manualmente.

 

 

Mesmo assim ainda acho que as coisas que ele fez não servem para nada e que o meu código faz exatamente o que o dele faz, complicado duvidar do professor rss, por isso venho aqui pedir orientação e ajuda de quem entende do assunto, sei que é chato mais é vivendo e aprendendo, pois pra mim cada um tem sua logica desde que chegue ao resultado final esperado rss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o seu código faz o mesmo que o dele. Porém além desta questão existe a questão da visibilidade do que seu professor quer te ensinar, o problema é que esse exemplo não mostra o funcionamento disso.

 

Mas imagina o seguinte, temos dois carros, uma Ferrari e um VolksWagen, os dois fazem a mesma coisa, você pode usar os dois para fazer exatamente tudo que um carro pode fazer. Porém na Ferrari você vai ter um sistema mais otimizado, maior velocidade, maior aerodinâmica e tudo mais. O mesmo vale para o código, o seu código funciona bem porque são apenas 20 valores, agora imagine se fossem um milhão de valores, seu programa demoraria demais.

 

O que seu professor está dizendo é que você não criou métodos, você não dividiu o seu código em rotinas, e isso é uma excelente prática, ele tem razão em dizer que o modo que você fez, apesar de chegar no mesmo resultado dele, está errado. Ele está tentando ensinar boas práticas de programação, tente refatorar seu código para incluir métodos.

 

Cada um tem sua logica desde que chegue ao resultado final esperado

 

 

No ramo de estudo isto é válido, porém no mundo profissional você precisa fazer um código do modo mais eficiente possível para que ele seja rápido, ágil e não ocupe memória, como eu disse antes, existem códigos que fazem a mesma coisa mas cada um com um nível de eficiencia e rapidez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obg, conclusão, o código está certo porém pode ser melhorado com métodos e rotinas que são boas praticas de programação para o mundo profissional

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa mesma linha de filas e pilhas não estou conseguindo resolver um exercício de "pilhas". Será que alguém poderia me ajudar?

 

  1. Implemente uma estrutura de pilha segundo o material dado e execute as seguintes operações:

a. Empilhe: 5

b. Empilhe: 8

c. Empilhe: 22

d. Escreva o topo da pilha

e. Desempilhe

f. Imprima o topo da pilha

g. Empilhe: 30

h. Empilhe: 32

i. Imprima o resultado de Desempilhe

j. Imprima a quantidade de itens empilhados

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.