Autor Beitrag
Sim
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 26.01.03 17:05 
Hallo,

habe mir mal ein kleines Programm gemacht das die Quersumme berechnet: (Quelle von Internet...)
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
  Form1: TForm1;
  n, summe: Integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Summe := 0; 
     n := StrToInt(Edit1.Text); //is klar

       repeat //is klar
         summe := Summe + n mod 10; 
         n := n div 10; 
        until n = 0; 
         
     Label4.Caption := IntToStr(Summe); //is klar
end;

end.

Ich verstehe aber so ziemlich nur die hälfte des Codes...
ausblenden Quelltext
1:
summe := Summe + n mod 10???					

Die summe ist ja das Resultat am Schluss, aber am anfang is es 0
->summe + eingabe (n) mod??? 10;<- was bedeutet "mod" in diesem bsp.???
und 10???
dann n := n dividiert durch 10 warum muss man hier dividieren???
Die Quersumme beerechnet man ja so, bsp: 678 = 6 + 7 + 8= 21

Kann mir dass mal jemand erklären??? :?

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 26.01.03 17:26 
Also, nehmen wir mal die zahl, die Du auch als Beispiel angegeben hast.

n ist also 678.
Summe ist (noch) 0.

mod gibt Dir den Rest einer Division. Also 13 mod 10 gibt 3.
Entsprechend gilt in unserem Beispiel (wenn die Schleife das erste Mal durchgegangen wird):

n mod 10 = 8, weil 678 durch 10 einen Rest von 8 ergibt. Die Operation
"summe := summe + n mod 10" addiert also die letzte Ziffer von n zur Summe hinzu.

div macht eigentlich genau das umgekehrte von Mod, es gibt Dir nämlich den ganzzahligen Zeil der Division. 13 div 10 gibt 1.
Entsprechend gilt in unserem Beispiel:

n div 10 = 67, weil die 10 67mal ganz in die 678 hinein passt.

n:=n div 10 schneidet also die letzte Ziffer von der Zahl ab. Die haben wir ja auch schon zur Summe hinzugefügt, wir brauche sie also nicht mehr.

Damit wären wir auch schon am Ende der Schleife. Beim nächsten Durchgang wird das ganze mit der 67 gemacht, dann mit der 6. Und da 6 div 10 = 0 ist, bricht die Schleife nach der 6 ab, was ja auch richtig ist.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: So 26.01.03 17:29 
Hallo,

also in deinem Code wird die eingabe in eine Zahl umgewandelt, daß heißt, in deinem Beispiel steht in n= 678
Dann ist die quersumme doch die am weitesten reschts stehende zahl + der in der mitte und der zahl ganz links, das sind doch einer, 10er und 100er. Also musst du in jedem schleifendurchlauf durch zehn teilen, damit du die jeweilige zahl erhältst.
und mod musst du machen, damit du den ganzzahligen rest erhätst.
Ohne mod würdest du 678 + 67 + 6 rechnen.
Mit mod wird daraus ((678 mod 10) = 8 )+ ((67 mod 10) = 7) + ((6 mod 10) = 6) = 21

Gruß
Ken
Sim Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 26.01.03 17:54 
Danke schön... :D