![]() |
Delphi-Version: 5
Anfänger bittet um Rat
Hallo zusammen!
Ich schreibe am kommenden Montag eine Klausur in Programmieren. Soweit so gut, die Grundlagen sitzen nur habe ich jetzt eine Datei mit möglichen Klausuraufgaben bekommen und die bringen mich zum verzweifeln. Ich hoffe mir kann jemand von euch helfen. Folgende Aufgaben wären das : Was passiert bei folgendem Programmteil:
Delphi-Quellcode:
Geben Sie die ersten 3 Ausgabezeilen an.
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); und Was passiert bei folgendem Programmteil:
Delphi-Quellcode:
Was passiert bei folgendem Programmteil ?
Ch:= ` ´;
While (not(eof(input))) do Read(ch); Write(ch);
Delphi-Quellcode:
Ch:=´1´; i:=2 ;
Ch:= (ch=` ´) and (i>0); Ich habe Keine Ahnung was er da von mir will. Ich wäre sehr dankbar wenn mir jemand das erklären könnte! |
AW: Anfänger bittet um Rat
Hallo und Willkommen in den Heiligen Hallen des Wissens und Wahnsinns :love:
Das erste ist wirklich nicht schwer.
Delphi-Quellcode:
For-Schleifen muss man nicht mehr erklären, oder? Dann bleibt nur noch die letzte Zeile:
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);
Delphi-Quellcode:
Die Bedingung ist "i * j mod 90" ist Null
if (Bedingung) then (mache etwas)
Das "Machet etwas" ist Schreibe auf den Bildschirm was i und j ist Was verstehst du hieran nicht? Die Bedingung (z.B. was in aller Welt ist "mod"?) Oder das was ausgeführt wird (z.B. "WriteLn" noch nie gesehen) Beim zweiten Punkt würde es mich wundern wenn das wirklich alles war, was angegeben wurde. Beim dritten habe ich ehrlich gesagt auch keine Ahnung was der Autor sich da eingeworfen hat. :shock: |
AW: Anfänger bittet um Rat
I und J sind offensichtlich (hoffentlich) Variablen des Typs Integer.
For I := 1 to 100 do bedeutet übersetzt soviel wie: Der Variablen I wird fortlaufend in einer Schleife der Wert 1 bis 100 übergeben. Dasselbe passiert in der Schleife mit der Integer-Variablen J. Mit IF wird geprüft, ob der nachfolgende Ausdruck wahr oder falsch ist: Wenn das Produkt aus den beiden Variablen I und J als Rest den Wert 90 aufweist. Bei genauerer Betrachtung ist das natürlich vollkommener Quatsch, denn bei einer Multiplikation von Ganzzahlen (Integer) kommt niemals ein Rest zustande, das geschieht einzig bei einer Division, wenn es z.B. hieße: 100 geteilt durch 11, dann käme ein Rest von 1 heraus, denn 11 mal 9 ist 99. Das Gegenstück von MOD ist DIV, das den Wert vor dem Komma extrahiert und zurückliefert, das wäre bei diesem Beispiel eben die 9. Bei der gestellten Aufgabe kommt bei jedem Schleifendurchlauf somit 0 heraus, weil es bei einer Multiplikation keinen Rest geben kann. Mir leuchtet der Zweck dieser Aufgabe ebenfalls nicht ein. Ich würde vorschlagen, du fragst deinen Lehrer danach und läßt dir von ihm noch einmal genau erklären, was er von dir will. |
AW: Anfänger bittet um Rat
Zitat:
"X mod Y" bedeutet: "Der Rest der nach X durch Y übrig bleibt". Die Bedingung ist dass dieser Rest Null sein soll. Beispiel: 60*42 mod 90 = 2520 mod 90 25020 durch 90 ist genau 28, der Rest ist also Null. |
AW: Anfänger bittet um Rat
Hi, danke schonmal für die schnelle Antwort! For schleifen sind klar und MOD liefert den Rest einer Division soweit ich weiß. Ich weiß einfach nicht was die ersten 3 Ausgabezeilen sind
und bei dem zweiten steht das genau so auf der Folie:( Den 1. Teil verstehe ich so, dass er solange das Dateiende von input nicht erreicht hat, ch lesen und schreiben soll |
AW: Anfänger bittet um Rat
Teil 1 wurde ja jetzt ausführlich erklärt.
Teil 2 sieht aus, wie ein Tastatur-Echo. Also ein Zeichen Tippen und das gleiche Zeichen wieder ausgeben. EDIT: Falsch. Nur das letzte Zeichen wird ausgegeben. Teil 3 ist Müll. Ch ist eine Zeichen-Variable, laut der ersten Zeile. In der zweiten Zeile soll aber ein Boolscher Wert zugewiesen werden. Das gibt dann einen Fehlermeldung. das sollte sich nicht mal kompilieren lassen. |
AW: Anfänger bittet um Rat
Was hält dich eigentlich davon ab, das ganze einmal selber durch den Compiler zu jagen (die Starter-Version gibt es kostenlos) und zu schauen, was dabei heraus kommt?
Wobei der angegebene Code mehr nach Pseudocode denn echtem Delphi-Code aussieht. |
AW: Anfänger bittet um Rat
@Günther: Stimmt, danke, hab ich korrigiert, war mein Fehler.
@Jemuzu: In deinem Beispiel mit der For-Schleife gibt es aber gar keine Division, sondern nur eine Multiplikation. Ddeshalb kann es da auch keinen Rest geben, das Ergebnis ist immer 0, die If-Abfrage sinnlos. |
AW: Anfänger bittet um Rat
Zitat:
Nachdem das Produkt aus I und J gebildet wird, wird der Modulus dessen bestimmt. Und wenn dieser 0 ist (das Produkt (I*J) ist ganz durch 90 teilbar, ohne Rest), dann wird die Meldung ausgegeben. Ein Auszug der Ausgabe:
Code:
...:cat:...
...
i,j waren 3 60 i,j waren 3 90 i,j waren 4 45 i,j waren 4 90 i,j waren 5 18 i,j waren 5 36 i,j waren 5 54 i,j waren 5 72 i,j waren 5 90 i,j waren 6 15 i,j waren 6 30 ... |
AW: Anfänger bittet um Rat
Ich versuche noch mal beim ersten Teil zu bleiben, da mMn die beiden anderen "Aufgaben" wirklich ziemlich hirnrissig sind.
Zitat:
Also ist die erste "Ausgabezeile": "i,j waren 1 90". Die zweite demnach: "i,j waren 2 45". usw. Zu den beiden anderen Fällen: Sorry, aber zumindest zwei ist völliger Quark. Ich weiß dass du anscheinend erst damit anfängst, ich versuche es mal den anderen anwesenden zu erklären: "Input" ist eine globale Variable, ein Handle auf StdIn. Im Falle einer Konsolenanwendung also die Tastatur. Sehr witzig, wann geht eine Tastatur EOF? Da es anscheinend eine Schulaufgabe ist werden die wohl kaum das Windows-StdIn-Handle umbiegen oder über die Konsole etwas wie "Project1.exe < someFile.txt" machen. Bliebe StdIn mit [Strg]+[Z] manuell zu "beenden". Ganz ehrlich, wer macht so etwas? Was sollte man dadurch lernen? Der Code soll anscheinend so aussehen als würde er jedes gelesene Zeichen in die Konsole schreiben, das tut er aber nicht! Setzt nur mal einen Haltepunkt auf "Write(ch)" und schaut was da passiert: Nichts. Wer auch immer die "Aufgaben" geschrieben hat ist wohl weiter als einen VHS-Wochenendkurs Pascal in den 80ern nicht gekommen. PS: Wow, schon so viele Antworten, so viel Verwirrung :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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