14
Übungsaufgaben zu Delphi von M. Hühr einige Aufgaben zur Übung von Algorithmen leicht 1.1 Schreiben Sie ein Programm , mit dem man die Summe der Zahlen von 1 bis zu dem eingegebenen Wert erhält. 1.2 Schreiben Sie ein Programm ,mit dem man die Summe von geraden bzw. ungeraden Werten bis zu einem eingegebenen Wert berechnen kann. 1.3 Schreiben Sie ein Programm, bei dem man eine vorgegebene Anzahl von Werten eingibt, und das Proramm die Anzahl der Werte zählt ,die größer bzw. kleiner als einer sind ,als Schranke eingegebenen Wert. 1.4 Schreiben Sie ein Programm zur Zinseszinsrechnung, das den Endbetrag ausrechnet,wenn man die Einzahlung die am Anfang getätigt wird, den Zinssatz und die Laufzeit eingibt. mittel 2.1 Schreiben Sie ein Programm, mit dem man Werte der Größe nach sortiert ausgeben kann. 2.2 Schreiben Sie ein Programm, mit dem man die Primzahlen ausgeben kann. 2.3 Schreiben Sie ein Programm, bei dem man eine bestimmte Anzahl von Zahlen eingibt und von diesen den Durchschnitt berechnet und außerdem Minimum und Maximum ausgeben kann. schwerer 3.1 Schreiben sie ein Programm, bei dem man das Alter einer Person errechnen kann, indem man das Geburtsdatum eingibt. 3.2 Entwickeln Sie einen ganz einfachen Texteditor für Textdateien. Tip: für Rückgängigbutton folgenden Quelltext einfügen.(nur 1 Schritt möglich) with RichEdit1 do if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0);

Übungsaufgaben zu Delphi - Hochschule Stralsund

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgaben zu Delphi von M. Hühr

einige Aufgaben zur Übung von Algorithmen

leicht

1.1 Schreiben Sie ein Programm , mit dem man die Summe der Zahlen von 1 bis zu dem eingegebenen Wert erhält.

1.2 Schreiben Sie ein Programm ,mit dem man die Summe von geraden bzw. ungeraden Werten bis zu einem eingegebenen Wert berechnen kann.

1.3 Schreiben Sie ein Programm, bei dem man eine vorgegebene Anzahl von Werten eingibt, und das Proramm die Anzahl der Werte zählt ,die größer bzw. kleiner als einer sind ,als Schranke

eingegebenen Wert.

1.4 Schreiben Sie ein Programm zur Zinseszinsrechnung, das den Endbetrag ausrechnet,wenn mandie Einzahlung die am Anfang getätigt wird, den Zinssatz und die Laufzeit eingibt.

mittel

2.1 Schreiben Sie ein Programm, mit dem man Werte der Größe nach sortiert ausgeben kann.

2.2 Schreiben Sie ein Programm, mit dem man die Primzahlen ausgeben kann.

2.3 Schreiben Sie ein Programm, bei dem man eine bestimmte Anzahl von Zahlen eingibt undvon diesen den Durchschnitt berechnet und außerdem Minimum und Maximum ausgeben kann.

schwerer

3.1 Schreiben sie ein Programm, bei dem man das Alter einer Person errechnen kann, indem man das Geburtsdatum eingibt.

3.2 Entwickeln Sie einen ganz einfachen Texteditor für Textdateien.Tip: für Rückgängigbutton folgenden Quelltext einfügen.(nur 1 Schritt möglich)

with RichEdit1 do if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0);

Page 2: Übungsaufgaben zu Delphi - Hochschule Stralsund

unit Unit1; {Lösung zu Aufgabe 1.1}interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);vari,eingabe,wert,code:integer;

begin edit2.text:=''; val(edit1.text,eingabe,code); if code=0 then begin wert:=0; for i:=1 to eingabe do begin wert:=wert+i; edit2.text:=inttostr(wert); end; end else begin showmessage(edit1.text+' ist keine Zahl'); edit1.text:=''; edit1.setfocus; end;end;

procedure TForm1.Button2Click(Sender: TObject);begin edit1.text:=''; edit2.text:=''; edit1.setfocus;end;

end.

Page 3: Übungsaufgaben zu Delphi - Hochschule Stralsund

unit Unit1; {Lösung zu Aufgabe 1.2}

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Label1: TLabel; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);vari,uwert,gwert,eingabe,code:integer;beginval(edit1.text,eingabe,code);if code<>0 thenbegin showmessage(edit1.text+' ist keine Zahl'); edit1.text:=''; edit1.setfocus;end;

if code=0 thenbeginuwert:=0;gwert:=0;for i:=1 to eingabe do begin if (i mod 2)=0 then gwert:=gwert+i; if (i mod 2)<>0 then uwert:=uwert+i; edit2.text:=inttostr(gwert); edit3.text:=inttostr(uwert); end;end;end;

procedure TForm1.Button2Click(Sender: TObject);begin

Page 4: Übungsaufgaben zu Delphi - Hochschule Stralsund

edit1.text:=''; edit2.text:=''; edit3.text:=''; edit1.setfocus;end;

end.

unit Unit1; {mögliche Lösung zu Übung 2.2- mittels Einzelzahlprüfung}interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormPaint(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;var Form1: TForm1; i,j:integer; a,b,code:integer; Zahl:integer;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin val(edit1.text,zahl,code); b:=0; if code=0 then if zahl>0 then begin begin for i:=zahl downto 1 do begin a:=zahl mod i; if a=0 then b:=b+1; end; if b<=2 then showmessage(edit1.text+ ' ist eine Primzahl') else showmessage(edit1.text+ ' ist keine Primzahl'); edit1.text:=''; edit1.setfocus; end;endelse {code >0} showmessage(edit1.text+' ist keine natürliche Zahl, oder <= 0 '); edit1.text:=''; edit1.setfocus;end;procedure TForm1.FormPaint(Sender: TObject);begin

Page 5: Übungsaufgaben zu Delphi - Hochschule Stralsund

edit1.setfocus;end;end.

Beispiele

Übungsaufgabe 1 - Digitaluhr

Zuerst plaziert man einen Timer und ein Label auf das Fenster.Dann klickt man den Timer an und fügt im Quelltextfolgendes ein.Label1.caption:=timetostr(time);

Man kann dann noch das Aussehen ändern.Um eine optimale Schrifthöhe und Ausrichtung des Labels zu erreichen, wählt man imObjektmanager Label1 aus oder aktiviert es durch Anklicken im Entwurf. Den Wert fürCaption ändert man in 00.00.00 . Den Wert für Font kann man jetzt besser bestimmen.Wenn ein Plus vor einer Eigenschaft steht kann man durch Anklicken desPluszeichens die einzelnen Eigenschaften dieser Eigenschaft anzeigen lassen.Man ändert die Größe der Schrift durch Verändern vom Wert Size.Um der Anwendung einen eigenen Namen zu geben, ändert man die Eigenschaft vonForm1.caption.Um zu erreichen, daß das Fenster die Größe behält und nicht maximiertwerden soll, verändert man die Eigenschaft BorderIcons.bimaximeze auf false.

Ein eigenes Icon für das Fenster kann man mit derEigenschaft Icon laden.Nach dem Starten des Programmserscheint solch ein Fenster.

Page 6: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 2 : Videoplayer

Zuerst werden die benötigten Objekte aufdem Formular plaziert.Bei MainMenu und OpenDialog istdie Lage auf dem Formular nicht wichtig ,

da sie bei der Laufzeit nicht zu sehen sind.

Dann klickt man den MainMenu1-Button an.Es erscheint ein weiteres Formular. Man verändert im Objektmanager dieEigenschaft von MenuItem1.Caption zu &Datei. Das & -Zeichen bewirkt,daß der nachfolgende Buchstabe unterstrichen

wird und man mit ALT + dem unterstrichenen Buchstaben die Funktionzur Laufzeit aufrufen kann.Genauso verfährt man mit den darunterliegenden Feldern.Klickt man das Feld von Beenden an erscheint der Quelltexteditor.An der Stelle wird folgender Quelltext eingefügt:

procedure Tform1.Beenden1Click(Sender:Tobject);begin

close;end;end.

Für das Öffnen der Datei fügt man folgenden Quelltext ein

ProcedureTForm1.Videooffnen1click(sender:TObject);begin

if OpenDialog1.Execute then begin MediaPlayer1.DeviceType:=dtAutoSelect; MediaPlayer1.Filename:=OpenDialog1.FileName; MediaPlayer1.open; end;end;Anschließend verändert man die Eigenschaften der Objekte im Objektmanager:Form1:Caption: VideoplayerDies bewirkt ,daß das Fenster einen eigenen Namen bekommt.Panel1:Caption: (einfach den Inhalt im Objektmanager löschen)Panel1 soll als Abspielfläche dienen , da stört ein Name.Mediaplayer1:Display : Label1Man klickt auf das Pluszeichen vor VisibleButton und das Menu wird erweitert.btRecord : falsebtEject : falseOpendialog1:Wenn man auf Filter klickt erscheintnebenstehender Dialog.In die erste Spalte schreibt man dieBezeichnung der Dateiart undin die zweite die Dateiextension.In unserem Programm ist es *.AVI.

benötigte Elemente

Page 7: Übungsaufgaben zu Delphi - Hochschule Stralsund

Um das Programm zu vervollständigen ,öffnet man im Menu Projekt|Projektoptionenund lädt sich ein Icon für die Anwendung.Man vergibt auch einen Namen für die Anwendung.

Es können selbständig noch weitereÄnderungen gemacht werden.

Wenn das Programm richtig erstellt wurde, sieht es so aus:

Page 8: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 3:Fileviewer

1. Schritt:Zuerst plaziert man ein Panel auf dem Formular und stellt die Eigenschaft Align auf alTop.Dann plaziert man ein weiteres Panel und stellt die Eigenschaft Align auf alBottom.Anschließend ein Memofeld in die Mitte gesetzt mit der Eigenschaft Align - alClient.Ein Button wird auf dem oberen Panel plaziert und die Eigenschaft von Caption auf Öffnen geändert.Einen Opendialog braucht man auch ,sowie eine Listbox, die man auf die untere Panel setztund dann die Eigenschaft auf alClient ändert.2. Schritt:Man klickt dann auf den Button und der Quelltexteditor erscheint.Dort ergänzt man die Prozedure so:procedure TForm1.Button1Click(Sender: TObject);begin

if opendialog1.execute thenbegin

if opendialog1.filename<>''thenbeginmemo1.lines.loadfromfile(opendialog1.filename);listbox1.items.add(opendialog1.filename);

end;end;

end;Das klickt man die Listbox und schreibt folgende Prozedur :

procedure TForm1.ListBox1Click(Sender: TObject);begin

memo1.lines.loadfromfile(listbox1.items[listbox1.itemindex]);end;Um das Memofeld zu leeren , drückt man im Quelltexteditor beim Object ListBox1beiLines auf die 3 Punkte hinter Tstrings. Dadurch wird der Stringlisteneditor gestartet.Dort löscht man Memo1. Dann löscht man die Eigenschaft Caption der oberen Panel.Mit dem Opendialogfilter verfährt man so wie in Übung 2 beschrieben.Die Überschrift und weitere Eigenschaften ,die man haben möchte kann man jetzt nochverändern.

Wenn man auf einen Eintrag in der Listbox anklickt, wird die früher schon einmal geladene Datei angezeigt.

Page 9: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 4: BMP-Bildbetrachter

1. SchrittAm Anfang plaziert man einen Panel auf die linke Seite ,löscht den Wert von Caption und stelltAllign auf alLeft.Darauf platziert man eine DriveCombobox, eine DirectoryListBox und eine Filelistbox.Rechts platziert wird eine Image-Komponente und stellt die Eigenschat Allign auf alClient ,Autosize aufTrue und Center auch auf True.2. SchrittDann klickt man im Objektinspektor bei DriveComboBox1 den Eintrag DirList anund wählt DirectoryListbox1. Bei der DirectoryListBox1 wählt man für FileList den Eintrag FileListBox1aus.Bei der FileListBox1 verändert man den Eintrag bei Mask auf *.bmp (es werden dann nur Bitmaps angezeigt).Der einzige Programmcode lautet für die FileListbox nur:

procedure TForm1.FileListBox1Change(Sender: TObject);begin

if filelistbox1.filename<>''thenimage1.picture.loadfromfile(filelistbox1.filename);

end;

Man kann das Programm nach eigenem Geschmack weiter gestalten.

Page 10: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 5 - Laufwerkseigenschaften

Zuerst plaziert man 3 Labels auf dem Formular.Dann nimmt man eine Gauge ,die sich bei Delphi 2auf der Beispiele-Seite befindet und plaziert sie aufdem Formular.Anschließend verändert man die Eigenschaften der GaugeBackcolor auf clGreen und Forecolor auf clRed.Um die Form der Gauge zu verändern , stellt man dieEigenschaft von Kind auf gkPie.Wenn man das getan hat ,schreibt man folgendeProzedur :

procedure TForm1.FormCreate(Sender: TObject);

var groesse:integer; Frei:integer; belegt:integer;

begin

groesse:=disksize(3)div 1024;frei:=diskfree(3)div 1024;belegt:=groesse-frei;gauge1.progress:=round(belegt/groesse*100);label1.caption:='Laufwerkskapazität : '+inttostr(groesse div 1024)+'

Mb';label2.caption:='belegter Speicherplatz : '+inttostr(belegt div 1024)+'Mb = '+inttostr(round(belegt/groesse*100))+'%';label3.caption:='freier Speicherplatz : '+inttostr(frei div 1024)+' Mb= '+inttostr(100-round(belegt/groesse*100))+'%';

end;

Anschließend kann man noch die Eigenschaft von Form1verändern ,um das Aussehen des Programms zu verbessern.Sollte Gauge nicht installiert sein ,nimmtman eine andere Komponente,die eine graphischeDarstellung ermöglicht.

Page 11: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 6 - Komponenten zur Laufzeit erstellen

Diese Prozedur ist ein Beispiel für das Erstellen von Komponenten zur Laufzeit.Man schreibt folgenden Quelltext für die Create-Prozedure von Form1;

procedure TForm1.FormCreate(Sender: TObject);beginwith tlabel.create(self) do begin height:=25; width:=75; name:='label1'; top:=30; left:=20; caption:='Geben sie ein Wort ein :'; parent:=form1; end;with tedit.create(self)do begin top:=30; left:=150; name:='edit1'; parent:=form1; text:=''; end;with tbutton.create(self) do begin top:=30; left:=300; parent:=form1; caption:='OK'; end; end;

Um die Komponenten zu entfernen nimmt man FREE.Bsp: Button1.Free;Button1.Destroy würde auch gehen ,Button1.Free ist aber besser.

Page 12: Übungsaufgaben zu Delphi - Hochschule Stralsund

Übungsaufgabe 7 - Graphische Darstellung

Dies ist ein Beispiel für das Erzeugen von graphischen Objekten.Hierbei wird die Eigenschaft Canvas benutzt, die bei einigen Objekten vorhanden ist.Bei TImage ist es auch möglich ,das erzeugte Bild als Datei abzuspeichern oder zu kopieren.Um graphische Objekte anzuzeigen, plaziert man zuerst ein Timage auf demFormular und stellt dessen Eigenschaft auf alclient:Um Objekte bei der Erzeugung des Fensters zu erzeugen, schreibt man folgendenQuelltext für die Prozedur Formcreate ,um verschiedene Objekte zu erstellen:

procedure TForm1.FormCreate(Sender: TObject);Als erstes definiert man die Varialble Ecken ,die für die Ecken des Polygons da ist.var ecken:array[1..5]of Tpoint;begin

Zuerst wird ein Fünfeck definiert:with image1.canvas do begin

Wir nehmen als Füllfarbe einen hellen Blauton: brush.color:=claqua;

Jetzt werden die Ecken des Fünfecks erzeugt: ecken[1].x:=10; ecken[1].y:=10; ecken[2].x:=10; ecken[2].y:=100; ecken[3].x:=60; ecken[3].y:=100; ecken[4].x:=200; ecken[4].y:=70; ecken[5].x:=10; ecken[5].y:=10;

Und zum Schluß wird das Fünfeck gezeichnet: polygon(ecken); end;

Als nächstes malen wir eine Linie auf das Image:with image1.canvas do begin

Die Breite der Linie wird vergrößert: pen.width:=4;

Die Farbe der Linie wird auf blau geändert: pen.color:=clblue;

Der Startpunk der Linie wird definiert: moveto(20,200);

Die Linie wird gezeichnet: lineto(100,100); end;

Als nächstes wird ein Rechteck erzeugt:with image1.canvas do begin pen.width:=1;

Das Rechteck erhält keinen Rand und wird rot gefüllt:

Page 13: Übungsaufgaben zu Delphi - Hochschule Stralsund

pen.color:=clnone; brush.color:=clred;

Um das Rechteck zu erzeugen ,definiert man den Punkt oben links mit den ersten beiden Zahlen und den Punktunten rechts mit den letzten beiden Zahlen.. rectangle(110,120,130,140); end;

Als letztes wird ein Kreis erzeugt. Kreise werden in Quadraten definiert, deren Breite und Höheden Radius darstellen . Wenn man ein Rechteck dazu nimmt, kann man eine Elypse erzeugen.with image1.canvas do begin pen.color:=clblack; brush.color:=clblue;

Definieren der Eckpunkte des Quadrates in dem der Kreis erzeugt wird: ellipse(200,200,250,250); end;end;

Diese Objekte werden mit vorangehendem Quelltext selbstständig erzeugt:

Beispiel zum Benutzen eines Canvas

Wenn man auf ein Image eine Freihandlinie mittels Cursorposition zeichnen will,kann dazu folgedendes Beispiel verwenden:

Man muß erst eine globale Variable deklarieren.In diesem Fall heißt sie Malen und der zugewiesene Wert zeigt an,ob man auf das Image (namens Bild) zeichnen kann....varmalen:boolean;...

Die erste Prozedur setzt Malen auf True ,das heißt , daß man zeichnen kann.Der Anfang der Freihandlinie ist die aktuelle Position....procedure Tblatt.bildMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

Page 14: Übungsaufgaben zu Delphi - Hochschule Stralsund

beginwith bild.canvas do begin moveto(x,y); malen:=true; end;end;...

Wenn man jetzt den Cursor mit gedrückter Maustaste über das Image verschiebt,wird eine Freihandlinie erzeugt....procedure Tblatt.bildMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginwith bild.canvas do begin if malen=true then lineto(x,y); end;end;...

Wenn man die Maustaste losläßt, wird Malen auf False gesetzt ,so daß nicht mehrgezeichnet werden kann....procedure Tblatt.bildMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin malen:=false;end;...