Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define N 12
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //typedef struct titulo Titulo;
- struct titulo {
- char* nome;
- char* categoria; // primeira ordenacao acontece pro aq xD
- int anoLancamento;
- };
- typedef struct titulo Titulo;
- /*
- char* buscaMaisAntigo(int n, Titulo** v, char* categoria);
- Titulo* tit_criar(char* nome, char* categoria, int ano);
- void tit_imprimeTitulo(Titulo* t);
- */
- /*
- int compara(char* valEncontrado,char* valBuscado) {
- int r = strcmp(valEncontrado,valBuscado);
- return r;
- }
- */
- char* buscaMaisAntigo(int n, Titulo** v, char* categoria) {
- int ini = 0, meio, fim = n - 1, r, i=0;
- char* retorno = (char*)malloc(sizeof(char) * 40);
- while (ini <=fim) {
- meio = (fim+ini) / 2;
- r = strcmp(categoria , v[meio]->categoria);
- printf("\nCategoria q ta o meio %s", v[meio]->categoria);
- printf("\nCategoria selecionada %s", categoria);
- printf("\n o R e %d", r);
- if (r > 0){
- ini = meio +1;
- }
- else if (r <0) {
- fim = meio - 1;
- }
- else {
- printf("\n\nChegou na categoria ! %s e o meio ta em %d<-", v[meio]->categoria, meio);
- for (i = meio; i < n && strcmp(v[i]->categoria, categoria) == 0; i++); // andando p direita
- /*
- for (i = meio; i < n && v[i]->categoria == categoria; i++) { // andando p direita
- printf("eis o I -> %d", i);
- } */
- return v[i-1]->nome;
- }
- }
- return NULL;
- }
- Titulo* tit_criar(char* nome, char* categoria, int ano) { // qnd se trata de char tem q alocar dinamicamente
- Titulo* novoTitulo = (Titulo*)malloc(sizeof(Titulo));
- if (novoTitulo == NULL){
- printf("Erro de alocacao.");
- return NULL;
- }
- novoTitulo->nome = (char*)malloc(sizeof(char)*40);
- if (novoTitulo->nome == NULL) {
- printf("Erro de alocacao.");
- return NULL;
- }
- novoTitulo->categoria = (char*)malloc(sizeof(char)*20);
- if (novoTitulo->categoria == NULL) {
- printf("Erro de alocacao.");
- return NULL;
- }
- //novoTitulo = (*nome, *categoria, ano);
- strcpy(novoTitulo->nome, nome);
- strcpy(novoTitulo->categoria, categoria);
- novoTitulo->anoLancamento = ano;
- return novoTitulo;
- }
- void tit_imprimeTitulo(Titulo* t) {
- printf("%d\t%s\t%s\n", t->anoLancamento, t->categoria ,t->nome);
- }
- int main(void) {
- int i, j;
- char* maisAntigo;
- char* catDesejada = "animacao";
- Titulo* vp[N];
- //v[0] = { "Rio", "animacao", 2011 }; assim q seria criado estaticamente
- vp[0] = tit_criar("Rio", "animacao", 2011);
- vp[1] = tit_criar("Meu Malvado Favorito", "animacao", 2010);
- vp[2] = tit_criar("Bolt - Supercao", "animacao", 2008);
- vp[3] = tit_criar("Os Sem-Floresta", "animacao", 2006);
- vp[4] = tit_criar("Shrek", "animacao", 2001);
- vp[5] = tit_criar("O Homem do Futuro", "comedia romantica", 2011);
- vp[6] = tit_criar("Sex and the City - O Filme", "comedia romantica", 2008);
- vp[7] = tit_criar("A Dona da Historia", "comedia romantica", 2004);
- vp[8] = tit_criar("Quebrando o Tabu", "documentario", 2011);
- vp[9] = tit_criar("Senna", "documentario", 2010);
- vp[10] = tit_criar("Diario de Uma Busca", "documentario", 2010);
- vp[11] = tit_criar("The Rolling Stones - Shine a Light", "documentario", 2008);
- for (i = 0; i < N; i++){
- tit_imprimeTitulo(vp[i]);
- }
- //func busca
- maisAntigo = buscaMaisAntigo(N, vp, catDesejada);
- printf("\n\nTitulo mais antigo da categoria animacao: %s", maisAntigo);
- maisAntigo = buscaMaisAntigo(N, vp , "comedia romantica");
- printf("\n\nTitulo mais antigo da categoria comedia romantica: %s", maisAntigo );
- maisAntigo = buscaMaisAntigo(N, vp, "documentario");
- printf("\n\nTitulo mais antigo da categoria animacao: %s", maisAntigo);
- // desalocando memoria
- for (i = 0; i < N; i++) {
- free(vp[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement