-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenetico.cpp
More file actions
142 lines (130 loc) · 3.25 KB
/
Copy pathgenetico.cpp
File metadata and controls
142 lines (130 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "binario.h"
#include "genetico.h"
#include <iostream>
#include "windows.h"
using namespace std;
unsigned short int CruzamentoPontoUnico(unsigned short int sol1, unsigned short int sol2) {
return OrBin(BitsAltos(sol1), BitsBaixos(sol2)); // Usamos as funções dos bits baixos e altos e fazemos uma OR com o resultado
}
unsigned short int CruzamentoAritmerico(unsigned short int sol3, unsigned short int sol4) {
return AndBin(sol3,sol4); // fazemos uma And entre a solução 3 e 4 e retornamos o resultado
}
unsigned short int MutacaoSimples(unsigned short int sol5) {
if (TestaBit(sol5, 9) == 0) { // Modifica o bit da posicao 9 usando uma XOR
unsigned short int mascara = 1 << 9;
return sol5 ^ mascara;
}
}
unsigned short int MutacaoDupla(unsigned short int sol6) {
if ((TestaBit(sol6, 12) == 0)) { // Modifica Dois Bits das posiçoes 12 e 3 Da Solução 6
sol6 = LigarBit(sol6, 12);
}
else {
sol6 = DesligaBit(sol6, 12);
}
if ((TestaBit(sol6, 3) == 0)) {
sol6 = LigarBit(sol6, 3);
}
else {
sol6 = DesligaBit(sol6, 3);
}
return sol6;
}
bool avaliacao(unsigned short valor) {
unsigned short preco = 0, peso = 0;
bool confirmacao = false;
// A AVALIACAO ACONTECERÁ COM O TESTE BIT A BIT DO VALOR
if ((TestaBit(valor, 0) == 1)) { // p
peso = peso + 1;
preco = preco + 12;
}
if (TestaBit(valor, 1) == 1) { // o
peso = peso + 4;
preco = preco + 4;
}
if (TestaBit(valor, 2) == 1) { // n
peso = peso + 2;
preco = preco + 3;
}
if (TestaBit(valor, 3) == 1) { // m
peso = peso + 5;
preco = preco + 10;
}
if (TestaBit(valor, 4) == 1) { // l
peso = peso + 4;
preco = preco + 15;
}
if (TestaBit(valor, 5) == 1) { // k
peso = peso + 2;
preco = preco + 20;
}
if (TestaBit(valor, 6) == 1) { // j
peso = peso + 1;
preco = preco + 10;
}
if (TestaBit(valor, 7) == 1) { // i
peso = peso + 4;
preco = preco + 2;
}
if (TestaBit(valor, 8) == 1) { // h
peso = peso + 3;
preco = preco + 1;
}
if (TestaBit(valor, 9) == 1) { // g
peso = peso + 2;
preco = preco + 1;
}
if (TestaBit(valor, 10) == 1) { // f
peso = peso + 1;
preco = preco + 3;
}
if (TestaBit(valor, 11) == 1) { // e
peso = peso + 9;
preco = preco + 15;
}
if (TestaBit(valor, 12) == 1) { // d
peso = peso + 4;
preco = preco + 10;
}
if (TestaBit(valor, 13) == 1) { // c
peso = peso + 5;
preco = preco + 8;
}
if (TestaBit(valor, 14) == 1) { // b
peso = peso + 3;
preco = preco + 4;
}
if (TestaBit(valor, 15) == 1) { // a
peso = peso + 12;
preco = preco + 4;
}
// RESULTADO DO SOMATORIO DOS PESOS E PRECO
cout.width(5);
cout << right << valor;
cout << " - ";
cout << left << "$" << preco;
cout << " - ";
cout << left << peso << right;
cout.width(1);
cout << "Kg – ";
// VERIFICACAO DO PESO E RETORNO
if (peso <= 20) {
confirmacao = true;
}
return confirmacao;
}
// DEFINIÇÃO DA FUNÇÕES QUE FAZEM A MODIFICAÇÃO DAS CORES
void verde() {
HANDLE x = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(x, FOREGROUND_GREEN);
cout.width(1);
cout << left <<"OK" << endl;
SetConsoleTextAttribute(x, 7);
}
void vermelho() {
HANDLE x = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(x, FOREGROUND_RED);
cout.width(1);
cout << left << "X" << endl;
SetConsoleTextAttribute(x, 7);
}