Ir ao conteúdo
  • Cadastre-se
albert igo

C Exercios nao ordena correto com o Bubble Sort

Recommended Posts

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");

}

 

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
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

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites
#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");

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 !

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

Crie uma conta ou entre para comentar

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×