Przelicznik liczby binarnej na liczbę dziesiętną

0

Witam
Mam napisać program, który będzie zamieniał liczbę binarną na dziesiętną. Kod na obliczanie mam itp, ale nie wiem jak zrobić, że jak wpisuję do komponentu Edit1 liczbę binarną, to po kliknięciu w Button1 pojawi mi się wynik w Edit2. Jakby ktoś pomógł mi to przerobić.

Tutaj kody na zamianę które znalazłem na googlach:

function BinToInt(Value: string): Integer;
var
  i, iValueSize: Integer;
begin
  Result := 0;
  iValueSize := Length(Value);
  for i := iValueSize downto 1 do
    if Value[i] = '1' then Result := Result + (1 shl (iValueSize - i));
end;


function IntToBin1(Value: Longint; Digits: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := Digits downto 0 do
    if Value and (1 shl i) <> 0 then
      Result := Result + '1'
  else
    Result := Result + '0';
end;


function IntToBin2(d: Longint): string;
var
  x, p: Integer;
  bin: string;
begin
  bin := '';
  for x := 1 to 8 * SizeOf(d) do
  begin
    if Odd(d) then bin := '1' + bin
    else
      bin := '0' + bin;
    d := d shr 1;
  end;
  Delete(bin, 1, 8 * ((Pos('1', bin) - 1) div 8));
  Result := bin;
end;

function BinToInt3(Value: String): LongInt;
var
     i,Size: Integer;
begin
     Result := 0;
     Size := Length(Value);
     if Size > 63 then
        Size := 63;
     Size := Size-1;
     for i := Size downto 0 do
     begin
           if Value[i+1] = '1' then
              Result := Result + (1 shl (Size-i));
     end;
end; 

Nie wiem co mam dodatkowo zadeklarować (o ile muszę), gdzie dodać funkcję, itp. Poniżej fragment mojego kodu, konkretnie przycisk Button1 zaprogramowany przeze mnie (sprawdza tylko czy jest coś wpisane i czy jest to liczba oraz mnoży podaną liczbę *2 <- to tylko dla sprawdzenia czy cokolwiek mi działa)

procedure TFormKalk.Button1Click(Sender: TObject);
{realizacja operacji przeliczania z liczby binarnej na liczbę dziesiętną}
 begin
 {kontrola czy użytkownik wprowadził liczbę}
 if Edit1.Text=''
  then
   begin
    ShowMessage('Wpisz liczbę!');
    Exit;
   end;
 {konwersja i kontrola formy pierwszej liczby}
 pomoc:=Edit1.Text;
 Val(pomoc,liczba,blad);
 if blad<>0
  then
   begin
    ShowMessage('Błędna postać liczby! Popraw.');
    Exit;
   end;
   begin {mnożenie liczby *2}
       wynik:=liczba*2;
       Str(wynik:5:0,pomoc);
       Edit2.Text:=pomoc;
   end; 

 end;
1

"function IntToBin1(Value: Longint; Digits: Integer): string;" - nie rozumiem jak można z tym mieć problem
dajesz tak (zamiast tego mnożenia *2 - dodatkowo zauważ że wynik nie będzie liczbą tylko stringiem więc musisz przerobić kod - nie pytaj jak.

wynik:=IntToBin1(liczba,32{ilość znaków});

z resztą powinieneś sobie poradzić...

1

Przecież da się o wiele prościej:

function BinToInt(S:String):Cardinal;
var i:Integer;
begin
  Result:=0;
  for i:=1 to Length(S) do Result:=(Result shl 1)or(Ord(S[i]) and 1);
end;
 
function IntToBin(V:Cardinal):String;
begin
  Result:='';
  repeat
    Result:=Chr(Ord('0')or(V and 1))+Result;
    V:=V shr 1;
  until V=0;
end;
0

Ok dzięki, wszystko działa, teraz tylko zabezpieczenie ale to chyba dam rade sam (mam nadzieję).
Może mi ktoś tylko wytłumaczyć te linijki kodu?

wynik:=BinToInt(pomoc); 
Str(wynik:0:0,pomoc);
Edit2.Text:=pomoc; 

Wydaje mi się, że je rozumiem, ale wole się upewnić na wszelki wypadek.

0
wynik:=BinToInt(pomoc);  //zmienia pomoc (wersja bitowa) na liczbę
Str(wynik:0:0,pomoc); //Zmienia na string (nie potrzebne :0:0 - to nie jest zmiennoprzecinkowa) możesz dać pomoc:=inttostr(wynik);
Edit2.Text:=pomoc; //Zapisujesz wynik na komponent

1 użytkowników online, w tym zalogowanych: 0, gości: 1