Entwickler-Ecke
Sonstiges (Delphi) - Zerlegen einer Zahl
Flodding - Fr 21.12.07 13:12
Titel: Zerlegen einer Zahl
morgen an alle leser...
also ich bin seit gestern schwer damit beschäftigt aus dem hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button12Click(Sender: TObject); var fan: integer;
begin fan:= random(89999)+10000; edit4.Text := inttostr(fan); end; |
an die einzelnen 5 zahlen ranzukommen um sie einzeln zu nutzen...
ums deutlich zu machen:
zufällig wird die zahl 12345 erstellt.
dann möchte ich die 1,2,3,4,5 addieren und somit in der edit4 dann 15 stehen haben.
habs schon mit :
Delphi-Quelltext
1:
| edit4.Text := pos(1,fan); |
versucht um zumindest erstmal an die erste zahl zu kommen um mich dann weiter durchzuschlagen, jedoch ohne erfolg. ich wüsste auch nicht wonach ich suchen muss.
Zerlegen von strings im google hat mir auch nicht geholfen...
danke für jede antwort.
Floddy
Narses - Fr 21.12.07 13:14
Moin!
Schonmal nach
QUERSUMME gesucht? ;)
cu
Narses
Flodding - Fr 21.12.07 13:18
ich brauch die 5 zahlen als 5 einzelne variablen
fan1,fan2,fan3,fan4,fan5
ich meine mich zu erinnern dass es bei Visual Basic soetwas gab wie:
edit4.text = left(fan,1)
LorenzS - Fr 21.12.07 13:40
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button12Click(Sender: TObject); var fan,QuerSumme: integer; begin fan := random(89999)+10000; QuerSumme := 0; while (fan>0) do begin inc(QuerSumme, fan mod 10); fan:=fan div 10; end; edit4.Text := inttostr(QuerSumme); end; |
Flodding - Fr 21.12.07 14:01
danke quersumme funktioniert auch gut :)
jetzt kommt noch die bonusfrage:
ist die quersumme größer als 9, so besteht sie aus 2 ziffern. ich brauche die hintere ziffer. bei einer 23 würde ich demnach die 3 brauchen...
wenn mir jetzt noch einer sagen kann wie ich die quersumme zerlegen kann, bzw die erste ziffer der quersumme löschen kann isses geschafft;)
Xion - Fr 21.12.07 14:08
wenn du die letzte Zahl willst, dann kannst du das ganz einfach so machen:
Delphi-Quelltext
1:
| LetzteZahl:=Zahl[Length(inttostr(Zahl)]; |
Flodding - Fr 21.12.07 14:28
Delphi-Quelltext
1:
| psn:=fanquersumme[Length(inttostr(fanquersumme))]; |
fehler:
Array-Typ erforderlich
zuma - Fr 21.12.07 14:38
einfach wäre doch, die Zahl in einen string zu wandeln und den dann einzeln zu zerlegen ..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var zahl, z1, z2, z3, z4, z5 : integer; s : String; begin zahl := 12345; s := IntToStr(zahl); z1 := StrToInt(s[1]); z2 := StrToInt(s[2]); usw... end; |
alzaimar - Fr 21.12.07 14:40
Stimm ja auch so nicht...
Also nochmal ganz langsam.
1. Quersumme aus einer Zahl bilden => Quersumme (hast du ja schon)
2. Davon die letzte Ziffer. Das ist der Rest der Division durch 10.... Also:
Delphi-Quelltext
1:
| RechteZifferderQuersumme = Quersumme Mod 10; |
Und nun das ganze als vollständige Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Function LetzteZifferderQuersumme (EineZahl : Integer) : Integer; Var Quersumme, Ziffer : Integer;
Begin Quersumme := 0; While EineZahl > 0 Do Begin Ziffer := EineZahl Mod 10; EineZahl := EineZahl Div 10; QuerSumme := Quersumme + EineZahl; End; Result := Quersumme Mod 10 End; |
Flodding - Fr 21.12.07 14:49
"der rest der division durch 10" oO
hmmm so schwer hatte ich mir das nicht vorgestellt...
kann ich nicht einfach die erste ziffer löschen lassen von der fanquersumme? dann habe ich auch "den rest der division durch 10" :)
wie gesagt bei Visual basic gabs sone schöne sache das funzte in etwa so:
psn = Right(fanquersumme,1)
damit hätte ich dann die letzte ziffer aus der variablen fanquersumme egal wie viele zeichen sie beinhaltet.
zuma - Fr 21.12.07 15:15
alzaimar hat folgendes geschrieben: |
Stimm ja auch so nicht...
|
Was daran stimmt denn nicht ?
so kann man doch prima eine Zahl in ihre einzelnen 'Digits' zerlegen (was doch die Frage war)?
und die letzte Zahl zu finden, ist dann doch auch kein Problem?
Delphi-Quelltext
1:
| z2 := StrToInt(s[Length(s)]); |
alzaimar - Fr 21.12.07 15:18
Erstens dachte ich, Du hättest eine Zahl und kein String und Zweitens finde ich meine Lösung doch ziemlich einfach. Das 'Komplizierze' ist in jedem Fall die Bildung der Quersumme, dafür benötigst Du auch in VB mehrere Zeilen.
Und was an 'Rest der Division durch 10' so schwer/komisch sein soll, ist mir auch fremd, oder meinst stößt du dich an dem fehlenden 'ganzzahligen' vor 'Division'?
Das äquivalent zu 'Right(' ist das in Delphi übrigens das 'Copy'. Aber um das zu benutzen, musst du die Quersumme erst in einen String umwandeln. Wenn du das nicht kompliziert findest, der Compiler schon.
Flodding - Fr 21.12.07 15:32
Delphi-Quelltext
1:
| psn := strtoint(fanquersumme[Length(fanquersumme)]); |
Fehler:
Incompatible Typen
Delphi-Quelltext
1:
| psn := inttostr(fanquersumme[Length(fanquersumme)]); |
Fehler:
Incompatible Typen
Delphi-Quelltext
1:
| psn := fanquersumme[Length(fanquersumme)]; |
Fehler:
Incompatible Typen
:cry: :?:
EDIT:::
die Lösung.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button12Click(Sender: TObject); var fan: integer; fanquersumme: integer; psn: integer;
begin fanquersumme:= 0; fan:= random(89999)+10000;
edit5.Text := inttostr(fan);
while (fan>0) do begin inc(fanQuerSumme, fan mod 10); fan:=fan div 10; end; edit6.Text := inttostr(fanquersumme); edit4.Text := Copy(edit6.Text , 2, 2);
end; |
DrRzf - Fr 21.12.07 20:07
Wenn jetzt aber deine Quersumme nur einstellig ist, haste nen Problem, da jetzt explizit die 2te Stelle ausgelesen wird.
Haste ne 3 Stellige Quersumme kommen sogar 2 stellen zurück.
alzaimar - Fr 21.12.07 21:33
@Flodding: Wieso wehrst Du dich so gegen ein einfaches 'fan mod 10' ? :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!