![]() |
5 Programmteile, Erklärung gesucht, bitte.
Hallo zusammen,
Bin grade dabei Programmieren zu lernen und hab paar Aufgaben gefunden die mich iwie verunsichern. Also stelle ich euch mal die Fragen: Was passiert im folgenden Programmteil ch:="1"; i:=2; ch:=(ch" ") and (i>0); wie ich das verstehe, hier handelt es um den TYP CHAR und INTEGER. Char hat das Zeichen 1 und i hat den wert 2 jetzt bekommt char - char zugewiesen? und dann wird i verglichen in char? Wie können die typen überhaupt in einer Anweisung sein oder versteh ich da was falsch? Was passiert im folgenden Programmteil? For ik:= 1 to i+3 do begin writeln("abc"); i:=i+1; end; Was ich hier verstanden habe, ist das die For - Schleife bei 1 anfängt so und dann i+ 3 die schleife 3 mal ausführt d.h. 3 mal wird abc ausgegeben wie ich das verstanden habe aber was soll das mit i:=i+1 ich meine was zählt er hier hoch? ist das nicht iwie überflüssig? Was passiert im folgenden Programmteil ch:=" "; while(not(eof(input))) do read(ch); Write(ch); Was ich hier denke, ch hat ein Zeichen , so jetzt führt er eine while schleife durch und liest das Zeichen von der Datei Input. Die EOF Funktion ist ja solange false bis das Ende der Datei erreicht wird, dann gibt er true zurück wenn es erreicht wurde. Also gibt er "" ein und aus? Was passiert im folgenden Programmteil I:=-2 repeat Writeln("abc", i); until i > 0; Also i hat den wert -2 dann machen repeat schleife d.h. auch wenn die bedingung nicht wahr ist am anfang wird es trotzdem 1 mal ausgeführt so ergibt dann abc und - 2 aus so dann versteh ich nicht warum unten until i > 0 steht ich meine das wird eh nicht zu treffen i wird immer -2 bleiben was macht dann das Programm? 100 mal abc -2 ausgeben :D? Was passiert im folgenden Programmteil Str:="12345rt"; Str2 := copy (str, 1,4); Str2 := copy (Str, 3,3); Das versteh ich nicht ganz also wir haben einen String mit "12345rt" So jetzt haben den Sting2 benutzen die FUnktion Copy also kopiert er den ersten String aber was ist mit dem 1,4? Kopiert er nur die Zeichen 1 und 4? Was passiert im folgenden Programmteil for i:= 1 to 100 do for j:= 1 to 100 do if (i*J mod 90) = 0 then writeln( ́ i,j waren‘, i,‘ ́,j) Das verstehe ich nicht ganz also ich habe 2 for schleifen. Beide gehen von 1 bis 100 durch so dann habe ich ein If Statement und dort wird i mal j genommen und dann mod 90( was bedeutet das?) und es muss 0 ergeben wenn es nicht 0 ergibt, dann gibt er aus i j waren .... so also müssen doch die ersten 3 Ausgaben lauten: i und j waren 190 i und j waren 245 i und j waren 290 also das kam raus als ich es nachprogrammiert habe Könnt ihr mir helfen ? :D Wäre für alle Hinweise dankbar! |
AW: Hilfe
Hallo,
schau mal bitte hier: ![]() Da hat wohl jemand zum Teil die gleichen Aufgaben bekommen. |
AW: Hilfe
ach wie witzig ist das denn :D Danke :)
|
AW: Hilfe
Ja gut bei den dreien lag ich richtig oder fast richtig :D
aber zu 2, 4 und 5 bin ich trotzdem zienmlich unsicher ob ich richtig liege :( |
AW: Hilfe
1. Aufgabe: Deine Schlussfolgerung ist richtig, das geht so nicht wirklich.
2. Aufgabe: Versuche das bitte mal genau nachzuvollziehen: ik wird von 1 bis i + 3 hochgezählt. In der Schleife wird i jeweils um 1 erhöht. Auch ik wird je Schleifendurchlauf um 1 erhöht. Wann wird dann i + 3 erreicht? 3. Aufgabe: Was ist in ch, wenn die Schleife beendet wird? 4. Aufgabe: Wann wird die Bedingung i > 0 erreicht sein, wenn i = -2 ist und nicht verändert wird? Nach 100 Durchläufen? Wieso? 5. Aufgabe: Deine Vermutung bezüglich des Kopierens ist korrekt. Was steht dann in Str2? 6. Aufgabe: Das von Dir angegebene Ergebnis ist falsch. Da hast Du in der Ausgabe einen Programmierfehler. |
AW: Hilfe
Zitat:
@linomail: Bitte lies dir nochmal die FAQ durch, die du bei der Anmeldung bestätigt hast. Editiere dann bitte deinen ersten Post, da drin in dem "erweiteren" Editor kannst du dann dementsprechend den Thread-Titel ändern. |
AW: Hilfe
Vorsicht ironie:
ihr solltet in die AGB mal den Hinweis aufnehmen, dass "Hausaufgaben" als solche vom TE deklariert werden sollten :stupid: |
AW: Hilfe
Bitte gib deinem Thread einen aussagekräftigen Titel, der dein Problem kurz zusammenfasst. Um Hilfe bittet hier so ziemlich jeder.
|
AW: Hilfe
Das sind keine Hausaufgaben, Ich habe diese Porgrammteile aaus einem Script von der Hochschule Osnabrück.
@himitsu welche Schreibfehler in dem Code oder was ich geschrieben habe? Hätte nicht erwartet dass hier soein ähnliches Thema ist :D Sorry aber was soll ich denn jetzt ändern versteh ich nicht. @nahpets aufgabe 2: Asso also zählt er i hoch bis er 3 erreicht hat? und darum wird es 3 mal ausgegeben? Aber ist i+1 wirklich von nöten. Ich meine vorhin als ich das ganze auf ideone.com nachprogrammiert habe, habe ich i nicht eins hochzählen lassen und kam auf das selbe ergebnis Aufgabe 3: Also ein leerzeichen? ich meine der schreibt ja immer nur ein leerzeichen rein? Aber er gibt nur den letzten an von der Datei oder? Aufgabe 4: Ja bei der war ich mir iwie sicher also hab ich das nachprogrammiert. Aber ich glaube ich verstehe iwie repeat nicht ich meine i ist ja -2 aber der Wert wird ja nicht verändert also ich meine wie soll i größer als 0 werden? Als ich das nachprogrammiert habe gab er erst aus ABC - und dann gefühlt 100 mal ABC -2. Aus der werde ich echt nicht schlau :( Aufgabe 5: Also wenn meine Vermutung dann richtig ist dann "1433" ? Aufgabe 6: Ach ich meint i und j waren 1 und 90 2 und 45 2 und 90 müsste doch eigentlich richtig sein Danke für deine schnelle Hilfe :) PS: ja mache ich Entschuldige. :-D |
AW: Hilfe
Delphi-Quellcode:
Soweit ich weiß ist das sogar eine Totsünde die Iterations-Variable einer For-Schleife selber hochzuzählen.
writeln("abc"); i:=i+1;
|
AW: Hilfe
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Kaum zu fassen, dass solche Aufgaben aus einem Script einer Hochschule sind :roll:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i: integer; begin for i := 0 to i + 3 do begin ShowMessage('ABC'); i := i + 1; end; end; // [dcc32 Fehler] Unit1.pas(134): E2081 Anweisung für FOR-Schleifenvariablen 'i' |
AW: 5 Programmteile, Erklärung gesucht, bitte.
ja deswegen meinte ich ja man kann es ja weglassen oder nicht? Deswegen kommt man doch auf das selbe ergebnis.
|
AW: Hilfe
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Ihr macht mich verrückt :D :-D
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
@a.def hä dein error versteh ich jetzt nicht, bei mir war kein fehler:/
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Dein Script hat mehr Fehler als die Politik gute Leute hat, mehr muss man nicht wissen :stupid:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Delphi-Quellcode:
Die Zählvariable der for-Schleufe ist ik. In der Schleife hochgezählt wird aber i.
For ik:= 1 to i+3 do
begin writeln("abc"); i:=i+1; end; |
AW: 5 Programmteile, Erklärung gesucht, bitte.
aso stimmt du hast ik vergessen :D deswegen
|
AW: Hilfe
Zitat:
Zitat:
Zitat:
Also
Delphi-Quellcode:
Wann wird hier wohl ik = i + 3 erreicht werden. Bevor die Sonne in 'ner Supernova das zeitliche segnet oder eher nachher? Wenn vorher, erkläre bitte wieso, und sag' nicht beim nächsten Stromausfall ;-)
ik := ik + 1;
i := i + 1; Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
@nahpets
For ik:= 1 to i+3 do begin writeln("abc"); i:=i+1; end; Ja aber ich verstehe den Sinn nicht. Ich habe kapiert, dass die Schleife ik 1 bis i+3 hochzählt. D.h es wird solange hochgezählt bis i auf 3 ist? Eine endlosschleife ist es ja nicht oder? ich habe ja nachprogrammiert er lief 3 mal durch. Aufgabe 3 er speichert ja für char:=" " also schreibt er " " rein bis das Ende erreicht wird. Es wird das letzte Zeichen vor dem Ende der Eingabe ausgegeben " ". Aufgabe 5: STR 2:= 1234345 ?? |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Wenn i=5 ist würde i 5 bis 13 zugewiesen worden sein. |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Was hier noch fehlt ist die Initialisierung der Variablen i. Aber selbst wenn die nicht initialisiert wäre. Sobald i >= -1 ist, ist das eine Dauerschleife die nicht mal nach einer Supernova aufhören würde zu zählen.
Delphi-Quellcode:
for ik:= 1 to i+3 do
begin writeln("abc"); i:=i+1; end; |
AW: Hilfe
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
ja bei mir war es auch keine endlosschleife :?
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Delphi-Quellcode:
Die Aufgabe ist so schlecht und sinnfrei, dass hier selbst die Profis (die anderen hier im Thema) nicht damit klar kommen :stupid:
procedure TForm1.Button1Click(Sender: TObject);
var ik, i: integer; begin i := 5; for ik := 1 to i + 3 do begin ListBox1.Items.Insert(0, IntToStr(i)); i := i + 1; end; end; // Gibt aus: // 5, 6, 7, 8, 9, 10, 11, 12 |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Warum machst du IntToString? ist das nötig um die Variable auszugeben?
Ja und dann versetz dich in meine Lage :D Ich hoffe die Programmteile, in der Klausur, sind besser als die hier :D |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Wenn man eine Variable welche eine positive oder negative Ganzahl beinhaltet lesbar ausgeben möchte, muss man diese erst in einen String ("Zeichenkette") umwandeln.
Dafür ist IntToStr da. Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Zitat:
Rein logisch betrachtet wäre es eine Dauerschleife. Hier macht einem der Compiler aber einen Strich durch die "Logik". Bei i + 3 handelt es sich ja im Prinzip um eine Konstante. Wenn du eine solche Schleife mal mit einer TObjectList nachbaust und pro Durchlauf ein Objekt erzeugst und immer bis List.Count zählst, dann sollte das der Erwartung einer Dauerschleife entsprechen. Es sei denn hier würde sich das Programm dann auch einmal den Count der Objekte zwischenspeichern und dann immer nur noch bis dorthin zählen. Das müsste ich jetzt auch testen. Kann ich so aus dem Kopf nicht sagen. :| |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Ja doch InttoStr kenne ich ja. Ja das gefühl habe ich auch dass es düster wird. Naja ich muss mal mit meinem Prof reden :D was er sich dabei gedacht hat :D
Trotzdem Danke, dass ihr euch damit auseinandergesetzt habt sowas ist ja nicht selbstverständlich. Ihr habt mir sehr geholfen :). Jetzt spiele ich einfach mal bisschen mit den Programmcodes :D |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Nimm Dir bitte ein Stück Papier, ruhig ein großes und schreibe für jeden Schleifendurchlauf auf, welchen Inhalt jeweils ik und i haben, zuzüglich i + 3. Gehen wir davon aus, dass i bei 1 beginnt. Also sowas: Anfang: ik := 1; i := 1; i + 3 := 4; 1. Schleifendurchlauf: ik := 2; i := i + 1 -> = 2 i + 3 := 2 + 3; 2. Schleifendurchlauf: ik := 3; i := i + 1 -> = 3 i + 3 := 3 + 3; Wann wird wokl ik = i + 3 erreicht sein? Zitat:
Zitat:
Str2 wird zweimal eine Teilzeichenfolge zugewiesen. Welche wird am Ende übrigbleiben? Zitat:
Die Routine ist sicherlich nicht wirklich sinnvoll, aber es könnte ja der Sinn der Aufgabe sein, genau dieses zu erkennen. Und das scheint ja wohl nicht so ganz einfach zu sein. Übrigens: Delphi arbeitet hier anders, als z. B. Pascalscript. Delphi wertet am Anfang der For-Schleife i + 3 aus und läuft dann durch die Schleife. Aber bei anderen Programmiersprachen kann i im Ablauf der Schleife durchaus erhöht werden. Unter DOS half dann nur der Affengriff. Bei Pascalscript unter Windows brauchst Du den Taskmanager. Wenn ich mal was habe "offiziell" zwecks Programmierung lernen müssen, dann waren da auch immer fehlerhafte Quelltextfragmente bei. Es war Aufgabe, diese Fehler zu erkennen. So pauschal unsinnig ist das meiner Meinung nach nicht. Könnt aber um längen besser sein. |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Das war mein eigenes Beispiel. Wenn i initialisiert ist, gibt es keine Dauerschleife. Ansonsten ja.
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
@nahpet ja oke erreicht i+3 nie :D aber trotzdem finde ich das merkwürdig das er bei mir nur drei mal die schleife durchläuft
aso er überschreibt die! dann müssten ab der 3. Zahl die 3 nachfolgenden Zhalen stehen richtig? die i=5 haben als Beispiel gewählt denke ich i hat keinen wert in dem script nur i+1 |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Delphi wertet vor der Scheife aus, aber: Ist denn in der Aufgabenstellung definiert, dass zu ermitteln ist, was mit Delphi dabei herauskommt oder geht es allgemein um das Verstehen von Quelltexten, die zufällig Delphi bzw. Pascal ähnlich sehen?
Geht es bei den Aufgaben konkret um das Lernen von Delphi? Wie heißt der Kurs, zu dem diese Aufgabe gehören? |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
|
AW: 5 Programmteile, Erklärung gesucht, bitte.
ALso das Modul heißt "Einführung in die Programmierung".
Unser Prof ist ein fan von Delphi deswegen lernen wir im 1. Semester mit Delphi. Soweit ich weiß wird im 2. Semster auf java umgestiegen. In diesem Kurs habe ich gelernt: -welche Standardtypen Delphi besitzt -WIe ein typisches Delphiprogramm aufgebaut ist -die Schleifen FOR/Repeat/While und die If Statements -die Grammatik BNF z.B Wörter bilden -konventieren von typen z.B IntToStr oder StrToInt -fehlerhafte Programmteile erkennen -wie ich ein array erstelle und die unterschiede zwischen Statisch und Dynamische Speicherung -Arithmetische Routinen und die Programmteile hatten wir jetzt nicht in der Vorlesung. Dennoch geht das Gerücht um, dass er vill genau diese in die Klausur einbaut. Deswegen wollte ich jetzt nicht zum Prof rennen und ihn über diese Programmteile ausfragen :*D. |
AW: 5 Programmteile, Erklärung gesucht, bitte.
Zitat:
Zitat:
So war es bei mir damals auch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz