Ir ao conteúdo
  • Cadastre-se

C Exercios nao ordena correto com o Bubble Sort


albert igo

Posts recomendados

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

}

 

Link para o comentário
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
Link para o comentário
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 

 

Link para o comentário
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

Link para o comentário
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");

}

 

Link para o comentário
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.

 

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...