예제 #1
0
 //Função que desenfileira um dado da Fila
 public void Desenfileirar(ref Produto xProd)
 {
     if (Vazia())
     {
         Console.Write("\nFila Vazia!!!");
     }
     else
     {
         xProd  = inicio.item;
         inicio = inicio.prox;
     }
     tamanho--;
 }
예제 #2
0
        //Função que retira um dado da Lista
        public void Retirar(Produto xProd)
        {
            Celula anterior;
            Celula auxiliar;

            if (Vazia())
            {
                Console.Write("\nLista vazia...");
            }
            else
            {
                anterior = null;
                auxiliar = inicio;
                int achou = 0;

                while (auxiliar != null)
                {
                    if (auxiliar.item == xProd)
                    {
                        achou++;
                        if (auxiliar == inicio)
                        {
                            inicio   = auxiliar.prox;
                            auxiliar = inicio;
                        }
                        else if (auxiliar == fim)
                        {
                            fim      = anterior;
                            fim.prox = null;
                        }
                        else
                        {
                            anterior.prox = auxiliar.prox;
                            auxiliar      = auxiliar.prox;
                        }
                    }
                    else
                    {
                        anterior = auxiliar;
                        auxiliar = auxiliar.prox;
                    }
                }
                tamanho = tamanho - achou;
            }
        }
예제 #3
0
        //Função que insere ordenadamente um dado na Lista
        public void InserirOrdenado(Produto xProd, Celula anterior)
        {
            Celula auxiliar = new Celula();

            auxiliar.item = xProd;

            if (anterior != null)
            {
                auxiliar.prox = anterior.prox;
                anterior.prox = auxiliar;
            }
            else
            {
                auxiliar.prox = inicio;
                inicio        = auxiliar;
            }
            tamanho++;
        }
예제 #4
0
        //Função que enfileira um dado na Fila
        public void Enfileirar(Produto xProd)
        {
            Celula auxiliar = new Celula();

            auxiliar.item = xProd;
            auxiliar.prox = null;

            if (Vazia())
            {
                inicio        = auxiliar;
                fim           = auxiliar;
                auxiliar.prox = null;
            }
            else
            {
                fim.prox = auxiliar;
                fim      = auxiliar;
            }
            tamanho++;
        }
        //Função que implementa o Método LRU para gerência da prateleira
        public void MetodoLRU(Produto[] vetProd)
        {
            metodo = "LRU";

            tempo    = 0;
            registro = null;

            numFaltas = 0;
            compras   = 0;

            Lista prateleira;           //Define uma prateleira do tipo Lista.

            try
            {
                //Tenta a abertura do arquivo
                StreamReader arq = new StreamReader(caminho);

                //EndOfStream significa o fim do arquivo
                while (!arq.EndOfStream)
                {
                    cont = 0;

                    Celula  aux;
                    Celula  anterior = null;
                    Produto xProd;

                    prateleira = new Lista();

                    tamanho = Convert.ToInt16(arq.ReadLine());          //Pega na primeira linha do arquivo o tamanho da prateleira.

                    while (!arq.EndOfStream)
                    {
                        registro += arq.ReadLine();         //Lê o resto do arquivo até o final.
                    }

                    //Vai ser pego caractere por caractere do arquivo que será associado a um Produto que vai tentar entrar na prateleira
                    for (i = 0; i < registro.Length; i++)
                    {
                        achou = false;
                        ch    = Convert.ToChar(registro.Substring(i, 1));       //Pega cada caractere.

                        if (ch >= '0' && ch <= '9')
                        {
                            pos = Convert.ToInt16(ch.ToString());           //Encontra o produto correspondente àquele caractere.

                            //Acresce no número de vendas do produto, além do tempo e nº de compras de uma prateleira
                            tempo++;

                            vetProd[pos].NumVendas++;
                            compras++;

                            //Atualiza o tempo de último acesso do Produto na prateleira
                            vetProd[pos].UltimoAcesso = tempo;

                            xProd = new Produto();
                            xProd = vetProd[pos];

                            //Busca se o Produto já se encontra na prateleira
                            prateleira.BuscaPosição(xProd.UltimoAcesso, ref anterior, ref achou);

                            //Se não encontrou o Produto na prateleira, tenta-se inserí-lo
                            if (!achou)
                            {
                                numFaltas++;

                                //Caso haja espaço, o Produto é inserido
                                if (cont < tamanho)
                                {
                                    prateleira.InserirOrdenado(xProd, anterior);
                                    cont++;
                                }
                                //Senão, deverá ser feita a substituição de Produtos
                                else
                                {
                                    prateleira.Inicio.item.NumSubstituido++;
                                    prateleira.Retirar(prateleira.Inicio.item);
                                    prateleira.InserirOrdenado(xProd, anterior);
                                }
                            }
                            //Se o Produto já existe na prateleira, ele será realocado para o final da Lista
                            else
                            {
                                prateleira.Retirar(xProd);

                                prateleira.BuscaPosição(xProd.UltimoAcesso, ref anterior, ref achou);
                                prateleira.InserirOrdenado(xProd, anterior);
                            }
                        }
                        else if (ch == '.')
                        {
                            tempo++;
                        }

                        //Passo-a-passo mostrando o funcionamento do Algoritmo FIFO a cada tempo
                        Console.WriteLine("\n");
                        Console.Write("Tempo {0}", tempo);
                        aux = prateleira.Inicio;
                        while (aux != null)
                        {
                            Console.Write("\n{0} - {1}: Vendas: {2} Subst.: {3}", aux.item.Codigo, aux.item.Descricao, aux.item.NumVendas, aux.item.NumSubstituido);

                            aux = aux.prox;
                        }
                    }
                }

                arq.Close();            //Fecha o arquivo.

                Console.Write("\n\nPressione <QUALQUER TECLA> para gerar relatório.");
                Console.ReadKey();

                //Mostra relatório
                Relatorio(vetProd, numFaltas, compras, tempo, metodo);
            }

            //Caso gere uma exceção na abertura do arquivo, ela será tratada
            catch (System.IO.DirectoryNotFoundException ex)
            {
                Console.Write(ex.Message);
            }
            catch (FileNotFoundException ex)
            {
                Console.Write(ex.Message);
            }
            catch (FileLoadException ex)
            {
                Console.Write(ex.Message);
            }
            catch (FormatException ex)
            {
                Console.Write(ex.Message);
            }
            catch (ArgumentException ex)
            {
                Console.Write(ex.Message);
            }
        }
예제 #6
0
 //Inicializador de dados (Construtor)
 public Fila()
 {
     inicio  = null;
     fim     = null;
     tamanho = 0;
 }
예제 #7
0
        public Celula prox;         //Ponteiro que aponta para a próxima posição da Lista ou Fila.

        //Inicializador de dados (Construtor)
        public Celula()
        {
            item = new Produto();
            prox = null;
        }
예제 #8
0
 //Inicializador de dados (Construtor)
 public Lista()
 {
     inicio  = null;
     fim     = null;
     tamanho = 0;
 }