001
22.01.2017, 02:38 Uhr
Hans
Library Walker (Operator)
|
Hi,
Zuerst einmal: da es sich bei der Programmiersprache um einen Pascal-Dialekt zu handeln scheint, hab ich den Beitrag dorthin verschoben. Denn die verwendeten Programmteile mögen Dir zwar noch Rätselhaft sein, aber im Sinne dessen, was in die Rätselcke gehört/soll, sind sie es nicht.
Zitat von linomail: |
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
|
CHAR und INTEGER sind zwei verschiedene Typen, die man in Pascal auseinander halten muss. Bei den Anweisungen
handelt es sich um Zuweisungen, d.h. die Variablen enthalten danach das Zeichen "1" bzw. den Wert 2, das hast Du richtig verstanden.
Zitat von linomail: |
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?
|
So wie ich das sehe, hast Du hier:
Code: |
ch:=(ch" ") and (i>0);
|
irgendwas vergessen. Ich denke nicht, dass das so allein dasteht, sondern noch irgendwas dazu gehört. Denn so wie es jetzt dasteht ergibt es keinen Sinn.
Zitat von linomail: |
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?
|
Da ist ein Syntaxfehler drin, wenn die Zählvariable nur i heissen soll, aber nicht ik. Ansonsten solltest Du das mal am Rechner ausprobieren, was passiert, wenn Du das i:=i+1; weglässt. Wenn ik tatsächlich eine andere Variable ist, dann ist diese Schleife Teil eines umfangreichen Codeabschnitts, den man braucht, um zu beurteilen, was passiert, wenn man i:=i+1; weglässt.
Zitat von linomail: |
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?
|
ch hat kein Zeichen, sondern bekommt ein Leerzeichen zugewiesen. Und wenn die Schleife wirklich so dasteht, liesst sie durch die Datei und am Ende wird ein evtl. vorhandenes EOF-Zeichen (^Z) oder das letzte Zeichen aus der Datei ausgegeben. Falls der Inhalt der Datei ausgegeben werden soll, müssten read() und write() durch begin und end geklammert sein, also:
Code: |
while(not(eof(input))) do begin read(ch); Write(ch); end;
|
Zitat von linomail: |
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 ?
|
Wenn Du hier mal Satzzeichen eingesetzt hättest, würde man sofort verstehen, was Du hier meinst. So muss man es erst mehrmals lesen, bevor man versteht, was Du hier meinst. Ansonsten hast Du es fast richtig erkannt. Das ist 'ne Endlosschleife. Die wird solange ausgeführt, wie die Abbruchbedingung NICHT zutrifft. Da i nicht geändert wird, läuft das Programm endlos, ausser es wird von aussen, also durch das Betriebssystem abgebrochen oder der Rechner ausgeschaltet.
Zitat von linomail: |
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?
|
Dazu solltest Du mal die Beschreibung der Funktion copy lesen. Dann wird auch der Sinn der Zahlen klar werden.
Zitat von linomail: |
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
|
Teilweise richtig. Was "mod" zu bedeuten hat, solltest Du nachschlagen. Das ist 'ne Rechenoperation. Und wenn Du die Berechnung kapiert hast, sollte auch die if-Abfrage klar werden. In der write-zeile solltest Du zwischen i und j ein Leerzeichen ausgeben, damit die Ausgabe richtig wird. Da sollte nämlich nicht
Code: |
i, j waren 190 i, j waren 245 i, j waren 290
|
sondern:
Code: |
i, j waren 1 90 i, j waren 2 45 i, j waren 2 90 i, j waren 3 30
|
rauskommen. Wenn Du diese Ausgabe betrachtest und nachrechnest, müsstest Du feststellen, dass nur dann etwas ausgegeben wird, wenn die Berechnung Null ergibt, sonst nicht.
Als letztes wäre da noch die Gross- und Kleinschreibung bei Variablennamen (bzw. auch bei Procedur- und Funktionsnamen). Die ist in Pascal zwar egal, in anderen Programmiersprachen aber nicht unbedingt. So ist j (klein j) in Pascal zwar die selbe Variable wie J (gross J), aber in allen Varianten von C oder auch in Java sind j und J zwei verschiedene Variablen. Das gleiche gilt für Namen von Funktionen/Proceduren. Deshalb sollte man sich angewöhnen, bei einer Schreibweise zu bleiben. In Pascal schreibt man dann z.B. alle Namen von Variablen GROSS oder klein, aber nicht mixen. -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 22.01.2017 um 02:52 Uhr von Hans editiert. |