Autor Beitrag
Tomac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Do 23.01.03 18:22 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 23.01.03 18:45 
Hallo,

folgendes sollte dir Weiterhelfen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 23.01.03 18:45 
Hallo,

so geht's auch:

ausblenden 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;

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Tomac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Do 23.01.03 19:09 
Wow, das ging ja schnell.
Vielen Dank an alle, hast bestens funktioniert!

mfG
Tomac