15. January 2010
Da wir nächste Woche in unserer Informatik-AG an der Schule eine Arbeit schreiben (in einer AG eine Arbeit zu schreiben – die spinnen doch …) und eine Klassenkameradin von mir das Schreiben eines Pascalprogramms noch nicht so richtig verstanden hat, will ich hier (auch zur eigenen Übung) mal eine kleine Einführung versuchen zu geben. Die folgenden Beispiele wurden erfolgreich mit Ubuntu 9.10 “Karmic Koala” getestet.
Ein erstes Pascal-Programm
Unter Programmierern hat sich die hübsche Tradition eingebürgert, als erstes, wenn man mit einer neuen Programmiersprache anfängt, die Meldung “Hallo Welt!” auf dem Bildschirm anzuzeigen. So sieht ein entsprechendes Programm in Pascal aus:
program Hallo;
begin
writeln('Hallo Welt!');
end.
Das Programm tut nichts weiter, als in einer Konsole die Meldung “Hallo Welt!” auszugeben.
Ein wenig Theorie
Mithilfe des Schlüsselwortes program wird der Programmname festgelegt. Anschließend wird die Zeile mit einem Semikolon abgeschlossen:
program Programmname;
Merke: In Pascal-Programmen wird jede Zeile (von Ausnahmen einmal abgesehen, man denke nur an Zeilen, die Schlüsselwörter wie if beinhalten – dazu kommen wir später noch …) mit einem Semikolon abgeschlosssen.
Nach diesem sogenannten Programmkopf folgt nun der sogenannte Deklarationsteil, wo Variablen initalisiert werden. (Ein bißchen blöd an Pascal ist, dass man – wie zum Beispiel in PHP – Variablen bei der Initialisierung nicht direkt einen Wert zuweisen kann – aber das tut hier nichts zur Sache.) Dieser Abschnitt wird mit dem Schlüsselwort var eingeleitet, danach folgt der Variablenname. Da Pascal eine sogenannte typisierte Programmiersprache ist, muss man bei Variablen auch gleich mitsagen, um welchen Typ von Variable es sich denn handelt: Eine Zeichenkette (string), Ganzzahlen (integer) oder ein einzelnes Zeichen (char) zum Beispiel. Der Typ wird in Pascal direkt nach der jeweiligen Variable vor einem Doppelpunkt festgelegt. Im Beispiel wird eine Variable mit dem einfallslosen Namen “Zeichenkette” vom Typ string festgelegt:
var Zeichenkette:string;
Merke: Willst du mehrere Variablen definieren, so brauchst du das Schlüsselwort var nur einmal zu schreiben. Mehrere Variablen werden durch Semikola getrennt. Wenn mehrere Variablen vom selben Typ sind, so werden diese durch Kommata getrennt. Zum Beispiel:
var text_variable1,text_variable2:string;
zahl_variable1:integer;
Wie ich vorhin sagte, kann man in Pascal bei der Initalisierung von Variablen diese nicht direkt mit einem Wert belegen. Das erledigt man in dem eigentlichen Programm mithilfe des Konstrukts:
Variablenname := Variablenwert;
Der Deklarationsteil wird gefolgt vom eigentlichen Programm; dieses wird mit dem Schlüsselwort begin eingeleitet und hört mit end. (in genau dieser Schreibweise, also mit dem Punkt am Ende) auf.
Beachte: Hier stehen am Zeilenende jeweils keine Semikola!
Innerhalb des jeweiligen Programms wird nun zum Beispiel mit der Funktion writeln() ein Text auf der Konsole ausgegeben. Als Argument wird dieser Funktion entweder eine Variable (ganz nach Motto writeln(Variable);) oder ein in Hochkommata gestellter Text übergeben:
writeln('Hallo Welt');
Hierbei ist wieder zu beachten, die Zeile mit einem Semikolon abzuschließen.
Neben der Möglichkeit, Text auszugeben, besteht auch die Möglichkeit, Text einzulesen. Dies kann man mit der Funktion readln() erledigen. Als Argument wird dieser Funktion eine Variable übergeben (die vorher ordnungsgemäß im Deklarationsteil angegeben wurde; sonst meckert der Compiler). Den Inhalt dieser Variable kann man dann zum Beispiel wieder mit writeln() ausgeben.
Stringfunktionen
Nun wäre aber eine Programmiersprache keine Programmiersprache, wenn man außer Texte ein- und auszugeben nicht auch noch andere Möglichkeiten hätte. Also gibt es Stringfunktionen. Da wären zum Beispiel delete(), copy(), delete(), oder insert(). Diese Funktionen werden im Folgenden näher besprochen.
delete()
delete(wo,ab_wann,wie_viele): Die Funktion delete() löscht in einer Zeichenkette (1. Argument) ab einer bestimmten Stelle (2. Argument) eine bestimmte Anzahl (3. Argument) Buchstaben. Beispiel (dies setzt voraus, dass eine Variable Testdel vom Typ string existiert und diese mit dem Wert “Feierabend” belegt wurde):
delete(Testdel,1,5);
Heraus kommt der Wortfetzen “abend”.
insert()
insert(was,wo,wann): Die Funktion insert() fügt eine bestimmte Zeichenkette (1. Argument) in einer bestimmten Zeichenkette (2. Argument) an einer bestimmten Stelle (3. Argument) ein. Beispiel (dies setzt voraus, dass zwei Variablen text1 und text2 vom Typ string existieren und diese jeweils mit den Werten “Zum ” (mit Leerzeichen) und “Beispiel” belegt wurden):
insert(text1,text2,1);
Der Text “Zum ” aus Variable text1 wird in Variable text2 angefügt, und zwar gleich ganz an erster Stelle. Heraus kommt dann die Phrase “Zum Beispiel”. Das zusammengesetzte Wort ist jetzt in der Variable text2 verfügbar und kann mit writeln(text2); ausgegeben werden.
copy()
copy(wo,ab_wann,wie_viele): Die Funktion copy() entnimmt einer bestimmten Zeichenkette (1. Argument) ab einer bestimmten Stelle (2. Argument) eine bestimmte Anzahl (3. Argument) Buchstaben und kopiert diese in den Zwischenspeicher (es ist das selbe Ergebnis wie delete()). Beispiel (dies setzt voraus, dass eine Variable text mit dem Wert “Testwert” vom Typ string existiert):
copy(text,5,4);
Wenn man das Ergebnis auffängt, das herauskommt, wenn die Funktion einmal durchgerattert ist (à la ergebnis := copy(text,5,4)), kann man es noch bequem mit writeln(ergebnis); ausgeben. Nicht vergessen, diese Auffangvariable vorher ordnungsgemäß zu deklarieren, sonst gibt’s Stress mit dem Compiler. Im Beispiel enthält diese Variable dann den Wert “wert”.
concat()
Die Funktion concat() hängt beliebig viele Zeichenketten (die als einzelne Argumente durch Kommata getrennt der Funktion übergeben werden) hintereinander. Beispiel (dies setzt voraus, dass die Variablen Dampfschiff, fahrts und gesellschaft (alle vom Typ string) definiert wurden. Die Werte sind gleich den Variablennamen.):
concat(Dampfschiff,fahrts,gesellschaft);
Heraus kommt “Dampfschifffahrtsgesellschaft”.
length()
Die Funktion length(Zeichenkette) gibt die Länge des Strings, der der Funktion übergeben wurde, als eine integer-Variable zurück. Wichtig ist, dass das Argument eine Variable vom Typ string ist; was soll schließlich die Länge einer Zahl sein? Beispiel:
laenge := length('Beispiel');
Die Länge steht als integer nun in der Variable laenge zur Verfügung; auch hier wieder nicht vergessen, die Auffangvariable vorher zu definieren. Im Beispiel enthält sie den Wert 8.
pos()
Die Funktion pos(was,wo) sucht eine bestimmte Zeichenfolge (1. Argument) in einer anderen bestimmten Zeichenkette (2. Argument) und gibt einen integer zurück. Das ist die Stelle, wo die Zeichenfolge in der Zeichenkette gefunden wurde.
text1 := 'Test';
text2 := 'es';
stelle := pos(text2,text1);
writeln(stelle);
Als Ergebnis wird die Zahl 2 ausgeworfen, weil die Zeichenfolge “es” an der zweiten Stelle in “Test” gefunden wurde.
str()
Die Funktion str(zahl,ergebnistext) wandelt einen integer (1. Argument) in einen string (2. Argument) um. Da man diese Umwandlung schlecht sichtbar machen kann, muss man hier zu einem Trick greifen: Wie schon gesagt, kann man length() nur auf strings anwenden. Wenn die Umwandlung also nicht geklappt hat, muss length() einen Fehler zurückgeben.
zahl := 42;
str(zahl,ergebnis);
laenge := length(ergebnis);
writeln(ergebnis,' mit einer Länge von ',laenge);
Raus kommt: “42 mit einer Länge von 2″. Klappt. Prima.
val()
Die Funktion val(text,zahl,code) wandelt in Abhängigkeit vom Typ von zahl eine Zeichenkette (1. Argument) in einen Integer- oder Real-Wert um. Wenn die Umwandlung erfolgreich verlaufen ist, weist die Integervariable code den Wert 0 auf. Beispiel:
text := '07.07.1993';
Jahr := 1993;
val(text,Jahr,Code);
writeln('Fehlerausgabe:');
writeln(Code);
Die Variable code weist den Wert 6 auf, da an der 6. Stelle ein zweiter Punkt angetroffen wurde. Real-Werte dürfen allerdings nur einen Punkt aufweisen.
(Mal ganz nebenbei: Den Sinn dieser Funktion habe ich selbst noch nicht ganz gerafft.)
Wenn … dann: Entscheidungsstrukturen
Natürlich gibt es auch Entscheidungsstrukturen in Pascal. Ganz nach Motto: Wenn das passiert, dann mach das, sonst setzt es was.
Ein kleines Beispiel-Programm (dat am für sich selbsterklärend is
) soll die if-then-else- Strukturen in Action zeigen:
program Universum;
var zahl_input:integer;
begin
writeln('Was ist die Antwort auf alle Fragen im Universum?');
readln(zahl_input);
if (zahl_input = 42) then
begin
writeln('Richtig. Natürlich 42.');
end
else
writeln('Das war sie nicht. Macht ja nichts.');
end.
Das Programm ist eigentlich selbsterklärend. Zuerst wird die Frage “Was ist die Antwort auf alle Fragen im Universum?” ausgegeben, dann wird ein Input des Users erwartet. Heißt auf gut deutsch: Der Anwender soll eine Zahl eingeben. Wenn diese dem Wert 42 entspricht, kommt eine Erfolgsmeldung, sonst kommt die Ermutigung, dass man es ja vielleicht beim nächsten Mal schafft.
Abschluss / Conclusion
Dieses Tutorial erhebt keinen Anspruch auf Vollständigkeit. Bei Fragen können Sie gerne einen Kommentar zu diesem Beitrag hinterlassen.
Diese Version ist jetzt nur für den groben Überblick gedacht, um am Dienstag heil durch die Arbeit zu kommen. Eine ausführlichere Version, die sowohl Ubuntu 9.10 als auch Windows XP berücksichtigt, wird später noch erscheinen. Hier wird dann auch auf die Installation von Pascal eingegangen.
Vielen Dank für eure Geduld.
7. January 2010

Ich habe mir heute das Buch “jQuery” von Ralph Steyer gekauft. Bereits nach dem zweiten Kapitel fiel mir ein konkreter Anwendungszweck ein: Ich wollte den Bilder- Austauschen- Effekt auf meiner Startseite erneuern. Dabei sollte jQuery zum Einsatz kommen und das HTML entschlackt werden (invalide Attribute wurden entfernt etc.). So weit so gut. So sieht der Quelltext meiner Seite jetzt aus (Ausschnitt):
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
//preload image
clearImage = new Image();
clearImage.src = "marcus_cicero_sprechblase.jpg";
$(document).ready(function() {
$("#swapImage").hover(function() {
$(this).attr({src:"marcus_cicero_sprechblase.jpg"});
});
});
</script>
</head>
<body>
<p style="text-align:center; margin-top: 20px;">
<a href="/wp">
<img src="marcus_cicero.jpg" width="320" height="475" id="swapImage" title="Marcus Tullius Cicero">
</a>
</p>
</body>
Zur Erklärung: Zuerst wird über das CDN von Google die Funktionsbibliothek jQuery eingebunden. Dann lade ich das Bild mit der Sprechblase vor und sage jQuery, dass es bei dem Rüberfahren über das Bild mit der Maus das Bild austauschen soll. So einfach und doch so genial.
Aus Performance- Gründen wurde der Hintergrundsound bei der Startseite bei den Aufräumarbeiten gleich mit rausgeschmissen.
Update: Die Lösung, wie ich sie oben beschrieben habe, hat leider den Schönheitsfehler, dass das Bild mit der Sprechblase immer noch sichtbar ist, selbst wenn man schon längst mit der Maus wieder wo anders ist. Diese Lösung hier funktioniert besser:
$(document).ready(function() {
$("#swapImage").bind('mouseover', function(){
$(this).attr({src:"marcus_cicero_sprechblase.jpg"});
});
$("#swapImage").bind('mouseout', function(){
$(this).attr({src:"marcus_cicero.jpg"});
});
});
27. December 2009
Ich habe die Ferien gleich damit begonnen, dass ich mit dem Beni (einem Freund von mir; die Rechtschreibung dieses Namens wurde auf Beschwerde eines einzelnen Herrn – nämlich von ihm selbst – angepasst) beide Blues Brothers- Filme hintereinander geguckt habe. Dieses Filme- Gucken war Teil eines Deals, den ich schon seit langem über die Bühne bringen wollte: Ich kopiere ihm einige DVDs und er gibt mir im Gegenzug einige mp3- Dateien (unter anderem von AC/DC, Tina Turner etc.). Dabei ergab sich dann auch das Blues Brothers- Gucken. Während wir also die Filme glotzten, wurden im Hintergrund fleissig Filme kopiert und mp3s auf die externe Festplatte verschoben, die ich mitgebracht hatte. Soweit dazu.
Als ich am nächsten Mittag (ich hatte bei ihm übernachtet) gegen halb drei zuhause ankam, hieß es, schnell zu gucken, ob die Festplatte mit den ganzen mp3s auch immer noch erkannt wurde. Das war der Fall. Nun hatte ich ca. 10 GB Musik im mp3- Format in bester Stereo- Qualität. Sehr gut.
Jetzt hieß es, schnell noch ein paar Sachen zu packen, weil dann ging es auf nach Mainz in die Oper “Dido & Aeneas”, die ich inzwischen schon zum dritten Mal besuchte.
Dann war erst mal Heiligabend und 1. und 2. Weihnachtsfeiertag.
Als ich gestern nun versuchte, die ganze Musik, die ich vom Beni bekommen habe, auf meinen mp3- Player zu kopieren, kam es, wie es kommen musste: Mein mp3- Player rauchte mit der Meldung “System files not found” ab. Zum Glück hat ein Neuaufspielen der sogenannten Firmware von iriver geholfen. Ich musste den mp3- Player zwar komplett formatieren, aber die Hauptsache war ja schließlich: Jetzt ging er wieder. Nur, das Dumme war: Jetzt wurde die externe Festplatte mit den mp3s, an deren einem USB- Anschluss der mp3- Player hing, nicht mehr erkannt. Allerdings hat ein kompletter Neustart des Computers geholfen. Jetzt wurde auch die Festplatte wieder erkannt. Also flugs nochmal probiert mit dem Kopieren der mp3s. Diesmal hat alles reibungslos geklappt. So kann ich die ganze schöne Musik nun auch über meine heco- Soundanlage hören.
Soviel zu den ersten Tagen meiner Weihnachtsferien …
10. December 2008
Gestern hatten wir in GMK mal wieder einen wundervollen Text gelesen. Er handelt von der Ausschaltung des Wettbewerbs beim Markt, aber auch von Computern. Nanu, wie geht denn das? Um das zu verdeutlichen, gehe ich wieder nach dem bewährten Prinzip “Full text with comments from myself” vor. Also dann, legen wir los:
Bill Gates. Ich hätte gerne einen Bigmac.
Die ganze Klasse denkt sich wahrscheinlich nichts böses dabei. Nur einer, ein gewisser Hans Bauer, der denkt, wie so oft, sofort an die Computerwelt. « Ist doch eigentlich ein Widerspruch in sich. » denke ich mir, « Bill Gates kauft sich bei McDonalds einen Bigmac. Warum nicht einen Bigwindows? Bigmac – ein großen Mac, verstehen Sie? Dabei ist Apple – die Macher von Mac – doch der Erzfeind von Microsoft und damit von Bill Gates, oder? Warum kauft sich also Bill Gates bei McDonalds einen Bigmac? – Ja, ich weiß es nicht. » Schön. Weiter im Kontext. Nun antwortet der Kassierer:
Kassierer. Einen Bigmac, eine Cola, mach $ 6.99.
Moment. Bill Gates bestellt einen Bigmac. Nur einen Bigmac. Warum bekommt er dann eine Cola auch noch aufgedrückt? Genau das selbe scheint auch Bill Gates zu denken:
Bill Gates. Ich hatte nur einen Bigmac bestellt!
Der Kassierer antwortet gelassen:
Kassierer. Die Cola gehört dazu, ist Teil eines Gesamtpakets.
Bill Gates « macht einen auf stur »
:
Bill Gates. Wie bitte? Die Cola zahle ich nicht!
Der Kassierer bleibt cool:
Kassierer. Brauchen sie auch nicht. Die Cola ist gratis.
Kleine Anmerkung vom Autor dieses Postings: Die Rechtschreibung (« Bigmac » und « sie » (in der Anrede)) wurde unverändert dem GMK- Schulbuch entnommen. Beschwerden gehen bitte nicht an mich! Ich hätte « sie » natürlich in der Anrede richtig geschrieben (groß). Aber der « Bigmac » kommt einmal – wenigstens einmal – in diesem Artikel richtig geschrieben vor.
Naja, wie auch immer. Weiter geht’s:
Bill Gates. Aber kostete der Bigmac alleine bisher nicht $ 3.99?
Ah oui!
Kassierer. Stimmt, aber der Bigmac hat jetzt neue Leistungsmerkmale. Er hat eine Cola im Lieferumfang.
Leistungsmerkmale, Lieferumfang – Das klingt ja, als ob der Big Mac (
) sonst was wäre und nicht nur ein einfacher Burger.
Bill Gates. Ich habe eben erst eine Cola getrunken. Ich brauche jetzt keine Cola.
Er will sie nicht. Er will sie wirklich nicht.
Kassierer. Dann gibt’s auch keinen Bigmac.
Hmm … Bigmac und Cola oder keinen Bigmac? Bill Gates redet sich so heraus:
Bill Gates. Na gut, ich zahle $ 3.99 und verzichte auf die Cola.
Da wird der Kassierer zickig:
Kassierer. Man kann die Teile des Gesamtpaketes nicht trennen. Bigmac und Cola sind nahtlos integriert.
Ist natürlich quatsch – mit Sosse nämlich! Das findet auch Bill Gates:
Bill Gates. Quatsch. Big Mac und Cola sind zweierlei!
Genau meine Meinung! Haben Sie außerdem diesmal auf die Schreibweise des « Big Mac » geachtet? Genießen Sie diesen Anblick: Er kommt das einzige Mal in diesem Text vor!
Der Kassierer unterdessen greift zu äußersten Mitteln, um dem Kunden die Verbundenheit von Big Mac und Cola zu beweisen:
Kassierer. Passen Sie mal auf. (Er tunkt den Bigmac in einen Becher Cola.)
Uahhhh (dem Autor rollen sich die Zehennägel hoch!). Auch Bill Gates ist schockiert:
Bill Gates. Was soll den das?
Ja? Jetzt wollen wir eine Erklärung hören! Kommt sofort:
Kassierer. Das ist im Interesse des Kunden, denn so können wir einen einheitlichen Geschmack in allen Komponenten garantieren.
Na, also ich persönlich weiß ja nicht, ob das im Interesse des Kunden passiert.
Wie auch immer. Der Text ist aus. Ich hoffe, Sie haben ihn genossen.
Falls man nichts mehr von sich hört, wünsche ich Ihnen auf jeden Fall schon einmal FROHE WEIHNACHTEN.