algorytm.org

Implementacja w Delphi/Pascal

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana z i na system dziesiętny - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 3
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 23 listopada 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

systemy delphi/systemy.dpr:
//
// Konwersja z i na system dziesietny
//
// www.algorytm.org
// (c)2006 by Tomasz Lubinski
//

program systemy;
{$APPTYPE CONSOLE}
uses
  SysUtils;

const MAX_BASE: Integer = 36;
const pattern: String = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';


//returns converted n or '' if an error occurs
function convertTo(n: Integer; base: Integer): String;
begin
   result := '';

   //base is too big or too small
   if (base > MAX_BASE) or (base < 2) then exit;

   //n is equal to 0, do not process, return "0"
   if n = 0 then
      begin
         result := '0';
         exit;
      end;

   //process until n > 0
   while (n>0) do
      begin
         result := pattern[(n mod base) + 1] + result;
         n := n div base;
      end;
end;

//return value of x or -1 if an error occurs
function valueOf(x: Char; base: Integer): Integer;
var
   i: Integer;
begin

   result := -1;

   for i:=1 to base do
   begin
      if x = pattern[i] then
      begin
         result := i - 1;
         break;
      end;
   end;
end;

//returns converted n or 0 if an error occurs
function convertFrom(n: String; base: Integer): Integer;
var
   i, x, p: Integer;
begin
   p := 1;
   result := 0;

   //base is too big or to small
   if (base > MAX_BASE) or (base < 2) then exit;

   n := UpperCase(n);

   for i:=length(n) downto 1 do
      begin
         x := valueOf(n[i], base);
         if x < 0 then
            begin
               result := 0;
               exit;
            end;
         result := result + (x * p);
         p := p * base;
      end;
end;


begin

   writeln('3568 w systemie dwojkowym = ' + convertTo(3568, 2));

   writeln('3568 w systemie trojkowym = ' + convertTo(3568, 3));

   writeln('3568 w systemie osemkowym = ' + convertTo(3568, 8));

   writeln('3568 w systemie szesnastkowym = ' + convertTo(3568, 16));

   writeln('3568 w systemie dwudziestkowym = ' + convertTo(3568, 20));

   writeln('100010010 w systemie dwojkowym to ' + IntToStr(convertFrom('100010010', 2)) + ' w systemie dziesietnym');

   writeln('7542 w systemie osemkowym to ' + IntToStr(convertFrom('7542', 8)) + ' w systemie dziesietnym');

   writeln('E854 w systemie szesnastkowym to ' + IntToStr(convertFrom('E854', 16)) + ' w systemie dziesietnym');

   readln;

end.
Dodaj komentarz