Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JOptionPane;
- public class Eq1grau {
- static List <Double> numeros;
- static List <Double> numerosX;
- static List <Double> numerosY;
- public static void main (String[] args){
- /*
- ETAPAS:
- 1. Encontrar todos os números dentro de uma string e converter para INT [COMPLETADO]
- 2. Adicionar tudo para um array para poder trabalhar depois [COMPLETADO]
- 3. Verificar se é incógnita ou não (possui X ou Y no final) [COMPLETADO]
- 4. Verificar se número está antes ou depois do sinal de =, e, dependendo de onde estiver, inverter sinal [COMPLETADO]
- Sobre o passo 4:
- 4.1 - Analisar se número é X ou inteiro; X tem que ficar do lado esquerdo do "=", e inteiro do lado direito;
- 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
- 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
- 4.4 - implementar essa lógica dentro do próprio if que separa X/Y/INT
- 4.5 - Para os passos 4.2 e 4.3 usar um FOR embasado no tamanho da string, a variável Limite
- 5. Verificar se o número é positivo ou negativo;
- Sobre o passo 5:
- 5.1 - Analisar todas as possibilidades de um número negativo. Exemplo:
- 2x - 6 = - x + 15
- 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
- o primeiro número seja negativo.
- 6. Tratar todos os sinais ao longo da equação (+, -, *, /) [= não é necessário] para posicioná-los depois para o usuário.
- 7. Indentificar & tratar parenteses (sabendo quando multiplicar ou não)
- Sobre o passo 7:
- 7.1 - É preciso ver se está usando * ou não. por exemplo, 2 (2x + 5) multiplica, e 2 * (2x + 5) também.
- *** Possivelmente depois do número 5 o programa será capaz de realizar um cálculo básico! ***
- 8. Simplificar resultados que forem frações. Por exemplo, 22/18 viraria 11/9.
- CÁLCULOS QUE DEVERÁ RESOLVER:
- a)18x - 43 = 65
- b) 23x - 16 = 14 - 17x
- c) 10y - 5 (1 + y) = 3 (2y - 2) - 20
- d) x(x + 4) + x(x + 2) = 2x2 + 12
- e) (x - 5)/10 + (1 - 2x)/5 = (3-x)/4
- f) 4x (x + 6) - x2 = 5x2
- -- outros --
- vários exercícios:
- http://rachacuca.com.br/quiz/2717/equacao-de-1-grau/
- exercícios de eq1grau resolvidos passo - a - passo:
- 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
- como fazer + exemplos de eq1grau com 2 variáveis, X & Y:
- http://www.somatematica.com.br/fundam/equacoes2v.php
- */
- int i;
- int j = 0, b = 0, sinalDeIgual = 0;
- int encontrado; //simplesmente recebe valor de I + J. é usado com laço For para ver se variável está antes ou depois do
- //sinal de = para inverter o sinal se preciso. Por exemplo: 10x + 2 = 2 ~> 10x = 2 - 2 (inverteu sinal)
- String s;
- s = JOptionPane.showInputDialog(null, "digite: ", "30x + 14 = 18x - 333 + 9043x"); //recebe equação do usuário
- //30x + 14y - 2 +34 = -18 + 942y - 9310034x
- int limite = s.length() -1; //limite da equação do usuário
- numeros = new ArrayList<>(); //array contendo todos os números da string já convertidos para int
- numerosX = new ArrayList<>(); //array contendo todos os números COM X da string já convertidos para int
- numerosY = new ArrayList<>(); //array contendo todos os números COM Y da string já convertidos para int
- for(i=0; i < limite; i++){
- boolean Negativando = false; //usado como auxiliar para encontrar sinais de = !
- try{
- String Auxiliar = ""; //por exemplo, se na string encontrar um número com 2+ dígitos, quando convertido o programa ainda
- //subentende como "1 & 8", e não "18". Para isso, eu uso uma string auxiliar para concatenar tudo e
- //depois simplesmente converter para int!
- if(Character.isLetter(s.charAt(i))){ //se encontrar um caractere que for letra não faz nada :)
- System.out.print("");
- }
- while(Character.isDigit(s.charAt(i + j))){ //se encontrar um número, verifica se o próximo é um número também. enquanto o
- //próximo for um número, permanece no while
- s += " "; //adiciona espaço vazio no final da equação para não estourar o Catch
- Auxiliar += s.charAt(i+j); //concatena número para um String
- j += 1; //incrementa o J para poder ver o próximo caractere
- }
- double Numero = Double.parseDouble(String.valueOf(Auxiliar)); //converte string auxiliar concatenada para Int
- encontrado = i+j; //simplesmente recebe valor do i + j
- //ANALISA SE É INCÓGNITA X
- if (s.charAt(encontrado) == 'x'){ //se possuir a letra X após o número (se for uma incógnita)
- //VERIFICA SE X ESTÁ DEPOIS DO SINAL DE =
- for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
- if(s.charAt(b) =='='){ //se encontrar um sinal de =, inverte sinal
- Negativando = true;
- AdicionaNumeroVetorX(Numero * -1); //adiciona no arraylist
- System.out.print(Numero * -1 + "x "); //exibe na tela para teste
- }
- } //fim do for
- //VERIFICA SE X ESTÁ ANTES DO SINAL DE =
- if(Negativando == false){ //se não, mantém!
- AdicionaNumeroVetorX(Numero);
- System.out.print(Numero + "x "); //exibe na tela para teste
- }
- }
- //ANALISA SE É INCÓGNITA Y
- else if (s.charAt(encontrado) == 'y'){ //se possuir a letra Y após o número (se for uma incógnita)
- //VERIFICA SE Y ESTÁ DEPOIS DO SINAL DE =
- for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
- if(s.charAt(b) =='='){ //se encontrar um sinal de =, inverte sinal
- Negativando = true;
- AdicionaNumeroVetorY(Numero * -1); //adiciona no arraylist
- System.out.print(Numero * -1 + "y "); //exibe na tela para teste
- }
- } //fim do for
- //VERIFICA SE Y ESTÁ ANTES DO SINAL DE =
- if(Negativando == false){ //se não, mantém!
- AdicionaNumeroVetorY(Numero);
- System.out.print(Numero + "y "); //exibe na tela para teste
- }
- }
- //ANALISA SE NÃO É INCÓGNITA
- else if (s.charAt(encontrado) != 'y' && s.charAt(i+j) != 'x'){ //caso não seja incógnita
- //VERIFICA SE NÚMERO ESTÁ DEPOIS DO SINAL DE =
- for(b = encontrado; b >= 0; b--){ //pesquisa reversamente a string iniciando do número que encontrou.
- if(s.charAt(b) =='='){ //se encontrar um sinal de =, mantém sinal, por que ele tem que ficar do lado direito!
- Negativando = true;
- AdicionaNumeroVetor(Numero); //adiciona no arraylist
- System.out.print(Numero + " "); //exibe na tela para teste
- }
- } //fim do for
- //VERIFICA SE NÚMERO ESTÁ ANTES DO SINAL DE =
- if(Negativando == false){ //se não, inverte sinal!
- AdicionaNumeroVetor(Numero * -1);
- System.out.print(Numero*-1 + " "); //exibe na tela para teste
- }
- }
- } //fim do Try
- //capturando erros
- catch(StringIndexOutOfBoundsException e){
- System.out.print("Erro, ");
- }
- catch(NumberFormatException e){
- }
- } //final do for
- //PRIMEIRO & SEGUNDO PASSO: ----------------------------------------------------------------------------------------
- System.out.println("\n\n" + "1º Passo: " + s);
- System.out.print("2º Passo: ");
- for (int k = 0; k < numerosX.size(); k++){//for para exibir tudo q está dentro do arraylist
- System.out.print(numerosX.get(k) + "x "); //mostra todos os números
- }
- System.out.print("= ");
- //System.out.print("\n\nOs números inteiros são: ");
- for (int k = 0; k < numeros.size(); k++){//for para exibir tudo q está dentro do arraylist
- System.out.print(numeros.get(k) + " "); //mostra todos os números
- }
- /*
- //EQUAÇÕES COM 2 INCÓGNITAS SERÃO VISTAS MAIS TARDE!
- System.out.print("\n\nOs números com Y são: ");
- for (int k = 0; k < numerosY.size(); k++){//for para exibir tudo q está dentro do arraylist
- System.out.print(numerosY.get(k) + ", "); //mostra todos os números
- }
- */
- //3º PASSO ----------------------------------------------------------------------------------------
- double somaX=0;
- double soma = 0;
- for(int somando=0; somando<numerosX.size(); somando++){
- somaX+=(double) numerosX.get(somando);
- }
- for(int somando=0; somando<numeros.size(); somando++){
- soma+=(double) numeros.get(somando);
- }
- System.out.print("\n3º Passo: " + somaX +"x = " + soma);
- System.out.print("\n4º Passo: x = " + soma + " / " + somaX);
- System.out.print("\n5º Passo: x = " + (soma / somaX) + "\n");
- /*
- int soma = numeros.get(0) + numeros.get(1);
- System.out.print("\nSoma: "+soma);
- */
- } //fim Main
- public static void AdicionaNumeroVetor(double AdicionarNumero){ //método para adicionar números
- numeros.add(AdicionarNumero);
- }
- public static void AdicionaNumeroVetorX(double AdicionarNumero){ //método para adicionar números
- numerosX.add(AdicionarNumero);
- }
- public static void AdicionaNumeroVetorY(double AdicionarNumero){ //método para adicionar números
- numerosY.add(AdicionarNumero);
- }
- } //fim classe
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement