21 de jun. de 2010

Programa String e Matrizes

Pessoal, segue um programa exemplo para vocês estudarem.
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: