Exemplo n.º 1
0
        public void geracao2T()
        {
            //DETERMINANDO OS VALORES DE INCIO E FIM DO CONTADOR(j)
            inicioJ = 1;
            fimJ    = tam + 1;
            //INICIANDO MATRIZ GERACAOF COM '0'
            iniciandoMatriz();
            //CRIA UM OBJETO DO TIPO GOL(Sigla de Game Of Life)
            Gol jogoG = new Gol();

            //RODA AS GERAÇÕES
            for (int i = 0; i < qtd; i++)
            {
                //ADICIONA OS VALORES PARA AS VARIÁVEIS
                jogoG.GeracaoI = geracaoI;
                jogoG.GeracaoF = geracaoF;

                //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(i)
                jogoG.InicioI = 1;
                jogoG.FimI    = (tam + 2) / 2;

                //CRIANDO AS THREADS
                Thread mythread  = new Thread(jogoG.estadoCel);
                Thread mythread2 = new Thread(jogoG.estadoCel);

                time.Start();// Começa a contar o tempo

                //Iniciando a primeira Thread
                mythread.Start();
                mythread.Join();

                //Fazendo mudanças nas variáveis para começar a segunda
                jogoG.InicioI = fimI;
                jogoG.FimI    = tam + 1;

                //Iniciando a segunda Thread
                mythread2.Start();
                mythread2.Join();

                //Espera todas as threads terminarem
                Task.WaitAll();

                time.Stop();// Para de contar o tempo

                //FAZENDO A TROCA DE VALORES
                for (int k = 0; k < geracaoI.Count; k++)
                {
                    for (int j = 0; j < geracaoI[0].Count; j++)
                    {
                        geracaoF[k][j] = jogoG.GeracaoF[k][j];
                        geracaoI[k][j] = geracaoF[k][j];
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void geracao4T()
        {
            //INICIANDO MATRIZ GERACAOF COM '0'
            iniciandoMatriz();
            Gol jogoG = new Gol();

            //RODA AS GERAÇÕES
            for (int i = 0; i < qtd; i++)
            {
                //ADICIONA OS VALORES PARA AS VARIÁVEIS
                jogoG.GeracaoI = geracaoI;
                jogoG.GeracaoF = geracaoF;

                //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(i)
                jogoG.InicioI = 1;
                jogoG.FimI    = (tam + 2) / 2;

                //DETERMINANDO OS VALORES DE INICIO E FIM DO CONTADOR(j)
                jogoG.InicioJ = 1;
                jogoG.FimJ    = (tam + 2) / 2;

                //CRIANDO AS THREADS
                Thread mythread  = new Thread(jogoG.estadoCel);
                Thread mythread2 = new Thread(jogoG.estadoCel);
                Thread mythread3 = new Thread(jogoG.estadoCel);
                Thread mythread4 = new Thread(jogoG.estadoCel);

                time.Start();// Começa a contar o tempo

                //Iniciando a primeira Thread
                mythread.Start();
                mythread.Join();

                //Mudando as variaveis do contador (j)
                jogoG.InicioJ = jogoG.FimJ;
                jogoG.FimJ    = tam + 1;

                //Iniciando a segunda Thread
                mythread2.Start();
                mythread2.Join();

                //Mudando as variaveis do contador (i)
                jogoG.InicioI = jogoG.FimI;
                jogoG.FimI    = tam + 1;

                //Mudando as variaveis do contador (j)
                jogoG.InicioJ = 1;
                jogoG.FimJ    = (tam + 2) / 2;

                //Iniciando a terceira Thread
                mythread3.Start();
                mythread3.Join();

                //Mudando as variaveis do contador (j)
                jogoG.InicioJ = jogoG.FimJ;
                jogoG.FimJ    = tam + 1;

                //Iniciando a quarta Thread
                mythread4.Start();
                mythread4.Join();

                //Espera todas as threads terminarem
                Task.WaitAll();

                time.Stop();// Para de contar o tempo

                //FAZENDO A TROCA DE VALORES
                for (int k = 0; k < geracaoI.Count; k++)
                {
                    for (int j = 0; j < geracaoI[0].Count; j++)
                    {
                        geracaoF[k][j] = jogoG.GeracaoF[k][j];
                        geracaoI[k][j] = geracaoF[k][j];
                    }
                }
            }
        }
        private void OpenFile(object sender, MouseButtonEventArgs e)
        {
            Stopwatch time = new Stopwatch();

            if (caixaDir.GetLineText(0) != "" && caixaQtd.GetLineText(0) != "")
            {
                int qtd = Convert.ToInt32(caixaQtd.GetLineText(0));
                //VERIFICA SE O ARQUIVO EXISTE
                if (System.IO.File.Exists(caixaDir.GetLineText(0)))
                {
                    List <List <char> > matriz = new List <List <char> >();
                    List <char>         borda  = new List <char>();
                    string linhaArq            = "";
                    int    tam;
                    int    numLinha = 0;

                    //LENDO O ARQUIVO E PASSANDO OS VALORES PARA A MATRIZ
                    using (StreamReader arq = new StreamReader(caixaDir.GetLineText(0)))
                    {//using não precisa fechar o arquivo
                        linhaArq = arq.ReadLine();
                        tam      = Convert.ToInt32(linhaArq);

                        if (tam < 1001)
                        {
                            //preenchendo as bordas com '0'
                            for (int i = 0; i < tam + 2; i++)
                            {
                                borda.Add('0');
                            }
                            //preenchendo a matriz com os valores
                            while (numLinha < tam)
                            {
                                List <char> linha = new List <char>();
                                linhaArq = arq.ReadLine();
                                if (numLinha == 0)
                                {
                                    //Adiciona a borda da primeira linha na matriz
                                    matriz.Add(borda);
                                }
                                try
                                {
                                    for (int i = 0; i < tam; i++)
                                    {
                                        if (i == 0)
                                        {
                                            //Adiciona borda na primeira coluna da matriz
                                            linha.Add('0');
                                        }
                                        linha.Add(linhaArq[i]);
                                        if ((i + 1) == tam)
                                        {
                                            //Adiciona borda na última coluna da matriz
                                            linha.Add('0');
                                        }
                                    }
                                    //Adiciona linha na matriz
                                    matriz.Add(linha);
                                    numLinha++;
                                    if (numLinha == tam)
                                    {
                                        //Adiciona a borda da última linha na matriz
                                        matriz.Add(borda);
                                    }
                                }
                                catch (NullReferenceException nullRefEx)
                                {
                                    Console.WriteLine("Error: " + nullRefEx);
                                }
                            }
                        }
                    }
                    if (tam < 1001)
                    {
                        if (caixaThre.GetLineText(0) == "2" || caixaThre.GetLineText(0) == "4" || caixaThre.GetLineText(0) == "0")
                        {
                            //CRIA UM OBJETO DO TIPO GOL(Game Of Life) e faz a atribuição de valores para as variáveis
                            Gol jogoG = new Gol();
                            jogoG.GeracaoI = matriz;
                            jogoG.Qtd      = qtd;
                            jogoG.Tam      = tam;

                            if (caixaThre.GetLineText(0) == "2")
                            {
                                //Inicia a geração com duas threads
                                jogoG.geracao2T();
                            }
                            else
                            {
                                if (caixaThre.GetLineText(0) == "4")
                                {
                                    //Inicia a geração com quatro threads
                                    jogoG.geracao4T();
                                }
                                else
                                {
                                    if (caixaThre.GetLineText(0) == "0")
                                    {
                                        //Inicia a geração de forma sequêncial
                                        jogoG.geracao();
                                    }
                                }
                            }

                            // Obtém o tempo que a rotina demorou a executar
                            TimeSpan tempo = jogoG.time.Elapsed;

                            tempoExec.Text = tempo.ToString("hh':'mm':'ss':'fff");

                            //RESULTADO - Cria arquivo com geração final
                            jogoG.result(jogoG.GeracaoI);

                            visualizar();//Abre a canvas de resultado
                        }
                        else
                        {
                            MessageBoxResult alerta = MessageBox.Show("Erro na quantidade de Threads!\nSó é possível 0, 2 ou 4 threads.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Warning);
                        }
                    }
                    else
                    {
                        MessageBoxResult alerta = MessageBox.Show("Tamanho da matriz ultrapassado!\nO valor máximo é de 1000.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                else
                {
                    MessageBoxResult alerta = MessageBox.Show("Arquivo não encontrado!\nVerifique se o mesmo está localizado na pasta bin\\Debug do projeto.", "Alerta", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            else
            {
                if (caixaDir.GetLineText(0) == "" && caixaQtd.GetLineText(0) == "")
                {
                    MessageBoxResult alerta = MessageBox.Show("Digite o nome do arquivo e a quantidade de gerações.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    if (caixaDir.GetLineText(0) == "")
                    {
                        MessageBoxResult alerta = MessageBox.Show("Digite o nome do arquivo.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        MessageBoxResult alerta = MessageBox.Show("Digite a quantidade de gerações.", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            }
        }