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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!