All pastes #457152 Raw Edit

Something

public c v1 · immutable
#457152 ·published 2007-04-25 06:38 UTC
rendered paste body
#include <stdio.h>#include <conio.h>#include <time.h>#include <string.h>#define MAX 100// Declarações //typedef struct reg {		int chave;		char nome[50];} registro;typedef struct s_ind {		int chave,endereco;} index;registro lista[MAX];index indice[MAX];// Lista de nomes - 24 nomes //char *nomes[]= {"Marcelo","Joao","Larissa","Pedro","Ricardo","Leandro","Luiz","Manuel","Maria","Roberta","Renata","Raimunda","Nelsa","Gustavo","Bruno","Sofia","Kelly","Anderson","John","Roberto","Gabriela","Giovana","Raissa","Murilo","Dojival"}; // Lista de Sobrenomes - 8 Sobrenomes //char *sobrenomes[] = {"Valdo","Silva","Rodrigues","Silveira","DeBastos","Lima","Pinha","Santos","Muniz","Nack","Neckel" }; // 11 Sobrenomesvoid popular();void ler();void mostra();int partition( index *a, int l, int r);void quickSort( index *a, int l, int r);int binsrch(index *pos,int tmp_mat,int low, int high);FILE *arquivo;// Fim declaraçõesmain() {       int posicao,arqp,i;       char nome[50];       popular();       ler();       quickSort(indice,0,MAX-1);       printf("Digite a chave a ser pesquisada: ");       scanf("%d",&i);       posicao = binsrch(indice,i,0,MAX-1);       if(posicao > 0) {           printf("Posição no array organizado: %d\n",posicao);           arqp = indice[posicao].endereco;           if((arquivo=fopen("registro.txt","r"))==NULL) printf("erro no arquivo");           fseek(arquivo,arqp,0);           fscanf(arquivo,"%d %s",&arqp,nome);           printf("Chave: %d --- Nome: %s",arqp,nome);                  }       else printf("Não encontrou !");       getche();                     }void popular() {     //Declarações     srand(time(NULL)); // Randomizando     int i;     //Fim declarações     if((arquivo=fopen("registro.txt","w"))==NULL) printf("erro no arquivo");     for(i=0;i<MAX;i++) {        lista[i].chave = rand() % 100000;        sprintf(lista[i].nome,"%s+%s",nomes[rand() % 24],sobrenomes[rand() % 11]);        fprintf(arquivo,"%d %s\n",lista[i].chave,lista[i].nome);          }     fclose(arquivo);     }void mostra() {     //Declaraçoes     int i;     //Fim declarações     for(i=0;i<MAX;i++) {        printf("Chave: %d --- Endereço: %d\n",indice[i].chave,indice[i].endereco);     }               }     void ler() {     //Declarações//     int i,j;     char temp[40];     //Fim declarações     //rewind(arquivo);     if((arquivo=fopen("registro.txt","r"))==NULL) printf("erro no arquivo");     fscanf(arquivo,"%d %s",&indice[0].chave,temp);     for(i=0;i<MAX;i++) {        indice[i].endereco = ftell(arquivo);        fscanf(arquivo,"%d %s",&indice[i].chave,temp);     }     fclose(arquivo);     }int partition(index *a, int l, int r) {   int pivot, i, j, t;   pivot = a[l].chave;   i = l; j = r+1;		   while( 1)   {   	do ++i; while( a[i].chave <= pivot && i <= r );   	do --j; while( a[j].chave > pivot );   	if( i >= j ) break;   	t = a[i].chave; a[i].chave = a[j].chave; a[j].chave = t;   }   t = a[l].chave; a[l].chave = a[j].chave; a[j].chave = t;   return j;}void quickSort( index *a, int l, int r){   int j;   if( l < r )    {   	// divide and conquer        j = partition( a, l, r);       quickSort( a, l, j-1);       quickSort( a, j+1, r);   }	}int binsrch(index *pos,int tmp_mat,int low, int high){    int meio;    if(low>high)       return(-1);    meio=(high+low)/2;    if(tmp_mat==pos[meio].chave)       return (meio);    if(tmp_mat<pos[meio].chave)      return(binsrch(pos,tmp_mat,low,meio-1));    return(binsrch(pos,tmp_mat,meio+1,high));        }