//Viernanryck Luciano // o arquivo fonte deve separar os inteiros por espaços ou paragrafos Exemplo: // "2 3 9 0" // // ou "2 ou ainda "1 3 4 // 3 9 4 // 9 6 // 0" 0 4" // // A saida sera sempre separada por paragrafos como no segundo exemplo // Obs: um arquivo fora desses padrao pode gerar erros; #include #include typedef struct dados{ int num; struct dados* prox; }Dados; Dados* inicia(int inf,int *n); Dados* cria(Dados* ini, int inf, int *n); int* copia_libera(Dados* inf, int n); static int compara(const void *x1, const void *x2); int main(void) { FILE* entrada; FILE* saida; Dados* lista=NULL; char nomearquivo[101]; int n, tempinf, *vet, cont; //pede o nome do arquivo de entrada printf("Entre com o nome do arquivo a ser ordenado: "); scanf(" %100[^\n]",nomearquivo); fflush(stdin); system("cls"); entrada=fopen(nomearquivo,"r"); //testando se o arquivo foi aberto corretamente if (entrada==NULL) { printf("Erro ao abrir o arquivo informado!\n"); system("pause"); return 1; } //copia para a lista while(fscanf(entrada, "%d", &tempinf)==1) { if (lista==NULL) lista=inicia(tempinf, &n); else lista=cria(lista, tempinf, &n); } fclose(entrada); //copia da lista para um vetor vet=copia_libera(lista, n); //ordena vetor qsort(vet,n,sizeof(int),compara); //pede nome do arquivo de saida printf("Entre com o nome do arquivo de saida: "); scanf(" %100[^\n]",nomearquivo); fflush(stdin); system("cls"); saida=fopen(nomearquivo,"w"); //testanto se pode gravar o novo arquivo if (saida==NULL) { printf("Seus privilegios nao permitem gravar o novo arquivo!\n"); system("pause"); return 1; } //copia o vetor ordenado para o arquivo de saida for (cont=0; contnum=inf; novo->prox=NULL; *n=1; return novo; } //Função para adicionar um novo numero a lista Dados* cria(Dados* ini, int inf, int *n) { Dados*novo; novo=(Dados*) malloc(sizeof(Dados)); novo->num=inf; novo->prox=ini; *n=*n+1; return novo; } //Função para copiar os inteiros para o vetor int* copia_libera(Dados* inf, int n) { Dados* aux; int *novo, cont=0; novo=(int*) malloc(n*sizeof(int)); while(inf!=NULL) { novo[cont]=inf->num; aux=inf->prox; free(inf); inf=aux; cont++; } return novo; } //Função Usada no Qsort para ordenar o vetor static int compara(const void *x1, const void *x2) { //convertendo void em int... int temp1=*(int*)x1; int temp2=*(int*)x2; if (temp1==temp2) return 0; else if(temp1>temp2) return 1; else return -1; }