InicioApuntes Y MonografiasMi propio programa de sistemas de numeracion - Programacion
Mi propio programa de sistemas de numeracion - Programacion
Bueno gente, después de mucho tiempo sin postear les traigo algo hecho pura y exclusivamente por mi jaja. Se trata de un programita para pasar convertir sistemas de numeración.

Los sistemas de numeración a los que hace referencia el programa son el decimal, el binario, el octal y el hexadecimal. Aclaro que este programa fue realizado en Lazarus, que es bastante parecido al Turbo Pascal asi que el código que utilicé es el mismo.

informatica
Vamos con un poco de teoría

De Wikipedia
Un sistema de numeración es un conjunto de símbolos y reglas de generación que permiten construir todos los números válidos.

El sistema de numeración decimal, también llamado sistema decimal, es un sistema de numeración posicional en el que las cantidades se representan utilizando como base aritmética las potencias del número diez. El conjunto de símbolos utilizado (sistema de numeración arábiga) se compone de diez cifras : cero (0) - uno (1) - dos (2) - tres (3) - cuatro (4) - cinco (5) - seis (6) - siete (7) - ocho (8) y nueve (9).

El sistema numérico en base 8 se llama octal y utiliza los dígitos del 0 al 7.
En informática a veces se utiliza la numeración octal en vez de la hexadecimal. Tiene la ventaja de que no requiere utilizar otros símbolos diferentes de los dígitos. Sin embargo, para trabajar con bytes o conjuntos de ellos, asumiendo que un byte es una palabra de 8 bits, suele ser más cómodo el sistema hexadecimal, por cuanto todo byte así definido es completamente representable por dos dígitos hexadecimales.

El sistema binario, llamado también sistema diádico en ciencias de la computación, es un sistema de numeración en el que los números se representan utilizando solamente las cifras cero y uno (0 y 1). Es uno de los que se utiliza en las computadoras, debido a que trabajan internamente con dos niveles de voltaje, por lo cual su sistema de numeración natural es el sistema binario (encendido 1, apagado 0).

El sistema hexadecimal (a veces abreviado como Hex) es el sistema de numeración posicional que tiene como base el 16. Su uso actual está muy vinculado a la informática y ciencias de la computación, pues los computadores suelen utilizar el byte u octeto como unidad básica de memoria.

Acá abajo les dejo una tablita para que se ubiquen comparando los 15 primeros números entre dichos sistemas
pascal
Para poder realizar el programa, es necesario saber como pasar de un sistema a otro mediante métodos de conversión. Los que yo utilicé fueron los siguientes:

Suma Ponderada
División Reiterada
Método Directo

sistemas de numeracion
DIVISIÓN REITERADA


Este método de conversión sirve para pasar de Sistema decimal a cualquier otro sistema, es decir, de decimal a binario, de decimal a octal y de decimal a hexadecimal. Esto pasa porque se opera con aritmética de la base de partida (base 10). Veamos un ejemplo:
decimal
Como podems observar, en este caso la base de llegada es 2 ya que queremos pasar un numero en decimal a binario. La base de partida es 10, por lo tanto se divide entre 2 utilizando aritmética de base decimal.

En general, los pasos para convertir de un sistema a otro mediante el método de la divisón reiterada son:
1) Identificar B (base de partida)
2) Identificar B' (base de llegada)
3) Establecer la siguiente relación (B')10____________(B*)B

Esto quiere decir " B' en base 10 es igual a B* en base B", siendo B* un valor equivalente en base B a B' en base 10

4) Dividir enteramente el número a convertir por B* hasta que el número sea menor. Una vez que sea menor, dividir nuevamente por última vez.
5) Cada uno de los restos tiene un valor. Esos valores están en base B, por lo que los tenemos que pasar a base B' mediante la tabla de equivalencias que ya les puse arriba. Ej: si un resto es 13 y queremos pasar de decimal a hexadecimal, entonces ese 13 es reemplazado por "D".
6) Agrupar cada uno de los restos de las divisiones enteras realizadas anteriormente para así obtener el resultado.

En nuestro ejemplo:
Nota: el numero a convertir es (100)10 a base binaria
1) B=10.
2) B'=2.
3) (B')10______________(B*)B

(2)10_____________(2)10 "2 en base 10, es igual a 2 en base 10"
4)
hexadecimal
5) El cero en base 10 es igual a cero en base 2 y el 1 en base 10 es igual a 1 en base 2.
6) (100)10___________(1100100)2

octal
SUMA PONDERADA

Este método conviene ser utilizado para pasar un numero de cualquier base a base decimal ya que se opera con base de llegada B'. Los pasos son los siguientes:
1) Identificar B (base de partida)
2) Identificar B' (base de llegada)
3) Establecer la siguiente relación (B)10____________(B*)B'

Esto quiere decir " B en base 10 es igual a B* en base B' ", siendo B* un valor equivalente en base B a B en base 10

4) Se multiplica cada dígito, empezando desde el que está más a la izquierda por B elevado a un exponente h que comienza desde la cantidad de dígitos menos 1 hasta cero.
5) Operando con aritmética de base de llegada, obtenemos el resultado.

Ejemplo
Nota:El número a convertir es (3034,75)8 a base 10.

1) B=8
2) B'=10
3) (B)10____________(B*)B'
(8)10____________(8)10
4) y 5)


lenguajes de programacion
MÉTODO DIRECTO

Y por último pero no menos importante, el método directo. Este método puede ser utilizado solo para conversiones de base binaria a base octal o hexadecimal. Esto se debe a que la segunda y la tercera son bases con potencia exacta de la primera, es decir que 2^3=8 y 2^4=16. Los pasos son los siguientes:
1) Si se quiere convertir del binario al octal, se pueden tomar grupos de a 3 dígitos del numero a convertir. Por ejemplo, si queremos convertir el numero 111 a base 8, no es necesario tomar digito por digito individualmente, si no que se pueden tomar los 3. Si se quiere convertir de binario a hexadecimal, se pueden tomar de a 4 digitos.
2) Establecer las equivalencias entre los digitos de base 2 y su correspondiente valor en base 8 o en base 16.
3) Agrupar estos ultimos para obtener el resultado.

Ejemplo
Nota: Pasar el número 100101011 que está en base 2, a base 8

1) Agrupo de a 3 digitos: 100, 101, 011
2) (100)2=(4)8
(101)2=(5)8
(011)2=(3)8
3) Agrupando, (100101011)2=(453)8

Y para pasarlo a hexadecimal seria lo mismo pero tomando de a 4 digitos.

(1011)2=(B)16
(10010)2=(B)16

Agrupando, quedaría: (100101011)2=(12B)16


lazarus

Bueno ahora que ya sabemos la teoría podemos realizar el programa. Acuerdense que el lenguaje solamente opera con aritmética decimal, es decir que si quieren pasar de binario a hexadecimal, primero tienen que pasar de binario a decimal y después de decimal a hexadecimal.

Les dejo algunas capturas de pantalla para que vean de que se trata:




Mi propio programa de sistemas de numeracion - Programacioninformaticapascalsistemas de numeraciondecimaloctalbinariolenguajes de programacionlazarus
programa
Mi propio programa de sistemas de numeracion - Programacion
Antes que nada, quiero decir que el programa esta hecho en Lazarus, lo pueden descargar desde la página oficial o de algun otro lado. Y si tienen turbo pascal también es compatible ya que los archivos están en formato .PAS.



Descargá lazarus para tu sistema operativo acá
Bueno gente, después de estas capturas les dejo el programa ya terminado para que puedan convertir de una base a cualquier otra. Les pido por favor que si encuentran que algo no funciona bien me avisen asi lo reviso y cambio lo que tenga que cambiar. El archivo para descargar es un ejecutable, es decir que en teoria les tiene que funcionar a todos.

A este programita lo hice en Lazarus, por lo que tambien les voy a dejar todo para que lo puedan correr y editar a su gusto.

Me gustaría que recomienden el post a sus seguidores ya que este tipo de conocimientos debe saberse. Bah, en realidad, todo conocimiento debe saberse, asi que bueno estaria bueno que todos puedan ver como se resuelven este tipo de problemas.


Descarga todos los archivo
Descarga solamente el código en lenguaje Pascal
Descarga solamente el programa

Contraseña del .rar: chodrataringa

UNA PARTE del Código del programa

program sistemas;
uses crt;
var
  i,l,z,o,aux,resto,h,num1,betasterisco,basepartida,basellegada,sumapond,mult,long,band: integer;
  num,n,resto1,resultado,t,a,num2,dig: string;
  v: array [1..10] of string;
begin
  clrscr;
  textcolor (lightred);
  write ('HOLA, ESTE PROGRAMA FUE CREADO POR CHODRA PARA '); textcolor (lightblue); write ('TARINGA!'); textcolor (lightred); writeln ('. OJALA QUE TE SIRVA Y TE GUSTE ');
  textcolor (white);
  textmode (CO80);
  highvideo;
  repeat
  write ('Ingrese el numero a convertir: ');
  readln(num);
  num2:=num;
  val (num,num1,h);
  resultado:=' ';
  n:=' ';
  sumapond:=0;
  writeln ('Que desea convertir? ');
  writeln ('De decimal a binario (Pulse 1) ');
  writeln ('De decimal a octal (Pulse 2) ');
  writeln ('De decimal a hexadecimal (Pulse 3) ');
  writeln ('De hexadecimal a decimal (Pulse 4) ');
  writeln ('De octal a decimal (Pulse 5)');
  writeln ('De binario a decimal (Pulse 6)');
  writeln ('De binario a hexadecimal (Pulse 7) ');
  writeln ('De binario a octal (Pulse 8) ');
  writeln ('De hexadecimal a binario (Pulse 9)');
  writeln ('De hexadecimal a octal (Pulse 10) ');
  writeln ('De octal a binario (Pulse 11) ');
  writeln ('De octal a hexadecimal (Pulse 12) ');
  writeln ('Ya no deseo convertir (Pulse 0) ');
  write ('Escriba opcion que desee: ');
  readln (a);
  if (a='1') or (a='2') or (a='3') then
     begin
       if a='1' then
          begin
               i:=1;
               band:=0;
               while (band=0) and (i<=length(num)) do
                   begin
                        if (num[i]<>'0') and (num[i]<>'1') and (num[i]<>'2') and (num[i]<>'3') and (num[i]<>'4') and (num[i]<>'5') and (num[i]<>'6') and (num[i]<>'7') and (num[i]<>'8') and (num[i]<>'9') then
                           begin
                                writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                                band:=1;
                           end
                        else
                            begin
                                 basepartida:=2;
                                 basellegada:=10;
                                 betasterisco:=2;
                                 i:=i+1;
                            end;
                   end;
               if band=0 then
               begin
               resultado:=' ';
               while num1>=betasterisco do
                   begin
                        resto:=(num1 mod betasterisco);
                        num1:=(num1 div betasterisco);
                        str (resto,resto1);
                        resultado:=resultado+resto1;
                        str (num1,num);
                   end;
               if num1<betasterisco then
                  begin
                       str (num1,num);
                       resultado:=resultado+num;
                  end;
             n:=' ';
             for i:=length(resultado) downto 1 do
                 begin
                      n:=n+resultado[i];
                 end;
             writeln ('El numero ',num2,' en base decimal es igual a',n,' en base binaria');
             end;
          end
       else
           begin
             if a='2' then
                begin
                     i:=1;
                     band:=0;
                     while (band=0) and (i<=length(num)) do
                           begin
                                if (num[i]<>'0') and (num[i]<>'1') and (num[i]<>'2') and (num[i]<>'3') and (num[i]<>'4') and (num[i]<>'5') and (num[i]<>'6') and (num[i]<>'7') and (num[i]<>'8') and (num[i]<>'9') then
                                   begin
                                        writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                                        band:=1;
                                   end
                                else
                                    begin
                                         basepartida:=10;
                                         basellegada:=8;
                                         betasterisco:=8;
                                         i:=i+1;
                                    end;
                           end;
                if band=0 then
                begin
                  str (resto,resto1);
                  resultado:=' ';
             if num1<betasterisco then
                begin
                     case num1 of
                          10: begin num:='A'; end;
                          11: begin num:='B'; end;
                          12: begin num:='C'; end;
                          13: begin num:='D'; end;
                          14: begin num:='E'; end;
                          15: begin num:='F'; end;
                     end;
                end;
             while num1>=betasterisco do
                   begin
                        resto:=(num1 mod betasterisco);
                        num1:=(num1 div betasterisco);
                        str (resto,resto1);
                        case resto of
                                  10: begin resto1:='A'; end;
                                  11: begin resto1:='B'; end;
                                  12: begin resto1:='C'; end;
                                  13: begin resto1:='D'; end;
                                  14: begin resto1:='E'; end;
                                  15: begin resto1:='F'; end;
                        end;
                        resultado:=resultado+resto1;
                        str (num1,num);
                   end;
                resultado:=resultado+num;
                n:=' ';
                for i:=length(resultado) downto 1 do
                    begin
                         n:=n+resultado[i];
                    end;
                writeln ('El numero ',num2,' en base decimal es igual a',n,' en base octal');
                end;
                end
             else
                 begin
                   if a='3' then
                      begin
                           i:=1;
               band:=0;
               while (band=0) and (i<=length(num)) do
                   begin
                        if (num[i]<>'0') and (num[i]<>'1') and (num[i]<>'2') and (num[i]<>'3') and (num[i]<>'4') and (num[i]<>'5') and (num[i]<>'6') and (num[i]<>'7') and (num[i]<>'8') and (num[i]<>'9') then
                           begin
                                writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                                band:=1;
                           end
                        else
                            begin
                                 basepartida:=10;
                                 basellegada:=16;
                                 betasterisco:=16;
                                 i:=i+1;
                            end;
                   end;
                   if band=0 then
                      begin
                           if num1<betasterisco then
                              begin
                                   case num1 of
                                        0: begin num:='0'; end;
                                        1: begin num:='1'; end;
                                        2: begin num:='2'; end;
                                        3: begin num:='3'; end;
                                        4: begin num:='4'; end;
                                        5: begin num:='5'; end;
                                        6: begin num:='6'; end;
                                        7: begin num:='7'; end;
                                        8: begin num:='8'; end;
                                        9: begin num:='9'; end;
                                        10: begin num:='A'; end;
                                        11: begin num:='B'; end;
                                        12: begin num:='C'; end;
                                        13: begin num:='D'; end;
                                        14: begin num:='E'; end;
                                        15: begin num:='F'; end;
                                   end;
                              end
                           else
                               begin
                                 resultado:=' ';
                                 while num1>=betasterisco do
                                       begin
                                            resto:=(num1 mod betasterisco);
                                            num1:=(num1 div betasterisco);
                                            str (resto,resto1);
                                            case resto of
                                                 0: begin resto1:='0'; end;
                                                 1: begin resto1:='1'; end;
                                                 2: begin resto1:='2'; end;
                                                 3: begin resto1:='3'; end;
                                                 4: begin resto1:='4'; end;
                                                 5: begin resto1:='5'; end;
                                                 6: begin resto1:='6'; end;
                                                 7: begin resto1:='7'; end;
                                                 8: begin resto1:='8'; end;
                                                 9: begin resto1:='9'; end;
                                                 10: begin resto1:='A'; end;
                                                 11: begin resto1:='B'; end;
                                                 12: begin resto1:='C'; end;
                                                 13: begin resto1:='D'; end;
                                                 14: begin resto1:='E'; end;
                                                 15: begin resto1:='F'; end;
                                            end;
                                       end;
                                 resultado:=resultado+resto1;
                                 str (num1,num);
                               end;
                      resultado:=resultado+num;
                      n:=' ';
                      for i:=length(resultado) downto 1 do
                          begin
                               n:=n+resultado[i];
                          end;
                      writeln ('El numero ',num2,' en base decimal es igual a',n,' en base hexadecimal');
                      end;
                      end;
                 end;
           end;
     end;
     if (a='4') or (a='5') or (a='6') then
        begin
             if (a='4') then
                begin
                     i:=1;
                     band:=0;
                     while (band=0) and (i<=length(num)) do
                     begin
                        if (num[i]<>'A') and (num[i]<>'B') and (num[i]<>'C') and (num[i]<>'D') and (num[i]<>'E') and (num[i]<>'F') and (num[i]<>'0') and (num[i]<>'1') and (num[i]<>'2') and (num[i]<>'3') and (num[i]<>'4') and (num[i]<>'5') and (num[i]<>'6') and (num[i]<>'7') and (num[i]<>'8') and (num[i]<>'9') then
                           begin
                                writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                                band:=1;
                           end
                        else
                            begin
                                 basepartida:=16;
                                 basellegada:=10;
                                 betasterisco:=16;
                                 i:=i+1;
                            end;
                   end;
                     if band=0 then
                        begin
                     for i:=1 to length(num) do
                         begin
                              v[i]:=num[i];
                         end;
                     for i:=1 to length(num) do
                         begin
                              t:=v[i];
                              case t of
                                   'A': begin v[i]:='10'; end;
                                   'B': begin v[i]:='11'; end;
                                   'C': begin v[i]:='12'; end;
                                   'D': begin v[i]:='13'; end;
                                   'E': begin v[i]:='14'; end;
                                   'F': begin v[i]:='15'; end;
                              end;
                         end;
                     sumapond:=0;
                     l:=length(num);
                     for z:=1 to length(num) do
                         begin
                              aux:=betasterisco;
                              for i:=1 to l-2 do
                                  begin
                                       aux:=aux*betasterisco;
                                  end;
                              if l=1 then
                                 begin
                                      aux:=1;
                                 end;
                              t:=v[z];
                              val (t,mult,h);
                              sumapond:=sumapond+(mult*aux);
                              l:=l-1;
                         end;
                     writeln ('El numero ',num2,' en base hexadecimal es igual a: ',sumapond,' en base decimal');
                     end;
                     end;
             if a='5' then
                begin
                     basepartida:=8;
                     basellegada:=10;
                     betasterisco:=8;
                     long:=length(num);
                     dig:=num[long];
                     if (dig='8') or (dig='9') then
                        begin
                             writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                             a:='SI';
                        end
                     else
                         begin
                              for i:=1 to length(num) do
                 begin
                      v[i]:=num[i];
                 end;
             for i:=1 to length(num) do
                 begin
                      t:=v[i];
                      case t of
                           'A': begin v[i]:='10'; end;
                           'B': begin v[i]:='11'; end;
                           'C': begin v[i]:='12'; end;
                           'D': begin v[i]:='13'; end;
                           'E': begin v[i]:='14'; end;
                           'F': begin v[i]:='15'; end;
                      end;
                 end;
                              sumapond:=0;
                              l:=length(num);
                              for z:=1 to length(num) do
                                  begin
                                       aux:=betasterisco;
                                       for i:=1 to l-2 do
                                           begin
                                           aux:=aux*betasterisco;
                                       end;
                                  if l=1 then
                                     begin
                                          aux:=1;
                                     end;
                                  t:=v[z];
                                  val (t,mult,h);
                                  sumapond:=sumapond+(mult*aux);
                                  l:=l-1;
                              end;
                         end;
                              writeln ('El numero ',num2,' en base octal es igual a: ',sumapond,' en base decimal');
                         end;
             if a='6' then
               begin
                     i:=1;
                     band:=0;
                     while (band=0) and (i<=length(num)) do
                     begin
                        if (num[i]<>'0') and (num[i]<>'1') then
                           begin
                                writeln ('ERROR: Ingrese un valor correcto para poder convertirlo: ');
                                band:=1;
                           end
                        else
                            begin
                                 basepartida:=2;
                                 basellegada:=10;
                                 betasterisco:=2;
                                 i:=i+1;
                            end;
                   end;
                     if band=0 then
                        begin
                     for i:=1 to length(num) do
                         begin
                              v[i]:=num[i];
                         end;
                     for i:=1 to length(num) do
                         begin
                              t:=v[i];
                              case t of
                                   'A': begin v[i]:='10'; end;
                                   'B': begin v[i]:='11'; end;
                                   'C': begin v[i]:='12'; end;
                                   'D': begin v[i]:='13'; end;
                                   'E': begin v[i]:='14'; end;
                                   'F': begin v[i]:='15'; end;
                              end;
                         end;
                     sumapond:=0;
                     l:=length(num);
                     for z:=1 to length(num) do
                         begin
                              aux:=betasterisco;
                              for i:=1 to l-2 do
                                  begin
                                       aux:=aux*betasterisco;
                                  end;
                              if l=1 then
                                 begin
                                      aux:=1;
                                 end;
                              t:=v[z];
                              val (t,mult,h);
                              sumapond:=sumapond+(mult*aux);
                              l:=l-1;
                         end;
                     writeln ('El numero ',num2,' en base binaria es igual a: ',sumapond,' en base decimal');
                     end;
                     end;
        end;
     

pascal
sistemas de numeracion
decimal
Datos archivados del Taringa! original
379puntos
1,299visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
chodra🇦🇷
Usuario
Puntos0
Posts2
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.