Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Zahlen Addieren (For-Schleife)


Memphis - Di 01.02.05 16:48
Titel: Zahlen Addieren (For-Schleife)
Hallo.
Erstmal sorry, falls dieser Beitrag hier nicht reinpassen sollte, aber ich wüsste jetzt nicht, wo ich den sonst hineinschreiben soll.

Also zu meiner Frage:

Wir sollen in der Schule ein Programm programmieren, wo man 2 Zahlen eingeben kann und dann sämtliche Zahlen zwischen diesen beiden miteinander addiert werden.

Also z.B.

Zahl 1 = 5
Zahl 2 = 10

Die Berechnung: 5 + 6 + 7 + 8 + 9 + 10

Dies sollen wir mit einer FOR-Schleife anstellen.

Ich habe jedoch keine Ahnung wie ich das anstellen könnte.
Kann mir jemand einen Tip geben?`

MfG
Memphis


matze.de - Di 01.02.05 16:53

Hi und :welcome: im DF!

Zu deiner Frage:

Delphi-Quelltext
1:
2:
3:
4:
5:
var ergebnis,zahl1, zahl2:integer;
zahl1 := 5;
zahl2 := 10;
for i:=zahl1 to zahl2 do
  ergebnis := ergebnis + i;


hoffe du verstehst es :)

mfg matze

P.S.:Benutz beim nächsten mal bitte Delphi-Tags so wie ich grad :)


jasocul - Di 01.02.05 16:54

Hallo Memphis :welcome:

Du wirst hier gleich viele böse Kommentare bekommen, dass hier niemand dein Hausaufgaben macht. (Das ist auch richtig so).

Für deine Aufgabe musst du wissen:
1. Wie ist eine For-Schleife aufgebaut.
2. Wie addiere ich zwei Zahlen.
3. Wie deklariere ich Variablen.

Woran scheitert es bei dir?


jasocul - Di 01.02.05 16:56

@matze.de:
Du bist gemein. Jetzt lernt Memphis nichts mehr.


IngoD7 - Di 01.02.05 17:00

[OFF-Topic]

matze.de hat folgendes geschrieben:
P.S.:Benutz beim nächsten mal bitte Delphi-Tags


:lol: *lol*
Für welchen Quellcode denn?

*Mal ausnahmsweise einen Anfänger in Schutz nehm* :wink:

[/OFF-Topic]


matze.de - Di 01.02.05 17:00

<--- fühlt sich schuldig :/

@Memphis guck mal, eine for-schleife wird solange durchlaufen, bis die 1 zahl der 2 entspricht. wenn du die erste zahl gleich 5 setzt und die 2 zahl 10 setzt, dann wird diese schleife 6 mal durchlaufen.
während den durchläufen addierst du zum ergebnis das alte ergebnis und die 1 zahl hinzu.

bin nicht so gut im erklären ;D

mfg matze

//Edit: @IngoD7 Hab nur zahlen gesehen und = zeichen. Hab das direkt mit quelltext assoziiert :D ich nehms zurück sry


Memphis - Di 01.02.05 17:12

Erstmal danke für die Begrüßung :)


jasocul hat folgendes geschrieben:
Hallo Memphis :welcome:

Du wirst hier gleich viele böse Kommentare bekommen, dass hier niemand dein Hausaufgaben macht. (Das ist auch richtig so).

Für deine Aufgabe musst du wissen:
1. Wie ist eine For-Schleife aufgebaut.
2. Wie addiere ich zwei Zahlen.
3. Wie deklariere ich Variablen.

Woran scheitert es bei dir?


Ich verlange ja net, dass jemand meine Hausaufgaben macht, wollte ja nur Tips :)

1. Weiß ich
2. Weiß ich
3. Weiß ich

=)
Also das mit der 5 und der 10 war ein Beispiel
Die 2 Zahlen sollen über ein Edit-Feld eingegeben werden.


matze.de - Di 01.02.05 17:13

Memphis hat folgendes geschrieben:
=)
Also das mit der 5 und der 10 war ein Beispiel
Die 2 Zahlen sollen über ein Edit-Feld eingegeben werden.


Wo liegt denn da dein Problem dann? :?:

mfg matze


Memphis - Di 01.02.05 17:16

ahhh

Habs =)

Habs mir nur zu kompliziert gemacht =)


Also danke nochmal für die Hilfe


jasocul - Di 01.02.05 17:18

Ich nehme an, dass du weißt, wie man Edit-Felder auf die Form packt.
Um die Inhalte der Edit-Felder in Zahlen zu wandeln, brauchst du die Funktion StrToInt. Die kannst du in der OnLine-Hilfe (hier auch OH genannt :wink: ) nachlesen.
Wie du sicher stellen kannst, dass der Anwender nur Zahlen eingibt, dazu wirst du mit der Suchfunktion im Forum einiges finden.

Anmerkung:
Dass euer Lehrer das mit einer For-Schleife machen will, stimmt mich nachdenklich. Vielleicht solltest du ihn überraschen und zeigen, wie C.F. Gauss das gemacht hat.


WeBsPaCe - Di 01.02.05 17:31

jasocul hat folgendes geschrieben:
Dass euer Lehrer das mit einer For-Schleife machen will, stimmt mich nachdenklich. Vielleicht solltest du ihn überraschen und zeigen, wie C.F. Gauss das gemacht hat.

Wie hat er's denn gemacht? :gruebel: :D


jasocul - Di 01.02.05 17:38

C.F. sollte zur Strafe (Stören des Unterrichts) die Zahlen 1 bis 100 addieren.
Ihm viel auf, dass 1+100 gleich 101 ist. 2+99 aber auch. Das geht bis 50+51.
Also hat er 101 mal 50 gerechnet und war so doch ziemlich schnell fertig. Daraus kann man sehr schnelle eine Formel ableiten:

Summe = (Anfangszahl+Endzahl) * Anzahl_der_Zahlen / 2


WeBsPaCe - Di 01.02.05 17:46

Oho!! :D Der böse C.F.! :lol:

Das ist dann wahrscheinlich die Aufgabe für den Unterricht. :D

PS.: @Memphis
Das sieht dann so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Tralala;
var zahl1, zahl2: Integer;
begin
zahl1 := StrToInt(InputBox('Frage 1''Anfangszahl'''));
zahl2 := StrToInt(InputBox('Frage 2''Anfangszahl'''));
ShowMessage(IntToStr((zahl1 + zahl2)*(zahl2 div 2)));
end;


jasocul - Di 01.02.05 17:51

Stimmt nur, wenn du bei 1(eins) anfängst.


WeBsPaCe - Di 01.02.05 17:58

jasocul hat folgendes geschrieben:
Stimmt nur, wenn du bei 1(eins) anfängst.

Hmm, hast Recht. Da verlässt man sich EINMAL auf Aussagen anderer und schon funktionierts nich.. :lol:


jasocul - Di 01.02.05 18:07

So stimmt es:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Tralala;
var zahl1, zahl2: Integer;
begin
zahl1 := StrToInt(InputBox('Frage 1''Anfangszahl'''));
zahl2 := StrToInt(InputBox('Frage 2''Anfangszahl'''));
ShowMessage(IntToStr((zahl1 + zahl2)*((zahl2-Zahl1+1div 2)));
end;


F34r0fTh3D4rk - Di 01.02.05 20:19

Nicht getestet aber eleganter (finde ich :mrgreen:)

Delphi-Quelltext
1:
2:
3:
4:
function CFGaussDingels(Zahl1,Zahl2:integer): integer;
begin 
result:= (zahl1 + zahl2)*((zahl2-Zahl1+1div 2); 
end;


Aufruf:

Delphi-Quelltext
1:
showmessage(inttostr(CFGaussDingels(strtoint(edit1.text), strtoint(edit2.text));                    


aber leider beantwortet das nicht die frage bzw löst die aufgabe nicht, da sie ja mittels for schleife gelöst werden sollte (es sei denn der lehrer muss den code net sehen dann ist auch das passable :))


st-matze - Mi 02.02.05 09:36

@FearOfTheDark

Deine Funktion liefert nicht immer das richtige Ergebnis. Nur wenn die Anzahl der zu Summierenden Zahl Gerade ist, haut es hin.



Hab hier auch noch mal nen vorschlag zum schnellen "summieren" :wink:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function sumOneTo(ca: Cardinal) : Cardinal;
begin
  Result := Trunc((1 + ca) * (ca / 2));
end;

function sumAtoB(A,B: Cardinal): Cardinal;
begin
  Result := sumOneTo(B) - sumOneTo(A - 1);
end;


Aufruf:

Delphi-Quelltext
1:
  Ergebnis := sumAtoB(5,10);                    


Bedingungen:
A < B
A > 0


jasocul - Mi 02.02.05 09:56

st-matze hat folgendes geschrieben:
@FearOfTheDark
Deine Funktion liefert nicht immer das richtige Ergebnis. Nur wenn die Anzahl der zu Summierenden Zahl Gerade ist, haut es hin.

Stimmt. Man darf natürlich nicht "div" nehmen :roll:


F34r0fTh3D4rk - Mi 02.02.05 14:39

nein man sollte nur nicht unbedingt integer nehmen ^^