Autor Beitrag
Flodding
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 21.12.07 13:12 
morgen an alle leser...

also ich bin seit gestern schwer damit beschäftigt aus dem hier:
ausblenden 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 :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 21.12.07 13:14 
Moin!

Schonmal nach Suche in: Delphi-Forum, Delphi-Library QUERSUMME gesucht? ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Flodding Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

MS-DOS, WIN 7, WIN 10
BP7.0, D3, D5
BeitragVerfasst: Fr 21.12.07 13:40 
ausblenden 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>0do
 begin
  inc(QuerSumme, fan mod 10);
  fan:=fan div 10;
 end;
 edit4.Text := inttostr(QuerSumme);
end;
Flodding Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Fr 21.12.07 14:08 
wenn du die letzte Zahl willst, dann kannst du das ganz einfach so machen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 21.12.07 14:28 
ausblenden Delphi-Quelltext
1:
psn:=fanquersumme[Length(inttostr(fanquersumme))];					


fehler:

Array-Typ erforderlich
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 21.12.07 14:38 
einfach wäre doch, die Zahl in einen string zu wandeln und den dann einzeln zu zerlegen ..
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
RechteZifferderQuersumme = Quersumme Mod 10;					

Und nun das ganze als vollständige Funktion:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 21.12.07 15:15 
user profile iconalzaimar 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?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 21.12.07 15:32 
ausblenden Delphi-Quelltext
1:
psn := strtoint(fanquersumme[Length(fanquersumme)]);					


Fehler:
Incompatible Typen

ausblenden Delphi-Quelltext
1:
psn := inttostr(fanquersumme[Length(fanquersumme)]);					


Fehler:
Incompatible Typen

ausblenden Delphi-Quelltext
1:
psn := fanquersumme[Length(fanquersumme)];					


Fehler:
Incompatible Typen

:cry: :?:

EDIT:::

die Lösung.

ausblenden 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>0do
begin
inc(fanQuerSumme, fan mod 10);
fan:=fan div 10;
end;
edit6.Text := inttostr(fanquersumme);
edit4.Text := Copy(edit6.Text , 22);

end;
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 21.12.07 21:33 
@Flodding: Wieso wehrst Du dich so gegen ein einfaches 'fan mod 10' ? :gruebel:

_________________
Na denn, dann. Bis dann, denn.