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.
Questão 1
#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 = malloc(sizeof(Fracao));
novo->fracao->numerador = fracao->numerador;
novo->fracao->denominador = fracao->denominador;
if (A->atual) {
novo->proximo = A->atual->proximo;
A->atual->proximo = novo;
}
else {
A->atual = novo;
novo->proximo = novo;
}
}
void lerConjunto(Conjunto *A) {
int num, den;
while (scanf("%d/%d", &num, &den)) {
Fracao *f = malloc(sizeof(Fracao));
f->numerador = num;
f->denominador = den;
inserirElemento(A, f);
}
}
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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment