Entwickler-Ecke

Sonstiges (Delphi) - Zahlensysteme


Tomac - Do 23.01.03 18:22
Titel: Zahlensysteme
Hallo!

Mein Informatikprofessor gab mir den Auftrag, folgendes Programm zu schreiben:
es enthält drei TEdit und einen Button.
In das erste Edit gibt man die Zahl für die Basis ein, z.B. 3.
In das zweite gibt man die Dezimalzahl ein, die umgewandelt werden soll.
Klickt man nun auf den Button soll im dritten Edit das Ergebnis angezeigt werden.
Das ganze soll nach folgendem Algorithmus funktionieren:
z.B.: Basis = 3
Dez.Zahl = 100

100:3 =33 --> Rest 1
33:3 = 11 --> Rest 0
11:3 = 3 --> Rest 2
3:3 = 1 --> Rest 0
1:3 = 0 --> Rest 1

In der Spalte Rest steht nun 10201, dies von hinten nach vorne gelesen (in diesem Fall das gleiche) ist das Ergebnis.

Nur wie kann ich das umsetzten? Ich hab schon viele Funktionen probiert, doch nichts hat richtig funktioniert. :cry: Und was ich im Internet bisher gefunden habe arbeitet nach einem anderen Prinzip.
Wer kann mir helfen?

mfG
Tomac


Christian S. - Do 23.01.03 18:44

Hi!

So funktioniert eine Lösug für eine Basis < 10. Wenn die Basis >= 10 ist, musst Du noch ein paar Symbole einfügen und die Zeile, wo das Ergebnis erweitert wird, noch entsprechend abändern.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
VAr basis, zahl, temp : INTEGER;
    ergebnis : String;
begin
  zahl:=StrToInt(edit_zahl.text);
  basis:=StrToInt(edit_basis.text);
  ergebnis:='';
  temp:=zahl;
  repeat
    ergebnis:=ergebnis+IntToStr(temp mod basis);
    temp:=temp div basis;
  until temp=0;
  edit_ergebnis.text:=ergebnis;
end;


MfG,
Peter


Klabautermann - Do 23.01.03 18:45

Hallo,

folgendes sollte dir Weiterhelfen:


Quelltext
1:
2:
3:
Erg := 10/3; // Erg = 3,3333
Erg := 10 DIV 3; // Erg = 3 (ganzahlige Division)
Erg := 10 MOD 3; // Erg = 1 (Rest)


Gruß
Klabautermann


smiegel - Do 23.01.03 18:45

Hallo,

so geht's auch:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure Zerlege(aListe:TStringList; Zahl, Basis:Integer);
begin
  if (zahl div Basis>0) then
  begin
    aListe.Add(IntToStr(zahl mod Basis));
    Zerlege(aListe, zahl div Basis, basis);
  end else aListe.Add(IntToStr(zahl mod Basis));
end; // Zerlege


procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
    i :Integer;
    s :String;
begin
  sl:=TStringList.Create;
  try
    Zerlege(sl, StrToInt(edZahl.Text), StrToInt(edBasis.Text));
    if (sl.Count>0) then
    begin
      s:='';
      for i:=sl.Count-1 downto 0 do s:=s+sl.Strings[i];
      edErgebnis.Text:=s;
    end; // if
  finally
    sl.Free;
  end; // try
end;


Tomac - Do 23.01.03 19:09

Wow, das ging ja schnell.
Vielen Dank an alle, hast bestens funktioniert!

mfG
Tomac