Hi Sibylle,
ist ja ulkig - ich hab bei noch keinem meiner
Pascal-Experimente ‚crt geused‘ *g* und trotzdem funktioniert
writeln anstandslos…
So ulkig ist das gar nicht, du hast nämlich vollkommen Recht - da ist mir ein Denkfehler unterlaufen. Readkey war die Prozedur, weswegen ich crt immer eingebunden habe, so wurde es zur Gewohnheit (Readkey wird bei jedem Tastendruck ausgelöst, nicht nur bei Enter - bei Readln kann man am Programmende immer noch irgendwas hinschreiben). Write(ln) und Read(ln) sind Standard-Pascal und erfordern keine Unit.
Hier wird’s wieder merkwürdig: ich kenne Funktionen, hab schon
damit gearbeitet (nur noch nicht unter Pascal) und weiß auch
um den Unterschied von Funktionen und Prozeduren (endlich -
dank w-w-w), aber es geht mir ja gerade darum, die obskuren
Lücken in meinem Wissen zu schließen.
Wenn es um Val geht, dann ist der Grund, weshalb es eine Prozedur ist und keine Funktion recht einfach - es ist eben so implementiert worden. Eigentlich ginge das auch mittels einer Funktion, wie das Beispiel unterhalb zeigt. Es sollte auch klarmachen, wozu die Fehler-Variable da ist: sie gibt die Position des ersten nicht-numerischen Zeichens in der gelesenen Zeichenfolge zurück.
function myval(input:string; var error:integer):integer;
var result:integer;
begin
val(input, result, error);
myval:=result;
end;
var eingabe:string;
zahl, fehler:integer;
begin
writeln('Geben Sie eine Zahl ein.');
readln(eingabe);
{Eigene-Funktion: }
zahl:=myval(eingabe, fehler);
{oder Standard-Prozedur: }
{val(eingabe, zahl, fehler);}
if fehler 0 then begin
write('Dies ist keine Zahl. Der Fehler trat im ');
write(fehler);
write('. Zeichen von "');
write(eingabe);
writeln('" auf ('+eingabe[fehler]+')');
end
else begin
Write('Wert der Zahl: ');
Writeln(zahl);
Write('Fehler: ');
Writeln(fehler);
end;
Readln;
end.
Zum Test kannst Du die Zeile mit ‚zahl:=myval…‘ auskommentieren und dafür die Zeile mit ‚val(…‘ verwenden - das Ergebnis ist dasselbe, nur der Aufruf und die Parameteranzahl unterscheiden sich.
Gute Infos zu Funktionen und Prozeduren findest Du hier:
http://www.lernnetz-sh.de/kmlinux/doc/Pascal-Tutoria…
Find ich auch nicht - aber das Aufgaben-überprüf-Programm
findet das (ich finde es unglaublich schwierig, die
Angewohnheiten des Eingabe-Überprüfens und
Schön-formatierte-Ausgaben-Erzeugens vorübergehend wegzulassen
- ich schreib dauernd Monsterprogramme, von denen ich dann
dreiviertel wieder lösche…)
Genau dafür bietet sich eine Funktion an, so bleibt der Code kurz und du kannst die Überprüfung überall problemlos einfügen. Wenn Du Prozeduren und Funktionen beherrschst werden auch deine Programme kürzer.
Schönen Gruß,
Rudy