Ir ao conteúdo

Posts recomendados

Postado

Boa noite, to tentando compilar esse código, que tem a função de ordenar os números aleatórios de um vetor, ele tem um menu com switch, e cada case corresponde a um algoritmo de ordenação, 1º é o METODO INSERTION SORT, 2º é o METODO SELECTION SORT, e 3º é o METODO BUBBLE SORT. Porém não esta rodando...

#include <stdlib.h>
#include <stdio.h>
int main () {
      int x,n1,n2,soma,sub,mult;
      float div;
      printf ("######################################");
      printf ("PROGRAMA METODOS DE ORDENACAO");
      printf ("#######################################");
      printf ("ESCOLHA UM METODO PARA ORGANIZAR O VETOR DE 50 NUMEROS: ");
	  printf ("METODO INSERTION SORT ");
	  printf ("METODO SELECTION SORT ");
	  printf ("METODO BUBBLE SORT ");    
      scanf ("%d",&x);
      switch (x) {
        case 'a':
         	
				
				
				   int array[100], tamanho, ordem;
				   printf("\n\n\t Entre com o número de termos...: ");
				   scanf("%d", &tamanho);
				   printf("\n\t Entre com os elementos do array...:");
				   for(int i = 0; i < tamanho;i++){
				      printf("\nDigite o %dº número: ",i+1);
				      scanf("%d",&array[i]);
				   }
				   printf("\n\t Digite 1 para ordernar o array em ordem crescente ou 2 para ordem decrescente: ");
				   scanf("%d",&ordem);
				   if (ordem == 1){
				      insertionSortC(array,tamanho);
				      printf("\nArray em ordem crescente: ");
				      for(int i=0; i<tamanho; i++){
				      printf("\n\t\t\t%d", array[i]);
				   }
				      
				      }else if (ordem ==2) {
				   insertionSortD(array,tamanho);
				   printf("\nArray em ordem decrescente: ");
				   for(int i=0; i<tamanho; i++){
				      printf("\n\t\t\t%d", array[i]);
				   }
				}
				   return 0;
				
        break;
        case b:    
			void selecao(int vet[], int n){
				int menor, aux;
				for(int i=0;i<n;i++){
					for(int j=i+1;j<n;j++){
						if(vet[i]>vet[j])
						menor=j;
					}
					if(i!=menor){
						aux=vet[i];
						vet[i]=vet[menor];
						vet[menor]=aux;
					}
				}
			}
			int main() {
				
				int n=10;
				int vetor [n] = {3,6,5,1,2,8,7,9,4};
				
				selecao(vetor,n);
				
			}
        break;
        case c:
	         	 /* Definição da função bubble_sort */
			  void bubble_sort (int vet[], int max) {      
			    int flag, i, aux;   
	    
				    do {
				      flag = 0;
				      for (i = 0; i < (max - 1); i++) {
				   
				   /* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */
				   if (vet[i] > vet[i+1]) {
				     /* Caso não esteja, ordena */
				     aux = vet[i];
				     vet[i] = vet[i+1];
				     vet[i+1] = aux;
				     flag =1;
				   }
				      }
				    /* Repete enquanto algum valor estiver fora de ordem */  
				    } while (flag == 1);
				    
				    /* Imprime o vetor ordenado em ordem crescente */
				    for (i = 0; i < max; i++) {
				      printf ("%d ",vet[i]);
				    }
				    printf ("\n");
				  }
				
				int main () {
				  int max, i;
				  
				  /* Lê o total de números do vetor */
				  scanf ("%d", &max);
				  
				  /* Define o vetor com o número max de algarismos */
				  int vetor[max];
				  
				  for (i = 0; i < max; i++) {
				    /* Lê cada indice do vetor */
				    scanf ("%d",&vetor[i]);
				  }
				  
				  /* Dentro dessa função o vetor será ordenado */
				  bubble_sort (vetor, max); 
				  
				}
        break;
        default: 
         printf ("\n\nOpcao invalida"); }   }
         
         void insertionSortD(int array[], int tamanho) {
	      			int i, j, tmp;
   			  			for (i = 1; i < tamanho; i++) {
	            			 j = i;
        		 			while (j > 0 && array[j - 1] < array[j]) {
             					tmp = array[j];
		                 		array[j] = array[j - 1];
		                 		array[j - 1] = tmp;
		                 		j--;
        					}	
						}
				}
				void insertionSortC(int array[], int tamanho) {
				      int i, j, tmp;
				      for (i = 1; i < tamanho; i++) {
				            j = i;
				            while (j > 0 && array[j - 1] > array[j]) {
				                  tmp = array[j];
				                  array[j] = array[j - 1];
				                  array[j - 1] = tmp;
				                  j--;
				            }
				      }
				}

 

  • Obrigado 1
Postado

@Izaac Baptista    amigo , que bagunça nesse seu código hein ! ,   colocou varias funções int  main , e não pode fazer isso , ela é usada apenas uma vez no código todo , não importando a quantidade de linhas do código ,  e alguns outros errinhos básicos ,  como o que o  @Flávio Pedroza   mencionou ,  então ajeitando ele para que rode e execute  pelo menos ,  então poderia ser assim  :

#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <ctype.h>
void insertionSortC(int arrayy[], int tamanho);
void insertionSortD(int arrayy[], int tamanho);
void selecao(int vet[], int n);
void bubble_sort(int vet[], int max);
void saindo();
int letras[8][5] ={{15,16,14, 1,30}, /* letra  S */
                   {14,17,31,17,17}, /* letra  A */
                   {14, 4, 4, 4,14}, /* letra  I */
                   {17,25,21,19,17}, /* letra  N */
                   {30,17,17,17,30}, /* letra  D */
                   {14,17,17,17,14}, /* letra  O */
                   { 0, 0, 0, 0, 0}, /* letra    */
                   { 1, 2, 4, 0,16}, /* letra  ! */
};
int main(){
    int n1,n2,soma,sub,mult;
    float div;
    char x;
    int arrayy[100], tamanho, ordem,max;
    int n=10;
    int flag, i, aux;
    int vetor[10] = {3,6,5,1,2,8,7,9,4,0};
    printf ("######################################");
    printf ("PROGRAMA METODOS DE ORDENACAO");
    printf ("#######################################");
    printf ("ESCOLHA UM METODO PARA ORGANIZAR O VETOR DE 50 NUMEROS: ");
    printf (" a - METODO INSERTION SORT ");
    printf (" b - METODO SELECTION SORT ");
    printf (" c - METODO BUBBLE SORT ");
    do{
        fflush(stdin);
        scanf ("%c",&x);
        x=toupper(x);
    }while(x!='A' && x!='B' && x != 'C');
    switch( x ){
    case 'A':
        printf("\n\n\t Entre com o número de termos...: ");
        scanf("%d", &tamanho);
        printf("\n\t Entre com os elementos do array...:");
        for(int i = 0; i < tamanho;i++){
            printf("\nDigite o %dº número: ",i+1);
            scanf("%d",&arrayy[i]);
        }
        printf("\n\t Digite 1 para ordernar o array em ordem crescente ou 2 para ordem decrescente: ");
        scanf("%d",&ordem);
        if (ordem == 1){
            insertionSortC(arrayy,tamanho);
            printf("\nArray em ordem crescente: ");
            for(int i=0; i<tamanho; i++){
                 printf("\n\t\t\t%d", arrayy[i]);
            }
        }else
            if(ordem ==2){
                insertionSortD(arrayy,tamanho);
                printf("\nArray em ordem decrescente: ");
                for(int i=0; i<tamanho; i++){
                    printf("\n\t\t\t%d", arrayy[i]);
                }
            }
            break;
    case 'B':
        selecao(vetor, n);
        break;
    case 'C':
        /* Definição da função bubble_sort */
        bubble_sort(vetor,  max);
        /* Imprime o vetor ordenado em ordem crescente */
        for (i = 0; i < max; i++) {
            printf ("%d ",vetor[i]);
        }
        printf ("\n");
        /* Lê o total de números do vetor */
        scanf ("%d", &max);
        /* Define o vetor com o número max de algarismos */
        for (i = 0; i < max; i++) {
        /* Lê cada indice do vetor */
            scanf ("%d",&vetor[i]);
        }
        /* Dentro dessa função o vetor será ordenado */
        bubble_sort (vetor, max);
        break;
    default:
         printf ("\n\nOpcao invalida");
    }
    saindo();
    printf("\n\n\n");
    return 32768;
}
void bubble_sort(int vetor[], int max){
    int flag = 0,i,aux;
    do{
        for (i = 0; i < (max - 1); i++) {
            /* Verfica se o vetor está em ordem, no caso ele coloca em ordem crescente, para decrescente trocar '>' por '<' */
            if (vetor[i] > vetor[i+1]) {
                /* Caso não esteja, ordena */
                aux = vetor[i];
                vetor[i] = vetor[i+1];
                vetor[i+1] = aux;
                flag =1;
            }
        }
    } while (flag == 1);
}
void insertionSortD(int array[], int tamanho) {
    int i, j, tmp;
    for (i = 1; i < tamanho; i++) {
        j = i;
        while (j > 0 && array[j - 1] < array[j]) {
            tmp = array[j];
            array[j] = array[j - 1];
            array[j - 1] = tmp;
            j--;
        }
    }
}
void insertionSortC(int array[], int tamanho) {
    int i, j, tmp;
    for (i = 1; i < tamanho; i++) {
        j = i;
        while (j > 0 && array[j - 1] > array[j]) {
            tmp = array[j];
            array[j] = array[j - 1];
            array[j - 1] = tmp;
            j--;
        }
    }
}
void selecao(int vetor[], int n){
    int menor, aux;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(vetor[i]>vetor[j]){
                menor=j;
            }
            if(i!=menor){
                aux=vetor[i];
                vetor[i]=vetor[menor];
                vetor[menor]=aux;
            }
        }
    }
}
void saindo(){
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){0,45});
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){0,30});
    int w,px,py,x;                            /* variáveis simples                                */
    HANDLE hOut;                              /* controle dos dispositivos do pc                  */
    hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                              */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela               */
    GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console              */
    px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
    int y1=py+1,x1=20,y2=y1,x2=x1,j,i,a,b;    /*y1=linha inicial  y2 para recuperar a linha inicial*/
    for(i=0;i<8;i++){                     /*  sao 8 letras                                    */
        for(j=0;j<5;j++){                 /*o caractere é de 5 linhas                          */
            x1 = x2;
            a=letras[i][j];               /*pega o numero da 1 linha do caractere              */
            for(b=0;b<5;b++){             /*aqui eh um numero de apenas 8 bits                 */
                SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x1,y1});
                if(a % 2 != 0){           /*se bit 0 igual 1                                   */
                    printf("%c",219);     /*coloca espaço invertido senão coloca espaço normal */
                }
                else{
                    printf(" ");          /*senão coloca espaço normal                         */
                }
                a=a/2;                    /*dividindo numero por 2 desloca os bits para direita*/
                x1--;
                Sleep(10);
            }
            y1++;                   /*muda para proxima linha                                  */
            x1=x2;                  /*volta para a coluna inicial                              */
        }                           /*proxima linha                                            */
        x2=x2+6;                    /*avança 6 colunas posicionando para o prox caract         */
        y1=y2;                      /*volta para linha inicial                                 */
    }                               /*imprimiu o primeiro caractere                            */
}

 

  • Amei 1
Postado

Seu programa está incrivelmente complicado. Não há razão para tal. Vai levar uma vida pra arrumar isso e não creio que compense.

 

Considere:

  • NUNCA faça um programa desses interativo, com menus e leituras no meio do processamento. Só vai perder tempo. Não tem o menor sentido ler os valores do vetor do teclado. Você não postou o enunciado, mas a menos que tal enunciado exija não faça isso nem depois que o programa estiver rodando certo. Ou você lê de um arquivo, facinho porque você digita no IDE com control C e control V, ou usa números aleatórios ou põe já em ordem mesmo com um loop.
  • Você não é obrigado a fazer um programa só. Ninguém vai saber se forem vários. Sistemas modernos tem facilmente centenas de programas.
  • Faça um programa que apenas crie e preencha um vetor de um certo tamanho. Só isso. Está usando um vetor de inteiros então pode ser algo muito simples
  • crie uma função que mostra o vetor, com uns 10 caras por linha pra ficar fácil. Você vai precisar de uma função assim pra testar afinal.
  • escreva as funções que classificam o vetor, uma a uma e teste com a sua função que mostra o vetor antes e depois
  • E aí escreva esse menu e termine isso em meia hora a mais.

Escreva seu programa em torno dos dados. Não escreva nada a toa. Comece pelos dados.

 

Acha que sabe começar assim?

 

  • Curtir 1
  • Amei 2
Postado

Poste o enunciado. Fica mais fácil de te ajudar

 

adicionado 57 minutos depois
49 minutos atrás, Izaac Baptista disse:

Cara, to tentando desenvolver algo em C, e to tendo bastante dificuldade, mas aos poucos eu pego o jeito, obrigado pelas dicas!!

 

Veja essa função de exemplo

int            mostra(int vet[], int n)
{
    int col = 0;
    printf("\n vetor - - - - - - - - - - \n");
    printf("\n %d elementos:\n\n", n);
    for (int i = 0; i < n; i += 1)
    {
        printf("%5d", vet[i]);
        col += 1;
        if (col % 10 == 0) printf("\n");
    };    // for()
    if (col % 10 != 0) printf("\n");
    printf("\n - - - - - - - - - - fim \n");
    printf("\n"); // pula linha em branco no fim
    return 0;
};    // mostra()

Ela imprime um vetor de inteiros. Só isso. Comece por isso. Seus dados.

 

Veja como chamar em main()

int main(void)
{
	int vetor[10] = { 1,2,3,4,5,6,7,8,9,9 };
	int outro[10] = { 2,3,4,5,6,5,4,3,2,2 };
	int cem[100];
	for (int i = 0; i <100; i += 1) cem[i] = 100 - i;
	mostra(vetor, 10);
	mostra(outro, 5);
	mostra(cem, 100);
	mostra(cem, 1);
};	// main()

Tem 3 vetores. Mais que o necessário para testar seus 3 algoritmos. Veja o terceiro, o vetor 100: os números estão em ordem decrescente, só pra dar uma canseira nos sort depois que funcionar com os dois primeiros. 10 minutos, sem menu, sem opções, sem interação com o usuário. Comece assim.

 

Repare que você pode chamar mostra() com 1 só mesmo que o vetor tenha 500.000 itens. Muitos programas de sort falham quando o vetor só tem 1, então teste :) 

 

Veja o que sai na tela

 vetor - - - - - - - - - -

 10 elementos:

    1    2    3    4    5    6    7    8    9    9

 - - - - - - - - - - fim


 vetor - - - - - - - - - -

 5 elementos:

    2    3    4    5    6

 - - - - - - - - - - fim


 vetor - - - - - - - - - -

 100 elementos:

  100   99   98   97   96   95   94   93   92   91
   90   89   88   87   86   85   84   83   82   81
   80   79   78   77   76   75   74   73   72   71
   70   69   68   67   66   65   64   63   62   61
   60   59   58   57   56   55   54   53   52   51
   50   49   48   47   46   45   44   43   42   41
   40   39   38   37   36   35   34   33   32   31
   30   29   28   27   26   25   24   23   22   21
   20   19   18   17   16   15   14   13   12   11
   10    9    8    7    6    5    4    3    2    1

 - - - - - - - - - - fim


 vetor - - - - - - - - - -

 1 elementos:

  100

 - - - - - - - - - - fim


Sobre suas funções de sort

void        bubble_sort(int[],int);
void        insertionSortC(int[],int);
void        insertionSortD(int[],int);
int         mostra(int[], int);
void        selecao(int[],int);

Não é esperto usar duas funções só porque mudou a ordem de comparação... Passe um parâmetro apenas, que nesse caso bem simples pode ser só 'C' ou 'D' pra não mudar nada. ;) 

     void        insertionSort(int[],int,char);

 

Entenda (e rode) esse programa

 

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

int         mostra(int[],int);
void        bubble_sort(int[],int);
void        insertionSortC(int[],int);
void        insertionSortD(int[],int);
int         mostra(int[], int);
void        selecao(int[],int);

int main(void)
{
    int vetor[10] = { 1,2,3,4,5,6,7,8,9,9 };
    int outro[10] = { 2,3,4,5,6,5,4,3,2,2 };
    int cem[100];
    for (int i = 0; i <100; i += 1) cem[i] = 100 - i;
    mostra(vetor, 10);
    mostra(outro, 5);
    mostra(cem, 100);
    mostra(cem, 1);
};    // main()


void        bubble_sort(int vet[], int max) {};

void        insertionSortC(int array[], int tamanho) {};

void        insertionSortD(int array[], int tamanho) {};

int            mostra(int vet[], int n)
{
    int col = 0;
    printf("\n vetor - - - - - - - - - - \n");
    printf("\n %d elementos:\n\n", n);
    for (int i = 0; i < n; i += 1)
    {
        printf("%5d", vet[i]);
        col += 1;
        if (col % 10 == 0) printf("\n");
    };    // for()
    if (col % 10 != 0) printf("\n");
    printf("\n - - - - - - - - - - fim \n");
    printf("\n"); // pula linha em branco no fim
    return 0;
};    // mostra()

void        selecao(int vet[], int n) {};

// https://www.clubedohardware.com.br/forums/topic/
// 1477816-algoritmos-de-ordena%C3%A7%C3%A3o-em-c/?tab=comments#comment-7908237

 

Entenda que o programa já tem até as funções de sort. Vazias, mas estão lá. Isso quer dizer que pode ir testando JÁ escrevendo os códigos de cada uma e chamando em main. E usando um vetor para cada função porque ele volta em ordem.

 

Usando RECORTAR e COLAR e testando tudo já

int main(void)
{
	int vetor1[10] = { 1,2,3,4,5,6,7,8,9,9 };
	int vetor2[10] = { 1,2,3,4,5,6,7,8,9,9 };
	int vetor3[10] = { 1,2,3,4,5,6,7,8,9,9 };

	mostra(vetor1, 10);
	bubble_sort(vetor1, 10);
	mostra(vetor1, 10);

	mostra(vetor2, 10);
	insertionSortC(vetor2, 10);
	mostra(vetor2, 10);

	mostra(vetor3, 10);
	selecao(vetor3, 10);
	mostra(vetor3, 10);

};	// main()

Você tem 3 vetores. Vai ver antes e depois de classificado. É todo o seu problema.

 

DEPOIS você cria um menu, um switch()... Isso não acrescenta nada ao problema. Só ao tempo que demora pra escrever. 

 

Não tem sentido você ler do teclado os vetores a cada teste.

 

Entende como é diferente?

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!