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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.

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