Capa / Portfolio / 232 posts / 961 comentários

Os métodos de ordenação sistemática são os mais variados, e dessa vez surgiu a ideia de fazer uma ordenação do estilo “AaBbCcDdEeFf…Zz”. Duas principais maneiras são usar posições de vetores como índice, ou simplesmente usar a tabela ASCII, o que por sua vez não é muito seguro uma vez que não sabemos em que sistema o programa irá rodar.

O seguinte exemplo utiliza a tabela ASCII.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
 
void TrocaLetras(char palavra[],int pos1, int pos2) {
	char aux;
	aux = palavra[pos1];
	palavra[pos1] = palavra[pos2];
	palavra[pos2] = aux;
}
 
int MedeTamanho(char palavra[]) {
	int i = 0;;
	while (palavra[i]) i++;
	return i;
}
 
void OrdenaPalavra(char palavra[],int n) {
	int i, j, menor, auxj, auxmenor;
 
	for (i = 0; i < n-1; i++) {
		menor = i;
		for (j = i+1; j < n; j++) {
			if (palavra[j] >= 97) auxj = -32; else auxj = 0;
			if (palavra[menor] >= 97) auxmenor = -32; else auxmenor = 0;
			if (palavra[j]+auxj == palavra[menor]+auxmenor) {
				if (auxj < 0) auxj = 1; else auxmenor = 1;
			}
			if (palavra[j]+auxj < palavra[menor]+auxmenor) menor=j;
		}
		TrocaLetras(palavra,i,menor);
	}
}
 
int main() {
	int tamanho;
	char palavra[100];
 
	printf("Entre com uma palavra: ");
	scanf("%s",palavra);
	tamanho = MedeTamanho(palavra);
	OrdenaPalavra(palavra,tamanho);
	printf("%s\n",palavra);
	return 0;
}

E este daqui utiliza-se de um vetor com ordem.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#define MAX 100
 
void VerificaOrdem(char string[], char ordem[], int i) {
     int j;
     for (j=0; string[j] != '\n'; j++)
         if (string[j] == ordem[i])
            printf("%c", ordem[i]);
}
 
int main() {
    char string[MAX];
    char ordem[] = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
    int i;
    printf("Digite a string:\n");
    fgets(string, MAX, stdin);
    printf("\nString ordenada:\n");       
    for (i=0; i<52; i++)
        VerificaOrdem(string, ordem, i);
    printf("\n");
    return 0;
}

Nenhum Comentário