Duvida em um Ex da Faculdade

2 respostas
Eduardo_Bregaida

Enunciado do Exercício:

Quantos elementos terá o conjunto G ? ____

Após eu digitar o número(que deverá ser de 2 a 6)(caso eu digite número diferente de 2 a 6 abrirá uma msg informando os números possíveis), aparecerá outra mensagem:

Digite os números de G = { , __ ,, n }

Após eu digitar o último número do conjunto G, que chamei de n , abrirá uma outra mensagem:

Você quer qual potência de G ? ____

Após digitar o número(que deverá ser de 2 a 6) (se digitar diferente de 2 a 6, aparecerá uma msg informando os números possíveis), aparecerá todos os elementos de Gn
Ou seja Gn = { ( ), ( ),( ) , ( ), … , ( ) }

FIM

Eu consegui fazer o programa,mas ainda falta os números de N, tipo eu nao tenho ideia de como fazer.

Por exemplo:

Duvida:

/*
 * Criado em 19/03/2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - JAVA - Code Style - Code Templates
 */

/**
 * @author Eduardo Bregaida
 * Universidade IMES (Instituto Municipal de Ensino Superior) 
 *São Caetano do Sul
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - JAVA - Code Style - Code Templates
 */
import java.io.*;

public class Algebra {
       public static void main(String[] args) throws IOException {
	       System.out.print("Digite a quantidade de G: ");
	       InputStreamReader isr = new
		       InputStreamReader(System.in);
	       BufferedReader br = new BufferedReader(isr);
	       String s = br.readLine();
	       int g = Integer.parseInt(s);
	       System.out.print("Digite o número de N: ");
	       s = br.readLine();
	       int n = Integer.parseInt(s);
	       
	       
	       while (g>=2||g<=6){
				
		while (n>=2||n<=6){
		
	       //if (g>=2||g<=6){
		//if (n>=2||n<=6){
			
			
	     //Para G=2 e N = 2		
	       if (g==2 && n==2){
		System.out.print("Digite o Primeiro Número: ");
			s = br.readLine();
		       int n1 = Integer.parseInt(s);
		   
		       System.out.print("Digite o Segundo Número: ");
			s = br.readLine();
		       int n2 = Integer.parseInt(s);   
		System.out.println("(" + n1 + "," + n1 + "),(" + n1 + "," + n2 + "),(" + n2 + "," + n1 + "),(" + n2 + "," + n2 + ")");
		System.out.println("O valor da Potencia é de:"+g*g);
	       
	       } 
	       
	       
	       else 
	       //Para G=3 e N = 2
	       if (g==3 && n==2){
		System.out.print("Digite o Primeiro Número: ");
			s = br.readLine();
		       int n1 = Integer.parseInt(s);
		   
		       System.out.print("Digite o Segundo Número: ");
			s = br.readLine();
		       int n2 = Integer.parseInt(s);   
		       
		       System.out.print("Digite o Terceiro Número: ");
			s = br.readLine();
		       int n3 = Integer.parseInt(s); 
		System.out.println("(" + n1 + "," + n1 + "),(" + n1 + "," + n2 + "),(" + n1 + "," + n3 + "),(" + n2 + "," + n1 + "),"
			+ "(" + n2 + "," + n2 + "),(" + n2 + "," + n3 + "),(" + n3 + "," + n1 + "),(" + n3 + "," + n2 + "),"
			+ "(" + n3 + "," + n3 + ")");
		System.out.println("O valor da Potencia é de:"+g*g);
	       }
	   
				
				else
				
				// Para G=4 e N = 2
		       if (g==4 && n==2){
			System.out.print("Digite o Primeiro Número: ");
				s = br.readLine();
			       int n1 = Integer.parseInt(s);
			   
			       System.out.print("Digite o Segundo Número: ");
				s = br.readLine();
			       int n2 = Integer.parseInt(s);   
			       
			       System.out.print("Digite o Terceiro Número: ");
				s = br.readLine();
			       int n3 = Integer.parseInt(s); 
			       
			       System.out.print("Digite o Quarto Número: ");
				s = br.readLine();
			       int n4 = Integer.parseInt(s); 
			System.out.println("(" + n1 + "," + n1 + "),(" + n1 + "," + n2 + "),(" + n1 + "," + n3 + "),(" + n1 + "," + n4 + "),("
					  + n2 + "," + n1 + "),(" + n2 + "," + n2 + "),(" + n2 + "," + n3 + "),(" + n2 + "," + n4 + "),("
					  + n3 + "," + n1 + "),(" + n3 + "," + n2 + "),(" + n3 + "," + n3 + "),(" + n3 + "," + n4 + "),("
					  + n4 + "," + n1 + "),(" + n4 + "," + n2 + "),(" + n4 + "," + n3 + "),(" + n4 + "," + n4 + ")"
					);
			System.out.println("O valor da Potencia é de:"+g*g);
		       }    	
		       
		       else
	     //	     Para G=5 e N = 2
		       if (g==5 && n==2){
			System.out.print("Digite o Primeiro Número: ");
				s = br.readLine();
			       int n1 = Integer.parseInt(s);
			   
			       System.out.print("Digite o Segundo Número: ");
				s = br.readLine();
			       int n2 = Integer.parseInt(s);   
			       
			       System.out.print("Digite o Terceiro Número: ");
				s = br.readLine();
			       int n3 = Integer.parseInt(s); 
			       
			       System.out.print("Digite o Quarto Número: ");
				s = br.readLine();
			       int n4 = Integer.parseInt(s);
				
				   System.out.print("Digite o Quinto Número: ");
				s = br.readLine();
			       int n5 = Integer.parseInt(s);
			
			
			System.out.println("(" + n1 + "," + n1 + "),(" + n1 + "," + n2 + "),(" + n1 + "," + n3 + "),(" + n1 + "," + n4 + "),(" + n1 + "," + n5 + "),("
					  + n2 + "," + n1 + "),(" + n2 + "," + n2 + "),(" + n2 + "," + n3 + "),(" + n2 + "," + n4 + "),(" + n2 + "," + n5 + "),("
					  + n3 + "," + n1 + "),(" + n3 + "," + n2 + "),(" + n3 + "," + n3 + "),(" + n3 + "," + n4 + "),(" + n3 + "," + n5 + "),("
					  + n4 + "," + n1 + "),(" + n4 + "," + n2 + "),(" + n4 + "," + n3 + "),(" + n4 + "," + n4 + "),(" + n4 + "," + n5 + "),("
					  + n5 + "," + n1 + "),(" + n5 + "," + n2 + "),(" + n5 + "," + n3 + "),(" + n5 + "," + n4 + "),(" + n5 + "," + n5 + ")"
					 );       		
			System.out.println("O valor da Potencia é de:"+g*g);
		       }
		       
		       else
    //	     Para G=6 e N = 2
		       if (g==6 && n==2){
			System.out.print("Digite o Primeiro Número: ");
				s = br.readLine();
			       int n1 = Integer.parseInt(s);
			   
			       System.out.print("Digite o Segundo Número: ");
				s = br.readLine();
			       int n2 = Integer.parseInt(s);   
			       
			       System.out.print("Digite o Terceiro Número: ");
				s = br.readLine();
			       int n3 = Integer.parseInt(s); 
			       
			       System.out.print("Digite o Quarto Número: ");
				s = br.readLine();
			       int n4 = Integer.parseInt(s);
				
				   System.out.print("Digite o Quinto Número: ");
				s = br.readLine();
			       int n5 = Integer.parseInt(s);
			       
			       System.out.print("Digite o Sexto Número: ");
				s = br.readLine();
			       int n6 = Integer.parseInt(s);
			
			
			System.out.println("(" + n1 + "," + n1 + "),(" + n1 + "," + n2 + "),(" + n1 + "," + n3 + "),(" + n1 + "," + n4 + "),"
					  + "(" + n1 + "," + n5 + "),(" + n1 + "," + n6 + "),("
					  + n2 + "," + n1 + "),(" + n2 + "," + n2 + "),(" + n2 + "," + n3 + "),(" + n2 + "," + n4 + "),"
					  + "(" + n2 + "," + n5 + "),(" + n2 + "," + n6 + "),("
					  + n3 + "," + n1 + "),(" + n3 + "," + n2 + "),(" + n3 + "," + n3 + "),(" + n3 + "," + n4 + "),"
					  + "(" + n3 + "," + n5 + "),(" + n3 + "," + n6 + "),("
					  + n4 + "," + n1 + "),(" + n4 + "," + n2 + "),(" + n4 + "," + n3 + "),(" + n4 + "," + n4 + "),"
					  + "(" + n4 + "," + n5 + "),(" + n4 + "," + n6 + "),("
					  + n5 + "," + n1 + "),(" + n5 + "," + n2 + "),(" + n5 + "," + n3 + "),(" + n5 + "," + n4 + "),"
					  + "(" + n5 + "," + n5 + "),(" + n5 + "," + n6 + "),("
					  + n6 + "," + n1 + "),(" + n6 + "," + n2 + "),(" + n6 + "," + n3 + "),(" + n6 + "," + n4 + "),"
					  + "(" + n6 + "," + n5 + "),(" + n6 + "," + n6 + ")"
					 );	
			System.out.println("O valor da Potencia é de:"+g*g); 
		       }
		    else
		     System.out.println ("Digite o Número de G ou de N entre 2 até 6");
		       return ;	             
	     }
	  }      	
      }          
}       
	     //fim desse pedaço do código até onde consegui fazer

2 Respostas

Rafael_Steil

Cara, o maior problema eh que voce esta fazendo o programa como se estivesse usando o caderno. Ou seja, voce esta fazendo tudo no braco, usando ifs para cada possibilidade, e escrevendo o output na mao tambem. Tudo fica extremamente mais facil quando o codigo for organizado por blocos logicos, que executam tarefas especializadas. O mesmo vale para a escrita do resultado final: ao inves de fazer o System.out manualmente, delegue isso para alguem que faca para vc ;). Por exemplo:

Ha muito codigo repetido para ler a entrada do usuario. Para melhorar um pouco, faca um metodo simples, onde a logica em si estara:

private int readInt(String message, int min, int max) throws Exception {
	int value = 0;
	boolean ok = false;
	
	while (!ok) {
		System.out.print(message + " ");
		value = Integer.parseInt(reader.readLine());
		
		if (value  < min || value > max) {
			System.out.println("O valor deve estar entre " + min + "  e " + max);
		}
		else {
			ok = true;
		}
	}
	
	return value;
}

Ai basta voce usar assim no seu programa:

int g = c.readInt("Quantos elementos tera o conjunto G?", 2, 6);
int n = c.readInt("Digite o numero de N:", 1, 10);

Note como fica beeeem mais facil agora :). O mesmo se aplica para a leitura do “n”. No meu exemplo, ao inves de pedir um valor por linha, soliciquei ao usuario que digitasse os valors de uma unica fez, separador por um espaco em branco. Obviamente, se preferir, eh soh alterar o codigo para solicitar um valor por linha:

private int[] readMultiInts(String message) throws Exception {
	System.out.println(message + " ");
	String[] v = reader.readLine().split(" ");
	
	int[] values = new int[v.length];	
	
	for (int i = 0; i < v.length; i++) {
		values[i] = Integer.parseInt(v[i]);
	}
	
	return values;
}

E entao vc usa como

int[] elements = c.readMultiInts("Digite os valores, separados por espaco em branco:");

E, por ultimo, basta um outro metodo para criar o conjunto:

private void showConjunct(int[] elements) {
	StringBuffer sb = new StringBuffer(elements.length * elements.length * 3);
	
	for (int i = 0; i < elements.length; i++) {
		for (int j = 0; j < elements.length; j++) {
			sb.append("(").append(elements[i]).append(",").append(elements[j]).append("),");
		}
		
		sb.append("\n");
	}
	
	System.out.println(sb);
}

Veja que nao ha segredo algum. Basta “n” fors para passar por todos os elementos. Nesse exemplo soh eh possivel montar grupos de 2 em 2 (1,1), (1,2) etc )… Fica para voce melhorar o codigo afim de suportar “n” :wink:

A resultado desse metodo sera algo como

(1,1),(1,2),(1,3),(1,4),
(2,1),(2,2),(2,3),(2,4),
(3,1),(3,2),(3,3),(3,4),
(4,1),(4,2),(4,3),(4,4),

A ideia geral eh essa: mantenha a simplicidade, crie pedacos de codigo (metodos) especializados, e aproveite o que uma linguagem de programacao pode oferecer a voce.

Rafael

Eduardo_Bregaida

Deixa eu ver se entendi, o código vai ficar assim???

public class algebra{
	
	private int readInt(String message, int min, int max) throws Exception {
 	int value = 0;
 	boolean ok = false;
 	
 	while (!ok) {
 		System.out.print(message + " ");
 		value = Integer.parseInt(reader.readLine());
 		
 		if (value  < min || value > max) {
 			System.out.println("O valor deve estar entre " + min + "  e " + max);
 		}
 		else {
 			ok = true;
 		}
 	}
 	
 	return value;
 }


 private int[] readMultiInts(String message) throws Exception {
 	System.out.println(message + " ");
 	String[] v = reader.readLine().split(" ");
 	
 	int[] values = new int[v.length];	
 	
 	for (int i = 0; i < v.length; i++) {
 		values[i] = Integer.parseInt(v[i]);
 	}
 	
 	return values;
 }

	
	int[] elements = c.readMultiInts("Digite os valores, separados por espaco em branco:");
private void showConjunct(int[] elements) {
 	StringBuffer sb = new StringBuffer(elements.length * elements.length * 3);
 	
 	for (int i = 0; i < elements.length; i++) {
 		for (int j = 0; j < elements.length; j++) {
 			sb.append("(").append(elements[i]).append(",").append(elements[j]).append("),");
 		}
 		
 		sb.append("\n");
 	}
 	
 	System.out.println(sb);
 }
}

Eu não entendi, aonde vou encaixar essas partes, dai ta dando 3 erros de compilação Rafa...

ta dando esses paus:
--------------------Configuration: &lt;Default&gt;--------------------
C:\algebra.java:9: cannot find symbol
symbol  : variable reader
location: class algebra
                value = Integer.parseInt(reader.readLine());
                                         ^
C:\algebra.java:25: cannot find symbol
symbol  : variable reader
location: class algebra
        String[] v = reader.readLine().split(" ");
                     ^
C:\algebra.java:37: cannot find symbol
symbol  : variable c
location: class algebra
        int[] elements = c.readMultiInts("Digite os valores, separados por espaco em branco:");
                         ^
3 errors

Process completed.
Criado 20 de março de 2005
Ultima resposta 21 de mar. de 2005
Respostas 2
Participantes 2