Este programa lê uma matriz de nomes 5x80 e ordena em ordem alfabética, removendo os nomes duplicados.
Vocês podem melhorá-lo, criando funções e aperfeiçoando a interface.
/*
Programa em C que lê uma matriz de nomes
(5 nomes de no máximo 80 caracteres cada
e ordena em ordem alfabetica,
eliminando os nomes duplicados.
*/
#include "stdio.h"
#include "stdlib.h"
#define LIN 5
#define COL 81
int main(int argc, char *argv[]){
char nomes[LIN][COL];
char aux[COL];
int i, j;
int x, y, duplicados = 0;
//Lendo os nomes
for(i = 0; i < LIN; i++){
puts("Digite o nome: ");
fflush(stdin);
gets(nomes[i]);
}
//imprimindo os nomes lidos
for(i = 0; i < LIN; i++){
printf("\nNome %d: %s\n", i + 1, nomes[i]);
}
//ordenando (método da bolha)
for(i = 0; i < LIN - 1; i++){
for(j = i + 1; j < LIN; j++){
//se o nomes[i] for maior que nomes[j],
//troca um pelo outro
if(strcmp(nomes[i], nomes[j]) > 0){
strcpy(aux, nomes[i]);
strcpy(nomes[i], nomes[j]);
strcpy(nomes[j], aux);
}
}
}
//Agora, se houver repetidos, remove um deles,
//deixando seu local vazio
for(i = 0; i < LIN - 1; i++){
for(j = i + 1; j < LIN; j++){
if(strcmp(nomes[i], nomes[j]) == 0){
strcpy(nomes[i], nomes[j]);
strcpy(nomes[j], "");
duplicados++;
}
}
}
puts(" ");
puts("Nomes ordenados, duplos eliminados e ");
puts("Vazios eliminados");
//Remove os campos vazios
for(i = 0; i < LIN - 1; i++){
if(strcmp(nomes[i], "") == 0){
strcpy(nomes[i], nomes[i+1]);
strcpy(nomes[i+1], "");
}
}
//Imprime a matriz ordenada,
//sem os duplicados e sem os campos vazios
for(i = 0; i < LIN - duplicados; i++){
printf("\nNome %d: %s\n", i + 1, nomes[i]);
}
system("PAUSE");
return 0;
}
Nenhum comentário:
Postar um comentário