Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Anfänger bittet um Rat (https://www.delphipraxis.net/191465-anfaenger-bittet-um-rat.html)

Jemuzu 19. Jan 2017 11:18

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:
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);
Geben Sie die ersten 3 Ausgabezeilen an.

und

Was passiert bei folgendem Programmteil:

Delphi-Quellcode:
Ch:= ` ´;
While (not(eof(input))) do
  Read(ch);
Write(ch);
Was passiert bei folgendem Programmteil ?
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!

Der schöne Günther 19. Jan 2017 11:32

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 I:=1 to 100 do
   For j:=1 to 100 do
      if (i*J mod 90) = 0 then writeln(´i,j waren‘, i,‘ ´,j);
For-Schleifen muss man nicht mehr erklären, oder? Dann bleibt nur noch die letzte Zeile:
Delphi-Quellcode:
if (Bedingung) then (mache etwas)
Die Bedingung ist "i * j mod 90" ist Null
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:

Slipstream 19. Jan 2017 11:37

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.

Der schöne Günther 19. Jan 2017 11:41

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von Slipstream (Beitrag 1359242)
Wenn das Produkt aus den beiden Variablen I und J als Rest den Wert 90 aufweist. [...] Bei der gestellten Aufgabe kommt bei jedem Schleifendurchlauf somit 0 heraus

Nein, das hast du falsch verstanden.

"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.

Jemuzu 19. Jan 2017 11:44

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

Jasocul 19. Jan 2017 11:47

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.

SProske 19. Jan 2017 11:52

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.

Slipstream 19. Jan 2017 11:57

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.

sakura 19. Jan 2017 12:02

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von Slipstream (Beitrag 1359249)
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.

Sorry, aber das ist falsch.
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:
...
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
...
...:cat:...

Der schöne Günther 19. Jan 2017 12:03

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:

Zitat von Jemuzu (Beitrag 1359244)
Ich weiß einfach nicht was die ersten 3 Ausgabezeilen sind

Du hast doch die Bedingung verstanden: Alle Zahlenpaare i und j deren Produkt durch 90 geteilt Null ergibt. Wir zählen immer j von 1 bis 100 durch (die innere Schleifen), und i steigt bei jedem Durchlauf von 1 bis 100.

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

DeddyH 19. Jan 2017 12:07

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1359251)
Wer auch immer die "Aufgaben" geschrieben hat ist wohl weiter als einen VHS-Wochenendkurs Pascal in den 80ern nicht gekommen.

Du meintest sicherlich einen Pascal-Kurs auf VHS :mrgreen:

Towmuz 19. Jan 2017 12:25

AW: Anfänger bittet um Rat
 
Jemuzu ist eigentlich der Dozent und gibt sich nur als Schüler aus :D

a.def 19. Jan 2017 13:04

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von Jemuzu (Beitrag 1359238)
Soweit so gut, die Grundlagen sitzen
Ich habe Keine Ahnung was er da von mir will. Ich wäre sehr dankbar wenn mir jemand das erklären könnte!

Du sagst, die Grundlagen sitzen.
Wieso tippst du dann die grob fehlerhaften Apostrophe mit ab?

Was dein "Lehrer" will ist doch einfach.

Zitat:

Zitat von Jemuzu (Beitrag 1359238)
Geben Sie die ersten 3 Ausgabezeilen an.

und

Was passiert bei folgendem Programmteil:

Was passiert bei folgendem Programmteil ?


Der schöne Günther 19. Jan 2017 13:18

AW: Anfänger bittet um Rat
 
Das hilft ihm jetzt sicher ungeheuer weiter.


Ganz ehrlich, nur zwei Zeilen, beides Zuweisungen auf die selbe Variable (unbekannten Typs). Frage: Was passiert bei folgendem Programmteil.

Was soll man auf so etwas antworten?

Irgendwie kommt mir langsam wieder vor Augen weshalb ich in der Schule nie sonderlich gut war...

a.def 19. Jan 2017 13:22

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1359262)
Was soll man auf so etwas antworten?

Wenn er antwortet, dass sich das Programm nicht einmal kompilieren ließe, wäre das die absolut richtige Antwort.
Dafür dürfte der Lehrer nicht einmal eine schlechte Note verteilen, auch wenn es seinen Stolz verletzt. Denn es war schließlich der Lehrer der den Fehler verursacht hat.

Neutral General 19. Jan 2017 13:25

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von a.def (Beitrag 1359264)
Zitat:

Zitat von Der schöne Günther (Beitrag 1359262)
Was soll man auf so etwas antworten?

Wenn er antwortet, dass sich das Programm nicht einmal kompilieren ließe, wäre das die absolut richtige Antwort.
Dafür dürfte der Lehrer nicht einmal eine schlechte Note verteilen, auch wenn es seinen Stolz verletzt. Denn es war schließlich der Lehrer der den Fehler verursacht hat.

Oder es war tatsächlich genau die Antwort die der Lehrer vorgesehen hat.

nahpets 19. Jan 2017 13:37

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von a.def (Beitrag 1359264)
Zitat:

Zitat von Der schöne Günther (Beitrag 1359262)
Was soll man auf so etwas antworten?

Wenn er antwortet, dass sich das Programm nicht einmal kompilieren ließe, wäre das die absolut richtige Antwort.
Dafür dürfte der Lehrer nicht einmal eine schlechte Note verteilen, auch wenn es seinen Stolz verletzt. Denn es war schließlich der Lehrer der den Fehler verursacht hat.

Wieso so negativ?
Könnte es nicht Sinn und Zweck der Aufgabe sein festzustellen, dass der Code fehlerhaft ist.
Wer programmiert weiß doch genau, dass eben eine solche Feststellung sehr häufig zu treffen ist.
Klar, man kann nur das als falsch betrachten, was der Compiler bemängelt, aber abstrakt Fehler zu erkennen ist auch eine nicht zu unterschätzende Fähigkeit.

Ergebnis der ersten Aufgabe:
Solange gedanklich den Quelltext nachvollziehen, bis man die ersten drei Ergebnisse hat.
Also erkennen, dass es eine funktionstüchtige Schleife ist und deren Funktionsergebnisse erkennen und angeben.

Ergebnis der zweiten Aufgabe:
Es wird das letzte Zeichen vor dem Ende der Eingabe ausgegeben.
Also erkenne, dass es zwar wie eine Schleife aussieht, aber in Wirklichkeit die Ausgabe nicht in einer Schleife erfolgt.

Ergebnis der dritten Aufgabe:
Keines, da kein funktionsfähiger Quelltext.
Also erkennen, dass dort ein Fehler vorliegt und ggfls. diesen benennen.

Und das ganze bitte "am grünen Tisch" (also abstrakt) und nicht unter Zuhilfenahme von irgendwelchen Werkzeugen.

Und die lange Diskussion zeigt ja bisher, dass dieses abstrakte Erkennen und Auswerten nicht so ganz einfach zu sein scheint.

Aber genau diese Fähigkeit soll doch bei so 'ner Klausur geprüft und bewertet werden ;-)

bra 19. Jan 2017 14:52

AW: Anfänger bittet um Rat
 
An alle die hier mit "Quellcode ist ungültig, weil xxx fehlt" kommen, ich hatte auch so einen Spezi an der Uni und bei dem hätte man bei so einer Antwort 0 Punkte bekommen. Ob der Code da so wie beschrieben tatsächlich ausführbar war, war vollkommen irrelevant. Entscheidend war nur, was der Dozent hören wollte. Das mal als Hinweis...

Sherlock 19. Jan 2017 14:56

AW: Anfänger bittet um Rat
 
Jepp, bra hat vollkommen Recht. Solche gibt es und zwar nicht zu selten. Also muss die Antwort auch beinhalten, was vermutlich beabsichtigt war, im dritten Fall also "ein Character Äquivalent von False". Und es kompiliert nicht wegen Type mismatching.

Sherlock

himitsu 19. Jan 2017 15:16

AW: Anfänger bittet um Rat
 
Jupp, also einfach davon ausgehen, das alles was wie ein Apostroph, Anführungszeichen, Akzent oder Gravis aussieht auch ein Apostroph darstellen soll.
Programme wie Word ändern die ja beim Schreiben nach "Belieben".

Und natürlich der falsche "Typ"
Delphi-Quellcode:
Ch:='1'; i:=2;
B:= (ch=' ') and (i>0);

Man kann erkennen was gemeint ist und dementsprechend kann man auch seine Antworten gestalten.

Ihr dürft auch gern schreiben, dass der Compiler den Code als fehlerhaft abweist und schreibt entsprechend dessen Fehlermeldung als "Ausgabe" auf,
aber zugleich kann man auch die "beabsichtige" Lösung schreiben.
"geht nicht weil ..., aber die Antwort soll wohl ... sein"

a.def 19. Jan 2017 16:10

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von bra (Beitrag 1359273)
Entscheidend war nur, was der Dozent hören wollte. Das mal als Hinweis...

So einen hatten wir auch mal. Opfer war ein jüngeres Familienmitglied.
Ein kurzer Besuch in der Schule, anschließend ein detailliertes Schreiben an das Ministerium für Schule und Weiterbildung und die Sache war geklärt.

Man darf sich nicht unter Druck setzen lassen. Auch wenn der Dozent den längeren Arm hat, darf man sich nicht alles gefallen lassen. :stupid:
Und ein "Dozent" ist doch eh nur ein kleines Lichtchen ...

Slipstream 19. Jan 2017 17:04

AW: Anfänger bittet um Rat
 
Zitat:

Zitat von sakura (Beitrag 1359250)
Sorry, aber das ist falsch. 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.

Ach du meine Güte, jetzt hab ich mich aber total vergallopiert :oops: :pale:

Du hast meinen Fehler klar durchschaut: DIV gibt die Ganzzahl an, z.B. bei 10 DIV 3 wird 3 zurückgegeben. MOD gibt den Rest an, bei 10 MOD 3 wird 1 zurückgeliefert. Ich werde meinen fehlerhaften Beitrag sofort durchstreichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz