William Rodrigues Postado Maio 2, 2006 Denunciar Share Postado Maio 2, 2006 Salve!estou com algumas dificuldades de como fazer uma simulação da Pilha do SO. Tipo, tem que salvar o endereço de retorno, as variáveis passadas e tal.Brothers, tá foda essa parada.Pilha normal eu entendo e consigo fazer a sua implementação. Mas, descobrir o tamanho mínimo para ela (para que não ocorra Overflow) e fazer essa simulação é que é difícil. Se alguém puder me ajudar com explicações ou algum material falando sobre simulação de Pilhas, Pilhas do SO ou algo de ajude agradeço.Valeu rapaziada!Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 3, 2006 Denunciar Share Postado Maio 3, 2006 Opa, William, tá sumido, hein? :)Overflow do tamanho da pilha? Se for, por que não fazer uma pilha com alocação dinâmica? Uma lista circular serviria.Mas, explique melhor o que você quer dizer com "pilha do SO", porque eu não encontrei nada a respeito desse assunto.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 3, 2006 Autor Denunciar Share Postado Maio 3, 2006 Salve!É, estou super sumido mesmo...Ah, antes de mais nada, parabéns pela mais nova moderação em Visual Basic cara, mais do que merecida ;)Então, tenho que fazer a simulação da Pilha, controlada pelo SO, em uma função recursiva. Tenho que armazenar o endereço para retorno (controle das chamdas) e as variáveis passadas.O tamanho da Pilha descobri fazendo a árvore de recursão. A Pilha, faço com um struct colocando o endereço e os parâmetros passados. O que estou com dificuldades seria para fazer o controle sobre o endereço (como fazer o controle em um função recursiva).Meio complicado ainda né?Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 4, 2006 Denunciar Share Postado Maio 4, 2006 Salve!É, estou super sumido mesmo...Ah, antes de mais nada, parabéns pela mais nova moderação em Visual Basic cara, mais do que merecida ;)Obrigado! :DEntão, tenho que fazer a simulação da Pilha, controlada pelo SO, em uma função recursiva. Tenho que armazenar o endereço para retorno (controle das chamdas) e as variáveis passadas.O tamanho da Pilha descobri fazendo a árvore de recursão. A Pilha, faço com um struct colocando o endereço e os parâmetros passados. O que estou com dificuldades seria para fazer o controle sobre o endereço (como fazer o controle em um função recursiva).Meio complicado ainda né?Sim, ainda está complicado... rsrsrs. Mas, que tipo de "controle" você quer ter sobre o endereço?Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 4, 2006 Autor Denunciar Share Postado Maio 4, 2006 Salve!Realmente ficou e ainda está complicado! :DQueria apenas uma referência, uma identificação da chamada. Seria algo mais ou menos assim. função (parametro1) /* aqui tenho que alocar o endereço da chamada (identificação) e os parametros passados */ Pilha.Endereco = "chamada 1" Pilha.Parametro1 = valor função (tipo parametro1) { /* rotina da função */ } Só que a função ela é recursiva, ou seja, vou ter que empilhar o endereço (identificador) da chamada e os parametros a serem passados.Só que não sei o tipo de tratamento ou como fazer a identificação do processo quando chegar ao caso trivial na função recursiva.Ficou mais claro brother?Valeu pela força!Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 5, 2006 Denunciar Share Postado Maio 5, 2006 Hummm... está melhorando! :D Só para fica mais claro ainda: você sabe qual seria o caso trivial (e não está conseguindo implementar) ou é justamente isso (qual é o caso) que é a sua dúvida?Espero estar ajudando!Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 5, 2006 Autor Denunciar Share Postado Maio 5, 2006 hehehe...Sei sim, seria para a Função MergeSort. Merge(Lista, inicio, final) { int meio; if (inicio < final) { meio = (inicio + final) / 2; MergeSort(L, inicio, meio); MergeSort(L, meio + 1, final); Intercala(L, inicio, meio, final); } } No que puder me ajudar agradeço brother.Valeu cara!Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 6, 2006 Denunciar Share Postado Maio 6, 2006 Ih... heheheh... complicou de novo. Você quer ordenar a pilha? Mas, ordenar pelo quê?Você poderia dar um exemplo prático de como funcionaria essa pilha do SO? O que entra, o que sai, bláblá...; qualquer exemplo serve, só pra ter um idéia.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 8, 2006 Autor Denunciar Share Postado Maio 8, 2006 hehehehe...certo...Achei um exemplo bem fácil. Fazendo a função recursiva do Fatorial e inspecionando a variável passada com argumento para a função recursiva, você notará que ela mudará de valor a cada chamada da função, seria isso que eu tenho que fazer com a minha pilha. Seria armazenar esses valores para quando a função recursiva chegar no caso trivial eu possa desempilhar esses caras e obter os valores. Sacou? ;) (--> by: Graymalkin)hehehe...Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 9, 2006 Denunciar Share Postado Maio 9, 2006 hehehehe...certo...Achei um exemplo bem fácil. Fazendo a função recursiva do Fatorial e inspecionando a variável passada com argumento para a função recursiva, você notará que ela mudará de valor a cada chamada da função, seria isso que eu tenho que fazer com a minha pilha. Seria armazenar esses valores para quando a função recursiva chegar no caso trivial eu possa desempilhar esses caras e obter os valores. Sacou? ;) (--> by: Graymalkin)hehehe...Hehehehe... gostei do "Sacou? ;) (--> by: Graymalkin)"... e sim saquei! Mas, não seria só uma questão de passar a pilha para a função? Uma fez que ela é uma referência, não se perderiam os valores que foram adicionados anteriormente. Já que você citou o caso de uma função para calcular fatorial, fiz um exemplo com ela:#include <stdlib.h> #include <stdio.h> #include <stack> using namespace std; int fatorial(int i, stack<int> pilha) { if (i==0 || i==1) { while (!pilha.empty()) { printf("\nDesempilhando: %i", pilha.top()); pilha.pop(); } return 1; } else { pilha.push(i); return i*fatorial(i-1, pilha); } } int main() { stack<int> pilha; printf("\nResultado: %i\n", fatorial(5, pilha)); system("pause"); }Note que ao chegar no caso trivial da função fatorial (if (i==0 || i==1)) eu mostro todos os valores que passaram pela função antes. É claro que se eu quisesse eles na mesma ordem que foram passados (5, 4, 3, etc.) bastaria passar os valores para outra pilha (resultando na inversão da pilha).Seria isso mesmo ou eu viajei?Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 9, 2006 Autor Denunciar Share Postado Maio 9, 2006 hehehe! :DNo caso até poderia mas eu já tenho um include para a Pilha com as funções já prontas (Empilhar, Desempilhar, etc). Mas seu código foi ótimo cara!Show, era bem isso mesmo cara!Firmeza brother...Valeu mesmo cara.Obrigado!!!!Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 9, 2006 Denunciar Share Postado Maio 9, 2006 Beleza, então! :D Ah, veja se aparece mais aqui no fórum.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
William Rodrigues
Salve!
estou com algumas dificuldades de como fazer uma simulação da Pilha do SO. Tipo, tem que salvar o endereço de retorno, as variáveis passadas e tal.
Brothers, tá foda essa parada.
Pilha normal eu entendo e consigo fazer a sua implementação.
Mas, descobrir o tamanho mínimo para ela (para que não ocorra Overflow) e fazer essa simulação é que é difícil.
Se alguém puder me ajudar com explicações ou algum material falando sobre simulação de Pilhas, Pilhas do SO ou algo de ajude agradeço.
Valeu rapaziada!
Abraços,
William Rodrigues
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.