Member 13701739 Ответов: 1

В чем заключается ошибка этой программы и исправление ее


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<complex.h>
#define chrom_len 14
#define chromosome_number 20
typedefstructChrom             // creating the chrom structure
{
short int bit[chrom_len];
float fit;
float modulus;
int condition;
}chrom;
structchrom_ele
{
short int bit1[chrom_len/2];
int val1;
}chrom1;			   
void* init_pop(chrompopcurrent[chromosome_number]);
void *pickchroms(chrompopcurrent[chromosome_number]);
void *crossover(chrompopcurrent[chromosome_number]);
void *mutation(chrompopnext[chromosome_number]);
int x(chrom_elepopcurrent);
float y(int x1,int x2);
float modulus_calc(int x1,int x2);
void final_output(chrompopcurrent[chromosome_number]);
void final_top(chrompopcurrent[chromosome_number]);
float mod,min_vol;
void main()                                    // the main function
{
inti,j,pop_number,value,itr,z;
chrompopcurrent[chromosome_number];                   // we make 4 chromes of popcurrent
chrompopnext[chromosome_number];
float vol,SA,CF,SF;
clrscr();
printf("\n------------------****----Genetic Alogorithm----****----------------------------");                         // introduction to the program
printf("\n\t--------Fitness finction is f(x1,x2)=0.785*x1*x1*x2----------- ");
printf("\nEnter volume:");
scanf("%f",&vol);
printf("\nEnter Surface area:");
scanf("%f",&SA);
printf("\nEnter Safety Factor(SF Generaly 1.2)");
scanf("%f",&SF);
mod=SF*(vol/SA);
printf("\nMod is :%f",mod);
printf("\nEnter value of Contraction factor(CF in %) :");
scanf("%f",&CF);
min_vol=(vol*CF)/100;
printf("\nMinimum volume is %f",min_vol);
printf("\nPlease Enter the number of iteration :");
scanf("%d",&itr);
printf("\nStep 1: Initial Population:");
init_pop(popcurrent);
for(z=0;z<itr;z++)   //repeat the procedure itr times
   {
clrscr();
printf("\n\n--------------------Iteration Number is-->%d-----------------------------",(z+1));
for(i=0;i<chromosome_number;i++)
     {
popnext[i]=popcurrent[i];
     }
pickchroms(popnext);  // for picking best chrom
crossover(popnext);   // for making crossover
mutation(popnext);   // mutate the chromosome
for(i=0;i<chromosome_number;i++)
     {
popcurrent[i]=popnext[i];
     }
flushall();                                         // flush the input buffer
   }
printf("\nPress any key to end ! ");
final_output(popcurrent);
getche();                                        // wait for a character from the keyboard to end
}                                                      //end of main
int x(chrom_elepopcurrent)        //x function that evaluate the value of a given chrom
{
int z=0,k;
int temp=0;
for(k=0;k<(chrom_len/2);k++)
   {
if(k==0)
    {
temp=1;
    }
else
    {
temp=pow(2,k);
    }
    z+=(popcurrent.bit1[k]*temp);
   }
z=(popcurrent.bit[0]*1)+(popcurrent.bit[1]*2)+(popcurrent.bit[2]*4)+(popcurrent.bit[3]*8)+(popcurrent.bit[4]*16);
return(z);                     //return the value of z
 }                                   // end x function
float y(int x1,int x2)          // the y function that we look for it's maximum value takes x value
{
float y;
   y=(0.785*x1*x1*x2);            
return(y);
}                              // end of y function
float modulus_calc(int x1,int x2)
{
float mod;
mod=(x1*x2)/(2*x1+4*x2);
return (mod);
}
void *init_pop(chrompopcurrent[chromosome_number])
{
inti,j,random;
chrom_ele pop1[chromosome_number];
chrom_ele pop2[chromosome_number];
for(j=0;j<chromosome_number;j++)                       // loop of j to choose chromes from [0] to [3]
    {
	for(i=0;i<chrom_len;i++)          // loop of i to choose the gen of the chrom from  [0] to [5]
	{
	random=rand();               // creating random value
	random=(random%2);        // make the random value o or 1 only
	popcurrent[j].bit[i]=random;  // initialising the bit[i] of chrom[j] with random
	}   // end of for(i)
       }    // end of for(j)
for(i=0;i<chromosome_number;i++)
      {
for(j=chrom_len/2;j>=0;j--)
       {
	pop1[i].bit1[j]=popcurrent[i].bit[j];
       }
      }
int


Что я уже пробовал:

Я пытаюсь запустить программу, но она не может работать из-за ошибки

Patrice T

Какое сообщение об ошибке, где?

W∴ Balboos, GHB

Если это не ошибка компилятора, откройте для себя красоту отладчика!

Richard MacCutchan

Исправить ошибку.

jeron1

Кроме того, похоже, что вы вставили не весь код.

1 Ответов

Рейтинг:
2

Rick York

В этой программе много ошибок. Он не будет компилироваться так, как есть. Кроме того, ваш код потерял свое форматирование и кажется обрезанным. При вставке его выберите опцию код C++. Это очень трудно читать, когда он не имеет форматирования.

Первая проблема, которую я вижу, заключается в следующем :

chrompopcurrent[chromosome_number];

Проблема в том, что переменная не имеет типа. Похоже, что это массив, но какого типа? Это приводит к куче других проблем. Прототипы функций, по-видимому, принимают эту переменную в качестве аргумента, но это не то, как писать прототип.

Кажется, что там есть недостающее пространство, и это делает ОГРОМНЫЙ разница. Это может быть результатом отсутствия форматирования, но я не знаю.

Исходя из этого предположения, он должен быть объявлен как :
chrom popcurrent[chromosome_number];

и прототипы должны быть объявлены как :
void* init_pop( chrom popcurrent[] );

Обратите внимание, что размер массива не требуется ни в прототипе, ни в определении функции. Действительно ли эта функция возвращает указатель на неизвестный тип? Я не знаю, потому что не вижу этого кода. Всегда лучше возвращать указатель на известный тип, если вы просто не можете этого сделать.