Sie sehen sich momentan die Weblog-Einträge zur Kategorie "Linux" an.

15. January 2010

Pascal kurz und knapp

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 smile ) 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.

13. April 2009

Rapid webdevelopment with Django/Python

Das normale Webdeveloperleben sieht wohl so aus: Der eine macht das Design, der andere befasst sich mit der Programmierung. Vielleicht kommt dabei ja dann eine Templateengine zum Einsatz. Programmiert wird meistens in PHP. Aber wenn der Kunde Anforderungen hat, zum Beispiel ein webbasiertes Backend, mit dem er seine Inhalte pflegen kann, dann dauert das mit der PHP- Programmierung.

Aber jetzt gibt es Django (was heißt “jetzt” – Django gibt es schon eine ganze Weile) — ein Webframework in Python geschrieben. Damit ist “slow webdevelopment” Geschichte.

Hurra, Django wurde erfolgreich installiert!

“It worked.”: Django wurde erfolgreich installiert.

Und weil die ganze Chose so spannend klingt, habe ich sie mir dann mal auf meiner Ubuntu- Installation installiert. Python war standardmäßig schon dabei und auch Django musste ich nur noch aus meinem Paketmanager heraus installieren. Das Einrichten eines Projektes gelang nach anfänglichen Schwierigkeiten dann auch.

Mal sehen, ob das Ganze wirklich so gut ist, wie es immer gesagt wird …

19. March 2009

Mal was neues: Tux wird Tuz und tasmanischer Teufel

Manchmal – denke ich mir so – ist es doch ganz gut, dass ich den PCPraxis- Newsletter abonniert habe. So habe ich nämlich heute durch eben diesen Newsletter erfahren, dass das bekannte Linux- Maskottchen, der Pinguin Tux, einem tasmanischen Teufel weichen muss. Dieser wird dann Tuz heißen und für eine Version (Kernel 2.6.29) das Linux- Maskottchen sein; mit Tuz wollen die Linux- Entwickler auf den bedrohten Bestand der Beutelteufel aufmerksam machen.

Das Linux- Maskottchen Tuz für Kernel- Version 2.6.29 - den gelben Schnabel vom Pinguin- Vorgänger Tux durfte der tasmanische Teufel aber erben.

P.S. In der Schule bei uns ham se jetzt auch Linux (Opensuse) installiert – Ubuntu wär’ zwar schöner gewesen (mit GNOME- Desktop), aber egal …

23. December 2008

Ubuntu- Installation geglückt!

Mann, oh Mann! Ist das herrlich! Gerade habe ich meine erste Linux- Installation erfolgreich beendet! Nun kann ich dank dem Bootloader Grub beim Start des PCs immer wählen, ob ich denn Windows Vista oder doch Ubuntu 8.1 starten möchte.

Diesen Eintrag hier schreibe ich schon mit Ubuntu – im Firefox. Die Internet- Verbindung hat das Installationsprogramm also auch gleich miterkannt. Der hat mich gar nicht danach gefragt. Hardware oder so konnte ich auch nichts einstellen. Naja, mal sehen. Vielleicht klappt das ja alles gleich von Anfang an. Wäre doch herrlich!

Das einzig Negative ist, dass Ubuntu ziemlich lange gebraucht hat, um sich auf der Festplatte zu installieren.

Noch ein Tipp für die Leute, die eventuell auch erwägen, Ubuntu auf ihrem heimischen Rechner zu installieren: Der Partitionierungsvorschlag von Ubuntu ist unter aller Sau: Bei mir wurde sda4 (ich glaube, das ist D:\ bei Windows) auf 0 MB verkleinert. Den ganzen Rest hat Ubuntu für sich beansprucht. Als ich dann auf “Manuell” geklickt habe und mir das nochmal von Hand einrichtet habe, ist es mir leider nicht gelungen, auch noch eine swap- Partition zur Entlastung des Arbeitsspeichers zu erstellen. Aber mein erster Eindruck ist: Ubuntu kommt mit 2GB RAM gut aus. Bisher läuft es jedenfalls äußerst flüssig!