Skip to content

Instantly share code, notes, and snippets.

@gabrielpadron
Last active November 2, 2021 16:20
Show Gist options
  • Save gabrielpadron/05a9ae99be13b93e9023ad97dfc0f333 to your computer and use it in GitHub Desktop.
Save gabrielpadron/05a9ae99be13b93e9023ad97dfc0f333 to your computer and use it in GitHub Desktop.

Revisions

  1. gabrielpadron revised this gist Nov 2, 2021. 1 changed file with 6 additions and 3 deletions.
    9 changes: 6 additions & 3 deletions q1_lista_circular.c
    Original file line number Diff line number Diff line change
    @@ -44,9 +44,12 @@ void inserirElemento(Conjunto *A, Fracao *fracao) {
    }

    void lerConjunto(Conjunto *A) {
    Fracao f;
    while (scanf("%d/%d", &f.numerador, &f.denominador)) {
    inserirElemento(A, &f);
    int num, den;
    while (scanf("%d/%d", &num, &den)) {
    Fracao *f = malloc(sizeof(Fracao));
    f->numerador = num;
    f->denominador = den;
    inserirElemento(A, f);
    }
    }

  2. gabrielpadron revised this gist Nov 2, 2021. 1 changed file with 7 additions and 5 deletions.
    12 changes: 7 additions & 5 deletions q1_lista_circular.c
    Original file line number Diff line number Diff line change
    @@ -29,7 +29,9 @@ void apagarConjunto(Conjunto *A);
    // Insere um elemento na lista circular apos o no atual
    void inserirElemento(Conjunto *A, Fracao *fracao) {
    FracaoNo *novo = malloc(sizeof(FracaoNo));
    novo->fracao = fracao;
    novo->fracao = malloc(sizeof(Fracao));
    novo->fracao->numerador = fracao->numerador;
    novo->fracao->denominador = fracao->denominador;

    if (A->atual) {
    novo->proximo = A->atual->proximo;
    @@ -42,9 +44,9 @@ void inserirElemento(Conjunto *A, Fracao *fracao) {
    }

    void lerConjunto(Conjunto *A) {
    Fracao fracao;
    while (scanf("%d/%d", &fracao.numerador, &fracao.denominador)) {
    inserirElemento(A, &fracao);
    Fracao f;
    while (scanf("%d/%d", &f.numerador, &f.denominador)) {
    inserirElemento(A, &f);
    }
    }

    @@ -64,7 +66,7 @@ int buscar(Conjunto *A, Fracao *f) {
    // retorna a intersecao das duas listas
    Conjunto *Intersecao(Conjunto *A, Conjunto *B) {
    Conjunto *intersecao = criarConjunto();

    return intersecao;
    }

  3. gabrielpadron created this gist Nov 1, 2021.
    101 changes: 101 additions & 0 deletions q1_lista_circular.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,101 @@
    #include <stdio.h>
    #include <stdlib.h>

    typedef struct {
    int numerador; // Numerador da fracao
    int denominador; // Denominador da fracao
    } Fracao;

    typedef struct FracaoNo {
    struct FracaoNo *proximo; // No sucessor ao no atual
    struct FracaoNo *anterior; // No anterior ao no atual
    Fracao *fracao;
    } FracaoNo;

    typedef struct Conjunto {
    FracaoNo *atual; // No atual da lista circular
    } Conjunto;

    // Retorna uma lista circular
    Conjunto *criarConjunto() {
    Conjunto *novo = malloc(sizeof(Conjunto));
    novo->atual = NULL;
    return novo;
    }

    // Apaga uma lista circular
    void apagarConjunto(Conjunto *A);

    // Insere um elemento na lista circular apos o no atual
    void inserirElemento(Conjunto *A, Fracao *fracao) {
    FracaoNo *novo = malloc(sizeof(FracaoNo));
    novo->fracao = fracao;

    if (A->atual) {
    novo->proximo = A->atual->proximo;
    A->atual->proximo = novo;
    }
    else {
    A->atual = novo;
    novo->proximo = novo;
    }
    }

    void lerConjunto(Conjunto *A) {
    Fracao fracao;
    while (scanf("%d/%d", &fracao.numerador, &fracao.denominador)) {
    inserirElemento(A, &fracao);
    }
    }

    int buscar(Conjunto *A, Fracao *f) {
    FracaoNo *p = A->atual;
    if (p) {
    do {
    if (p->fracao->numerador == f->numerador && p->fracao->denominador == f->denominador)
    return 1;
    p = p->proximo;
    } while(p != A->atual);
    }

    return 0;
    }

    // retorna a intersecao das duas listas
    Conjunto *Intersecao(Conjunto *A, Conjunto *B) {
    Conjunto *intersecao = criarConjunto();

    return intersecao;
    }

    void imprimirFracao(Fracao *f) {
    printf("%d/%d ", f->numerador, f->denominador);
    }

    // imprime o conjunto de fracoes
    void imprimirConjunto(Conjunto *A) {
    FracaoNo *p = A->atual;
    if (p) {
    do {
    imprimirFracao(p->fracao);
    p = p->proximo;
    } while(p != A->atual);
    }
    printf("\n");
    }

    int main() {
    Conjunto *A, *B;
    A = criarConjunto();
    B = criarConjunto();
    lerConjunto(A);
    lerConjunto(B);

    printf("A: ");
    imprimirConjunto(A);
    printf("B: ");
    imprimirConjunto(B);
    printf("AeB: ");

    return 0;
    }