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:  
albert igo

C Exercios nao ordena correto com o Bubble Sort

Recommended Posts

Postado (editado)

Escreva um programa em C que permita efetuar a introdução de uma matriz de dimensão M*N com dimensão máxima de 10 linhas por 10 colunas e ordenar todas as linhas desta matriz por ordem crescente e seguidamente todas as colunas em ordem decrescente, escrevendo o resultado final sobre a forma matricial na tela.

ccc.thumb.png.4502532ca03772d30d2b0650aa9b7cf3.png

 

esse é meu codigo ! porém não ordena !
 

#include <stdio.h>
#include<stdlib.h>

int main (){
    
    int  c , l ,tam ,aux;
    

     
     printf("Digite o tamanho da matriz\n ");
     scanf("%d",&tam);   
     if ( tam >0 && tam <= 10){

     
     int matriz[tam][tam]; 
    
     printf("Digite os valores");
     for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
          printf ("\ncoluna[%d] linha[%d] = ", c+1, l+1);
          scanf ("%d", &matriz[ c ] [ l ]);
         }
     }
     system("cls");

for (c = 0 ; c < tam -1  ; c++ ){
         for (l = 0  ;l < tam-1 ;l++){
             if (matriz[c][l] > matriz[c][l+1]){
         
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c][l+1];
                 matriz[c][l+1]= aux; 
             }
     }    
     }
         

       printf("Linhas crescente \n");
        for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
       
        for (l =0 ; l  < tam  ;l++){
         for (c = 0 ; c < tam  ; c++ ){
             if (matriz[c][l] < matriz[c+1][l]){
                 
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c+1][l];
                 matriz[c+1][l]= aux; 
        
         }    
         }
         }     
      
        printf("colunas decrescente \n");
        for (c = 0 ; c < tam ; c ++){
        for (l = 0 ; l < tam ; l ++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
}
else if ( tam > 10 ){

    printf("Tamanho de matriz nao permitido");
}

     system ("pause");

}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @albert igo

 

Tava lendo o seu código e notei que você está criando uma matriz "tam" por "tam" e o exercício pede que você crie "tam1" por "tam2", conforme o exercício o usuário poderá escolher o numero de colunas e de linhas da matriz. 

adicionado 16 minutos depois
20 minutos atrás, albert igo disse:

for (c = 0 ; c < tam -1  ; c++ ){
         for (l = 0  ;l < tam-1 ;l++){
             if (matriz[c][l] > matriz[c][l+1]){

 

Em relação a sua duvida, para ordenar a linha por bubble sort você teria que por mais um loop ai, algo tipo

 

for (c = 0 ; c < tam  ; c++ ){// não tem porque você por o -1 se qunado "c" for igual ao "tam" ele vai parar 
  		for(int j=0; j < tam; j++){ //esse "tam" será refernte ao tamanho da linha para a ordenação de linha
         for (l = 0  ;l < tam ;l++){
             if (matriz[c][l] > matriz[c][l+1]){

 

Tenta corrigir esses erros e envia o código corrigido aqui para podemos avalia-lo.

 

Espero te ajudado :D 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
agora, albert igo disse:

@Leonardo0308 Obrigado , isso eu resolvi !

A questao mesmo é a ordenação ! 

 

Eu tava escrevendo a resposta ainda :P

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, albert igo disse:

@Leonardo0308 Aguardo então ,se possível me ajudar !

 

Eu já te respondi lá em cima no primeiro post, é que a resposta foi adicionado depois, mas tá lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites
46 minutos atrás, Leonardo0308 disse:

Em relação a sua duvida, para ordenar a linha por bubble sort você teria que por mais um loop ai, algo tipo

 


for (c = 0 ; c < tam  ; c++ ){// não tem porque você por o -1 se qunado "c" for igual ao "tam" ele vai parar 
	for(int j=0; j < tam; j++){ //esse "tam" será refernte ao tamanho da linha para a ordenação de linha
		for (l = 0  ;l < tam ;l++){
			if (matriz[c][l] > matriz[c][l+1]){

 

Tenta corrigir esses erros e envia o código corrigido aqui para podemos avalia-lo.

 

Espero te ajudado :D 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Leonardo0308 deu certo porém , na ordenação decrescente das colunas , aparece um erro ( os números aparece certa parte igual a tabela  e a primeira que seria a ultima linha não sai correta), mas não consigo encontra !

#include <stdio.h>
#include<stdlib.h>

int main (){
    
    int  c , l ,x,tam ,aux;
    

     
     printf("Digite o tamanho da matriz\n ");
     scanf("%d",&tam);   
     if ( tam >0 && tam <= 10){

     
     int matriz[tam][tam]; 
    
     printf("Digite os valores");
     for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
          printf ("\ncoluna[%d] linha[%d] = ", c+1, l+1);
          scanf ("%d", &matriz[ c ] [ l ]);
         }
     }
     system("cls");
for (x = 0 ; x < tam ; x++){
for (c = 0 ; c < tam   ; c++ ){
         for (l = 0  ;l < tam-1 ;l++){
             if (matriz[c][l] > matriz[c][l+1]){
         
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c][l+1];
                 matriz[c][l+1]= aux; 
             }
     }    
     }
}

       printf("Linhas crescente \n");
        for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
     

     
      for (x = 0 ; x < tam ;x++){
        for (l =0 ; l  < tam  ;l++){
         for (c = 0 ; c < tam  ; c++ ){
             if (matriz[c][l] < matriz[c+1][l]){
                 
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c+1][l];
                 matriz[c+1][l]= aux; 
        
         }    
         }
         }
      }

    printf("Colunas decrescente\n");
          for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
}
else if ( tam > 10 ){

    printf("Tamanho de matriz nao permitido");
}

     system ("pause");

}


 

mostra.png

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)
#include <stdio.h>
#include<stdlib.h>

int main (){
    
    int  c , l ,x,tam ,aux;
    

     
     printf("Digite o tamanho da matriz\n ");
     scanf("%d",&tam);   
     if ( tam >0 && tam <= 10){

     
     int matriz[tam][tam]; 
    
     printf("Digite os valores");
     for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
          printf ("\ncoluna[%d] linha[%d] = ", c+1, l+1);
          scanf ("%d", &matriz[ c ] [ l ]);
         }
     }
     system("cls");
for (x = 0 ; x < tam ; x++){
for (c = 0 ; c < tam   ; c++ ){
         for (l = 0  ;l < tam-1 ;l++){
             if (matriz[c][l] > matriz[c][l+1]){
         
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c][l+1];
                 matriz[c][l+1]= aux; 
             }
     }    
     }
}

       printf("Linhas crescente \n");
        for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
     

     
      for (x = 0 ; x < tam ;x++){
        for (l =0 ; l  < tam  ;l++){
         for (c = 0 ; c < tam  ; c++ ){
             if (matriz[c][l] < matriz[c+1][l]){
                 
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c+1][l];
                 matriz[c+1][l]= aux; 
        
         }    
         }
         }
      }

    printf("Colunas decrescente\n");
          for (c = 0 ; c < tam ; c++ ){
         for (l =0 ;l < tam ;l++){
         printf("%d \t ", matriz[c][l]);    
         }
         printf("\n");
     }
}
else if ( tam > 10 ){

    printf("Tamanho de matriz nao permitido");
}

     system ("pause");

}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)
52 minutos atrás, albert igo disse:

for (x = 0 ; x < tam ;x++){
        for (l =0 ; l  < tam  ;l++){
         for (c = 0 ; c < tam  ; c++ ){
             if (matriz[c][l] < matriz[c+1][l]){
                 
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c+1][l];
                 matriz[c+1][l]= aux; 
        
         }    
         }
         }
      }

 

 

Um dos problemas ta aqui, ele não pode mover só 1 numero da linha, ele teria que mover a linha inteira.

 

 

Editado por Simon Viegas
Inserir tag CODE na citação

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Leonardo0308  

for (x = 0 ; x < tam ;x++){
     for (c = 0 ; c < tam  ; c++ ){
        for (l =0 ; l  < tam  ;l++){
             if (matriz[c][l] < matriz[c+1][l]){
                 
                 aux = matriz[c][l];
                 matriz[c][l]= matriz[c+1][l];
                 matriz[c+1][l]= aux; 
        
         }    
         }
         }
      }


 FIZ A TROCA E CONTINUA !

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse código que eu mencionei era o seu código, para você resolver esse problema você tem que trocar a linha inteira de posição e não só um numero, você vai ter que fazer um loop para trocar toda a linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Leonardo0308 Na verdade a imagem do exemplo mostra que os números são ordenados individualmente na coluna, só dá pra ver isso porque tem os números 3 e 4 trocados na última coluna, ou seja eles não acompanham a linha onde estavam originalmente.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui está:

#include <stdio.h>
#include<stdlib.h>

int main () {

    int  c , l ,x,tam ,aux;

    printf("Digite o tamanho da matriz\n ");
    scanf("%d",&tam);
    if ( tam >0 && tam <= 10) {


        int matriz[tam][tam];

        printf("Digite os valores");
        for (c = 0 ; c < tam ; c++ ) {
            for (l =0 ; l < tam ; l++) {
                printf ("\ncoluna[%d] linha[%d] = ", c+1, l+1);
                scanf ("%d", &matriz[ c ] [ l ]);
            }
        }
        system("cls");
        for (x = 0 ; x < tam ; x++) {
            for (c = 0 ; c < tam   ; c++ ) {
                for (l = 0  ; l < tam-1 ; l++) {
                    if (matriz[c][l] > matriz[c][l+1]) {

                        aux = matriz[c][l];
                        matriz[c][l]= matriz[c][l+1];
                        matriz[c][l+1]= aux;
                    }
                }
            }
        }

        printf("Linhas crescente \n");
        for (c = 0 ; c < tam ; c++ ) {
            for (l =0 ; l < tam ; l++) {
                printf("%d \t ", matriz[c][l]);
            }
            printf("\n");
        }



        for (x = 0 ; x < tam ; x++) {
            for (l =0 ; l  < tam  ; l++) {
                for (c = 0 ; c < tam-1  ; c++ ) { //Faltava subtrai -1 do tam nessa linha
                    if (matriz[c][l] < matriz[c+1][l]) {

                        aux = matriz[c][l];
                        matriz[c][l]= matriz[c+1][l];
                        matriz[c+1][l]= aux;

                    }
                }
            }
        }

        printf("Colunas decrescente\n");
        for (c = 0 ; c < tam ; c++ ) {
            for (l =0 ; l < tam ; l++) {
                printf("%d \t ", matriz[c][l]);
            }
            printf("\n");
        }
    }
    else if ( tam > 10 ) {

        printf("Tamanho de matriz nao permitido");
    }

    system ("pause");

}

Só faltava subtrair -1 do tam na condição do for da ordenação das colunas, indiquei no código o lugar. Agora parece estar funcionando corretamente.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Só uma observação: A matriz não é quadrada, ou seja, seria MxN, e não MxM, como está no código.

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

×