Witam
Piszę ponieważ mam problem natury technicznej związany z prezentacją liczb w systemie binarnym. Ale zacznę od początku. Na zajęciach ze sztucznej inteligencji otrzymałem do zrobienia program z zastosowaniem algorytmu genetycznego. Dla funkcji y=3x+2 w przedziale xe{0;31}. Z przedziału 0 do 31 otrzymuję w systemie binarnym liczbę 5-bitową. i tutaj przechodzę do sedna mojego problemu. W późniejszej fazie program będzie łączył ze sobą losowo chromosomy osobników i tworzył nową populację. W moim przypadku wszystko jest fajnie jeśli liczbę da się przekształcić na dwójkową i 5-bitową. Ale w przypadku np. liczby 5 w binarnym otrzymam 101, a potrzebowałbym zapisu 00101.
Potrzebuję aby ktoś przejrzał mój program, a właściwie pętlę wypisującą liczbę w systemie binarnym i rozjaśnił mi gdzie popełniłem błąd i jak temu zaradzić.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
srand( time( NULL ) );
int y,x,i,n;
n=6;
int tab[6]={4,12,10,8,6,5};
int tabx[6]; // tablica tab[6] do wzoru y=3x+2
float tabp[n];
string bin="";
string tabB[6];
int naj=0;
//losowanie osobników + najwyzszy rand
for(i=0;i<6;i++){
/*int wynik=(rand()%31);
tab[i]=wynik;*/
cout<<tab[i]<<" ";
if(tab[i]>naj){
naj=tab[i];
}
else
naj;
}
cout<<endl<<"najwyzszy x: "<<naj<<endl ;
//funkcja przystosowania
int f=3*naj+2;
cout<<"f_przystosowania: "<<f<<endl;
//kolo ruletki
int suma=0;
int temp=0;
//suma do kola
for(i=0;i<6;i++){
temp=3*tab[i]+2;
suma+=temp;
}
cout<<"suma y: "<<suma<<endl;
cout<<"Po podstawieniu do wzoru:"<<endl;
for(i=0;i<6;i++){
tabx[i]=3*tab[i]+2;
cout<<tabx[i]<<" ";
}
cout<<endl<<"Wartosci procentowe:"<<endl;
//int na float
for(i=0;i<6;i++){
tabp[i]=tabx[i];
/*cout<<tabp[i]<<" ";*/
}
//wartosci procentowe
for(i=0;i<6;i++){
tabp[i]=(tabp[i]/suma)*100;
cout<<tabp[i]<<" ";
}
cout<<endl<<"Wartosci binarne:"<<endl;
//system binarny na stringachi cos tu jest nie tak
for(i=0;i<6;i++){
while (tab[i]!=0){
if (tab[i] % 2 == 0)
{bin="0"+bin;}
else
{bin="1"+bin;};
tab[i] = tab[i] /2;
} tabB[i]=bin;
cout<<tabB[i]+" ";
bin="";
}
//problem z liczbami 4 i mniej bitowymi -> dodac odpowiednią liczbę 0 na poczatek stringu
/*string d;
for(i=0;i<6;i++){
tabB[i].length()=d;
if(d==4){
tabB[i]="0"+tabB[i];
}
cout << tabB[i]+" ";
d="";
}
*/
return 0;
}