Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

progster

Verificação Ordem

Recommended Posts

progster

Bom dia,

Estou de volta de um exercício em que pede uma sequência de valores ao utilizador, e que verifique se essa sequência está por ordem crescente, decrescente, ou se está desordenada.

Será que é possível fazer isto, sem um vetor?

Podem dar-me umas dicas sff?

Parece-me que para já ainda não é relevante, mas o que já tenho feito é:

package ordenação;
public class Ordenação {
   public static void main(String[] args)
   {
    int num,op,i,j,digito;	

    System.out.println("O que deseja verificar?");
    System.out.println("");
    System.out.println("1- Ordem Crescente!");
    System.out.println("2- Ordem Decrescente!");
    System.out.println("3- Desordenados!");
    System.out.println("");
    System.out.print("Introduza a opção pretendida: ");
    op=Le.umIt();

    if (op==1){
	   System.out.print("Introduza uma sequência de valores: "); //Aqui o meu raciocinio era verificar digito por digito, ou seja, se o último digito da sequência é maior, vai para a primeira posição, etc..., dai ter falado no vetor

	   num=Le.umIt();
				 while (num>0){
		   digito=num%10;
		   num=num/10;
		   System.out.println(digito);
	   }

	   System.out.println("A sequência está ordenada por ordem crescente!");
    }

    if (op==2){
	    //System.out.println("A sequência está ordenada por ordem decrescente!");
    }

    if (op==3){
	    //System.out.println("A sequência está desordenada!");
    }

    }
   }

Agradeço desde já qualquer ajuda que me possam dar.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Será que é possível fazer isto, sem um vetor?

sim, é.

Parece-me que para já ainda não é relevante, mas o que já tenho feito é:

pois ... não faz nada ...

Podem dar-me umas dicas sff?

tenta primeiro usar um vector e depois pensa em como não é necessário


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster

tenta primeiro usar um vector e depois pensa em como não é necessário

Ok. Vou experimentar.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Viva,

Acho que os meus bits já estão a deitar fumo.

O seguinte código introduz valores no vetor, e lista o seu conteúdo, até aqui tudo bem.

package vetor;
public class Vetor {
   public static void main(String[] args)
   {
 int i,num=0,temp,contador=0; 

 System.out.print("Introduza o comprimento do vetor: "); 
 num=Le.umIt();
 System.out.println("");
 int[] ordena = new int [num];	   
 System.out.println("Comprimento: "+ordena.length);

 for(i=0;i<num;i++){		
	  System.out.print("Introduza um número na " + contador + "° posição: ");  
	    ordena[i] = Le.umIt();			
	    contador++;  
	    System.out.println("");
	    System.out.println("Posição "+i+" = "+ordena[i]);

	    //if(ordena[i]<ordena[i+1])
	    //System.out.println("Nova Posição = "+ordena[i]);					
   }
}
}

Agora para ordenar o vetor é que estou a ter problemas e penso que preciso de uma ajuda:

O raciocinio que estou a tentar seguir para todo o vetor é:

Se valor Posição 1< valor Posição2 Então
valor  1 = Posição 1
senão
valor 2 = Posição 1

Como aplico este raciocinio?


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
vrael

1º - Pedes a sequência ao user e carregas tudo. Parece-me feito.

2º - Basta fazeres alguma maneira de comparar 3 números. Porque se forem só 2 ou vai ser crescente ou decrescente. Se forem 3 já consegues a parte do desordenada também...

Edited by vrael

Share this post


Link to post
Share on other sites
HappyHippyHippo

o teu objectivo não é ordenar, mas sim verificar se todos os elementos do array possuem a mesma ordem (crescente ou decrescente) em relação aos seus vizinhos


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster

o teu objectivo não é ordenar, mas sim verificar se todos os elementos do array possuem a mesma ordem (crescente ou decrescente) em relação aos seus vizinhos

Certo, então mas para isso não é necessário ordenar?

1º - Pedes a sequência ao user e carregas tudo. Parece-me feito.

2º - Basta fazeres alguma maneira de comparar 3 números. Porque se forem só 2 ou vai ser crescente ou decrescente. Se forem 3 já consegues a parte do desordenada também...

1) Está feito, e a funcionar;

2) Podem ser n números;

Boas!

Tens aqui um link http://pt.wikipedia.org/wiki/Bubble_sort de um algoritmo de ordenação.

Obrigado, vou dar uma vista de olhos.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Certo, então mas para isso não é necessário ordenar?

saber se está ordenado não é ordenar !!!


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster

saber se está ordenado não é ordenar !!!

É isso mesmo que queria dizer, não me expliquei bem.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Bem, fiz progressos:

package vetor;
public class Vetor {
   public static void main(String[] args)
   {
 int i,num=0,temp=0,contador=0; 

 System.out.print("Introduza o comprimento do vetor: "); 
 num=Le.umIt();
 System.out.println("");
 int[] ordena = new int [num];	   
 System.out.println("Comprimento: "+ordena.length);


   // aux = guarda o maior valor de cada comparação
	    int aux = 0;
 for(i=0;i<num;i++){		 
    System.out.print("Introduza um número na " + contador + "° posição: ");  
    ordena[i] = Le.umIt();			
    contador++;  
    System.out.println("");
    System.out.println("Posição "+i+" = "+ordena[i]);
    System.out.println("");
    System.out.println("Desordenada: "+ordena[i]);
 }
	    for (i = 0; i < ordena.length; i++)
	    {
		    for (int j = 0; j < ordena.length; j++)
		    {
			    if (ordena[i] < ordena[j])
			    {					  
//Troca. O maior para a direita e o menor para a esquerda					   
				    aux = ordena[i];
				    ordena[i] = ordena[j];
				    ordena[j] = aux;
			    }
		    }
	    }
//esse for é simplesmente para testar a ordenação
	    for (int k = 0; k < ordena.length; k++)
	    {
		    System.out.println("Ordem crescente: "+ordena[k]);			 
	    } 


			   for (i = 0; i < ordena.length; i++)
	    {
		    for (int j = 0; j < ordena.length; j++)
		    {
			    if (ordena[j] < ordena[i])
			    {					  
//Troca. O maior para a direita e o menor para a esquerda					   
				    aux = ordena[j];
				    ordena[j] = ordena[i];
				    ordena[i] = aux;
			    }
		    }
	    }
//esse for é simplesmente para testar a ordenação
	    for (int k = 0; k < ordena.length; k++)
	    {
		    System.out.println("Ordem Decrescente: "+ordena[k]);			 
	    }				 
   }  
}

Finalmente, já está a mostrar a sequência introduzida por ordem crescente, decrescente e desordenada.

Ainda estou a tentar perceber o código em si, mas e a titulo de curiosidade gostaria de saber sff, como por o programa a verificar se a sequência está por ordem crescente, decrescente ou se está desordenada.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

já te disse ... o que fizeste não serve para nada :

Estou de volta de um exercício em que pede uma sequência de valores ao utilizador, e que verifique se essa sequência está por ordem crescente, decrescente, ou se está desordenada.

saber se está ordenado não é ordenar !!!

volto a dizer : o que fizeste não interessa absolutamente nada para a resolução do exercício !!!!

o que tens de verificar é se os números estão ordenados e não ordenar-los !!


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster

volto a dizer : o que fizeste não interessa absolutamente nada para a resolução do exercício !!!!

o que tens de verificar é se os números estão ordenados e não ordenar-los !!

Sim, sem dúvida que para a resolução do exercício em si não interessa, mas tenho estado a tentar lá chegar e apresentei trabalho.

Só que ainda não percebi, como é que posso fazer isso. Podes orientar-me sff?


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

traduz isto para código:

se existirem 2 ou menos elementos no array, o array encontrasse ordenado, caso contrário, o array só se encontra ordenado se para cada elemento que não o primeiro e o segundo, a relação de ordem entre si e o anterior for igual ao anterior e o anterior do anterior.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster
if(ordena.length<=2)
{
System.out.print("Vetor ordenado");
}
if(ordena[0] && ordena[1] = ordena[i]) //Ainda estou a trabalhar nesta, sei que não é o que escreveste, mas será que é algo do género?
{
System.out.print("Vetor desordenado");
}


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
HappyHippyHippo

se existirem 2 ou menos elementos no array, o array encontrasse ordenado, caso contrário, o array só se encontra ordenado se para cada elemento que não o primeiro e o segundo, a relação de ordem entre si e o anterior for igual ao anterior e o anterior do anterior.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
progster
a=ordena[0];
b=ordena[1]
if(ordena.length<=2)
{
System.out.print("Vetor ordenado");
}
if(ordena[i] != (a && b) //Será que é algo do género?
{
System.out.print("Vetor desordenado");
}


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Tens razão falta ali qualquer coisa, vou trabalhar mais um pouco na questão.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.