
Delphi - převaděč číselných soustav
Dobrý den.
Ve studuji na střední škole obor výpočetní systémy a zadali nám jistý úkol naprogramovat převaděč číselných soustav. Vím si rady s tím jak to celé bude fungovat ale programovací stránka je slabší . Prozatím pracuji na převodu z dvojkové (binární) do osmičkové (oktalové) soustavy. Kód programu vypadá takto (není ani z 1/16 kompletní):
unit prevodnik;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
RadioGroup1: TRadioGroup;
RadioGroup2: TRadioGroup;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
s,prid:string;
pom:array of string;
begin
case radiogroup1.ItemIndex of
0: begin //zvolená binární jako vstupní
s:=edit1.Text;
for i:=1 to length(s) do //ověření zda se jedná o binární číslo
begin
if (s[i]>'1') or (strtoint(s[i])<0) or ((s[i]>='A') and (s[i]<='Z')) or ((s[i]>='a') and (s[i]<='z')) then //podmínka pro binár. číslice
begin
showmessage('Číslo není v binár. soust. (Za čísla nepište značku soustavy např. 10001d)');
edit2.Text:='';
end;//konec podmínky
end;//konec ověření (cyklu)
case radiogroup2.ItemIndex of //do které soustavy převádět
0: edit2.Text:=edit1.text; //zvolena binární jako výstupní
1:begin
if length(s) mod 3 <> 0 then //zvolená oktalová jako výstupní //podmínka pro nastavení délky řetězce aby byl dělitelný 3
begin
for i:= 1 to (length(s) mod 3) do //přidání nul do řetězce
prid:=prid + '0'; //konec cyklu
s:=prid+s;
end;//konec podmínky
i:=0;
j:=1;
setlength(pom,(length(s) div 3));
while i<length(s) do //přiřazení 3 čísel do pole
begin
pom[j-1]:=s[i+1]+s[i+2]+s[i+3];
i:=i+3;
j:=j+1;
end; //konec whileu
end;//konec převodu z binár. do oktalové soust.
end; //konec převodů binár soust.(caseu2)
end;//konec převodů binární soust.
end;//konec caseu
end;//konec příkazů
end.//konec programu
Syntaxně mi delphi chybu neukazuje, pouze při samotném převodu z binární do oktalové soustavy mi delphi vyhodí chybu typu EaAccesViolation... Podle nastaveného breakpointu v delphi by špatný kód měl být někde v cyklu while. Bohužel asi nerozumím tomu co je v cyklu špatně a jak chybu opravit.
Zmena predmetu, pôvodne: Delphi (los)
Tak to si ma dostal....
Overenie by malo vyzerať asi takto:
Binárne čísla sú 0,1 načo overuješ A,a,Z,z.....
Naozaj ten Tvoj kód je zbytočne pracný a neúčelný...