Z dziesiętnych na binarny działa, ale na ósemkowy już nie...

0

Witam, piszę program w Pascalu zamieniający m.in. liczby z systemu dziesiętnego na binarny i na ósemkowy. Z dziesiętnego na binarny mój kod wygląda tak:

function binarna:string;
var q,d:integer;
s:string;
cyfra:array[1..8] of real;
begin
        if liczba=3 then
        begin
                d:=dzies;
                for q:=1 to 8 do
                begin

                        if (d=0) then
                        begin
                        cyfra[q]:=0;
                        continue;
                        end;


                        if (d mod 2=0) then
                        cyfra[q]:=0


                        else
                        cyfra[q]:=1;


                        d:=d div 2;

                end;


                for q:=8 downto 1 do
                begin
                        Str(cyfra[q]:1:0, s);
                        binarna:= binarna + s;
                end;
        end;
end; 

i ten kod działa tak, jak powinien. Problem pojawia się przy zamianie z liczby dziesiętnej na ósemkową. Kod który stworzyłem wygląda następująco:

function osemkowa:string;
var q,m,d:integer;
s:string;
cyfra:array[1..8] of real;
begin
        if liczba=3 then
        begin
                d:=osem;
                for q:=1 to 8 do
                begin
                        if (d=0) then
                        begin
                        cyfra[q]:=0;
                        continue;
                        end;


                        m:=(d mod 8);

                        if (m=0) then
                        cyfra[q]:=0


                        else
                        cyfra[q]:=m;

                        d:=d div 8;
                end;


                for q:=8 downto 1 do
                begin
                        Str(cyfra[q]:1:0, s);
                        osemkowa:= osemkowa + s;
                end;


        end;
end; 

Przy podaniu liczby dziesiętnej zawsze wyświetla same zera.. Dodam, że operuję tutaj na takich samych nazwach zmiennych, ale to chyba nie problem? Są one w dwóch różnych funkcjach..

2

A żesz nakombinował!

type TSystem=2..64;
function ToAnySystem(Liczba:DWord;System:TSystem):String;
const Digits:String='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#';
begin
  Result:='';
  repeat
    Result:=Digits[(Liczba mod System)+1]+Result;
    Liczba:=Liczba div System;
  until Liczba=0;
end;

http://ideone.com/qvRq0L#li_gKuNr9

0

Dragon nie ogarniam Twojej wersji:D

Moglibyście powiedzieć co jest nie tak w moim programie?

edit:
Już działa, zamiast do zmiennej d przypisać wczytaną liczbę dziesiętną przypisywałem ósemkową:D
Tak czy siak, dzięki za pomoc

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