Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
carlos20030

C Ordenar matriz por determinada condição

Recommended Posts

Olá,

 

Eu tenho uma matriz de i linhas x 3 colunas de números inteiros. Por exemplo:

LINHA 0: 3 2 0

LINHA 1: 2 7 1

LINHA 2: 3 5 2

 

Eu gostaria de ajuda para ordenar essa matriz em ordem crescente da segunda coluna (em vermelho). Ficando assim ao final:

LINHA 0: 3 2 0

LINHA 1: 3 5 2

LINHA 2: 2 7 1

 

Se alguém puder pelo menos me clarear a ideia, eu planejo e código e já posto aqui para discutirmos a resolução.

Att.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos20030 Se for um caso especifico de 3x3, você pode usar if e ir trocando a ordem, basta encontrar o maior dos 3, depois o médio e o menor.

Se for mais do que 3, você pode usar if, e ir na ordem de encontrar o menor, depois o segundo menor, etc, até preencher o ultimo com o maior.

Sem um código seu, só posso dar ideias...

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos20030     como você vai ordenar uma colunas especifica dessa matriz então faça como se fosse ordenar um vetor simples, o melhor para isso é usar o método bubblesort , que você pode ver nesse site aqui :

https://codigofonte.uol.com.br/codigos/metodo-bolha-bubble-sort

faça o código e poste aqui para vermos como está e em que podemos ajudar .

Editado por devair1010
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Olá, aqui está a base do código:

    #include <stdio.h>
    
    int main(){
    	int matriz[3][3];
    	int i, j, menorValor;
    	
    	/* Lendo a matriz */
    	for(i = 0; i < 3; i++){
    		for(j = 0; j < 3; j++){
    			scanf("%d", matriz[i][j]);
    		}
    	}
    	
    	/* Ordenando as linhas de acordo com a ordem crescente da coluna 1 (ou 2 como no exemplo do topico) */
    	menorValor = matriz[i][1];
    		for(i = 0; i < 3; i++){
    			if(matriz[i][1] < menorValor){
    				menorValor = matriz[i][1];
    				
    			}
    		}
    	
    	return 0;
    }

    Ainda estou travado no raciocinio, porque eu preciso pegar todas as informações da linha que contém a coluna com o menor valor e trocar com a outra linha (por isso não entendo como posso usar o bubble, pois eu preciso pegar todas as informações da linha).

     

    Obs: fiz 3x3 como exemplo, a matriz pode ter várias linhas mas apenas 3 colunas.

    Att.

    Editado por Simon Viegas
    Alterado tag CODE para "C Languages"
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @carlos20030    para ordenar com bubblesort você precisa usar dois loop um dentro do outro para testar o número e já trocar ele de posição caso seja necessário e não precisa ver o menor valor da linha já que você vai trocar é exatamente a linha e na mesma coluna .  então ali onde você colocou coluna 1 está certo , falta apenas o outro loop .   coloque o loop j indo de  i  + 1 enquanto for menor que 3 e faça do jeito do código daquele site .

    Editado por devair1010
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 2 minutos atrás, devair1010 disse:

    @carlos20030    para ordenar com bubblesort você precisa usar dois loop um dentro do outro para testar o número e já trocar ele de posição caso seja necessário e não precisa ver o menor valor da linha já que você vai trocar é exatamente a linha e na mesma coluna .  então ali onde você colocou coluna 1 está certo , falta apenas o outro loop .

    Eu não estou conseguindo visualizar o que você diz :(

    Veja, quando eu encontra o menor valor da coluna 1 de toda a matriz, eu tenho que levar todas as informações desta linha para o começo, e assim sucessivamente.

     

    Ex: tenho duas linhas:

    2 100 1

    3   2   0

     

    Observe que como "2" < "100", toda a linha que contém o 2 deve ir para o lugar da linha 100...

    3   2   0

    2 100 1

     

    E assim sucessivamente.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @carlos20030    entendi, então com aquele código você compara o número da linha com o outro e se for menor então você precisa usar uma variável auxiliar para pegar os número um por da linha e colocar na outra linha .

    seu código ficaria assim :

    #include <stdio.h>
    int main(){
        int matriz[300][3];
        int i, j,n,k, menorValor,aux;
        printf("digite a quantidade de linhas ");
        scanf("%d",&n);
        /* Lendo a matriz */
        for(i = 0; i < n; i++){
            for(j = 0; j < 3; j++){
                printf("digite o %d numero da %d linha",j+1,i+1);
                scanf("%d",& matriz[i][j]);
            }
        }
        /* Ordenando as linhas de acordo com a ordem crescente da coluna 1 (ou 2 como no exemplo do topico) */
        menorValor = matriz[i][1];
        for(i = 0; i < n; i++){
            for(j=i+1;j<3;j++){
                if(matriz[i][1] > matriz[j][1]){
                    for(k=0;k<n;k++){
                        aux=matriz[j][k];
                        matriz[j][k]=matriz[i][k];
                        matriz[i][k]=aux;
                    }
                }
            }
        }
        printf("\n\n");
        for(i = 0; i < 3; i++){
            for(j = 0; j < 3; j++){
                printf("%d",matriz[i][j]);
            }
            printf("\n");
        }
        return 0;
    }

     

    Editado por devair1010

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá a todos.

     

    @carlos20030, já conseguiu resolver?

     

    Por favor, poste seu código atual para analisarmos e/ou servi de base para outros usuários.

     

    No aguardo.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×