Guest User

Untitled

a guest
Jun 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. /* CCF 130 - Trabalho 2 * B-TREE *
  2.  
  3. _______________________________________________________________
  4.  
  5. | |
  6.  
  7. | Implementar a consulta e a insercao de uma B-Tree. |
  8.  
  9. | As chaves deverao consistir de caracteres de A a Z. |
  10.  
  11. | Cada noh tera M chaves. |
  12.  
  13. | As chaves serao lidas de um arquivo c:/temp/chaves.txt |
  14.  
  15. |_______________________________________________________________|
  16.  
  17.  
  18.  
  19. Carlos Henrique Silva Galdino - 14256
  20.  
  21. Fernanda Maria Villela Reis - 15583 */
  22.  
  23.  
  24.  
  25.  
  26.  
  27. # include <stdio.h>
  28.  
  29. # include <stdlib.h>
  30.  
  31. # include <math.h>
  32.  
  33. # include <string.h>
  34.  
  35. const int M = 2;
  36.  
  37.  
  38. //Estrutura da arvore:
  39.  
  40. struct arv {
  41. int folha;
  42.  
  43. char info[4]; //Contem os caracteres das chaves
  44.  
  45. int n; //Numero atual de chaves no noh
  46.  
  47. struct arv *filhos[5]; //Ponteiros para os filhos
  48.  
  49. };
  50.  
  51.  
  52.  
  53. typedef struct arv *PONT_ARV;
  54.  
  55.  
  56.  
  57. //Prototipos das funcoes
  58.  
  59. FILE *abre_arquivo (); //Abre o arquivo
  60.  
  61. PONT_ARV pesquisa_BTree (char, PONT_ARV arv);
  62.  
  63.  
  64.  
  65. int main()
  66.  
  67. {
  68.  
  69. int i=0; //Auxiliares
  70. char M;
  71.  
  72. FILE *arq = abre_arquivo();
  73. char caracter;
  74.  
  75. PONT_ARV raiz = malloc(sizeof(struct arv));
  76. PONT_ARV aux;
  77. for (i = 0; i < 4; i++) {
  78. raiz->filhos[i] = NULL;
  79. }
  80. raiz->folha = 0;
  81.  
  82.  
  83. system ("color 5f");
  84.  
  85. printf("\n\n\n =-=-= B - T R E E =-=-=\n\n"); //Imprimindo menu
  86.  
  87.  
  88. i = 0;
  89.  
  90. do
  91.  
  92. { //Le caracter de um arquivo
  93.  
  94. caracter = getc(arq);
  95.  
  96. printf ("%c", caracter);
  97. if (caracter != ',') {
  98. raiz->info[i] = caracter;
  99.  
  100. i++;
  101. }
  102.  
  103. } while(caracter != EOF && i < 4);
  104. fclose(arq);
  105.  
  106. printf ("\n\n\tEntre com a chave que deseja procurar: ");
  107.  
  108. scanf ("%c", &M);
  109. aux = pesquisa_BTree(M,raiz);
  110. for (i = 0; i < 4; i++)
  111. printf("\n%d - %c", i, aux->info[i]);
  112. if (aux->info[0] == M)
  113. printf("\nachei");
  114. else
  115. printf("\nnao achei");
  116. for (i = 0; i < 4; i++)
  117. printf("\n\nno da arvore: %c", raiz->info[i]);
  118.  
  119. printf ("\n\n");
  120.  
  121. system ("pause");
  122.  
  123.  
  124.  
  125. }
  126.  
  127.  
  128.  
  129. //Funcao que abre um arquivo
  130.  
  131. FILE *abre_arquivo () {
  132.  
  133. FILE *arq;
  134.  
  135. if(!(arq = fopen("teste.txt","r"))) //Abrindo arquivo
  136.  
  137. {
  138.  
  139. printf("\n\n\tErro ao abrir arquivo!!!\n");
  140.  
  141. system ("pause");
  142.  
  143. exit(1);
  144.  
  145. }
  146.  
  147. return arq;
  148.  
  149. }
  150.  
  151.  
  152.  
  153. //Funcao que busca um numero na arvore B-Tree
  154.  
  155. PONT_ARV pesquisa_BTree(char chave, PONT_ARV arv) {
  156.  
  157. int i;
  158.  
  159. if (arv != NULL) {
  160.  
  161. for (i = 1; ((i <= arv->n) && (arv->info[i-1] < chave)); i++)
  162.  
  163. if (i > (arv->n) || (arv->info[i-1] > chave))
  164.  
  165. return pesquisa_BTree(chave, arv->filhos[i-1]);
  166.  
  167. else
  168.  
  169. return arv;
  170.  
  171. }
  172.  
  173. else
  174.  
  175. return NULL;
  176.  
  177. }
Add Comment
Please, Sign In to add comment