
Binario a octal
Publicado por javijusty (2 intervenciones) el 31/10/2014 01:39:30
Hola gente
Estoy intentando hacer una función de conversión de números binarios a octales
La verdad no se en que le estoy errando y quisas alguno de ustedes le vea el error
La idea es contar los caracteres y agregarle uno o dos ceros para que quede numero de caracteres multiplo de 3
Luego dividirlos y buscar cada cadena en un vector y que me vaya devolviendo su posición como valor octal
Si prueban el programa... ven que con numeros de una cifra (de 000 a 111) y de dos cifras (de 001000 a 111111) el programa funciona impecable
Pero al agregar la tercera cifra o mas... ya deja de funcionar....
No entiendo el por qué hace eso
Si alguien lo puede mirar quizas encuentre el error
Muchas gracias
Estoy intentando hacer una función de conversión de números binarios a octales
La verdad no se en que le estoy errando y quisas alguno de ustedes le vea el error
La idea es contar los caracteres y agregarle uno o dos ceros para que quede numero de caracteres multiplo de 3
Luego dividirlos y buscar cada cadena en un vector y que me vaya devolviendo su posición como valor octal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
program binOctal;
uses crt;
function binOcta:integer; //arranca la funcion
var
cantOcta,i,e,m,y:integer;
cOcta:real;
nBin,nOcta,x,v,n:string;
vector: array[1..8] of string;
begin
vector[1]:='000';
vector[2]:='001';
vector[3]:='010';
vector[4]:='011';
vector[5]:='100';
vector[6]:='101';
vector[7]:='110';
vector[8]:='111';
write('Ingrese su numero binario: '); //ingresa numero
readln(nBin);
cOcta:= length(nBin) mod 3 ; //devuelve el resto de la division para saber si es multiplo de tres o si tenemos que agregar ceros al numero
if (cOcta=2) then // si devuelve 2 agrego 1 cero al comienzo del binario
nBin:='0'+nBin
else
if (cOcta=1) then // si devuelve 1 agrego 2 ceros al comienzo del binario
nBin:='00'+nBin;
cantOcta:= length(nBin) div 3; // el div me determina la cantidad de cifras octales
nOcta:='';
e:=1;
for i:=1 to cantOcta do
begin
for m:=1 to 8 do
begin
v:=copy(nBin,e,e+2);
if (v=vector[m]) then
begin
e:=e+3;
y:=m-1;
str(y,x);
nOcta:=nOcta+x;
end;
end;
end;
writeln(cantOcta);
writeln('Tu numero ',nBin,' binario se ha convertido a ',nOcta,' octal.');
end;
begin
clrscr;
binOcta;
readkey;
end.
Si prueban el programa... ven que con numeros de una cifra (de 000 a 111) y de dos cifras (de 001000 a 111111) el programa funciona impecable
Pero al agregar la tercera cifra o mas... ya deja de funcionar....
No entiendo el por qué hace eso
Si alguien lo puede mirar quizas encuentre el error
Muchas gracias
Valora esta pregunta


0