| 
			| 
					
						| Arcadie 
								Гость
 | 
								|  | «  : 25-05-2008 08:10 »  |  | 
 
 struct gene{
 int alleles[4];
 int fitness;
 int i;
 float likelihood;
 
 // тестирует на равноправие
 operator==(gene gn)
 //{
 for (i=0 ;   i<4 ;   i++)
 {
 if (gn.alleles[i] != alleles[i]) return false else  return true;
 
 }
 
 return true;
 
 };
 
выдает ошибки около 9 штук именно на цикле for |  
						| 
								|  |  
								| « Последнее редактирование: 25-05-2008 08:15 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #1 : 25-05-2008 08:18 »  |  | 
 
 Arcadie,  потому что красиваое форматирование рулит   struct gene{
 int alleles[4];
 int fitness;
 int i;
 float likelihood;
 
 // тестирует на равноправие
 bool operator==(const gene& gn) const
 {
 for (i=0 ;   i<4 ;   i++)
 {
 if(gn.alleles[i] != alleles[i])return false;
 return true;
 }
 
 return true;
 }
 };
 
и сразу видно, где нарушения синтаксиса остаётся невнятной логика - зачем цикл, если он всегода только один раз выполнится ? |  
						| 
								|  |  
								| « Последнее редактирование: 25-05-2008 08:20 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #2 : 25-05-2008 08:21 »  |  | 
 
 кстати, я ещё подправил свой пост, если ты уже читал его |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| marat_ 
								Шеф-повар 
								Опытный
								
								    Offline | 
								|  | « Ответ #3 : 25-05-2008 08:23 »  |  | 
 
 Алексей1153++, не опытный не заметит    |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #4 : 25-05-2008 08:24 »  |  | 
 
 я бы поступил так: #pragma pack(push,1)
 struct gene
 {
 int alleles[4];
 int fitness;
 int i;
 float likelihood;
 
 // тестирует на равноправие
 bool operator==(const gene& gn) const
 {
 return (0==memcmp(gn.alleles,alleles,sizeof(gn.alleles)));
 }
 };
 #pragma pack(pop)
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #5 : 25-05-2008 08:25 »  |  | 
 
 Алексей1153++, не опытный не заметит    а что замечать то    Когда форматирование понятное глазу - видно всё хорошо   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Arcadie 
								Гость
 | 
								|  | « Ответ #6 : 25-05-2008 10:16 »  |  | 
 
 class CDiophantine {public:
 CDiophantine(int, int, int, int, int);
 // конструктор с каэфициентом для a,b,c,d.
 int Solve();
 
 // Возврат gene.
 gene GetGene(int i) { return population[i];}
 
 protected:
 int ca,cb,cc,cd;
 int result;
 gene population[MAXPOP];
 int Fitness(gene &);
 void GenerateLikelihoods();
 // генерирование likelihoods.
 float MultInv();
 
 int CreateFitnesses();
 void CreateNewPopulation();
 int GetIndex(float val);
 
 gene Breed(int p1, int p2);
 
 };
 
 CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {//}
 
 int CDiophantine::Solve()
 {
 int fitness = -1;
 srand((unsigned)time(NULL));
 for(int i=0;i<MAXPOP;i++) {
 for (int j=0;j<4;j++) {
 population[i].alleles[j] = rand() % (result + 1);
 }
 }
 if (fitness = CreateFitnesses()) {
 return fitness;
 }
 int iterations = 0;
 /
 while (fitness != 0 || iterations < 50)
 {
 GenerateLikelihoods();
 CreateNewPopulation();
 if (fitness = CreateFitnesses()) {
 return fitness;
 }
 
 iterations++;
 }
 
 return -1;
 }
 
 int CDiophantine::Fitness(gene &gn) {
 int total = ca * gn.alleles[0] + cb * gn.alleles[1] + cc * gn.alleles[2] + cd * gn.alleles[3];
 
 return gn.fitness = abs(total - result);
 }
 
 int CDiophantine::CreateFitnesses() {
 float avgfit = 0;
 int fitness = 0;
 for(int i=0;i<MAXPOP;i++) {
 fitness = Fitness(population[i]);
 avgfit += fitness;
 if (fitness == 0) {
 return i;
 }
 }
 
 return 0;
 }
 
 float CDiophantine::MultInv() {
 float sum = 0;
 
 for(int i=0;i<MAXPOP;i++) {
 sum += 1/((float)population[i].fitness);
 }
 
 return sum;
 }
 
 void CDiophantine::GenerateLikelihoods() {
 float multinv = MultInv();
 
 float last = 0;
 for(int i=0;i<MAXPOP;i++) {
 population[i].likelihood = last = last + ((1/((float)population[i].fitness) / multinv) * 100);
 }
 }
 
 int CDiophantine::GetIndex(float val) {
 float last = 0;
 for(int i=0;i<MAXPOP;i++) {
 if (last <= val && val <= population[i].likelihood) return i;
 else last = population[i].likelihood;
 }
 
 return 4;
 }
 
 gene CDiophantine::Breed(int p1, int p2) {
 int crossover = rand() % 3+1;
 int first = rand() % 100;
 gene child = population[p1];
 int initial = 0, final = 3;
 if (first < 50) initial = crossover;
 else final = crossover+1;
 for(int i=initial;i<final;i++) {
 child.alleles[i] = population[p2].alleles[i];
 if (rand() % 101 < 5) child.alleles[i] = rand() % (result + 1);
 }
 return child;
 
 }
 
 void CDiophantine::CreateNewPopulation() {
 gene temppop[MAXPOP];
 
 for(int i=0;i<MAXPOP;i++) {
 int parent1 = 0, parent2 = 0, iterations = 0;
 while(parent1 == parent2 || population[parent1] == population[parent2])
 {
 parent1 = GetIndex((float)(rand() % 101));
 parent2 = GetIndex((float)(rand() % 101));
 if (++iterations > 25) break;
 }
 
 temppop[i] = Breed(parent1, parent2);
 }
 
 for(i=0;i<MAXPOP;i++) population[i] = temppop[i];
 }
 
 }
 
 
изза чего видается ошибка identifier Solve cannot have a type qualifier(int CDiophantine::Solve()) deklaration mising (конец) |  
						| 
								|  |  
								| « Последнее редактирование: 25-05-2008 10:20 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #7 : 25-05-2008 10:21 »  |  | 
 
 опечатка в коде: 	int iterations = 0;/                <--------- ТУТ
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #8 : 25-05-2008 10:23 »  |  | 
 
 и тут
 CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {//}
 
 надо
 
 CDiophantine::CDiophantine(int a, int b, int c, int d, int res) : ca(a), cb(b), cc(c), cd(d), result(res) {}
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Arcadie 
								Гость
 | 
								|  | « Ответ #9 : 25-05-2008 10:48 »  |  | 
 
 сечас выдает ошибкуна последней } unexpected }
 и два Warning один на if (fitness = CreateFitnesses()) possible inncorect assigment
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #10 :  25-05-2008 11:05 »   |  | 
 
 Arcadie, синтаксис учи обязательно! Ну чё в самом то деле , ругается на лишнюю скобку - удали лишнюю скобку if (fitness = CreateFitnesses()) 
 компилятор говорит тебе - возможно, неверный аргумент. Скорее всего ты поставил "=" вместо "==" , а "=" у тебя ничего не возвращает (скорее всего) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Arcadie 
								Гость
 | 
								|  | « Ответ #11 : 25-05-2008 11:46 »  |  | 
 
 спасибо тебе огромное  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #12 : 25-05-2008 11:48 »  |  | 
 
 да не за что же   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #13 : 26-05-2008 06:30 »  |  | 
 
 Arcadie, при копировании примеров, ты хоть проглядывай глазами что там написано вообще   |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	|  |