Advertisement
MirandaWopps

exercBuscaBinaria

Jun 13th, 2022 (edited)
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.69 KB | None | 0 0
  1. #define N 12
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. //typedef struct titulo Titulo;
  7. struct titulo {
  8.     char* nome;
  9.     char* categoria;  // primeira ordenacao acontece pro aq xD
  10.     int anoLancamento;
  11. };
  12.  
  13. typedef struct titulo Titulo;
  14.  
  15. /*
  16. char* buscaMaisAntigo(int n, Titulo** v, char* categoria);
  17.  
  18. Titulo* tit_criar(char* nome, char* categoria, int ano);
  19.  
  20. void tit_imprimeTitulo(Titulo* t);
  21. */
  22.  
  23. /*
  24. int compara(char* valEncontrado,char* valBuscado) {
  25.     int r = strcmp(valEncontrado,valBuscado);
  26.     return r;
  27. }
  28. */
  29.  
  30. char* buscaMaisAntigo(int n, Titulo** v, char* categoria) {
  31.     int ini = 0, meio, fim = n - 1, r, i=0;
  32.    
  33.     char* retorno = (char*)malloc(sizeof(char) * 40);
  34.  
  35.     while (ini <=fim) {
  36.         meio = (fim+ini) / 2;
  37.         r = strcmp(categoria , v[meio]->categoria);
  38.         printf("\nCategoria q ta o meio %s", v[meio]->categoria);
  39.         printf("\nCategoria selecionada %s", categoria);
  40.         printf("\n o R e %d", r);
  41.         if (r > 0){
  42.             ini = meio +1;
  43.         }
  44.         else if (r <0) {
  45.             fim = meio - 1;
  46.         }
  47.         else {
  48.             printf("\n\nChegou na categoria ! %s e o meio ta em %d<-", v[meio]->categoria, meio);
  49.             for (i = meio; i < n && strcmp(v[i]->categoria, categoria) == 0; i++); // andando p direita
  50.             /*
  51.             for (i = meio; i < n && v[i]->categoria == categoria; i++) { // andando p direita
  52.                 printf("eis o I -> %d", i);
  53.             } */
  54.             return v[i-1]->nome;
  55.  
  56.         }
  57.     }
  58.     return NULL;
  59. }
  60.  
  61.  
  62. Titulo* tit_criar(char* nome, char* categoria, int ano) { // qnd se trata de char tem q alocar dinamicamente
  63.     Titulo* novoTitulo = (Titulo*)malloc(sizeof(Titulo));
  64.     if (novoTitulo == NULL){
  65.         printf("Erro de alocacao.");
  66.         return NULL;
  67.     }
  68.  
  69.     novoTitulo->nome = (char*)malloc(sizeof(char)*40);
  70.     if (novoTitulo->nome == NULL) {
  71.         printf("Erro de alocacao.");
  72.         return NULL;
  73.     }
  74.  
  75.     novoTitulo->categoria = (char*)malloc(sizeof(char)*20);
  76.     if (novoTitulo->categoria == NULL) {
  77.         printf("Erro de alocacao.");
  78.         return NULL;
  79.     }
  80.  
  81.     //novoTitulo = (*nome, *categoria, ano);
  82.     strcpy(novoTitulo->nome, nome);
  83.     strcpy(novoTitulo->categoria, categoria);
  84.     novoTitulo->anoLancamento = ano;
  85.  
  86.     return novoTitulo;
  87. }
  88.  
  89. void tit_imprimeTitulo(Titulo* t) {
  90.     printf("%d\t%s\t%s\n", t->anoLancamento, t->categoria ,t->nome);
  91. }
  92.  
  93.  
  94. int main(void) {
  95.     int i, j;
  96.     char* maisAntigo;
  97.     char* catDesejada = "animacao";
  98.     Titulo* vp[N];
  99.  
  100.     //v[0] = { "Rio", "animacao", 2011 }; assim q seria criado estaticamente
  101.     vp[0] = tit_criar("Rio", "animacao", 2011);
  102.     vp[1] = tit_criar("Meu Malvado Favorito", "animacao", 2010);
  103.     vp[2] = tit_criar("Bolt - Supercao", "animacao", 2008);
  104.     vp[3] = tit_criar("Os Sem-Floresta", "animacao", 2006);
  105.     vp[4] = tit_criar("Shrek", "animacao", 2001);
  106.     vp[5] = tit_criar("O Homem do Futuro", "comedia romantica", 2011);
  107.     vp[6] = tit_criar("Sex and the City - O Filme", "comedia romantica", 2008);
  108.     vp[7] = tit_criar("A Dona da Historia", "comedia romantica", 2004);
  109.     vp[8] = tit_criar("Quebrando o Tabu", "documentario", 2011);
  110.     vp[9] = tit_criar("Senna", "documentario", 2010);
  111.     vp[10] = tit_criar("Diario de Uma Busca", "documentario", 2010);
  112.     vp[11] = tit_criar("The Rolling Stones - Shine a Light", "documentario", 2008);
  113.  
  114.     for (i = 0; i < N; i++){
  115.         tit_imprimeTitulo(vp[i]);
  116.     }
  117.  
  118.  
  119.     //func busca   
  120.     maisAntigo = buscaMaisAntigo(N, vp, catDesejada);
  121.     printf("\n\nTitulo mais antigo da categoria animacao: %s", maisAntigo);
  122.  
  123.  
  124.    
  125.     maisAntigo = buscaMaisAntigo(N, vp , "comedia romantica");
  126.     printf("\n\nTitulo mais antigo da categoria comedia romantica: %s", maisAntigo );
  127.  
  128.    
  129.     maisAntigo = buscaMaisAntigo(N, vp, "documentario");
  130.     printf("\n\nTitulo mais antigo da categoria animacao: %s", maisAntigo);
  131.    
  132.  
  133.  
  134.     // desalocando memoria
  135.     for (i = 0; i < N; i++) {
  136.         free(vp[i]);
  137.     }
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement