AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Anfänger bittet um Rat

Ein Thema von Jemuzu · begonnen am 19. Jan 2017 · letzter Beitrag vom 19. Jan 2017
Antwort Antwort
Seite 1 von 3  1 23   
Jemuzu

Registriert seit: 19. Jan 2017
2 Beiträge
 
#1

Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:18
Delphi-Version: 5
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!

Geändert von mkinzler (19. Jan 2017 um 11:29 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.918 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:32
Hallo und Willkommen in den Heiligen Hallen des Wissens und Wahnsinns


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: 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.
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#3

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:37
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.

Geändert von Slipstream (19. Jan 2017 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.918 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:41
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.
  Mit Zitat antworten Zitat
Jemuzu

Registriert seit: 19. Jan 2017
2 Beiträge
 
#5

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.232 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:47
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.
Peter
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:52
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.
Sebastian
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#8

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 11:57
@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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.586 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 12:02
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
...
......
Daniel W.
Ich bin nicht zurück, ich tue nur so

Geändert von sakura (19. Jan 2017 um 15:19 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.918 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Anfänger bittet um Rat

  Alt 19. Jan 2017, 12:03
Ich versuche noch mal beim ersten Teil zu bleiben, da mMn die beiden anderen "Aufgaben" wirklich ziemlich hirnrissig sind.

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

Geändert von Der schöne Günther (19. Jan 2017 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf