Atividade com Array [Resolvido]

14 respostas
tgmarinho

Atividade: Crie um programa que determine os 3 primeiros números perfeitos,
armazenando-os em um array. Mostre o conteúdo do array. Um número n > 0 é perfeito
quando a soma dos seus divisores (exceto ele mesmo) é exatamente igual a n.
Exemplo: 6 -> 1+2+3 = 6

alguém q entenda o proposto pode me ajudar? gostaria de uma lógia pra desenvolver, sintaxe eu sei, mas não consigo pensar nisto!

14 Respostas

tgmarinho

ta osso =(

ViniGodoy

Como descobrir quais são os divisores de um número?

Resposta: Obtenha o resto da divisão desse número por todos os números entre 1 e metade dele. Os que forem resto == 0, são divisores.

Exemplo: Os divisores de 10:
1 - 10 / 1 = 10, resto 0. 1 é divisor.
2 - 10 / 2 = 5, resto 0. 2 é divisor
3 - 10 / 3 = 3, resto 1. 3 não é divisor
4 - 10 / 4 = 2, resto 2. 4 não é divisor.
5 - 10 / 5 = 2, resto 0. 5 é divisor.

Os divisores são: 1, 2 e 5. A soma deles é 8, logo 10 não é um número perfeito.

Nenhum número após o 5 será divisor, pois 5 é a metade de 10. Qualquer número após a metade terá como resultado da divisão 1 e resto igual a ao divisor - dividendo. Outro divisor possível é o próprio número, entretanto, ele não é levado em conta para o caso dos números perfeitos.

Ok. Agora que você já sabe os divisores, basta soma-los. E então, compara-los com o número original.

Dica: Se possível, use um arrayList para armazenar os divisores. Se não for possível, use um vetor de ints, de tamanho igual ao número / 2. E use uma variável contadora para saber quantos divisores foram encontrados.

pvrsouza

Facinho…ainda mais com a explicação do Vini!

Manda vê ae!

tgmarinho

poxa, vlw mesmo denovo salvando meus estudos ^^

eh meu problema mesmo é descobrir a lógica do problema, agora eh só jogar no inglês do java hehe e pronto !!

vou tentar resolver ^^

obg!

pvrsouza

Na verdade a parte boa é essa: Criar a lógica.
Passar pro JAVA é o mínimo!!

Abraços

tgmarinho

pois é, e é isso q to precisando, se alguem souber algo q me ajudar aprimorar a lógica eu agradeço, sei q lógica vc nao aprende vc aperfeiçoa, cada um tem a sua do tamanho da qual estudou para adquirir, ow tem um super dotados ae tbm q nem se fala neh!

pvrsouza

Aprender com os erros é uma forma de aprimorar sua lógica…

Estudar…Estudar…Estudar…Estudar…

Pronto. Formula dada!

tgmarinho
import java.util.Scanner;


public class ola 
{
	public static void main(String[] args)
	{
		int nr, x;
		Scanner guarda = new Scanner(System.in);
		
		System.out.print("Digite um nr para verificar se eh perfeito: ");
		x = guarda.nextInt();
		nr = x/2;
		int[] perfeito = new int[3];
		
		
		for(int a = 1; a <=nr; a++)
		{
			if(x%a == 0)
			{
				System.out.printf("\n o divisor de %d: é %d ", x, a);
							
			}                                                                                                                                                                                                                                                                     
		
	    }//fim for
		
		
	}//fim metodo
	
	
}//fim class

Consegui fazer só até aq, não consegui fazer a variável "a" ser armazenada no array, e depois fazer a soma deles =(

alguém me ajuda? novamente =S

pedroroxd

Escrevi bosta, ja q edito

pedroroxd

O que você está fazendo está errado...
Você tem que ver o resto do número.

Dei uma editada, mas to sem eclipse aki, e não testei. Testa ae:
import java.util.Scanner;  
   
 public class ola {  
     public static void main(String[] args) {  
         int nr, x;  
         int soma = 0;
         Scanner guarda = new Scanner(System.in);  
         int a =0;
   
         System.out.print("Digite um nr para verificar se eh perfeito: ");  
         x = guarda.nextInt();  
   
         for (a = 1; a < x; a++) {  
        	 nr = x%a;       	 
        	 if (nr==0) {
        		 soma = soma + a;
        	 }
         }
         if (soma == a) {  
             System.out.println("É perfeito.");  
         }  else {
        	 System.out.println("Não é perfeito");
         }
   
     }// fim metodo  
 }
pedroroxd
Mas creio que o que a atividade quer é pegar os 3 primeiros perfeitos, de todos os numeros naturais... Então, essa seria a solução:
public class ola {

	public static void main(String[] args) {

		int nr=0, x=0, soma=0, a=0, cont = 0;
		int[] perfeito = new int[4];
		boolean flag = true;

		while (flag) {
			if (cont == perfeito.length) {
				flag = false;

				for (cont = 0; cont < perfeito.length; cont++) {
					System.out.println("Perfeito " + (cont + 1) + ": "
							+ perfeito[cont]);
				}
				break;
			}

			for (a = 1; a <= (x/2); a++) {
				nr = x % a;
				if (nr == 0) {
					soma = soma + a;
				}
			}
			if (soma == x) {
				perfeito[cont] = x;
				cont++;
			}
			soma = 0;
			x++;
		}
	}
}
Saída: Perfeito 1: 0 Perfeito 2: 6 Perfeito 3: 28 Perfeito 4: 496

Se tentar com um numero grande nao vai dar certo... Com 5 você já percebe um certo delay

tgmarinho

Ae vlw pela dica de todos ^^
até q enfim consegui chegar no resultado esperado 8)
aff iniciante é complicado, rala mesmo hehe

tive q usar SystemPrint pq printf não funciona no eclipse aq ainda =( desatualizado

import java.util.Scanner;

public class SlideQuatroEx1 
{
	public static void main(String[] args)
	{
		 /*
		 Atividade: Crie um programa que determine os 3 primeiros números perfeitos, 
		 armazenando-os em um array. Mostre o conteúdo do array. Um número n > 0 é perfeito 
		 quando a soma dos seus divisores (exceto ele mesmo) é exatamente igual a n.
		 Exemplo: 6 -> 1+2+3 = 6
		 */
		Scanner guarda = new Scanner(System.in);
		
		int nr=0, x=0, y, soma=0;
		boolean flag = true;
		
		System.out.printf("informe um nr para verificar se eh perfeito: ");
		nr = guarda.nextInt();
		
		int perfeito[] = new int[3];
		
		x = (nr/2);
					
	    for(int a = 1; a<=x; a++)
		{
			   y = nr%a;
							
				if(y==0)
				{
					for(int b = 0; b<1; b++)
					{
					perfeito[b] = a;
					System.out.printf("divisores de %d é: %d \n", nr,a);
				    soma = soma + perfeito[b];
					}
				}			
		}
	   	    
	    if(soma == nr)
	    {
	    System.out.print("é Perfeito, pois a Soma dos Divisores é: ");
	    System.out.print(soma);
	    }
	    else
	    {
	   	System.out.print("Não é Perfeito, pois a Soma dos Divisores é: ");
	    System.out.print(soma);
	    }
		
               //numeros perfeitos para teste: 6, 28, 496 e 8.128.
	    
	}//fim main
	
	
}//fim class
tgmarinho

pedroroxd o seu código é diferente neh =)

mas ta massa tbm ^^

vlw =)

o meu ta funcionando legal testei com o seus nr perfeitos, hehe tive q pesquisar pra ver quais eram perfeitos, mas vi q vc deixou uma listinha ae =)

abraço!

  • um caso resolvido… ufaaaa
pedroroxd

Blza!
Isso que é o legal de programação e algorítimos… Diferentes caminhos para chegar em um mesmo resultado (parece até minha professora de matemática falando! kkkk)
Bons estudos ! =)

Criado 21 de março de 2010
Ultima resposta 24 de mar. de 2010
Respostas 14
Participantes 4