Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define MAX 999 //função cujo sua tarefa é abrir o arquivo //prototicos das funções int percorre(int v[], int tam, int valor); int buscaord(int v[], int tam, int valor); int divconq(int v[], int esquerda, int direita); int arquivo(int v[]){ FILE *arq; int t, i; arq = fopen("arquivo.txt","r"); if (arq == NULL) { // Sempre, sempre sempre teste se abriu mesmo fprintf(stderr, "Arquivo nao localizado\n"); system ("pause"); } else{ for (i=0 ; i < MAX ; i++){ fscanf(arq,"%d",&v[i]); if (feof(arq)) { /* Ops. Chegou ao final do arquivo antes do MAX! */ break; // sai do laco sem incrementar o i } } t = i; fclose(arq); printf ("----- ** Encontrando valor inteiro no vetor ** -----\n\n"); printf("\t\tArquivo com %d valores inteiros\n", t+1); return t; } } //corpo do programa int main(){ int v[MAX], tam, valor, pos,poso,a; tam = arquivo(v); printf("\n\n\tDigite o valor que deseja pesquisar: "); scanf("%d", &valor); poso = percorre (v,tam,valor); divconq(v,0,tam); pos = buscaord (v, tam, valor); if(pos == -1) printf("\n\t\t\t\tValor nao encontrado"); else{ printf("\t\t\t\tO valor %d esta na posicao %d ordenado\n", valor, pos + 1); printf("\t\t\t\tO valor %d esta na posicao %d desordenado", valor, poso); } printf ("\n\n"); printf ("\nDeseja imprimir o vetor ordenado? [1 - para sim / 2 - para nao] "); scanf ("%d", &a); if (a == 1){ for (int i = 0; i < tam; i++){ printf("\tPosicao [%d] = %d\n", i+1, v[i]); // --------------- só ta imprimindo o ultimo dado do arquivo } } printf ("\n\n"); printf ("\t\t\t Trabalho de APA - Quest6\n\n"); } //--------------------------funções //Função de divisão e conquista (Ordenando Vetor) int divconq(int v[], int esquerda, int direita){ int i, j, x, y; i = esquerda; j = direita; x = v[(esquerda + direita) / 2]; int cont; while(i <= j){ while(v[i] < x && i < direita){ i++; } while(v[j] > x && j > esquerda){ j--; } if(i <= j){ y = v[i]; v[i] = v[j]; v[j] = y; i++; j--; } } if(j > esquerda) { divconq(v, esquerda, j); } if(i < direita) { divconq(v, i, direita); } } int buscaord(int v[], int tam, int valor){ int esq, meio, dir; esq = -1; dir = tam; while(esq < dir - 1){ meio = (esq + dir) / 2; if(v[meio] == valor) return meio; else if(v[meio] < valor) esq = meio; else dir = meio; } return -1; }; //Função onde mostra a posição original do valor solicitado int percorre(int v[], int tam, int valor){ int cont=0, resultado = 0; while (valor != v[cont-1]){ cont++; } resultado = cont; return resultado; }
Compartilhar