Commit 14d4d850 authored by André Machado's avatar André Machado

v1.0 - Pequenos ajustes para garantir corretude

Arrumado um problema que fazia, em alguns casos, gerar uma relação com
apenas um elemento.
Comentários "enxugados".
Makefile modificado para sempre otimizar o código com -O3
parent 7f2bfa97
msg = echo programa compilado com sucesso.
bcnf: trabalho1.c listas.o
gcc -o bcnf trabalho1.c listas.o -g -I.
gcc -O3 -o bcnf trabalho1.c listas.o -I.
listas.o:
gcc -c listas.c -I.
......@@ -10,5 +8,3 @@ limpa:
rm *.o
test -f bcnf && rm bcnf
otimiza: trabalho1.c listas.o
gcc -O3 -o bcnf trabalho1.c listas.o -I.
......@@ -6,21 +6,17 @@
void decompoe(relacao *, apDF, uint);
int contem(relacao*, atributo);
relacao *cria_superR(lDF);
void imprime_relacao(relacao, uint);
void le_nome(atributo, char*);
void decompoe(relacao *r0, apDF dependencia, uint id){
apAtt att, aux, aux2;
relacao *r1=(relacao*)malloc(sizeof(relacao));
//se não existem mais dependencias e id != 0:
if((dependencia->prox == NULL) && (id != 0))
//imprime a relacao
imprime_relacao(*r0, id);
//se não
else if(dependencia->prox != NULL){
if((dependencia->prox == NULL) && (id != 0)){
if(r0->inicio->prox->prox != r0->fim)
imprime_relacao(*r0, id);
}else if(dependencia->prox != NULL){
//decompoe
//cria nova relacao
cria_lAtt_vazia(r1);
//insere os elementos de X e de Y
for(att=dependencia->X->inicio->prox;att!=NULL;att=att->prox){
......@@ -39,10 +35,8 @@ void decompoe(relacao *r0, apDF dependencia, uint id){
}
//imprime a nova relacao na BCNF
imprime_relacao(*r1, id+1);
//se existem atributos que não estao na dependencia
//if()//implementar isto!
//chama a função para a proxima dependencia.
decompoe(r0, dependencia->prox, id+2);
//chama a função para a proxima dependencia.
decompoe(r0, dependencia->prox, id+2);
}
}
/*
......@@ -119,23 +113,17 @@ int main(){
}while(terminador == ',');
//le seta
getchar();
//faça
do{
//cria no de atributo
atributo = cria_no_Att();
//le atributo
le_nome(atributo->nome, &terminador);
if(!contem(R0, atributo->nome))
insere_na_Relacao(atributo->nome, R0);
//insere na lista Y
insere_no_lAtt(no_DF->Y, atributo);
//enquanto encontrar virgula
}while(terminador == ',');
//insere o nodo na lista
insere_no_lDF(lista_DF, no_DF);
}while(terminador != EOF);
//Processamento & impressões
//R0 = cria_superR(lista_DF);
imprime_relacao(*R0, 0);
decompoe(R0, lista_DF->inicio->prox, 0);
return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment