Vetores e Ordenaçao - Ajuda URGENTE!

8 respostas
H

Preciso desenvolver um programa que leia e armazene 10 números em um vetor e depois em um outro vetor armazene os números pares e ainda num terceiro armazene os ímpares, e um outro programa que preencha um vetor com 10 números e armazene em um segundo vetor de mesma dimensão primeiros os números pares em ordem crescente e depois os ímpares em ordem crescente também. Preciso resolver isso para amanhã e to com bastante dificuldade, já passei horas e horas tentando desenvolver o algoritmo, alguém ai tem um algoritmo para isso?

8 Respostas

ViniGodoy

Poste os algoritmos que vc tentou fazer que te ajudamos.

H

Os algorítmos não estão no pc mas posso passar o código, no primeiro programa eu ja consegui separar os pares dos ímpares numa string mas como o exercício que em um vetor... já no segundo eu consegui ordenar os números mas não primeiro os pares e depois os ímpares, tão ai os códigos:

long[] numeros = new long[10];
			long[] par = new long[10];
			long[] impar = new long[10];
			int npar = 0, nimpar = 0, a; 
			String saida = "Valores digitados: ";
			String pares = "Números pares digitado: ";
			String impares = "Números impares digitados: ";
			
			for(int i = 0; i<=9; i++)
			{
				numeros[i] = Long.parseLong(JOptionPane.showInputDialog(null, "Digite o "+(i+1)+"º número", "Entrada de Dados", JOptionPane.PLAIN_MESSAGE));
				if(numeros[i] % 2 == 0)
				{
					par[npar] = numeros[i];
					npar = npar + 1;
					pares += +par[npar]+" ";
				}
				else
				{
					impar[nimpar] = numeros[i];
					nimpar = nimpar + 1;
					impares += +impar[nimpar]+" ";
				}
				saida += +numeros[i]+ " "; 
			}
			JOptionPane.showMessageDialog(null, pares+" \n"+impares+" ");

Entrei com os valores: 0; 9; 8; 7; 6; 5; 4; 3; 2; 1;
Nesse aqui na saída ele mostra: Numeros pares digitados: 0 0 0 0 0
Numeros impares digitados: 0 0 0 0 0

Já o programa que ordena em ordem crescente os pares e depois os ímpares:
int aux, min; 
		int par = 0, npar = 0, impar = 0, nimpar = 0;
		int[] numeros = new int[10];
		int[] armazena = new int[10];
		String saida = "Números digitados: ";
		
		for(int x = 0; x<=9; x++)
		{
			numeros[x] = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o "+ (x+1) +"º número", "Entrada de Dados", JOptionPane.PLAIN_MESSAGE));
			if(numeros[x] % 2 == 0)
			{
				npar = npar + 1;
			}
			else
			{
				nimpar = nimpar + 1;
			}
		}
		for(int i = 0; i<=10; i++)
		{ 
			min = i;
			for(int j = i+1; j<10; j++)
			{
				if(numeros[j] < numeros[min])
				{
					min = j;
				}
			}
			if(min != i)
			{
				aux = numeros[i];
				numeros[i] = numeros[min];
				numeros[min] = aux; 
				
			}
			for(int n = 0; n<=9; n++)
			{
				if(numeros[n] % 2 == 0)
				{
					armazena[par] = numeros[n];
					par = par + 1;
				}
				else
				{
					impar = impar + 1;
					armazena[npar + impar] = numeros[n];
					
				}
			}
			saida += +numeros[i]+ " ";
			JOptionPane.showMessageDialog(null, saida, "Saída de Dados", 1);
		}

Nesse aqui a JOption nem está sendo exibida...

Desculpa ai se eu não estiver vendo algum erro besta mas ainda sou iniciante em Java

FabioQuintana

Segue a solução para o primeiro exercicio...

substitui o trecho em questao...
if(numeros[i] % 2 == 0)  
{  
    par[npar] = numeros[i]; 
    pares += par[npar]+" ";
    npar = npar + 1;  
}  
else  
{  
    impar[nimpar] = numeros[i];  
    impares += String.valueOf(impar[nimpar]) + " "; 
    nimpar = nimpar + 1;  
     
}

Espero ter ajudado...
Abraço.

H

valeu Fabio, ajudo pra caramba…
agora só falta o 2º… :slight_smile:

FabioQuintana

Opa, humberto... blz?

Depois de uma caminhada até em casa...
voltei pra termina o serviço...

segue a resolução do segundo exercicio...

import javax.swing.JOptionPane;

/**
 *
 * @author Fabio Q. (GUJ)
 */
public class ordenacao {

	public static void main(String[] args) {
		new ordenacao().exec();
	}

	public void exec(){

        int npar = 0, nimpar = 0;
        int numeros;
        int host = 0;
        int[] vetPar = new int[10];
        int[] vetImpar = new int[10];
        String saidaPar = "Números pares em ordem: ";
        String saidaImpar = "Números impares em ordem: ";

        for(int x = 0; x<10; x++)
        {
            numeros = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o "+ (x+1) +"º número", "Entrada de Dados", JOptionPane.PLAIN_MESSAGE));
            if(numeros % 2 == 0)
            {
                vetPar[npar] = numeros;
                npar++;
            }
            else
            {
                vetImpar[nimpar] = numeros;
                nimpar++;
            }
        }

        for (int k = 0; k < npar; k++){
            for (int l = 0; l < npar - 1; l++){
                if (vetPar[l] > vetPar[l+1]) {
                    host =  vetPar[l];
                    vetPar[l] = vetPar[l+1];
                    vetPar[l+1] = host;
                }
            }
        }

         for (int k = 0; k < nimpar; k++){
            for (int l = 0; l < nimpar - 1; l++){
                if (vetImpar[l] > vetImpar[l+1]) {
                    host = vetImpar[l];
                    vetImpar[l] = vetImpar[l+1];
                    vetImpar[l+1] = host;
                }
            }
        }
        
        for ( int k = 0; k < npar; k++) {
            saidaPar += String.valueOf(vetPar[k]) + " ";
        }
         for ( int k = 0; k < nimpar; k++) {
            saidaImpar += String.valueOf(vetImpar[k]) + " ";
        }
        
        JOptionPane.showMessageDialog(null, saidaPar+" \n"+saidaImpar+" ");
        
        }
}

Espero ter ajudado... Qualquer problema ... pergunta, se eu puder eu ajudo =)

Abraço.

H

Ae fabio valeu pela ajuda, eu só não entendi uma coisa, nesse trecho do código abaixo por precisou do "k" no laço se ele não está sendo usado ali?

for (int k = 0; k < npar; k++){   
            for (int l = 0; l < npar - 1; l++){   
                if (vetPar[l] > vetPar[l+1]) {   
                    host =  vetPar[l];   
                    vetPar[l] = vetPar[l+1];   
                    vetPar[l+1] = host;   
                }   
            }   
        }   
  
         for (int k = 0; k < nimpar; k++){   
            for (int l = 0; l < nimpar - 1; l++){   
                if (vetImpar[l] > vetImpar[l+1]) {   
                    host = vetImpar[l];   
                    vetImpar[l] = vetImpar[l+1];   
                    vetImpar[l+1] = host;   
                }   
            }   
        }
FabioQuintana

esta sendo usado sim, ele eh o contador do laço… nao estou usando como indice…
mas isso garante q o vetor fique em ordem, pq ele repete o teste de troca varias vezes…

digamos…

sequencia…
5, 4, 3, 2, 1… o teste de mesa fica…

l=0, l=1, l=2, l=3, l=4
4, 3, 2, 1, 5 | k = 0
3, 2, 1, 4, 5 | k = 1
2, 1, 3, 4, 5 | k = 2
1, 2, 3, 4, 5 | k = 3

imaginando uma matriz de execução no sentido esquerda para direita… seria esse os valores de K e L… em seus respectivos momentos…
nao fico mto claro, mas eh isso… AUSHUH

entao, K é usado… como contador do laço ^^

poderia ser usado o I e J? poderia, troquei só para ficar mais didatico…

Abraço.

H

aah ta entendi, por cara valeu mesmo, me ajudo pra caramaba.

Criado 16 de setembro de 2010
Ultima resposta 16 de set. de 2010
Respostas 8
Participantes 3