Una soluzione possibile è la seguente e si basa sul fatto che un numero d di n cifre in base 10 è esprimibile come somma da 1 a n dei prodotti delle varie (i-esime) cifre del numero considerate da destra xi ciascuna moltiplicata per la base b nella quale si vuole calcolare il numero in questo caso 2 elevata alla posizione i del numero componente la cifra che si sta considerando, ossia:
(d)10=somma i=0 a n-1 (xi*b^i)
quindi
codice:
program conversione(input,output);
var b,n,s,c,i : integer;
begin
(*lettura di b ed n*)
write(' valore della base b? ');readln(b);
writeln;
write(' numero di cifre del numero? ');readln(n);
(*controllo di correttezza del valore di b*)
if(b<2)or(b>9)
then writeln(' valore scorretto per b')
else begin
(*lettura della prima cifra (la più significativa)*)
readln(c);
i:=1;s:=c;
(*ciclo per la conversione*)
while(i<n)and(c>=0)and(c<b)
do begin
(*lettura i-esima cifra (da sinistra)*)
readln(c);
s:=s*b+c;
i:=i+1;
end;
writeln;
if(c<0)or(c>b-1)
then(*l'uscita dal ciclo è dovuta ad errore*)
writeln(' cifra scorretta: ',c)
else writeln(' numero in decimale: ',s);
end;
readln;
end.
Ciao!!! :ciauz: