Napravio sam program koji bi trebao prebaciti broj iz odabrane baze u dekadski sustav...
ali sve je radilo dok nisam zamjenija u switchu umjesto switchanja svih brojeva od 0-9 da koristi default u kojem koristi funkciju atoi(&x[i]); ...
a da ostale brojeve A,B,C,D,E,F switcha i zamjenjuje sa 10,11,12,13,14,15 .......
Tako da program radi ako se upise npr. 0.ADF u bazi 16 ...pretvori ga normalno u 0.679443
EDIT: NAŠAO SAM SAM GREŠKU. GREŠKA JE DA atoi() NEMOZE KORISTIT CHAR SA ARRAYOM PA TAKO UMJESTO TOGA atoi(&x[i]) STAVIO SAM y=x[i] TE atoi(&y) ...PROBLEM RIJEŠEN :))))
Evo koda dolje:
||
||
\/
#include <iostream>
#include <conio.h>
#include <string.h>
#include <math.h>
using namespace std;
float pretvorba(int b, char x[50]){
int i=0, b2=b, t;
float a=0;
for (i=0; i<strlen(x); i++){
if (x[i]=='.'){
i++;
break;
}
}
while (i<strlen(x)){
switch (x[i]){
case 'A':
a+=10/float(b);
break;
case 'B':
a+=11/float(b);
break;
case 'C':
a+=12/float(b);
break;
case 'D':
a+=13/float(b);
break;
case 'E':
a+=14/float(b);
break;
case 'F':
a+=15/float(b);
break;
default:
t=atoi(&x[i]);
a+=t/float(b);
cout<<a;
}
i++;
b*=b2;
}
i=0;
for (i=0; i<strlen(x); i++){
if (x[i]=='.'){
break;
}
}
b=1;
do {
i--;
switch (x[i]){
case 'A':
a+=10*b;
break;
case 'B':
a+=11*b;
break;
case 'C':
a+=12*b;
break;
case 'D':
a+=13*b;
break;
case 'E':
a+=14*b;
break;
case 'F':
a+=15*b;
break;
default:
t=atoi(&x[i]);
a+=t*b;
cout<<a;
}
b*=b2;
} while (i>0);
return a;
}
int main(){
char x[50];
int b;
cout<<"___ Program koji pretvara broj iz sustava u dekadski ___\n";
cout<<"Unesite broj: ";
cin>>x;
cout<<"Unesite bazu prethodno unesenog broja: ";
cin>>b;
char dekadski_broj[50];
sprintf(dekadski_broj, "%f", pretvorba(b, x));
cout<<"Uneseni broj u bazi 10 iznosi: "<<dekadski_broj;
getch();
return 0;
}