Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct pessoa {
- char nome[51];
- float altura;
- float peso;
- };
- typedef struct pessoa Pessoa;
- void imprime(Pessoa** pointer, int tamVetor) {
- for (int i = 0; i < tamVetor; i++) {
- printf("%s\t%.2f %.2f\n", pointer[i]->nome, pointer[i]->altura, pointer[i]->peso);
- }
- }
- int compara(float valEncontrado, float valBuscado) {
- //printf("i fuck real niggers");
- if (valEncontrado < valBuscado) {
- return 1;
- }
- else if (valEncontrado > valBuscado) {
- return -1;
- }
- else {
- return 0;
- }
- }
- int busca(Pessoa** p, int qtd, float procurado) {
- int resp = 0, ini = 0, meio, fim = qtd - 1;
- while (ini <= fim) {
- meio = (fim + ini) / 2;
- resp = compara(p[meio]->altura, procurado);
- if (resp == 1) { // joga para frente
- ini = meio + 1;
- }
- else if (resp == -1) {// joga p tras
- fim = meio - 1;
- }
- else { // aqui significa q encontrou
- for (int i = meio; i >= 0 && p[meio]->altura >= procurado; i--) {
- if (i == 0) {
- printf("Indice retornado %d", i);
- return i;
- }// pd ser else ?
- if (p[i]->altura != p[meio]->altura) {
- printf("Indice retornado %d", i+1);
- return i+1;
- }
- }
- // n achou ? acaba o while e retorna -1
- }
- }
- return -1;
- }
- int main(void) {
- Pessoa d[] = { {"Leo",1.70,70}, {"Eva",1.70,75}, {"Ana",1.80,40}, {"Turing",1.80,50},
- {"Luiza",1.80,75}, {"Lovelace",1.90,60}, {"Sato",2.0,50}, {"Duda",2.0,55} };
- Pessoa* v[] = { d, d + 1, d + 2, d + 3, d + 4, d + 5, d + 6, d + 7 };
- imprime(v, 8);
- printf("\nTestes em q a funcao funciona:\n");
- int a = busca(v, 8, 1.90);
- printf("\nPrintando o registro do 1.90: %s %.2f %.2f", v[a]->nome, v[a]->altura, v[a]->peso );
- // agora o 170
- a = busca(v, 8, 1.70);
- printf("\nPrintando o registro do 1.70: %s %.2f %.2f", v[a]->nome, v[a]->altura, v[a]->peso);
- printf("\n\nTeste q da errado\n");
- int b = busca(v, 8, 1.0);
- printf("\nO valor retornado nessa falha foi : %d");
- return 0;
- }
Add Comment
Please, Sign In to add comment