Autor |
Beitrag |
Flodding
      
Beiträge: 28
|
Verfasst: Fr 21.12.07 13:12
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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 21.12.07 13:14
Moin!
Schonmal nach QUERSUMME gesucht?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Flodding 
      
Beiträge: 28
|
Verfasst: 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
      
Beiträge: 128
MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
|
Verfasst: 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 
      
Beiträge: 28
|
Verfasst: 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
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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)]; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Flodding 
      
Beiträge: 28
|
Verfasst: Fr 21.12.07 14:28
Delphi-Quelltext 1:
| psn:=fanquersumme[Length(inttostr(fanquersumme))]; |
fehler:
Array-Typ erforderlich
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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; |
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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; |
_________________ Na denn, dann. Bis dann, denn.
|
|
Flodding 
      
Beiträge: 28
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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)]); |
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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.
_________________ Na denn, dann. Bis dann, denn.
|
|
Flodding 
      
Beiträge: 28
|
Verfasst: 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
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
      
Beiträge: 260
Win XP Prof
D7 Enterprise
|
Verfasst: 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.
_________________ rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 21.12.07 21:33
@Flodding: Wieso wehrst Du dich so gegen ein einfaches 'fan mod 10' ? 
_________________ Na denn, dann. Bis dann, denn.
|
|