| Autor |
Beitrag |
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 00:19
Moin!
Ich gebe zu, du bist ein echt harter Fall...  Ich grüble jetzt schon den halben Tag drüber nach, was hier für ein Film läuft.  Gibt eigentlich nur zwei Möglichkeiten:
A) Du bist ein Troll und lachst dich gerade auf dem Fussboden halb tot über unsere Klimmzüge...
B) Du bist Schüler (geschätzte Klasse 10, Info-Wahlfach oder AG oder sowas) und hast nicht die blasseste Ahnung, was da im Unterricht läuft. Dein Lehrer hat die Nase voll und dir eine 5-6 angedroht, wenn du nicht diese Aufgabe ablieferst, blöderweise findet sich nix oder niemand im Web, was sich mit wenig Aufwand als eigene Leistung verkaufen lässt...  Die Komplettlösung aus der DP kannst/willst du nicht verwenden, weil der Lehrer sofort merken würde, dass das niemals von dir sein kann.  Tja, Lehrer sind auch nur alte Schüler...
Ich tippe vorerst noch auf die Schüler-Story. ein Troll würde sich nicht die Mühe machen immer um 20 Uhr (mit einer Ausnahme von 21:30) offline zu gehen, auch die Kritikfähigkeit und Reaktionen darauf, sowie die Ungeduld, sind mehr die eines Schülers als eines Trolls
back-to-topic:
Jung, bei dir klemmt eine Synapse, aber sowas von...  Wenn ich mir deinen Code ansehe und den letzten umgangssprachlichen Versuch, den Vorgang zu verallgemeinern, dann kann das nur eines heißen: du hast nicht verstanden, wie eine for-Schleife überhaupt funktioniert, und Variablen sind für dich auch mehr was Esotherisches, als was Verstandenes.  Kann das sein?  Ich rate mal ja, und deshalb setzen wir da wieder an, diesmal noch langsamer.
boxer123 hat folgendes geschrieben : | 1.Schritt: Man vergleicht die zahlen[i] mit der zahlen[2]
2.Schritt: Jetzt vergleicht man die zahlen[2] mit der zahlen[3]
3.Schritt: Jetzt vergleicht man die zahlen[3] mit der zahlen[4] |
Das ist ja schon fast richtig, nur nicht zuende gedacht. Hast du wirklich immer noch nicht gesehen, dass in jedem Schritt eine bestimmte Ziffer/Zahl mit ihrem rechten Nachbarn verglichen wird, weshalb die Schritte alle gleich aussehen (ich habe jetzt mal das Tauschen im Zitat weggelassen, damit man das besser sieht)? Die Beschreibung reduziert sich also auf:
x. Schritt: Man vergleicht zahlen[i] mit zahlen[i+1] und tauscht, wenn die Größenverhältnisse nicht wie gewünscht sind
Für i=1 erhält man deinen 1. Schritt, für i=2 deinen 2. Schritt, usw.usf.
So, jetzt die Preisfrage: mit welchem Wert muss i loslaufen und bei welchem Wert muss i wieder stoppen? Nochmal im Detail, um was es geht: welche Zahlen sollen für i zum Vergleichen und ggfs. Tauschen verwendet werden, und zwar ganz konkret auf dein Beispiel mit den 4 Ziffern bezogen?
Wenn du diese Frage richtig beantworten kannst, machen wir mit dem nächsten Schritt weiter. Solltest du diese Frage nicht korrekt beantworten können, erwarte ich eine ausführliche Erklärung, warum oder was genau du nicht verstanden hast. Und zwar detailiert, nicht nur einen müden Satz.
Wenn dir das zu blöde erscheint, um hier so weiter zu machen, kein Problem für mich. Ich kann das Programmieren/Erklären und mir sitzt auch kein Lehrer im Nacken.  Es liegt ganz bei dir.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: So 23.10.11 08:48
was schreib ich da
es muss anfangen bei i und bei i+1 enden
Moderiert von Narses: Beiträge zusammengefasst
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var i:integer;park:string;doppelt:boolean; begin park:=0; repeat for i:=1 to 4 do if a[i] > a[i + 1] then begin park:= a[i]; a[i]:= a[i+1]; a[i + 1]:= park; doppelt:=false; until doppelt; |
ist es so besser
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 12:06
Moin!
Ich hatte ja schon mit Bangen auf die Antwort gewartet und überlegt, auf welche Weise man das falsch verstehen könnte, aber die Realität ist doch immer wieder überraschend...
boxer123 hat folgendes geschrieben : | | es muss anfangen bei i und bei i+1 enden |
Wie kann in der Antwort ein "i" vorkommen, wo ich doch ausdrücklich daraufhingewiesen habe, dass: Narses hat folgendes geschrieben : | | mit welchem Wert muss i loslaufen und bei welchem Wert muss i wieder stoppen? Nochmal im Detail, um was es geht: welche Zahlen sollen für i zum Vergleichen und ggfs. Tauschen verwendet werden, und zwar ganz konkret auf dein Beispiel mit den 4 Ziffern bezogen? |
die Werte, die man für i einsetzt, gefragt sind?!
Bitte versuche mal zu erklären, an welcher Stelle genau dein Verständnisproblem steckt. Ich kann dir sonst nicht mehr helfen, sorry.
Auf den Code gehe ich mal besser nicht ein, das bringt im Augenblick nix, das ist Kraut und Rüben, mit Senf.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: So 23.10.11 12:11
mein hauptsächliches problem ist, ich weiß nicht was daran falsch ist.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| var Form1: TForm1; i,j,zahl1,zahl2,differenz:integer; park,spielplatz,zahltext,zahltexteins,zahltextzwei:string; doppelt:boolean; a,b:array[1..4] of string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin zahltext:=edit1.text; for i:=1 to 4 do begin a[i]:=copy(zahltext,i,1); b[i]:=copy(zahltext,i,1); end; for i:=1 to 3 do for j:=i+1 to 4 do if a[i]>=a[j] then begin park:=a[i];a[i]:=a[j];a[j]:=park; end; zahltexteins:=zahltext;for i:= 1 to 3 do for j:=i+1 to 4 do if b[i]<=b[j] then begin park:=b[i];b[i]:=b[j];b[j]:=park; end; zahltextzwei:=zahltext; differenz:=Strtoint(zahltexteins)-Strtoint(zahltextzwei);edit2.text:=(differenz);end; |
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 12:24
Moin!
boxer123 hat folgendes geschrieben : | | mein hauptsächliches problem ist, ich weiß nicht was daran falsch ist. |
Nein, dein hauptsächliches Problem ist, dass du glaubst, du könntest ohne verstanden zu haben, was da passiert, Programmieren (lernen).
Wenn ich auf den letzten Code schon nicht eingegangen bin, weil sonnenklar ist, dass du nicht verstehst, was da passiert, was glaubst du, wird es bringen, noch mehr Code zu posten? Nichts, richtig geraten.
Dein "Problem" liegt viel tiefer, nicht im Code. Du musst es irgendwie schaffen, dich damit zu beschäftigen, was genau da passiert. Programmieren besteht nicht aus der Kunst, ein paar Wörter in irgendeiner künstlichen Sprache aneinander zu reihen, sondern daraus, Aufgaben oder besser komplexe Vorgänge in ganz kleine Schritte aufzudröseln. Daraus dann ein Programm zu formulieren, ist nicht viel schwerer, als einen deutschen Text in die englische Sprache zu übersetzen.
Wie sieht´s aus, hast du noch Lust oder Zeit, dich mit den Grundlagen der Programmierung zu beschäftigen, oder dauert dir das hier alles zu lange? Wenn du dich fragst, warum der blöde Kerl nicht einfach mal kurz den Fehler in meinem Programm beheben kann und die drei magischen Worte spricht, mit denen alles klar wird, dann fürchte ich, kann ich dir nicht mehr helfen.
Helfen kann ich dir nur, wenn du dich auf meine (oder irgend eines anderen Erklärenden) Beispiele/Aufgaben einlässt und endlich versuchst, die winzig kleinen Schritte nachzuvollziehen und Erkenntnisse zu sammeln und zu verbinden. Oder mir erklärst, was genau du nicht verstehst - ohne Code, der bringt an dieser Stelle nix.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: Boldar, Christian S., Horschdware
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: So 23.10.11 12:27
ich versuche doch schon alles, ich weiß wie das geht aber mein problem ist, dass in einem code zu wandeln. Das ist mein problem
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 12:36
Moin!
boxer123 hat folgendes geschrieben : | | ich versuche doch schon alles, ich weiß wie das geht |
Ja, du bemühst dich, das will ich gar nicht bestreiten.
Aber du weißt leider nicht, wie es geht. Ist dir das wirklich immer noch nicht klar? Warum glaubst du, kannst du meine (Verständnis-)Fragen nicht beantworten?
boxer123 hat folgendes geschrieben : | | aber mein problem ist, dass in einem code zu wandeln. Das ist mein problem |
Nein, leider nein. Glaub mir, ich habe da etwas Erfahrung, sowas zu beurteilen, das ist sicher nicht dein Problem. Programmieren ist wie gerade schon ausführlicher beschrieben, nicht das "Übersetzen in Programmcode", sondern das Verstehen und Aufdröseln von Problemen. Und du zeigst leider sehr deutlich, dass es genau da hakt.
Gut, machen wir es kurz: Es macht nur noch Sinn hier weiter zu machen, wenn du mir erklärst, was genau du an meiner letzten Frage (die Werte für i) nicht verstanden hast, damit wir zu der richtigen Antwort kommen. Dann sehen wir weiter.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: So 23.10.11 12:41
Hoffentlich ist es richtig,also wenn man
for i:=1 to 4 do
i ist = 1,2,3,4
nehmen wir an die Zahl
7 8 9 6
i 2 3 4
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 12:44
Moin!
Ich bin jetzt für 1-2 Stunden off und denke mal darüber nach, wie man dir erklären kann, was eine Schleife ist, dann sehen wir weiter...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 23.10.11 16:17
OK, vielleicht hilft ja der Weg in umgekehrter Richtung.  Schau´n wir mal.
Betrachten wir den folgenden Programmcode:
Delphi-Quelltext 1: 2:
| for i := 1 to 3 do ShowMessage(IntToStr(i)); | Was passiert, wenn man dieses "Programm" ausführt? Es wird drei mal hintereinander eine Dialogbox angezeigt, in der "1", "2" und "3" ausgegeben wird (kannst du ruhig mal am PC testen).
Wie müsste man das Programm schreiben, wenn der Computer ohne die for-Schleife auskommen soll, oder anders gesagt: was macht der Computer wirklich, wenn das Programm läuft?
Delphi-Quelltext 1: 2: 3:
| ShowMessage('1'); ShowMessage('2'); ShowMessage('3'); | Das ist das gleiche Programm, aber ohne die for-Schleife.  Der Computer macht beim Ausführen des Programmes also drei mal das Gleiche, aber immer mit einem anderen Wert an der Stelle, an der im Code das "i" steht. Welche Werte für "i" genommen werden sollen, gibt man in der Zeile bei dem for mit an.
Zurück zu unserem Problem:
Delphi-Quelltext 1: 2:
| for i := 1 to 4 do if (zahl[i] > zahl[i+1]) then ShowMessage('tauschen'); |
Bitte mach mal das Gleiche wie ich oben im Beispiel und "entferne" die for-Schleife, also schreib das Programm so um, dass keine for-Schleife (oder eine andere Schleife) benutzt wird!
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: Di 25.10.11 19:06
Delphi-Quelltext 1: 2: 3: 4:
| if (zahl[1] > zahl[1+1]) then ShowMessage('tauschen'); if (zahl[2] > zahl[2+1]) then ShowMessage('tauschen'); if (zahl[3] > zahl[3+1]) then ShowMessage('tauschen'); if (zahl[4] > zahl[4+1]) then ShowMessage('tauschen'); |
Moderiert von Christian S.: Doppelte Delphi-Tags entfernt
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 25.10.11 21:43
Moin!
Sehr gut, genau so macht es der Computer auch!  Jetzt besser verstanden, wie eine Schleife funktioniert?
Nächster Schritt, betrachten wir folgenden Programmcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var zahl: array[1..4] of Integer; i: Integer; begin zahl[1] := 4; zahl[2] := 9; zahl[3] := 5; zahl[4] := 6; for i := 1 to 4 do if (zahl[i] > zahl[i+1]) then ShowMessage('tauschen'); | Ja, dieses Programm sortiert nix, das ist klar.  Aber es ist trotzdem noch ein echter Fehler drin. Allerdings ist das Programm selbst korrekt formuliert, der Compiler kann es ohne Fehler übersetzen und auch starten, trotzdem ist ein (logischer) Fehler drin, den der Computer so ohne weiteres nicht finden kann. Welcher?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: Mi 26.10.11 19:31
ich glaube dem arrays wurden schon 1..4 zugewiesen, deshalbt kann man ejtzt nicht einfach sagen ich packe mal eine zahl rein
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 26.10.11 19:39
Moin!
boxer123 hat folgendes geschrieben : | | ich glaube dem arrays wurden schon 1..4 zugewiesen, deshalbt kann man ejtzt nicht einfach sagen ich packe mal eine zahl rein |
Nein, das ist kein Problem, man kann die Array-Speicherplätze beliebig oft mit neuen/anderen Werten überschreiben (wie sollte man sonst Nachbarn vertauschen?).
OK, dann müssen wir wohl wieder die for-Schleife auflösen und einzelne Anweisungen daraus machen. Diesmal bitte direkt die Zahlen in den eckigen Klammern zusammenrechnen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: Mi 26.10.11 19:44
Delphi-Quelltext 1: 2: 3: 4:
| if (zahl[1] > zahl[2]) then ShowMessage('tauschen'); if (zahl[2] > zahl[3]) then ShowMessage('tauschen'); if (zahl[3] > zahl[4]) then ShowMessage('tauschen'); if (zahl[4] > zahl[5]) then ShowMessage('tauschen'); |
so
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 26.10.11 19:50
Moin!
OK, danke, das ist korrekt aufgelöst.
Jetzt schau dir mal genau die Befehle an, einer davon kann nicht ausgeführt werden, weil es da ein Problem gibt. In welcher Zeile ist das Problem und was genau wird nicht funktionieren bzw. warum?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: Mi 26.10.11 19:54
Delphi-Quelltext 1:
| if (zahl[4] > zahl[5]) then ShowMessage('tauschen'); |
hoffe es ist richtig
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mi 26.10.11 20:52
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
boxer123 
      
Beiträge: 68
Erhaltene Danke: 2
|
Verfasst: Mi 26.10.11 20:56
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var zahl: array[1..4] of Integer; i: Integer; begin zahl[1] := 4; zahl[2] := 9; zahl[3] := 5; zahl[4] := 6; for i := 1 to 3 do if (zahl[i] > zahl[i+1]) then ShowMessage('tauschen') |
dieses mal hoffe ich es nicht, dieses mal weiß ich es
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mi 26.10.11 21:04
Ganz genau.
Wir dürfen nicht hinter dem letzten Element zugreifen. Das bedeutet, wenn wir irgendwo auf "das nächste Element" (also das "i+1"-te) zugreifen, müssen wir ein Element vorher anhalten.
Damit also kannst du auch die Sortierfrage beantworten:
Narses hat folgendes geschrieben : | | So, jetzt die Preisfrage: mit welchem Wert muss i loslaufen und bei welchem Wert muss i wieder stoppen? Nochmal im Detail, um was es geht: welche Zahlen sollen für i zum Vergleichen und ggfs. Tauschen verwendet werden, und zwar ganz konkret auf dein Beispiel mit den 4 Ziffern bezogen? |
Da wir den Teil geklärt haben, die allgemeine Frage: wie müssen die Grenzen (also erstes und letztes Element) aussehen, wenn du eine allgemeine Liste hast?
Delphi-Quelltext 1:
| var Ziffer: array of Integer |
Hinweis: ein solches "Dynamisches Array" fängt bei 0 an, nicht bei 1 wie Narses oben. Seine Länge kann man mit der Funktion Length() erfahren.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
|