- unit Unit1;
- {$codepage utf8}
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
- ExtCtrls;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- d1: TLabel;
- Edit1: TEdit;
- Edit2: TEdit;
- Edit3: TEdit;
- Edit4: TEdit;
- b: TLabel;
- Edit5: TEdit;
- Edit6: TEdit;
- Label1: TLabel;
- Grecka: TLabel;
- Label3: TLabel;
- d: TLabel;
- GrNaRzymska: TRadioButton;
- Zakres1: TRadioButton;
- Zakres2: TRadioButton;
- RadioGroup1: TRadioGroup;
- RzNaArabska: TRadioButton;
- GrNaArabska: TRadioButton;
- RzNaGrecka: TRadioButton;
- NaRzymska: TRadioButton;
- NaGrecka: TRadioButton;
- procedure Edit5Change(Sender: TObject);
- procedure GreckaClick(Sender: TObject);
- procedure RadioGroup1Click(Sender: TObject);
- procedure RzNaArabskaChange(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure Edit1Change(Sender: TObject);
- procedure Edit2Change(Sender: TObject);
- procedure Label1Click(Sender: TObject);
- procedure RzNaArabskaClick(Sender: TObject);
- procedure NaGreckaChange(Sender: TObject);
- procedure NaRzymskaChange(Sender: TObject);
- procedure NaRzymskaClick(Sender: TObject);
- procedure ZakresNChange(Sender: TObject);
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- a: integer;
- mnoznik: integer;
- aa: integer;
- c: integer;
- i: integer;
- j: integer;
- T: string;
- lrzym: string;
- lgrec: string;
- wynik:integer = 0;
- add, min, sum: integer;
- pom:boolean;
- rzym:string;
- GreckieJedn : array[1..9] of string = ('α', 'β', 'γ', 'δ', 'ε',
- 'ϝ', 'ζ', 'η', 'θ');
- GreckieDzie : array[1..9] of string = ('ι', 'κ', 'λ', 'μ', 'ν',
- 'ξ', 'ο', 'π', 'ϟ');
- GreckieSet : array[1..9] of string = ('ρ', 'σ', 'τ', 'υ', 'φ',
- 'χ', 'ψ', 'ω', 'ϡ');
- implementation
- function GreckaWartosc(Gr : UnicodeString) : integer;
- begin
- aa := 0;
- for j:=1 to 9 do
- begin
- if(GreckieJedn[j] = Gr) then aa := j;
- end;
- for j:=1 to 9 do
- begin
- if(GreckieDzie[j] = Gr) then aa := j * 10;
- end;
- for j:=1 to 9 do
- begin
- if(GreckieSet[j] = Gr) then aa := j * 100;
- end;
- Result := aa;
- end;
- function Wstaw(a : integer; one, five, ten : string) : string;
- begin
- T:='';
- if a < 4 then
- for i:=1 to a do T:=T+one;
- if a = 4 then
- T:=one + five;
- if a = 5 then
- T := five;
- if (a > 5) and (a < 9) then
- begin
- T:=five;
- for i:=1 to a - 5 do T:=T+one;
- end;
- if a = 9 then T:=one+ten;
- Result := T;
- end;
- function StworzArabskaZGreckiej(Gre : UnicodeString) : integer;
- begin
- sum := 0;
- mnoznik := 1;
- for i:=1 to Length(Gre) do
- begin
- add := 0;
- if(Gre[i] = '͵') then mnoznik := 1000;
- if(Gre[i] <> '͵') then add := GreckaWartosc(Gre[i]);
- if(add > 0) then
- begin
- sum := sum + (add * mnoznik);
- mnoznik := 1;
- end;
- end;
- Result := sum;
- end;
- function StworzArabskaZRzymskiej(Rzym : string) : integer;
- begin
- sum := 0;
- pom := false;
- mnoznik := 0;
- for i:= 1 to Length(Rzym) do
- begin
- add := 0;
- min := 0;
- if pom = false then
- begin
- case Rzym[i] of
- 'M': add := 1000;
- 'D': add := 500;
- 'C': add := 100;
- 'L': add := 50;
- 'X': add := 10;
- 'V': add := 5;
- 'I': add := 1;
- '|': mnoznik := mnoznik + 1;
- end;
- case Rzym[i + 1] of
- 'M': min := 1000;
- 'D': min := 500;
- 'C': min := 100;
- 'L': min := 50;
- 'X': min := 10;
- 'V': min := 5;
- 'I': min := 1;
- end;
- if (add < min) and (add > 0) then
- begin
- add := min - add;
- pom := true;
- end;
- sum := sum + add;
- if(mnoznik = 2) then
- begin
- sum := sum * 1000;
- mnoznik := 3;
- end;
- end
- else
- pom := false;
- end;
- Result := sum;
- end;
- function StworzGrecka(a : integer) : string;
- begin
- lgrec := '';
- if(a > 999999) then
- begin
- ShowMessage('Liczby greckie obejmują zakres od 1 do 999999. Wprowadź inną liczbę');
- Result := 'bląd';
- exit;
- end;
- if(a > 999) then
- begin
- aa := a div 1000;
- if(aa div 100) > 0 then
- begin
- lgrec := lgrec + '͵' + GreckieSet[aa div 100];
- aa := aa mod 100;
- end;
- if(aa div 10) > 0 then
- begin
- lgrec := lgrec + '͵' + GreckieDzie[aa div 10];
- aa := aa mod 10;
- end;
- if(aa > 0) then lgrec := lgrec + '͵' + GreckieJedn[aa];
- a := a mod 1000;
- end;
- if(a div 100) > 0 then
- begin
- lgrec := lgrec + GreckieSet[a div 100];
- a := a mod 100;
- end;
- if(a div 10) > 0 then
- begin
- lgrec := lgrec + GreckieDzie[a div 10];
- a := a mod 10;
- end;
- if(a > 0) then lgrec := lgrec + GreckieJedn[a];
- lgrec := lgrec + 'ʹ';
- Result := lgrec;
- end;
- function StworzRzymska(a : integer; Zakres1, Zakres2 : boolean) : string;
- begin
- lrzym := '';
- if Zakres1 then
- begin
- if a >= 4000 then
- begin
- ShowMessage('Ta liczba wychodzi poza zaznaczony zakres');
- Result := 'bląd';
- exit;
- end;
- end;
- if Zakres2 then
- begin
- if (a < 4000) or (a > 300000) then
- begin
- ShowMessage('Ta liczba wychodzi poza zaznaczony zakres');
- Result := 'bląd';
- exit;
- end;
- end;
- if (a >= 4000) then
- begin
- lrzym := '|';
- aa := a div 1000;
- if (aa div 1000) > 0 then
- begin
- for i := 1 to aa div 1000 do
- lrzym := lrzym +'M';
- aa := aa mod 1000;
- end;
- if (aa div 100) > 0 then
- begin
- lrzym := lrzym + Wstaw(aa div 100,'C','D','M');
- aa := aa mod 100;
- end;
- if (aa div 10) > 0 then
- begin
- lrzym := lrzym + Wstaw(aa div 10,'X','L','C');
- aa := aa mod 10;
- end;
- if aa > 0 then
- lrzym := lrzym + Wstaw(aa,'I','V','X');
- lrzym := lrzym + '|';
- a := a mod 1000;
- end;
- if (a div 1000) > 0 then
- begin
- for i := 1 to a div 1000 do
- lrzym := lrzym +'M';
- a := a mod 1000;
- end;
- if (a div 100) > 0 then
- begin
- lrzym := lrzym + Wstaw(a div 100,'C','D','M');
- a := a mod 100;
- end;
- if (a div 10) > 0 then
- begin
- lrzym := lrzym + Wstaw(a div 10,'X','L','C');
- a := a mod 10;
- end;
- if a > 0 then
- lrzym := lrzym + Wstaw(a,'I','V','X');
- Result := lrzym;
- end;
- {$R *.lfm}
- { TForm1 }
- procedure TForm1.Label1Click(Sender: TObject);
- begin
- end;
- procedure TForm1.RzNaArabskaClick(Sender: TObject);
- begin
- end;
- procedure TForm1.NaGreckaChange(Sender: TObject);
- begin
- end;
- procedure TForm1.NaRzymskaChange(Sender: TObject);
- begin
- end;
- procedure TForm1.NaRzymskaClick(Sender: TObject);
- begin
- end;
- procedure TForm1.ZakresNChange(Sender: TObject);
- begin
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- begin
- end;
- procedure TForm1.Edit2Change(Sender: TObject);
- begin
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if(Length(Edit1.text) = 0) then exit;
- a:=strtoint(Edit1.text);
- if (NaRzymska.Checked) then
- Edit2.text:=StworzRzymska(a, Zakres1.Checked, Zakres2.Checked);
- if (NaGrecka.Checked) then
- Edit2.text:=StworzGrecka(a);
- end;
- procedure TForm1.RzNaArabskaChange(Sender: TObject);
- begin
- end;
- procedure TForm1.GreckaClick(Sender: TObject);
- begin
- end;
- procedure TForm1.RadioGroup1Click(Sender: TObject);
- begin
- end;
- procedure TForm1.Edit5Change(Sender: TObject);
- begin
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- Edit1.text:=' ';
- Edit2.text:=' ';
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- if RzNaArabska.Checked then
- Edit4.text := inttostr(StworzArabskaZRzymskiej(Edit3.text));
- if RzNaGrecka.Checked then
- Edit4.text := StworzGrecka(StworzArabskaZRzymskiej(Edit3.text));
- end;
- procedure TForm1.Button4Click(Sender: TObject);
- begin
- Edit3.text:=' ';
- Edit4.text:=' ';
- end;
- procedure TForm1.Button5Click(Sender: TObject);
- begin
- if GrNaArabska.Checked then
- Edit6.text := inttostr(StworzArabskaZGreckiej(Edit5.text));
- if GrNaRzymska.Checked then
- Edit6.text := StworzRzymska(StworzArabskaZGreckiej(Edit5.text), Zakres1.Checked, Zakres2.Checked);
- end;
- procedure TForm1.Button6Click(Sender: TObject);
- begin
- Edit5.text:=' ';
- Edit6.text:=' ';
- end;
- end.