Joachim Mohr Mathematik Musik
|
Einführung in Delphi
|
|
Dieser Einführungskurs ist gedacht für SchülerInnen ab der Klasse 8.
Motivation: Wozu überhaupt programmieren lernen?
Braucht man das später wirklich?
Viele bedienen doch den Computer - beruflich und privat- ohne dass sie programmieren können?
Aber es ist eine gewaltiger Unterschied, ob man einen Computer
bedient
oder
beherrscht:
"Bedienen" des Computers ist schnell gelernt, weil es von "Dienen" kommt.
Wie oft ärgert man sich über den Computer, weil er es anders machen zu müssen glaubt, als dem Bediener vorschwebt.
Man muss die Bedienungsanleitung genau kennen, um im richtigen Augenblick einen Mausklick hier,
einen anderen Mausklick dort und so weiter zu machen.
Und wenn nichts mehr geht, wird einem schon die Hotline weiterhelfen.
Die kennt schließlich schon die gröbsten Programmierfehler und wie man ihnen ausweicht.
Ist es nicht besser, diese Technik zu beherrschen als ihr nur zu dienen?
Mit Hilfe des Computers wollen wir ja unsere Arbeit erleichtern und nicht erschweren.
Und dazu ist ein
Grundverständnis von Programmabläufen
unentbehrlich.
Man muss wissen:
- Wie werden Werte eingegeben und ausgegeben?
- Wie programmiere ich Wiederholungen?
- Wie plane ich vorrausschauend am besten?
- Gibt es Alternativen?
Kurz: Wie denke ich algorithmisch?
Wenn Du etwas vom Programmieren verstehst, weißt Du viel besser, was Du von einem Programm
verlangen kannst und was nicht.
Für viele ist Programmieren unterhaltsame und kreativ.
Es kann ungeheuren
Spaß
machen!
1. Stunde: Das erste Programm "Hallo Welt"
Lernziele:
- Delphi richtig anwenden
- Programm Abspeichern
- Auf Diskette kopieren
- Kommentare nach "//" und zwischen geschweifte Klammern
Delphi ist ein sogenanntes schnelles Entwicklerwerkzeug (Rapid Application
Development Tool). Das Schreiben von Quelltext wird drastisch reduziert, da
Delphi vieles in sogenannten Komponenten vorprogrammiert hat und auch noch
Teile Deines Quelltextes selbst schreibst. Du brauchst zunächst noch
gar nichts von der sogenannten "objektorientierter Programmierung" verstehen.
(Du lernst sie aber schnell anzuwenden!).
Dazu musst Du aber zwei Dinge strikt beachten.
- Jedes Programm erzeugt mehrere Dateien, die in Wechselwirkungen miteiander stehen. Deshalb: Speichere jedes Programm in einem eigenen Ordner ab!
- Was Delphi schreibt, darfst Du nicht schreiben und löschen!
Nun kannst Du mit dem ersten Beispiel anfangen:
Beispiel "Hallo Welt":
Starte in Delphi eine Neue Anwendung (Menu Datei|Neu).
Klicke in der Komponentenleiste auf einen Button und setze ihn
aufs Formular und klicke im Objektinspektor auf das
Ereignis OnClick.
Delphi schreibt folgenden Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Zur Erinnerung:
Merke: Was Delphi schreibt, darf nicht geändert oder
gelöscht werden! Du darfst nur vor begin die
Variablen deklarieren (siehe spätere Programme)
und zwischen begin und end Deine Anweisungen.
Ergänze nun die Prozedur folgendermaßen:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hallo Welt'); //Einzige Anweisung
end;
-
Hinweis:
-
Kommentare
kann man nach
//
schreiben, zwischen
{
und
}
oder zwischen
(*
und
*).
Kommentare überliest der Compiler und werden nur zur
Programmerklärung verwendet.
Gewöhne Dir gleich das richtige Abspeichern an!
|
Speichere mit Menü
Datei|Projekt speichern unter...
und
Datei|speichern unter ...
in einem Eigenen Ordner
" HalloWelt"
ab.
|
Wichtig: Ein eigener Ordner für jedes Programm! Zwei Speicherbefehle! Einen für die "unit1" und einen für das "project1" |
Delphi speichert zu jedem Projekt mehrere Dateien ab, nämlich
. RES
(Ressourcendatei)
. DPR
(Projektdatei)
. DFM
(graphische
Formulardatei) werden alle von Delphi verwaltet und
. PAS
(Unit Quelltext, nur in diesem schreibt der Programmierer)
Jetzt Programm starten:
Der Compiler erzeugt Unit-Object-Zwischencode
. DCU
und
die eigentliche ausführbare Datei
. EXE
(nur die erhält der Kunde).
-
Hinweis:
-
Wenn Du Dein Programm auf Diskette schreibst, kopiere nur
die
. RES
-, die
. DPR
-, die
. DFM
- und die
. PAS
- Dateien.
(die
. DCU
- und die
. EXE
- erfordern ca. 10 mal so viel Speicherplatz)
Du erkennst hier:
Die Programmentwicklung
in Delphi verläuft in drei Etappen:
-
1. Etappe:
-
Bedieneroberfläche gestalten.
Hier: Das
Objekt
button1, d.h. eine
Instanz
von
Tbutton, platzieren
-
2. Etappe:
-
Objekt
eigenschaften
zuweisen.
Hier: Im Objektinspekor
button1
zum Beispiel
die
caption
OK
geben. Denkbar ist auch
die Schrift (
Font) zu vergrößern.
-
3. Etappe:
-
Ereignisbehandlung schreiben.
Hier
ShowMessage(..). Zwischen Groß- und Kleinschreibung
wird nicht unterschieden. Du kannst auch
showmessage
schreiben.
Das von Borland/Inprise entwickelte
Delphi
ist eine
objektorientierte Nachfolgesprache
von
Pascal
, einer
von dem Zürcher Professor
Niklaus Wirth
entwickelte
klar konzipierte und streng strukturierte Programmiersprache, benannt nach
dem französischen Philosophen und Mathematiker Blaise Pascal (1623-1662),
der um 1640 (vor seiner mystischen Erleuchtung) eine mechanische
Rechenmaschine entwickelt hatte.
Zusatzaufgabe:
Setzte weitere Buttons auf Dein Formular und schreibe Ereignisroutinen
dazu. Zum Beispiel folgende Befehle:
- button1.hide
- button2.left := 100;
button2.top :=200; //Befehle immer mit ";" abschließen
- button1.show;
- form1.color := clred; application.ProcessMessages; //Anwendung muss den Befehl sofort ausführen! sleep(1000); form1.color := clblue;
Lernziele:
- Eigenschaften (zum Beispiel der Form1) zuweisen.
- Methoden (zum Beispiel des Canvas) ausführen lassen
Beispiel: Linien zeichnen lassen:
Plaziere von der Komponentenleiste "Zusätzlich" ein "imgage1" auf der Form und
weise ihr im Objektinspektor die Ausrichtung ("align") "alclient" zu.
Setzte nun in die Mitte des Formulars ein "Shape1" (ebefalls bei "Zusätzlich")
und weise ihm im Objektinspektor folgende Eigenschaften zu:
die Farbe (Color) rot,
die Höhe (height) 10,
die Breite (width) 10 und
das Aussehen (shape) "Kreis" (ctcircle).
Die folgenden Zeichenoperationen beziehen sich auf folgendes Koordinatensystem:
Setze dann mehrere "Buttons" in die erste Reihe auf das Formular und schreibe ein
Zeichenprogramm nach folgendem Muster:
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.canvas.MoveTo(shape1.Left,shape1.Top);
//Der Zeichenstift wird zum Spape1 bewegt (ohne zu Zeichnen)
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
shape1.Left := shape1.Left + 10;
image1.canvas.LineTo(shape1.Left,shape1.Top);
//Der Zeichenstift zeichnet eine Linie ab der alten Posituib
end;
Nun bewegt sich eine Figur nach recht und zeichnet eine Linie.
Überlege nun, wie Du die Figur nach links, nach oben und nach unten
bewegen kannst.
Zusatzaufgabe:
Zeichne damit ein Haus (überlege vorher, wie
man schräge Linien zeichnen kann).
Spielerei:
Platziere wie oben ein Image image1 und ein Shape shape1 auf das Formular und
zusätzlich vom Komponentenreiter "Sytem" eine Timer timer1.
Schreibe in das OnCreateEreignis von Form1 und in das OnTimerEreignis von timer1
die folgede Prozeduren.
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.width := 800; //Wird unten gebraucht
form1.height := 600; //Wird unten gebraucht
//("Globale Konstanten" werden später eingeführt)
randomize;
timer1.interval := 10;
image1.canvas.MoveTo(shape1.Left,shape1.Top);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const d = 50;
var r: integer;
begin
r := random(100); //Zufallszahl r = 0; 1; 2; ... oder 99
if r < 25 then Begin
shape1.Left := shape1.Left + d;
image1.canvas.LineTo(shape1.Left,shape1.Top)
End else if r < 50 then Begin
shape1.Left := shape1.Left - d;
image1.canvas.LineTo(shape1.Left,shape1.Top);
End else if r < 75 then Begin
shape1.top := shape1.top - d;
image1.canvas.LineTo(shape1.Left,shape1.Top);
End else Begin
shape1.top := shape1.top + d;
image1.canvas.LineTo(shape1.Left,shape1.Top);
End;
if shape1.top < 0 then shape1.top := 0;
if shape1.top > 600 then shape1.top := 600;
if shape1.Left < 0 then shape1.left := 0;
if shape1.Left > 800 then shape1.Left := 800;
end;
3. Stunde: Variablen Werte zuweisen:
-
Dazu:
-
Wertezuweisung "a
: =..."
-
+
beim Typ
string
-
Die Pascal-Funktionen:
showmessage,
IntToStr
und
floatToStr
-
Schleifen
Mit Hilfe der Variablen werden Werte im Computer gespeichert.
Variablentypen:
integer ganze Zahlen Z={...-3, -2, -1, 0, 1, 2, 3,...}
real reelle Zahlen. Genauer: Gleitkommazahlen (floating point numbers)
strings Zeichenketten (der Form 'xyz')
boolean Wahrheitswerte (true und false)
Überlege und überprüfe mit dem Computer, welche Werte stehen in den folgenden
Programmen in den für die Variablen reservierten Speicherbereichen?
Schreibe dies Zeile für Zeile auf!
Übung: Protokolliere die Variablenbelegung!
a) Füge nach jedem Befehl ein:
showmessage('a=' + a);
(Ersetzte gegebenenfalls passend a durch b und c!)
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c:string;
begin
a := 'Hallo';
b := 'Welt';
c := a + ' ' +b;
end;
b) Füge nach jedem Befehl ein!
showmessage('a=' + IntToStr(a) + ' b='+IntToStr(b)+
' c='+IntToStr(c));
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c: Integer;
begin
a := 5; b := 7; c := 9;
a:=b; b:=c; c:=a;
a:=a+1; b:=b-1; c:=c-1;
end;
c) Füge nach jedem Befehl ein!
showmessage('a='+floatToStr(a)+' b='+floatToStr(b));
Ersetzte gegebenenfalls passend a und b durch c und d!
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d:real;
begin
a:=1+3/10; b:=-3/10;
a:=a+1/10; b:=b-1/10;
c:=a+b; d:=1-c;
end;
d) Füge nach jedem Befehl ein: showmessage(...)
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
a:=-7; b:=11; c:=13;
a:=a+6; b:=b-12; c:=c-11;
a:=a+b; b:=b+c; c:=a+b;
a:=a+b+c; b:=a+b+c; c:=a+b+c;
end.
e) Was berechnet folgendes Programm?
(Schreibe keine Zahl sondern einen Rechenausdruck!)
procedure TForm1.Button1Click(Sender: TObject);
var s: real;
begin
s := 0;
s := s + 1;
s := s + 2;
s := s + 3;
s := s + 4;
s := s + 5;
s := s + 6;
showmessage(FloatToStr(s));
end;
f) Das Programm e) kann abgekürzt werden zu
procedure TForm1.Button1Click(Sender: TObject);
var s: real;
k: integer;
begin
s := 0;
for k := 1 to 6 do s := s + k;
showmessage(FloatToStr(s));
end;
Schreibe nun ein Programm, das folgendes berechnet:
(I) 1 + 2 + 3 + 4 + ... + 100 oder
(II) 1 + 2 + 3 + 4 + ... + 1000 oder
(III) 1 + 1/2 + 1/3 + ... + 1/10000
Die Lösung ist (I) 5050 (II) 500500 und (III) 9,7876