Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   Beispiele für Schleifen gesucht (https://www.tweakpc.de/forum/programmiersprachen/45780-beispiele-fuer-schleifen-gesucht.html)

kanonenfutter 18.02.2007 19:30

Beispiele für Schleifen gesucht
 
Hallo leutz
Ich brauch je ein Anwendungsbeispiel für ne For-To-/While-Do- und Repeat-Until-Schleife. Sollten nach Möglichkeit einfache Beispiele sein, die auch ein Amateur programmieren könnte - speziell für Delphi.

Ich brauch das für nen Vortrag, mir fallen nur absolut keine ein, da die Bsp. nich ausm Netz sein sollen - deshalb setz ich auf euch mir zu helfen.

thx für jeden post.

redfalcon 18.02.2007 19:38

AW: Beispiele für Schleifen gesucht
 
Fakultäten (!n) und Fibonaccizahlen würden mir spontan einfallen.

kanonenfutter 18.02.2007 19:43

AW: Beispiele für Schleifen gesucht
 
Kannste das noch nen bissl genauer beschreiben - so mit eigenen Worten was im quelltext stehen müsste (Anweisung,Bedingung) - thx erstmal.

redfalcon 18.02.2007 19:51

AW: Beispiele für Schleifen gesucht
 
Naja Fakultäten sind noch relativ einfach. !5 (Fakultät von 5) wäre z.B. 5*4*3*2*1 = 120.

In Java/Pseudocode würde das so aussehen:

[code]
variable input;
variable ergebnis = 1;

[B]Ausgabe[/B]("Zahl eingeben: ");
input=Usereingabe


[B]wenn[/B](input==1){
[B]Ausgabe[/B]("Fakultät von 1 ist 1")
}
[B]sonst[/B] {
[B]für[/B] (variable temp=input; temp > 0; temp--) {
ergebnis = ergebnis * temp;
}
[B]Ausgabe[/B]("Fakultaet von "+input+" ist "+ergebnis+".");
}
[/code]

Fibonaccizahlen hab ich aber nie gemacht, hat nur unser Infolehrer mal im Zusammenhang mit Rekursion erwähnt. Für Delphi hab ich [url=http://www.delphipraxis.net/post86283.html]hier[/url] was gefunden.

EoN 18.02.2007 20:47

AW: Beispiele für Schleifen gesucht
 
fib(x) = fib(x-1) + fib(x-2) für n>=2
fib(1) = 1 und fib(2) = 1

Wobei ne Schleife != Rekursion ist. Es lässt sich zwar (fast) jede Schleife in ne Rekursion umwandeln und umgekehrt, allerdings muss man es anders implementieren.

daPR 18.02.2007 21:41

AW: Beispiele für Schleifen gesucht
 
vll. was gaanz schlichtes: ne trenn"linie"
zB als Funktion, bei der man die anzahl der striche(länge) angeben kann. (hier C++)

[code]
void linie (int leange)
{
int i;
for (i=0,i<leange,i++)
{
cout <<"-";
}
cout << endl;
}

[/code]


oder, für php essentiell, das abfragen (in diesem fall auflisten) von Datenbankeinträgen.


[code]
$query=mysql_query("select id,name from user order by name desc"); // Welche Einträge

while ($user=mysql_fetch_assoc($query)) { // alles in den Array $user schreiben
echo $user['id'].'&nbsp;'.$user['name'].'<br />'; // Ausgeben
}

[/code]

sk8er_boy_2004 18.02.2007 22:41

AW: Beispiele für Schleifen gesucht
 
was hälts von was viel besserem?

Is von meiner schule:

[URL="http://www.lenne-schule.de/partner/links/delphi/"]http://www.lenne-schule.de/partner/links/delphi/[/URL]

kanonenfutter 19.02.2007 12:37

AW: Beispiele für Schleifen gesucht
 
Klingt schon mal sehr interessant - daher vielen dank an alle. Das problem ist nur, ich meinte das mehr für amateure - also etwas, dass man mit einfachsten kenntnissen programmieren kann.;)

Für eine For-To schleife könnt ich ja z.B. eine bestimmte Zahl der Fibonaccizahlen berechnen lassen.

Aber für die beiden anderen (while-do und Repeat-Until) fällt mir nix ein. Hab ma was probiert - und meinen rechner in ne endlosschleife geschickt...:inflames:

tobsen 19.02.2007 13:32

AW: Beispiele für Schleifen gesucht
 
Alle folgenden Beispiele machen das gleiche: Es werden die Zahlen 0 bis 10 ausgegeben.



Beispiel für [U]While[/U] Schleife: ([B]Java[/B])
[code]
int x = 1 ;

while(x <= 10) {[INDENT]System.out.println(x);
x = x + 1;
[/INDENT]}
[/code]
Beispiel für [U]While-DO[/U] Schleife: ([B]Java[/B])
[code]
int x = 0;

do {[INDENT]System.out.println(x);
x = x + 1;
[/INDENT]} while(x <= 10);
[/code]


Beispiel [U]While-DO[/U] Schleige ([B]Delphi[/B]):
[code]
[FONT=Courier New][SIZE=2] var
x : Integer;

begin
x:= 1;

[COLOR=black]While x [/COLOR]<= 10 do
begin
[/SIZE][/FONT][INDENT][FONT=Courier New][SIZE=2]ShowMessage(IntToStr(x));
x := x + 1;[/SIZE][/FONT]
[/INDENT][FONT=Courier New][SIZE=2] end;
end;[/SIZE][/FONT]
[/code]

Beispiel für [U]Repeat-Until[/U]: ([B]Pascal[/B])
[code]
VAR x:integer;
BEGIN[INDENT]x:=0

Repeat[INDENT]write(x);
x := x + 1;
[/INDENT]UNTIL x>10
[/INDENT]END
[/code]

EoN 19.02.2007 13:41

AW: Beispiele für Schleifen gesucht
 
[QUOTE=kanonenfutter]Klingt schon mal sehr interessant - daher vielen dank an alle. Das problem ist nur, ich meinte das mehr für amateure - also etwas, dass man mit einfachsten kenntnissen programmieren kann.;)

Für eine For-To schleife könnt ich ja z.B. eine bestimmte Zahl der Fibonaccizahlen berechnen lassen.

Aber für die beiden anderen (while-do und Repeat-Until) fällt mir nix ein. Hab ma was probiert - und meinen rechner in ne endlosschleife geschickt...:inflames:[/QUOTE]
Da kannst Du genau das gleiche programmieren. Jede For-Schleife lässt sich in ne while und do until Schleife umwandeln, musst nur die Bedinungen entsprechend anpassen:
[code]for(i = 0, i < 10; i++)
{
...
}[/code]
macht das gleiche wie:
[code]
i = 0;
while(i < 10)
{
...
i++;
}
[/code]
oder:
[code]
i = 0;
do
{
...
i++;
} until(i < 10)
[/code]
Im letzten Fall wird die Bedingung erst geprüft nachdem die Schleife einmal durchlaufen wurde und die Zählvariable um eins inkrementiert wurde. Bei den anderen beiden wird vor dem Durchlauf der Schleife schon geprüft ob die Bedingung schon verletzt wurde. Bei den beiden oberen würden die Schleifen im Falle von (i == 11) gar nicht mehr durchlaufen werden. Bei der letzten Schleife schon, da erst nach dem Durchlauf geprüft wird, ob (i < 10) == true ist.
Das gleiche ließe sich auch durch eine Rekursion realisieren:

[code]public test(int i)
{
...
if (i < 10) return test(i +1);
else return i;
}[/code]
Hier wird jetzt immer wieder die Methode test aufgerufen mit einem um 1 größeren i Wert. Sobald (i >= 10) == true ist wird der aktuelle i Wert zurück an das Ursprungsprogramm gegeben.

kanonenfutter 19.02.2007 13:50

AW: Beispiele für Schleifen gesucht
 
Wo besteht denn der unterschied zw. einer While und einer While-do schleife?

EoN 19.02.2007 13:53

AW: Beispiele für Schleifen gesucht
 
[QUOTE=kanonenfutter]Wo besteht denn der unterschied zw. einer While und einer While-do schleife?[/QUOTE]
Das sollte im Syntax der unterschiedlichen Programmiersprachen liegen. Hatte jetzt mit Pascal/Delphi die letzen 6-7 Jahre nichts mehr zu tun, daher sind die Beispiele oben eher an Javacode angelehnt. Glaub aber in Pascal war die while Schleife so definiert:
[code]
while(...)
do
...
loop
[/code]
In Java ists:
[code]
while(...)
{
...
}[/code]
Aber such da am besten noch mal bei der Suchmaschine Deiner Wahl nach dem richtigen Syntax zu Pascal/Delphi.

kanonenfutter 19.02.2007 14:00

AW: Beispiele für Schleifen gesucht
 
Also besteht der unterschied nur zw. den programmiersprachen?!

EoN 19.02.2007 14:02

AW: Beispiele für Schleifen gesucht
 
[QUOTE=kanonenfutter]Also besteht der unterschied nur zw. den programmiersprachen?![/QUOTE]
Der Unterschied besteht AFAIK im unterschiedlichen Syntax der Programmiersprachen - ja.

tobsen 19.02.2007 14:09

AW: Beispiele für Schleifen gesucht
 
[quote=kanonenfutter]Also besteht der unterschied nur zw. den programmiersprachen?![/quote]
Das hat Dir Eon schon verraten:
[QUOTE=Eon]Im letzten Fall wird die Bedingung erst geprüft nachdem die Schleife einmal durchlaufen wurde und die Zählvariable um eins inkrementiert wurde. Bei den anderen beiden wird vor dem Durchlauf der Schleife schon geprüft ob die Bedingung schon verletzt wurde. Bei den beiden oberen würden die Schleifen im Falle von (i == 11) gar nicht mehr durchlaufen werden. Bei der letzten Schleife schon, da erst nach dem Durchlauf geprüft wird, ob (i < 10) == true ist.[/QUOTE]

WHILE: ERST wird geprüft, dann ausgeführt wenn Bedingung wahr.
DO-WHILE: Es wird IMMER zunächst einmal die SChleife durchlaufen, DANN wird erst geprüft. Falls die Bedingung wahr ist, dann wird die schleife wieder durchlaufen.

Unterschied: Bei DO_WHILE wird die Schleife IMMER mind. einmal durchlaufen. Bei WHILE evtl. gar nicht, wenn die Bedingung schon von Anfang an falsch ist.

kanonenfutter 19.02.2007 14:12

AW: Beispiele für Schleifen gesucht
 
Hab folgende Idee für ne While-Do:

Ich lass den rechner 2 zufallszahlen erzeugen, welche der benutzer dann addieren und die summe in ein fenster eingeben muss. Jetzt kommt der befehl "solange das ergebnis falsch ist, wird ein bestimmter text ausgegeben" - also while ergebnis not = Benutzereingabe do ausgebe eine textes.

Würde das funzen??? Hab das so oder so ähnlich schon mal probiert, allerdings wird bei mir kein text ausgegeben, wenn das ergebnis richtig ist (while ergebnis = benutzereingabe do ausgabe text). Andernfalls hab ich nur ne endlosschleife kreiert.:|

Bitte um hilfe!!!!!

tobsen 19.02.2007 14:22

AW: Beispiele für Schleifen gesucht
 
Also das Beispiel finde ich nicht so toll, vor allem für einen Vortrag. Schleifen sollen ja dazu da sein um z.b.ein Array zu durchlaufen oder andere Operationen zu wiederholen, solange eine Bedingung wahr ist. In deinem Beispiel kann ja nichts wirklich "durchlaufen" werden. Theoretisch kann man sowas schon machen mit einer Schleife, indem man die Schleife endlos laufen lässt, und falls das ergebnis richtig ist, springt man raus, also:
[code]
while(true) {[INDENT]if(eingabe == ergebnis) {[INDENT]System.out.println("Das Ergebnis ist richtig!");
break;
[/INDENT]}

System.out.println("Das Ergebnis ist falsch!");
[/INDENT]}

[/code]
Aber schön finde ich sowas nicht! Man macht sowas normalerweise z.b. mit Events, aber das ist eine ganz andere geschichte ;-)

\\ EDIT

Ein Beispiel was mir spontan einfällt (rein zur Illustration der SChleife):
(DELPHI - PSEUDO)
[code]
Fritz = hungrig;

while (Fritz ist hungrig) DO
Begin[INDENT]Fritz isst etwas;
[/INDENT]End

[/code]

kanonenfutter 19.02.2007 14:25

AW: Beispiele für Schleifen gesucht
 
Na gut - dann macht mal einfach umzusetzende (für amateure) vorschläge - thx bis hierhin!

redfalcon 19.02.2007 14:27

AW: Beispiele für Schleifen gesucht
 
[QUOTE=kanonenfutter]Hab folgende Idee für ne While-Do:

Ich lass den rechner 2 zufallszahlen erzeugen, welche der benutzer dann addieren und die summe in ein fenster eingeben muss. Jetzt kommt der befehl "solange das ergebnis falsch ist, wird ein bestimmter text ausgegeben" - also while ergebnis not = Benutzereingabe do ausgebe eine textes.

Würde das funzen??? Hab das so oder so ähnlich schon mal probiert, allerdings wird bei mir kein text ausgegeben, wenn das ergebnis richtig ist (while ergebnis = benutzereingabe do ausgabe text). Andernfalls hab ich nur ne endlosschleife kreiert.:|

Bitte um hilfe!!!!![/QUOTE]

Warum sollte das nicht funzen? Probier es doch einfach aus. Wenn du spezifische Probleme mit dem Code hast frag einfach. Wie sollen wir ohne Code wissen, wo der Fehler ist?


/Edit:

Ich weiss ja nicht, vor wem du den Vortrag halten sollst. Wenn aber Lehrer dabei sind, die etwas Ahnung von Informatik haben, würde ich nicht so ein triviales Beispiel wie "Lese-Elemente-aus-Array" nehmen, sondern eben irgendwas bekanntes, was anspruchsvoller ist (Die obengenannten Fakultäten oder Fibonacci-Zahlen, gibt bestimmt noch mehr in die Richtung).

kanonenfutter 19.02.2007 14:45

AW: Beispiele für Schleifen gesucht
 
Sitz grad und probier die fibonacci zahlen - kann mir mal jemand sagen, wie ich in delphi indizes vergebén kann??

Ich will das folgendermaßen machen:
a1:=0;
a2:=1;
for i:=1 to n do an:=a(n-2)+a(n-1);

Heißt also, dass die ersten beiden glieder sich zu 0 und 1 ergeben (1 und 2 bei a1 und a2 sollen als indize herhalten). Dann soll bei Eingabe von n (n-tes glied der kette) das entsprechende Glied ausgegeben werden -> a(n-2)+a(n-1) - wobei (n-2) und(n-1) wieder als indize gehandhabt werden sollen.

Ich hoffe ich konnte meine absicht einigermaßen verständlich rüberbringen - hat jemand ne idee was die indizes angeht???

tobsen 19.02.2007 14:47

AW: Beispiele für Schleifen gesucht
 
[quote=redfalcon]Warum sollte das nicht funzen? Probier es doch einfach aus. Wenn du spezifische Probleme mit dem Code hast frag einfach. Wie sollen wir ohne Code wissen, wo der Fehler ist?


/Edit:

Ich weiss ja nicht, vor wem du den Vortrag halten sollst. Wenn aber Lehrer dabei sind, die etwas Ahnung von Informatik haben, würde ich nicht so ein triviales Beispiel wie "Lese-Elemente-aus-Array" nehmen, sondern eben irgendwas bekanntes, was anspruchsvoller ist (Die obengenannten Fakultäten oder Fibonacci-Zahlen, gibt bestimmt noch mehr in die Richtung).[/quote]

Bin der gleichen Meinung. Nur hieß es nicht dass es möglichst elementar und einfachs ein soll?
Einfach: Zahlen von 0 bis 10 ausgeben
Attraktiver: Fibonacci, Fakultäten oder auch Primzahlen bis 100 ausgeben (verschachtelte SChleifen *hrhr* :-D)

kanonenfutter 19.02.2007 15:31

AW: Beispiele für Schleifen gesucht
 
Glaub, dass mit den indizes (s.o.) hab ich jetzt raus. Mus einfach a[1], a[2] u.s.w schreiben für a[n] ergäbe sich dann:
a[n]:=a[n-2]+a[n-1];

Allerdings bekomm ich nur zahlen überhalb der hunderttausender ausgegeben...?! Außerdem kapier ich dieses Array-Zeug nich so wirklich, also wie ich damit meine variablen deklarieren muss etc.
Bei mir stehts im moment so da:

var n,z,i : Integer; (n=Zahl des Glieds | z=Auszugebende Zahl | i=Schleifenvariable)
a : array [1..10] of Integer;
begin
n:=StrToInt(Edit1.Text);
for i:=1 to n do begin
a[1]:=0;
a[2]:=1;
a[n]:=a[n-2]+a[n-1];
a[n]:=z;
Panel1.Caption:=IntToStr(z);
end;
end;

end.

Kompilieren tut er das ja auch - ausgegeben wird aber nur rotz...

EoN 19.02.2007 15:52

AW: Beispiele für Schleifen gesucht
 
Du musst wenn Du ein Array durchgehst, natürlich die Laufvariable der Schleife benutzen:
[code]
n = 10
for i:=1 to n do begin
[COLOR="Red"]a[1]:=1;[/COLOR]
a[2]:=1;
[COLOR="Red"]a[i]:=a[i-2]+a[i-1];[/COLOR]
[COLOR="Red"]z := a[i];[/COLOR]
Panel1.Caption:=IntToStr(z);
end;
[/code]
Für i ist beim ersten Durchlauf i = 1, beim zweiten Durchlauf ist i = 2.
Das Array kannst Du Dir dabei in etwa so vorstellen:
a[1] | a[2] | a[3] | a[4]
__1_|__1_ |__2__|__3 (Die Unterstriche dienen nur als Platzhalter).
Das Array ist quasi ein Karton in dem es mehrere Fächer mit den Namen 1,2,3,4 gibt. Im Fach mit dem Namen "1" liegt die 1. Im Fach mit dem Namen 4, die 3, etc..
Des Weiteren ist bei den Fibonaccizahlen fib(1) = 1 und nicht 0 wie von Dir in Deinem Code angegeben.
Zusätzlich steht die Variable der Du einen Wert zuweisen willst immer links. Die Variabel die den Wert hat, die der anderen zugewiesen werden soll demnach rechts.
Hab mal die Änderungen an Deinem Code farbig markiert.

kanonenfutter 19.02.2007 16:26

Danke - werd ich gleich ma ausprobieren - meld mich gleich wieder.

THX EoN! :mrgreen:
Hat aber nochn paar praxisproblemchen: Wenn ich 1 oder 2 eingebe, dann kommen ganz utopische zahlen wie 906251136 o.s.ä. - woran liegt das und wie kann ich das beheben. Andere zahlen so ab 3 bis 34 funzen, sobald ich allerdings auf über 50 o.s. gehe, dann werden die Zahlen extrem groß, was ja auch verständlich ist, allerdings ins negative?! :confused: :confused: :confused:

Hoffe du oder andere können mir nochma helfen...:-o

Hey, schlaft ihr schon alle? :)
Ich brauch nochma eure hilfe:
1. siehe oberen beitrag :?
2. Wie müsste denn der quelltext für die Fakultät aussehen?? - Hab da ma was probiert - will aber nich richtig funzen?! :x

Thx an alle die schnell noch ma was posten, da ich das zeug voraussichtlich morgen brauch - THX :-D

redfalcon 19.02.2007 18:51

AW: Beispiele für Schleifen gesucht
 
Keine Mehrfachposts! Dafür gibts ne Editfunktion.

"Hab da mal was probiert..."

Was denn? Poste doch einfach deinen Quelltext, sonst können wir dir nicht helfen. Außerdem sollst DU den Vortrag machen. Was nützt es dir denn, wenn wir hier Quelltext posten, und du ihn nicht verstehst? Den Pseudocode für Fakultätenberechnung hab ich dir oben schon gepostet.

kanonenfutter 19.02.2007 19:23

AW: Beispiele für Schleifen gesucht
 
Is ja alles richtig - sry. Aber im quelltext von EoN is irgendetwas noch nich ganz richtig - und ich weiß ums verrecken nich was!

PS: Deinen Pseudocode hat ich wohl übersehen...

EoN 19.02.2007 20:36

AW: Beispiele für Schleifen gesucht
 
Was kommt denn als Ausgabe?

kanonenfutter 21.02.2007 16:27

AW: Beispiele für Schleifen gesucht
 
Moment...ah ja - wenn ich eine zahl eingebe, die größer ist als 46, dann kommen entweder total unrealistische zahlen raus (z.B. bei Eingabe=47 -> Ausgabe 923462123, bei 48 9264373 ->> ab 47 werden die zahlen plötzlich wieder kleiner, wie dir vielleicht aufgefallen ist hab ich mit absicht bei 47 eine zahl mit 9 ziffern und bei 48 eine mit nur noch 7 ziffern angegeben:confused: ) oder die zahlen gehen plötzlich in negative - was ja völlig unmöglich ist. Von 0 bis 45/46 funzt es aber soweit...;)

Solltest du keine Lsg. finden, dann vesuch ich eben zahlen über 46 zu vermeiden...:)

EoN 21.02.2007 18:50

AW: Beispiele für Schleifen gesucht
 
Na ja eine normale Interger Variable nur 32Bit für die Zahlenspeicherung hat, lassen sich damit bei vorzeichnenbehafteten Zahlen (signed Integer) max Zahlen aus dem Bereich von -2.147.483.648 bis 2.147.483.647. Durch die Implementierung der Zahlen innerhalb des PC's "läuft die Variable über", wenn Du zu 2.147.483.647 eins dazuzählst. D.h. sie kippt auf -2.147.483.648 und fängt von dort an wieder weiter an hochzuzählen.
Um den Bereich der Zahlendarstellung zu erweitern kannst Du zum einen unsigned Integer nehmen. Dabei gibt es dann keine Negativen Zahlen und wenn die Variable überläuft fängst Du wieder bei der Null an. Zum anderen gibt es auch noch größere Datentypen wie z.B. signed/unsigned Long mit 64Bit und evtl. signed/unsigned Int128 mit 128Bit. Solltest Du noch größere Zahlen verarbeiten wollen musst Du Dir in dem fall wohl einen eigenen Datentyp schreiben, sofern es in dem Framework keinen Datentyp für extra große Zahlen gibt.
In Java z.B. ne extra Klasse für große Zahlen. Ich weiß jetzt leider nicht ob Delphi da was für vorgesehen hat.

kanonenfutter 22.02.2007 16:46

AW: Beispiele für Schleifen gesucht
 
Wenn ich also beim normalen integer bleiben will, kann ich halt nur bis zum 46. glied gehen, da sonst die zahlen zu groß sind?!

kanonenfutter 06.03.2007 17:39

AW: Beispiele für Schleifen gesucht
 
Hallo nochmal - hab da noch mal ne frage. Diesmal gehts um das ausgeben aller primzahlen im bereich von 1 bis n. Ich hab fast keine Ahnung wie ich das anstellen soll. Wir sollen dazu den operator "mod" sowie eine while-schleife verwenden.

Könnt ihr mir zumindest pseudmäßig erklären, wie ich vorgehen muss???

THX

Feanor 06.03.2007 23:32

AW: Beispiele für Schleifen gesucht
 
Hi,

auf wikipedia ist ein ganzer Artikel der Primzahlberechnung gewidmet, sogar mit Programmbeispielen:
[B][url]http://de.wikipedia.org/wiki/Primzahltest[/url][/B]

Da sind auch Algorithmen dabei, die mit modulo und Schleifen rechnen, also wahrscheinlich genau das, was du suchst.

kanonenfutter 07.03.2007 18:43

AW: Beispiele für Schleifen gesucht
 
THX - hat mir sehr geholfen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.