#include #include void ordenavetor(int *, int); //prototipos das funções void imprimevetor(int *, int); int tamanhovetor(char *, int *); void montavetor(char *, int *, int); void insert_shell(int *, int, int, int); void shellsort(int *, int, int); int main(void) { char *nome; //nome do arquivo int tamanho, //variavel para o tamanho do vetor a ser criado h, *vetord; //vetor a ser ordenado nome = (char*)calloc(50, sizeof(char)); printf("Entre com o nome do arquivo: "); fflush(stdin); gets(nome); printf("\nEntre com o numero do decremento(h): "); scanf("%d",&h); tamanho = tamanhovetor(nome,vetord); vetord = (int*)calloc(tamanho, sizeof(int)); //insere elementos desordenadamente no vetor montavetor(nome, vetord, tamanho); printf("\n\nO vetor desordenado era:\n\n"); //chamada da função que imprime o vetor DESordenado imprimevetor(vetord, tamanho); //chamada da função que ordena o vetor ordenavetor(vetord,tamanho); //chamada da função que imprime o vetor ordenado printf("\n\nO vetor ordenado eh:\n\n"); imprimevetor(vetord, tamanho); printf("\n\n"); system("pause"); } //---------------------------------------------------------------------------------------------- //---------------------------Função que ordena o vetor------------------------------------------ void ordenavetor(int vet[], int tamanho) { int i; int k; int t; int ch; for(i = 1; i < tamanho; i++){ //algoritmo de inserção ordenada em vetor k = 0; t = i - 1; ch = vet[i]; while((t >= 0) && (k == 0)){ if(ch < vet[t]){ vet[t + 1] = vet[t]; t--; }else{ k = t + 1; } } vet[k] = ch; } } //---------------------------------------------------------------------------------------------- //---------------------------Função que imprime o vetor----------------------------------------- void imprimevetor(int vet[], int tamanho){ int i; for(i = 0;i < tamanho;i++){ //imprime os elemeentos printf("%5d ", vet[i]); if (!((i+1)%10)) printf(" ->\n\n"); } } //---------------------------------------------------------------------------------------------- //Função que retorna a quantidade de números presentes no arquivo, para que seja criado--------- //dinamicamente um vetor com essa dimensão------------------------------------------------------ //---------------------------------------------------------------------------------------------- int tamanhovetor(char nome[], int vet[]){ FILE *arq; int tamanho, valor; if(!(arq = fopen(nome, "rt"))) { printf("Arquivo nao encontrado.\n\n"); system("pause"); exit(1); } tamanho = 0; valor = 0; for(;;){ //encontra a quantidade de números presente no arquivo fscanf(arq, "%d", &valor); //até encontrar um flag -1 if (valor == -1) break; tamanho++;} fclose(arq); if (tamanho == 0){ //exceção caso o vetor seja vazio printf("\nVetor nulo\n"); system("pause"); exit(1); } return tamanho; } //---------------------------------------------------------------------------------------------- //--------------------Função que insere no vetor os números encontrados no arquivo-------------- //---------------------------------Vetor NÃO-ordenado------------------------------------------- void montavetor(char nome[], int vet[], int tamanho) { FILE *arq; int i; arq = fopen(nome, "rt"); //não é necessário um tratamento de exceção, pois o arquivo foi aberto uma vez for(i = 0; i < tamanho; i++) //o que garante sua existência fscanf(arq, "%d", &vet[i]); fclose(arq); } void insert_shell(int *vet, int n, int f, int h) { } void shellsort(int *vet, int n, int h) { int f; while(h>=1) { for(f=0;f