MirandaWopps

T13 - backup xD

Jun 8th, 2022 (edited)
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct pessoa {
  6.     char nome[51];
  7.     float altura;
  8.     float peso;
  9. };
  10.  
  11. typedef struct pessoa Pessoa;
  12.  
  13. void imprime(Pessoa** pointer, int tamVetor) {
  14.     for (int i = 0; i < tamVetor; i++) {
  15.         printf("%s\t%.2f %.2f\n", pointer[i]->nome, pointer[i]->altura, pointer[i]->peso);
  16.     }
  17. }
  18.  
  19.  
  20. int compara(float valEncontrado, float valBuscado) {
  21.     //printf("i fuck real niggers");
  22.     if (valEncontrado < valBuscado) {
  23.         return 1;
  24.     }
  25.     else if (valEncontrado > valBuscado) {
  26.         return -1;
  27.     }
  28.     else {
  29.         return 0;
  30.     }
  31. }
  32.  
  33. int busca(Pessoa** p, int qtd, float procurado) {
  34.     int resp = 0, ini = 0, meio, fim = qtd - 1;
  35.     while (ini <= fim) {
  36.         meio = (fim + ini) / 2;
  37.         resp = compara(p[meio]->altura, procurado);
  38.         if (resp == 1) {      // joga para frente
  39.             ini = meio + 1;
  40.         }
  41.         else if (resp == -1) {// joga p tras
  42.             fim = meio - 1;
  43.         }
  44.         else { // aqui significa q encontrou
  45.             for (int i = meio; i >= 0 && p[meio]->altura >= procurado; i--) {
  46.                 if (i == 0) {
  47.                     printf("Indice retornado %d", i);
  48.                     return i;
  49.                 }// pd ser else ?
  50.                 if (p[i]->altura != p[meio]->altura) {
  51.                     printf("Indice retornado %d", i+1);
  52.                     return i+1;
  53.                 }
  54.             }
  55.             // n achou ? acaba o while e retorna -1
  56.  
  57.         }
  58.     }
  59.     return -1;
  60. }
  61.  
  62. int main(void) {
  63.     Pessoa d[] = { {"Leo",1.70,70}, {"Eva",1.70,75}, {"Ana",1.80,40}, {"Turing",1.80,50},
  64. {"Luiza",1.80,75}, {"Lovelace",1.90,60}, {"Sato",2.0,50}, {"Duda",2.0,55} };
  65.  
  66.     Pessoa* v[] = { d, d + 1, d + 2, d + 3, d + 4, d + 5, d + 6, d + 7 };
  67.  
  68.     imprime(v, 8);
  69.  
  70.     printf("\nTestes em q a funcao funciona:\n");
  71.     int a = busca(v, 8, 1.90);
  72.     printf("\nPrintando o registro do 1.90: %s %.2f %.2f", v[a]->nome, v[a]->altura, v[a]->peso );
  73.  
  74.     // agora o 170
  75.     a = busca(v, 8, 1.70);
  76.     printf("\nPrintando o registro do 1.70: %s %.2f %.2f", v[a]->nome, v[a]->altura, v[a]->peso);
  77.  
  78.  
  79.  
  80.  
  81.     printf("\n\nTeste q da errado\n");
  82.     int b = busca(v, 8, 1.0);
  83.     printf("\nO valor retornado nessa falha foi : %d");
  84.  
  85.     return 0;
  86. }
Add Comment
Please, Sign In to add comment