Ir ao conteúdo

Posts recomendados

Postado

Meu código:

 

Eu alterei o tamanho vetor para não ter que digitar tantos números. Se dê certo para uma quantidade menor de posições dará também certo para um vetor de 15 posições.

 

#include <stdio.h> // Funções de entrada e saída
#include <stdlib.h> // Função padrão
#include <locale.h> // Habilita o uso de acentuação em palavras

// Adicionar novas bibliotecas acima de acordo com necessidade 

/*
    // Espaço destinado a transcrição do enunciado para não ficar olhando toda hora a lista

    Escreva um programa que ordene um array de inteiros de 15 posições utilizando o
método da bolha (bubble sort).

*/

int main() // Função obrigatória
   {
	/* Declaração de constantes ou variáveis */

    int vetor[5],i,j,auxiliar;
	
	/* Fim */

	/* Entrada de dados */
	
	setlocale(LC_ALL,"");

    //Adicionando elementos a vetor de i posições
    for(i=0;i<5;i++){

        printf("Digite um valor:");
        scanf("%d",&vetor[i]);
    }

    printf("Antes da ordenação:\n");
    for(i = 0;i<5;i++){

        if(i<4){

            printf("{%d},",vetor[i]);

        }else{
            printf("{%d}",vetor[i]);
        }
    }

    //Exercuta n vezes mesmo se o vetor já tiver ordenado
    for(j=1;j<=5;i++){ //Possibila que as exercuções de ordenação aconteça n vezes

        //Compara e ordena até o penúltimo elemento já que o elemento seguinte não terá com quem ser comparado
        for(i=0;i<5-1;i++){ //Ordenando o vetor

            if(vetor[i]>vetor[i+1]){

                auxiliar = vetor[i]; //Guarda a copia do elemento na posição i
                vetor[i] = vetor[i+1];// Transfere o valor do menor para o que guarda o maior
                vetor[i+1] = auxiliar;// O que antes tinha o valor menor recebe o valor maior
            }
        }
    }


	// Solicita que o usuário que entre com algum dado qualquer

	/* Saida de dados */
  
  
    printf("\nDepois da ordenação:");

    for(i = 0;i<5;i++){

        if(i<4){

            printf("{%d},",vetor[i]);

        }else{
            printf("{%d}",vetor[i]);
        }
    }
	
	// Exibe mensagem na tela

	/* Fim */ 
  
	system("PAUSE"); // Apenas no Windows 
	return 0; // Pausa o programa para que ele não feche inesperadamente assim como o comando "getchar();" 
	


   } // Fim 

 

Minha saída:

 

image.png.08679929b3b76a86c656e9306fcaf59c.png

  • Curtir 1
Postado
1 hora atrás, rafael_carmo disse:

Eu alterei o tamanho vetor para não ter que digitar tantos números. Se dê certo para uma quantidade menor de posições dará também certo para um vetor de 15 posições

 

Você tem razão! Mas considerando isso porque ler o vetor num primeiro momento? Não perca tempo com isso.

 

Nunca escreva um programa interativo.

 

Veja o simples:
 

    int V[] = { 5,2,1,7,8 };

 

Isso tem o mesmo efeito que seu teste. Só que não precisa ficar parado digitando a cada vez que vai testar o programa.

 

E não precisa definir o tamanho: o compilador sabe contar os valores.

 

Notou quantas vezes escreveu '5' em seu programa?

 

Isso quer dizer que se mudar o tamanho de novo vai ter que mudar em todo lugar de novo... E se esquecer algum já era o programa.

Não faça isso. C sabe quantos elementos tem no vetor: é o tamanho do vetor dividido pelo tamanho de cada elemento. 

 

    const int tam = sizeof(V) / sizeof(int);

 

E aí não precisa mudar em lugar nenhum 🤔

 

E se disser que é constante --- const --- nunca vai mudar por engano e zoar seu programa sem querer...

 

Seu programa não está bom.

 

1 hora atrás, rafael_carmo disse:
        if(i<4){

            printf("{%d},",vetor[i]);

        }else{
            printf("{%d}",vetor[i]);
        }
    }

 

  • Não precisa das chaves se tem só um comando
  • Não precisa do if se faz a mesma coisa em qualquer condição
//Exercuta n vezes mesmo se o vetor já tiver ordenado
    for(j=1;j<=5;i++){ //Possibila que as exercuções de ordenação aconteça n vezes

        //Compara e ordena até o penúltimo elemento já que o elemento seguinte não terá com quem ser comparado
        for(i=0;i<5-1;i++){ //Ordenando o vetor

 

  • Declare as variáveis de controle DENTRO do loop e se possível no próprio for. É um desastre ter uma variável global na função com um nominho ingênuo como i ou j. Ou os dois no seu caso
  • evite esses comentários meio que óbvios
  • não use acentos em comentários
    system("PAUSE"); // Apenas no Windows 
	return 0; // Pausa o programa para que ele não feche inesperadamente assim como o comando "getchar();" 

 

Não é inesperado que o programa termine ao terminar.

 

Programas não foram escritos para rodar num IDE. E o IDE é que fecha inesperadamente porque você não configurou para que ele não feche a janela da console ao final de programas desse tipo. E se o IDE não tem essa opção você não deveria usar esse.

 

Se seu programa fica parado um sistema de correção ou de teste automático não vai rodar. E o cara que for rodar seu programa vai ficar muito contrariado por ter que ficar esperando o programa terminar para teckar um ENTER. É muito chato isso.

 

Não use system(). É proibido em toda parte e não vai aprender ou fazer nada com isso.

 

 

 

 

  • Curtir 1
  • Obrigado 1
Postado

@rafael_carmo   esse método de Ordenação de vetores não ê o bubbleSort e sim outro método que chamo de AnchorSort  , pois o número vai direto para o fundo , e não como Bolhas flutuantes ,  e outra coisa é que você está começando a ordenação a partir da posição 1 do vetor , mas as posições começam em zero ,  :


for( j=0; j<4; j++ )          /// Possibila que as exercuções de 
{                             /// ordenação aconteça n vezes
                              /// Compara e ordena até o penúltimo 
                              /// elemento já que o elemento seguinte 
                              /// não terá com quem ser comparado
  for( i=j+1; i<5; i++ )      /// Ordenando o vetor
  {
    if( vetor[i] > vetor[j] ) /// esse não eh o BubbleSort e sim o AnchorSort
    {
      auxiliar   = vetor[i] ; /// Guarda a copia do elemento na posição i
      vetor[i]   = vetor[j] ; /// Transfere o valor do menor para o que guarda o maior
      vetor[j]   = auxiliar ; /// O que antes tinha o valor menor recebe o valor maior
    }
  }
}

 

Postado

@rafael_carmo Nada. Apenas não use system()

 

E se precisa de uma pausa apenas escreva isso na tela e leia algo, com fgetc() por exemplo, que lê uma letrinha.

 

Mas o que está errado aí é o IDE. Porque se rodar o seu programa do jeito normal, digitando o nominho dele e teclando ENTER não vai gostar nada dele parar DEPOIS de tudo e você ter que teclar um ENTER a mais.

 

Já que sabe escrever funções e sabe que vai mostrar o vetor ao menos duas vezes porque não usou uma função para isso?

 

 

 

2 horas atrás, rafael_carmo disse:
	setlocale(LC_ALL,"");

 

Leu a documentação sobre essa função? Qual o propósito de deixar o locale em branco? Notou que não está funcionando imagino/ O oficial para isso é usar pt-BR

  • Obrigado 1
Postado

@arfneto Eu não aprendi ainda a usar função e procedimentos em C. Então eu estou usando o que aprendi até aqui. foi estrutura sequencial até vetores. Eu não faço a mínima ideia de por onde vai.

  • Curtir 1
Postado
2 minutos atrás, rafael_carmo disse:

Eu não aprendi ainda a usar função e procedimentos em C. Então eu estou usando o que aprendi até aqui. foi estrutura sequencial até vetores. Eu não faço a mínima ideia de por onde vai.

 

Fala sério?

 

Interessante isso porque você postou isso hoje mesmo

 

 

E se trata de um programa onde tem uma função. Com um erro que eu te expliquei lá. 

 

 

  • Curtir 1
Postado

@arfneto Eu fui seguindo passo a passo um vídeo que vi no Youtube o professor ensinando e escrevi o código realizando umas modificações. Até então mesmo sem saber como funciona uma uma função em C continuei mesmo assim prosseguindo em programar. O que eu não sabia imitava o que ele estava fazendo. O que eu sabia eu mesmo escrevia que foi minhas modificações. Mesmo seguindo o passo a passo meu algoritmo no final não funcionou. Não retornava -1 quando não encontrava o elemento no vetor e também não retornava nada quando eu buscava um elemento que existia nele.

 

Para finalizar eu lhe faço uma última pergunta pelo menos é o que acredito que vai ser: É possível fazer o algoritmo de bubble sort para ordenar vetores sem usar função ou é obrigatório?

@arfneto Eu só me dei conta agora que eu usava essa biblioteca de maneira errada. Eu nunca tinha parado ver detalhes sobre isso. Eu vi agora que você precisa colocar uma informação a mais.

 

Ao invés de "setlocale(LC_ALL," ");" é na verdade setlocale(LC_ALL,"pt-BR");

 

Obrigado por me alertar a dar uma lida na documentação!

  • Curtir 1
Postado
48 minutos atrás, rafael_carmo disse:

Mesmo seguindo o passo a passo meu algoritmo no final não funcionou.

 

Et te expliquei porque não funcionou e mostrei um exemplo passo a passo. Não leu? Não entendeu o que eu escrevi? Nada tem a ver com C. O exemplo em português, com o vetor.

 

E também te mostrei como corrigir e deixei uma versão que funciona.

 

50 minutos atrás, rafael_carmo disse:

É possível fazer o algoritmo de bubble sort para ordenar vetores sem usar função ou é obrigatório?

 

Não é obrigatório. Só é mais fácil. Como já deve ter concluído, uma função é um bloco de código com um nome. 

 

 

Mas você sabe que tinha uma função lá. E pode continuar imitando seu outro programa de agora em diante.

 

Programas sem funções de pouco servem.

 

  • Curtir 1
Postado
5 horas atrás, rafael_carmo disse:

Eu só me dei conta agora que eu usava essa biblioteca de maneira errada. Eu nunca tinha parado ver detalhes sobre isso. Eu vi agora que você precisa colocar uma informação a mais.

 

Ao invés de "setlocale(LC_ALL," ");" é na verdade setlocale(LC_ALL,"pt-BR");

 

Obrigado por me alertar a dar uma lida na documentação!

 

Não é uma biblioteca. É uma função.

 

Notou o que eu escrevi lá

 

6 horas atrás, arfneto disse:

Qual o propósito de deixar o locale em branco? Notou que não está funcionando imagino/ O oficial para isso é usar pt-BR

 

 

  • Curtir 1
Postado

@arfneto Eu solucionei assim:

 

#include <stdio.h> // Funções de entrada e saída
#include <stdlib.h> // Função padrão
#include <locale.h> // Habilita o uso de acentuação em palavras

// Adicionar novas bibliotecas acima de acordo com necessidade 

/*
    // Espaço destinado a transcrição do enunciado para não ficar olhando toda hora a lista

    Escreva um programa que ordene um array de inteiros de 15 posições utilizando o
método da bolha (bubble sort).

*/

int main() // Função obrigatória
   {
	/* Declaração de constantes ou variáveis */
    int tam;
    tam = 15;
    int vetor[tam],i,j,auxiliar;
	
	/* Fim */

	/* Entrada de dados */
	
	setlocale(LC_ALL,"pt-BR");

    //Adicionando elementos a vetor de i posições
    for(i=0;i<tam;i++){

        printf("Digite um valor:");
        scanf("%d",&vetor[i]);
    }
  	// Solicita que o usuário que entre com algum dado qualquer
  
  	//Imprime o vetor antes da ordenação
    printf("Antes da ordenação:\n");
    for(i = 0;i<tam;i++){

        if(i<4){

            printf("{%d},",vetor[i]);

        }else{
            printf("{%d}",vetor[i]);
        }
    }

    //Exercuta n vezes mesmo se o vetor já tiver ordenado
    for(j=1;j<=tam;j++){ //Possibila que as exercuções de ordenação aconteça n vezes

        //Compara e ordena até o penúltimo elemento já que o elemento seguinte não terá com quem ser comparado
        for(i=0;i<tam-1;i++){ //Ordenando o vetor

            if(vetor[i]>vetor[i+1]){

                auxiliar = vetor[i]; //Guarda a copia do elemento na posição i
                vetor[i] = vetor[i+1];// O que antes tinha maior valor recebe o valor da posição seguinte
                vetor[i+1] = auxiliar;// O que antes tinha o valor menor recebe o valor da posição anterior
            }
        }
    }

	/* Saida de dados */
  
  	//Imprime o vetor após a ordenação
    printf("\nDepois da ordenação:\n");

    for(i = 0;i<tam;i++){

        if(i<tam - 1){

            printf("{%d},",vetor[i]);

        }else{
            printf("{%d}",vetor[i]);
        }
    }
	
	// Exibe mensagem na tela

	/* Fim */ 
  
	return 0; // Pausa o programa para que ele não feche inesperadamente assim como o comando "getchar();" 
	


   } // Fim 

 

  • Obrigado 1
Postado

Não mudou nada do que eu te disse para mudar. 

 

Bom que funcionou. Parabéns.

 

Ainda tem todos os problemas de que eu te falei e conforme seus programas forem ficando maiores isso vai te custar cada vez mais tempo. E se for trabalhar com isso vai ter que mudar de todo modo.

  • Curtir 1

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