0.О Неможи за индекс на низа да ти биде негативен број.
Среди го методот decimalenVoBinaren, а и погоре во маин имаш негативни индекси.
----
Ми текна што му била финтата со негативните индекси.
Еден број со децимали ќе го обележиме abc,kmn каде a, b, c, k, m, n се декадни цифри.
abc,kmn = a*10^2 + b*10^1 + c*10^0 + k*10^-1 + m*10^-2 + n*10^-3
Е сега истото, само со множител 2 на степен. И со позитивни и негативни.
Е сега ја преправив програмата со две низи, кај децималниот дел индексите се позитивни а означуваат негативен степен. (минус индекс)
Код:
#include <iostream>
#include <cmath>
using namespace std;
void celVoBinaren(int ,int [], int & );
void decimalenVoBinaren(float , int [] , int & );
int main(){
float broj,decimalendel;
int celdel, celDelBin[100], decDelBin[100], celDelBinLenght, decDelBinLenght, k;
cout << "Vnesete proizvolen realen dekaden broj od tastatura: ";
cin >> broj;
celdel = (int)floor(broj);
decimalendel=broj-(float)celdel;
celVoBinaren(celdel, celDelBin, celDelBinLenght);
decimalenVoBinaren(decimalendel,decDelBin, decDelBinLenght);
cout<<"Vo binarna forma brojot e: ";
for (k=celDelBinLenght-1; k>=0; k--)
cout <<celDelBin[k];
cout << '.';
for(k=1; k < decDelBinLenght; k++)
cout << decDelBin[k];
cout << endl;
return 0;
}
void celVoBinaren(int cel, int a[], int & len){
len=0;
do {
a[len]=cel%2;
cel=cel/2;
len++;
}
while (cel>0);
}
void decimalenVoBinaren(float decimalen, int a[], int & len){
len=1;
if (decimalen > 1.0F)
return;
do{
decimalen = 2 * decimalen;
a[len]=(int)floor(decimalen);
decimalen =decimalen-(float)a[len];
len++;
}
while(decimalen>0.000001F); //preciznost do 6 decimalni cifri
}