Fuzzy libray for embedded targets developed by zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en edit by Bruno Alfano - corrected deallocation of FuzzyOutput

Fuzzy library by Zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en

edit by Bruno Alfano - corrected deallocation bug for FuzzyOutput

Committer:
astaff15
Date:
Wed Jun 24 15:08:13 2015 +0000
Revision:
2:460b409e26e8
Parent:
1:d545f709646b
Corrected FuzzyOutput destructor bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
astaff15 0:66cd67db4f1b 1 /*
astaff15 0:66cd67db4f1b 2 * Robotic Research Group (RRG)
astaff15 0:66cd67db4f1b 3 * State University of Piaui (UESPI), Brazil - Piauí - Teresina
astaff15 0:66cd67db4f1b 4 *
astaff15 0:66cd67db4f1b 5 * FuzzyOutput.cpp
astaff15 0:66cd67db4f1b 6 *
astaff15 0:66cd67db4f1b 7 * Author: Msc. Marvin Lemos <marvinlemos@gmail.com>
astaff15 0:66cd67db4f1b 8 * AJ Alves <aj.alves@zerokol.com>
astaff15 0:66cd67db4f1b 9 * Co authors: Douglas S. Kridi <douglaskridi@gmail.com>
astaff15 0:66cd67db4f1b 10 * Kannya Leal <kannyal@hotmail.com>
astaff15 0:66cd67db4f1b 11 */
astaff15 0:66cd67db4f1b 12 #include "FuzzyOutput.h"
astaff15 0:66cd67db4f1b 13
astaff15 0:66cd67db4f1b 14 // CONSTRUTORES
astaff15 0:66cd67db4f1b 15 FuzzyOutput::FuzzyOutput() : FuzzyIO(){
astaff15 0:66cd67db4f1b 16 }
astaff15 0:66cd67db4f1b 17
astaff15 0:66cd67db4f1b 18 FuzzyOutput::FuzzyOutput(int index) : FuzzyIO(index){
astaff15 0:66cd67db4f1b 19 }
astaff15 0:66cd67db4f1b 20
astaff15 0:66cd67db4f1b 21 // DESTRUTOR
astaff15 0:66cd67db4f1b 22 FuzzyOutput::~FuzzyOutput(){
astaff15 1:d545f709646b 23 this->fuzzyComposition.empty();
astaff15 0:66cd67db4f1b 24 }
astaff15 0:66cd67db4f1b 25
astaff15 0:66cd67db4f1b 26 // MÉTODOS PÚBLICOS
astaff15 0:66cd67db4f1b 27 bool FuzzyOutput::truncate(){
astaff15 0:66cd67db4f1b 28 // esvaziando a composição
astaff15 0:66cd67db4f1b 29 this->fuzzyComposition.empty();
astaff15 0:66cd67db4f1b 30
astaff15 0:66cd67db4f1b 31 fuzzySetArray *aux;
astaff15 0:66cd67db4f1b 32 aux = this->fuzzySets;
astaff15 0:66cd67db4f1b 33 while(aux != NULL){
astaff15 0:66cd67db4f1b 34 if(aux->fuzzySet->getPertinence() > 0.0){
astaff15 0:66cd67db4f1b 35 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointA(), 0.0) == false){
astaff15 0:66cd67db4f1b 36 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointA(), 0.0);
astaff15 0:66cd67db4f1b 37 }
astaff15 0:66cd67db4f1b 38
astaff15 0:66cd67db4f1b 39 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointB(), aux->fuzzySet->getPertinence()) == false){
astaff15 0:66cd67db4f1b 40 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointB(), aux->fuzzySet->getPertinence());
astaff15 0:66cd67db4f1b 41 }
astaff15 0:66cd67db4f1b 42
astaff15 0:66cd67db4f1b 43 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointC(), aux->fuzzySet->getPertinence()) == false){
astaff15 0:66cd67db4f1b 44 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointC(), aux->fuzzySet->getPertinence());
astaff15 0:66cd67db4f1b 45 }
astaff15 0:66cd67db4f1b 46
astaff15 0:66cd67db4f1b 47 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointD(), 0.0) == false){
astaff15 0:66cd67db4f1b 48 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointD(), 0.0);
astaff15 0:66cd67db4f1b 49 }
astaff15 0:66cd67db4f1b 50 }
astaff15 0:66cd67db4f1b 51 aux = aux->next;
astaff15 0:66cd67db4f1b 52 }
astaff15 0:66cd67db4f1b 53
astaff15 0:66cd67db4f1b 54 this->fuzzyComposition.build();
astaff15 0:66cd67db4f1b 55
astaff15 0:66cd67db4f1b 56 return true;
astaff15 0:66cd67db4f1b 57 }
astaff15 0:66cd67db4f1b 58
astaff15 0:66cd67db4f1b 59 float FuzzyOutput::getCrispOutput(){
astaff15 0:66cd67db4f1b 60 return this->fuzzyComposition.avaliate();
astaff15 0:66cd67db4f1b 61 }
astaff15 0:66cd67db4f1b 62
astaff15 0:66cd67db4f1b 63 // Um simples Bubble Sort
astaff15 0:66cd67db4f1b 64 bool FuzzyOutput::order(){
astaff15 0:66cd67db4f1b 65 fuzzySetArray *aux1;
astaff15 0:66cd67db4f1b 66 fuzzySetArray *aux2;
astaff15 0:66cd67db4f1b 67
astaff15 0:66cd67db4f1b 68 aux1 = this->fuzzySets;
astaff15 0:66cd67db4f1b 69 aux2 = this->fuzzySets;
astaff15 0:66cd67db4f1b 70
astaff15 0:66cd67db4f1b 71 while(aux1 != NULL){
astaff15 0:66cd67db4f1b 72 while(aux2 != NULL){
astaff15 0:66cd67db4f1b 73 if(aux2->next != NULL){
astaff15 0:66cd67db4f1b 74 if(aux2->fuzzySet->getPointA() > aux2->next->fuzzySet->getPointA()){
astaff15 0:66cd67db4f1b 75 this->swap(aux2, aux2->next);
astaff15 0:66cd67db4f1b 76 }
astaff15 0:66cd67db4f1b 77 }
astaff15 0:66cd67db4f1b 78 aux2 = aux2->next;
astaff15 0:66cd67db4f1b 79 }
astaff15 0:66cd67db4f1b 80 aux2 = this->fuzzySets;
astaff15 0:66cd67db4f1b 81 aux1 = aux1->next;
astaff15 0:66cd67db4f1b 82 }
astaff15 0:66cd67db4f1b 83 return true;
astaff15 0:66cd67db4f1b 84 }
astaff15 0:66cd67db4f1b 85
astaff15 0:66cd67db4f1b 86 // MÉTODOS PRIVADOS
astaff15 0:66cd67db4f1b 87 bool FuzzyOutput::swap(fuzzySetArray* fuzzySetA, fuzzySetArray* fuzzySetB){
astaff15 0:66cd67db4f1b 88 FuzzySet* aux;
astaff15 0:66cd67db4f1b 89
astaff15 0:66cd67db4f1b 90 aux = fuzzySetA->fuzzySet;
astaff15 0:66cd67db4f1b 91 fuzzySetA->fuzzySet = fuzzySetB->fuzzySet;
astaff15 0:66cd67db4f1b 92 fuzzySetB->fuzzySet = aux;
astaff15 0:66cd67db4f1b 93
astaff15 0:66cd67db4f1b 94 return true;
astaff15 0:66cd67db4f1b 95 }