saludos a todos y feliz navidad, ando practicando con freepascal y se me ocurrio hacer este conversor que me dieron como ejercicio en el curso online, y al fin me salio con mucho calentamiento de cabeza en matematicas a tope
lo hice con numeros binarios por que ando dandole a tope con el tema de los codigos binarios y le pille el ritmo a esto de los codigos binarios.
El rango de conversion es el mismo que abarca la codificacion UTF8 (0 a 6535) y muestra su caracter ascii correspondiente cuyo estandard ansii es de 0 asta 127, bueno aqui os dejo el code y el programa
unit Unit1;
{$codepage UTF8}
{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
type
  bite = %00000000..%1111111111;
  bin = 0..1111111111111111;
var
  Form1: TForm1;
  numero,resultado,decimal,letra,suma,resta:bite;
  binario:bin;
  numerobin:int64;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin

  numero:=strtoint(edit1.Text);

  resultado:=numero mod %00000010;
  binario:=resultado;

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+resultado*10;

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*100);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*1000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*10000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*100000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*1000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*10000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*100000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*1000000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*10000000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*100000000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*1000000000000);

  numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*10000000000000);

    numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*100000000000000);

    numero:=numero div %00000010;
  resultado:= numero mod %00000010;
  binario:=binario+(resultado*1000000000000000);

  edit2.Text:=inttostr(binario);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  decimal:=%00000000;
  numerobin:=strtoint64(edit2.Text);
  decimal:=decimal+((numerobin mod %00001010)*%00000001);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%00000010);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%00000100);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%00001000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%00010000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%00100000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%01000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %0001010)*%10000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%100000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%1000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%10000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%100000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%1000000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%10000000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%100000000000000);

  numerobin:=numerobin div %00001010;
  decimal:=decimal+((numerobin mod %00001010)*%1000000000000000);

  edit3.Text:=inttostr(decimal);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  letra:=strtoint(edit1.Text);
  edit4.Text:=chr(letra);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  suma:=strtoint(edit1.Text);
  suma+=1;
  edit1.Text:=inttostr(suma);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  resta:=strtoint(edit1.Text);
  resta-=1;
  edit1.Text:=inttostr(resta);
end;
end.
para que entiendan como funciona el programa %00000001 = 1,%00000010 = 2, %00000100 = 4, %00000101 = 5 etc etc...

Explicacion del boton que pasa un decimal a binario (button1)

digamos que introdujimos 5
le haria la operacion de 5 a modulo 2 =1
lo almacenamos en la variable resultado y binario.
Despues dividimos 5 entre 2 a numeros enteros resultado = a 2
hacemos 2 modulo 2 =0 que multiplicado * 10 =0(no se suma nada entonces)
dividimos 2 entre 2 = 1 que multiplicado por 100 = 100 y sumado a 1 = 101
cuyo resultado es el numero en binario del 5
entonces dividimos en entero otra vez la variable numero que almacena 1
pero como el resultado de 1 entre 2 es 0
ya no puede trabajar mas y por lo tanto
nos devuelve el 101(su codigo en binario)

explicacion del boton que pasa de binario a decimal (button2)

Digamos que introdujimos 101 cuya cifra almacena numerobin
modulariamos 101 a 10 = 1 lo multplicamos por 1
y lo asignamos y sumamos a decimal
decimal=1
despues dividimos 101 entre 10 = 10 y lo asignamos a numerobin
numerobin=10
modulamos numerobin a 10 =0 que * 2 =0 porlo tanto no hay asignacion
entonces dividimos 10 entre 10 =1 lo asignamos a numerobin
y lo multiplicamos * 4 = 4
que sumado a 1 que almacena decimal = a 5
(5 = el decimal del codigo binario 101)

una toma del programa Descarga [Enlace externo eliminado para invitados]
1.69 Mb
espero les guste el programa un saludo
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Funcional 10/10 Gracias strup
[code2=masm]"For the honor of a king. And the destiny of a country. All for one."[/code2]
Flame escribió:Funcional 10/10 Gracias strup
Gracias flame,salu2
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Responder

Volver a “Fuentes”