Advertisement
dantepw

Untitled

Feb 24th, 2014
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.49 KB | None | 0 0
  1.  
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.swing.JOptionPane;
  5.  
  6. public class Eq1grau {
  7.    
  8.     static List <Double> numeros;
  9.     static List <Double> numerosX;
  10.     static List <Double> numerosY;
  11.    
  12.     public static void main (String[] args){
  13.  
  14.  
  15.        
  16.         /*
  17.         ETAPAS:
  18.         1. Encontrar todos os números dentro de uma string e converter para INT [COMPLETADO]
  19.         2. Adicionar tudo para um array para poder trabalhar depois [COMPLETADO]
  20.         3. Verificar se é incógnita ou não (possui X ou Y no final) [COMPLETADO]
  21.        
  22.         4. Verificar se número está antes ou depois do sinal de =, e, dependendo de onde estiver, inverter sinal [COMPLETADO]
  23.        
  24.         Sobre o passo 4:
  25.         4.1 - Analisar se número é X ou inteiro; X tem que ficar do lado esquerdo do "=", e inteiro do lado direito;
  26.         4.2 - SE FOR X: Percorrer a string a partir do número para trás: se encontrar um sinal de "=", inverte sinal! se n, mantém
  27.         4.3 - SE FOR INT: Percorrer a string a partir do número para frente: se encontrar um sinal de "=", inverte sinal! se n, mantém
  28.         4.4 - implementar essa lógica dentro do próprio if que separa X/Y/INT
  29.         4.5 - Para os passos 4.2 e 4.3 usar um FOR embasado no tamanho da string, a variável Limite
  30.        
  31.         5. Verificar se o número é positivo ou negativo;
  32.        
  33.         Sobre o passo 5:
  34.         5.1 - Analisar todas as possibilidades de um número negativo. Exemplo:
  35.         2x - 6 = - x + 15    
  36.        
  37.         X é negativo, porém o 6 não é. É preciso analisar se há um sinal de igual antes do negativo e/ou se há o início da String, caso
  38.         o primeiro número seja negativo.
  39.        
  40.         6. Tratar todos os sinais ao longo da equação (+, -, *, /) [= não é necessário] para posicioná-los depois para o usuário.
  41.        
  42.        
  43.        
  44.        
  45.         7. Indentificar & tratar parenteses (sabendo quando multiplicar ou não)
  46.        
  47.         Sobre o passo 7:
  48.         7.1 - É preciso ver se está usando * ou não.  por exemplo, 2 (2x + 5) multiplica, e 2 * (2x + 5) também.
  49.        
  50.         *** Possivelmente depois do número 5 o programa será capaz de realizar um cálculo básico! ***
  51.        
  52.         8. Simplificar resultados que forem frações. Por exemplo, 22/18 viraria 11/9.
  53.        
  54.        
  55.        
  56.         CÁLCULOS QUE DEVERÁ RESOLVER:
  57.        
  58.         a)18x - 43 = 65
  59.         b) 23x - 16 = 14 - 17x
  60.         c) 10y - 5 (1 + y) = 3 (2y - 2) - 20
  61.         d) x(x + 4) + x(x + 2) = 2x2 + 12
  62.         e) (x - 5)/10 + (1 - 2x)/5 = (3-x)/4
  63.         f) 4x (x + 6) - x2 = 5x2
  64.        
  65.         -- outros --
  66.         vários exercícios:
  67.          http://rachacuca.com.br/quiz/2717/equacao-de-1-grau/
  68.        
  69.         exercícios de eq1grau resolvidos passo - a - passo:
  70.         http://www.nilsong.com.br/index.php?option=com_content&view=article&id=110:exercicios-resolvidos-de-equacoes-do-1o-grau&catid=61:resumo-da-6o-serie&Itemid=93
  71.        
  72.         como fazer + exemplos de eq1grau com 2 variáveis, X & Y:
  73.         http://www.somatematica.com.br/fundam/equacoes2v.php
  74.         */
  75.        
  76.             int i;
  77.         int j = 0, b = 0, sinalDeIgual = 0;
  78.         int encontrado; //simplesmente recebe valor de I + J. é usado com laço For para ver se variável está antes ou depois do
  79.                                       //sinal de = para inverter o sinal se preciso. Por exemplo: 10x + 2 = 2 ~> 10x = 2 - 2 (inverteu sinal)
  80.        
  81.     String s;
  82.     s = JOptionPane.showInputDialog(null, "digite: ", "30x + 14 = 18x - 333 + 9043x"); //recebe equação do usuário
  83.                                                                                                                           //30x + 14y - 2 +34 = -18 + 942y - 9310034x
  84.  
  85.  
  86.     int limite = s.length() -1; //limite da equação do usuário
  87.     numeros = new ArrayList<>(); //array contendo todos os números da string já convertidos para int
  88.     numerosX = new ArrayList<>(); //array contendo todos os números COM X da string já convertidos para int
  89.     numerosY = new ArrayList<>(); //array contendo todos os números COM Y da string já convertidos para int
  90.    
  91.     for(i=0; i < limite; i++){
  92.    boolean Negativando = false; //usado como auxiliar para encontrar sinais de = !
  93.    
  94.    try{
  95.        String Auxiliar = ""; //por exemplo, se na string encontrar um número com 2+ dígitos, quando convertido o programa ainda
  96.                                             //subentende como "1 & 8", e não "18". Para isso, eu uso uma string auxiliar para concatenar tudo e
  97.                                             //depois simplesmente converter para int!
  98.        
  99.         if(Character.isLetter(s.charAt(i))){ //se encontrar um caractere que for letra não faz nada :)
  100.             System.out.print("");
  101.         }
  102.        
  103.        while(Character.isDigit(s.charAt(i + j))){ //se encontrar um número, verifica se o próximo é um número também. enquanto o
  104.                                                                                  //próximo for um número, permanece no while
  105.  
  106.            s += " "; //adiciona espaço vazio no final da equação para não estourar o Catch
  107.            Auxiliar += s.charAt(i+j); //concatena número para um String
  108.            j += 1; //incrementa o J para poder ver o próximo caractere
  109.            
  110.        }
  111.        
  112.          double Numero = Double.parseDouble(String.valueOf(Auxiliar)); //converte string auxiliar concatenada para Int
  113.          
  114.          encontrado = i+j; //simplesmente recebe valor do i + j
  115.          
  116.          //ANALISA SE É INCÓGNITA X
  117.           if (s.charAt(encontrado) == 'x'){ //se possuir a letra X após o número (se for uma incógnita)
  118.              
  119.               //VERIFICA SE X ESTÁ DEPOIS DO SINAL DE =
  120.               for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
  121.                                                                            
  122.  
  123.                   if(s.charAt(b) =='='){ //se encontrar um sinal de =, inverte sinal
  124.                   Negativando = true;
  125.                   AdicionaNumeroVetorX(Numero * -1); //adiciona no arraylist
  126.                   System.out.print(Numero * -1 + "x "); //exibe na tela para teste
  127.                  
  128.                   }
  129.           } //fim do for
  130.              
  131.                   //VERIFICA SE X ESTÁ ANTES DO SINAL DE =
  132.                   if(Negativando == false){ //se não, mantém!
  133.                       AdicionaNumeroVetorX(Numero);
  134.                       System.out.print(Numero + "x "); //exibe na tela para teste
  135.                   }
  136.  
  137.           }
  138.          
  139.           //ANALISA SE É INCÓGNITA Y
  140.           else if (s.charAt(encontrado) == 'y'){ //se possuir a letra Y após o número (se for uma incógnita)
  141.              
  142.               //VERIFICA SE Y ESTÁ DEPOIS DO SINAL DE =
  143.               for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
  144.                                                                            
  145.  
  146.                   if(s.charAt(b) =='='){ //se encontrar um sinal de =, inverte sinal
  147.                   Negativando = true;
  148.                   AdicionaNumeroVetorY(Numero * -1); //adiciona no arraylist
  149.                   System.out.print(Numero * -1 + "y "); //exibe na tela para teste
  150.                  
  151.                   }
  152.           } //fim do for
  153.              
  154.                   //VERIFICA SE Y ESTÁ ANTES DO SINAL DE =
  155.                   if(Negativando == false){ //se não, mantém!
  156.                       AdicionaNumeroVetorY(Numero);
  157.                       System.out.print(Numero + "y "); //exibe na tela para teste
  158.                   }
  159.           }
  160.          
  161.           //ANALISA SE NÃO É INCÓGNITA
  162.           else if (s.charAt(encontrado) != 'y' && s.charAt(i+j) != 'x'){ //caso não seja incógnita
  163.              
  164.               //VERIFICA SE NÚMERO ESTÁ DEPOIS DO SINAL DE =
  165.               for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
  166.                                                                            
  167.  
  168.                   if(s.charAt(b) =='='){ //se encontrar um sinal de =, mantém sinal, por que ele tem que ficar do lado direito!
  169.                   Negativando = true;
  170.                   AdicionaNumeroVetor(Numero); //adiciona no arraylist
  171.                   System.out.print(Numero + " "); //exibe na tela para teste
  172.                  
  173.                   }
  174.           } //fim do for
  175.              
  176.                   //VERIFICA SE NÚMERO ESTÁ ANTES DO SINAL DE =
  177.                   if(Negativando == false){ //se não, inverte sinal!
  178.                       AdicionaNumeroVetor(Numero * -1);
  179.                       System.out.print(Numero*-1 + " "); //exibe na tela para teste
  180.                   }
  181.           }
  182.  
  183.  
  184.          
  185.        
  186.    } //fim do Try
  187.    
  188.    //capturando erros
  189.         catch(StringIndexOutOfBoundsException e){  
  190.             System.out.print("Erro, ");
  191.         }
  192.            catch(NumberFormatException e){
  193.      
  194.         }
  195.        
  196.        
  197.         } //final do for
  198.                                             //PRIMEIRO & SEGUNDO PASSO: ----------------------------------------------------------------------------------------
  199.                                             System.out.println("\n\n" + "1º Passo: " + s);
  200.                                            
  201.                                             System.out.print("2º Passo: ");
  202.                                             for (int k = 0; k < numerosX.size(); k++){//for para exibir tudo q está dentro do arraylist
  203.         System.out.print(numerosX.get(k) + "x "); //mostra todos os números   
  204.                                             }
  205.                                            
  206.                                             System.out.print("= ");
  207.                                            
  208.                 //System.out.print("\n\nOs números inteiros são: ");
  209.         for (int k = 0; k < numeros.size(); k++){//for para exibir tudo q está dentro do arraylist
  210.         System.out.print(numeros.get(k) + " "); //mostra todos os números 
  211.                                             }
  212.                
  213.                                             /*
  214.                                             //EQUAÇÕES COM 2 INCÓGNITAS SERÃO VISTAS MAIS TARDE!
  215.                                             System.out.print("\n\nOs números com Y são: ");
  216.         for (int k = 0; k < numerosY.size(); k++){//for para exibir tudo q está dentro do arraylist
  217.         System.out.print(numerosY.get(k) + ", "); //mostra todos os números   
  218.                                             }
  219.                                             */
  220.                
  221.                                             //3º PASSO ----------------------------------------------------------------------------------------
  222.                                             double somaX=0;
  223.                                             double soma = 0;
  224.                                             for(int somando=0; somando<numerosX.size(); somando++){
  225.                                             somaX+=(double) numerosX.get(somando);
  226.                                             }
  227.                                            
  228.                                             for(int somando=0; somando<numeros.size(); somando++){
  229.                                             soma+=(double) numeros.get(somando);
  230.                                             }
  231.                                             System.out.print("\n3º Passo: " + somaX +"x = " + soma);
  232.                                             System.out.print("\n4º Passo: x = " + soma + " / "  + somaX);
  233.                                             System.out.print("\n5º Passo: x = " + (soma / somaX) + "\n");
  234.                
  235.                
  236.                 /*
  237.                 int soma = numeros.get(0) + numeros.get(1);
  238.                 System.out.print("\nSoma: "+soma);
  239.                  */
  240.                
  241.     } //fim Main
  242.    
  243.     public static void AdicionaNumeroVetor(double AdicionarNumero){ //método para adicionar números
  244.         numeros.add(AdicionarNumero);
  245.     }
  246.    
  247.         public static void AdicionaNumeroVetorX(double AdicionarNumero){ //método para adicionar números
  248.         numerosX.add(AdicionarNumero);
  249.     }
  250.        
  251.             public static void AdicionaNumeroVetorY(double AdicionarNumero){ //método para adicionar números
  252.         numerosY.add(AdicionarNumero);
  253.     }
  254.    
  255. } //fim classe
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement