PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit oberon - prozedur



Kuesschen
10-04-2003, 14:43
ich hätte da eine frage zu der sprache oberon.
es geht um eine prozedur bei der man großbuchstaben in kleinbuchstaben umwandelt.
Hier das Programm:

VAR s: ARRAY 80 OF CHAR;
s:= "Ursula Engelen-Kiefer";
ToLower (s);
Write.String(s)

PROCEDURE ToLower (VAR s: ARRAY OF CHAR)
VAR i : INTEGER;
BEGIN
i:=0;
WHILE (i < LEN (s)) & (s[i] # OX ) DO
IF (s[i] >= "A") & (s[i] <= "Z") THEN
s[i] := CHR (ORD ("a") + ORD (s[i]) - ORD ("A") ) ;
END;
INC (i);
END;
END ToLower;

Meine Frage:
Ich verstehe die Zeile mit den Ordnungsnummern nicht
s[i]:= CHR (ORD ("a") + ORD (s[i]) - ORD ("A")
bedeutet hier CHR auch character oder etwas anderes und wieso muss ich a + s[i] - A rechnen?
Ich hoffe es kann mir jemand weiterhelfen !
Vielen lieben Dank schon mal!
Grüßle Kuesschen

The Ripper
10-04-2003, 17:43
Oberon?!? Hat eine ziemliche Ähnlichkeit zu Pascal

Naja, dein Problem ist aber unabhängig von der Programmiersprache ;)
Intern interpretiert dein Computer Zeichen als ganze Zahlen von 0 bis 255. "A" entspricht der Zahl 65, "a" der Zahl 97 (die Werte kannst du in jeder ASCII-Tabelle nachlesen). Stellen wir nun die Rechnung

ORD ("a") + ORD (s[i]) - ORD ("A")
mal ein bisschen um:
Mit ORD("a") - ORD("A") wird die Differenz zwischen den entsprechenden Zahlenwerten ausgerechnet, die ist 32. Wir müssen also zur Zahlenentsprechung von "A" 32 hinzuaddieren, um die Zahlenentsprechung von "a" zu erhalten.
Addierst du nun also diesen Wert zur Zahlenentsprechung eines beliebigen Grossbuchstabens, so erhältst du den Zahlenwert des zugehörigen Kleinbuchstaben.
Mit CHR(wert) wird die Programmiersprache angewiesen, diese Zahl als ASCII-Zeichen zu handhaben.

Beispiel:
B entspricht 66

ORD("B") + 32 = ORD("b")
66 + 32 = 98
CHR(98) = "b"

Hoffe, dir geholfen zu haben, für ein besseres Verständnis wirf noch einen Blick auf diese ASCII-Tabelle (http://cips02.physik.uni-bonn.de/pool/infos/ascii/pre.htm).