Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 1 von 3  1 23      

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