|
PÜ 6: Dreiecksanalyse
Aufgabenstellung:
Die Seitenlängen
eines Dreieckes sind einzulesen. Stellen Sie fest,
- ob mit diesen Angaben ein Dreieck konstruiert werden kann und wenn ja,
- ob es sich um ein gleichseitiges, ein gleichschenkliges oder ein ungleichschenkliges Dreieck handelt und
- ob das Dreieck einen rechten Winkel besitzt.
|
a) | Gegeben ist ein Struktogramm in Grobform.
Formulieren Sie die abzufragenden Bedingungen verbal bzw. durch mathematische Aussagen aus!
Beispiel: Konstruierbarkeit |
b) | In den Abfragen sind offensichtlich mehrere Einzelbedingungen miteinander zu verknüpfen.
Machen Sie sich mit der Verwendung der Boolschen Operatoren AND und OR vertraut! |
c) | Erstellen Sie unter Delphi eine geeignete Oberfläche für Ihr Programm! (Vorschlag)
Da die Ausgabe des "Analyseergebnisses"
mehrzeilig ausfällt, sind die bisher bewährten
Edit-Felder hierzu nicht geeignet - es empfiehlt sich
die Verwendung einer
ListBox-Komponente. |
Algorithmisch-programmiertechnische Grundlagen:
Struktogramm der Abfragesituation
Konstruierbarkeit
eines Dreiecks:
Ein Dreieck mit den Seiten a, b und c ist dann
konstruierbar, wenn gilt:
(a+b>c)
und (a+c>b)
und (b+c>a)
Anmerkung:
Die obige Vorgehensweise widerspiegelt
eine typisch informatische Problemlösestrategie, die
sog. Top-Down-Methode
(Methode der schrittweisen Verfeinerung), nach der ein
komplexer Sachverhalt schrittweise in überschaubare
Teilkomplexe zerlegt wird.
Mit anderen Worten: Es wäre verwirrend, wollte man
gleich bei der Struktogrammerstellung die konkreten
Abfragebedingungen für Konstruierbarkeit usw. fertig
ausformulieren.
Verknüpfung mehrerer
Bedingungen in Auswahlstrukturen durch Boolesche Operatoren
Oft ist die Fortsetzung eines Programms von mehreren
Bedingungen abhängig, von denen entweder nur eine oder einige
oder aber alle gleichzeitig erfüllt sein müssen.
Verknüpfung mit AND:
IF (Beding1) AND (Beding2) AND (Beding n) THEN Anweisung;
- Anweisung wird nur dann ausgeführt, wenn alle aufgeführten
Bedingungen erfüllt sind!
Verknüpfung mit OR:
IF (Beding1) OR (Beding2) OR (Beding n) THEN Anweisung;
- Anweisung wird immer dann ausgeführt, wenn mindestens eine
der Bedingungen erfüllt ist!
Beispiel: Von drei Zahlen (a, b, c) ist das Maximum zu
ermitteln.
IF (a>b) AND (a>c) THEN max := a
ELSE
IF (b>a) AND (b>c)
THEN max := b
ELSE
IF (c>a) AND
(c>b) THEN max := c
ELSE ShowMessage
('Die Zahlen sind nicht verschieden !'); |
Vorschlag zur Oberflächengestaltung:
Zur
"optischen Aufwertung" der Programmoberfläche
empfiehlt sich der Einbau einer Grafikkomponente
(PaintBox), in welcher für den Fall der
Konstruierbarkeit das Dreieck zur Anzeige gelangt.
Hierbei sollte eine Art Zoom-Funktion einprogrammiert
werden, so dass ein Dreieck der Größe 3; 4; 5 ebenso
groß erscheint wie eines der Größe 3000; 4000;
5000.
Methodische Varianten:
a) die entsprechende Prozedur wird von
erfahreneren Schülern entwickelt (Hilfestellung)
und dann für alle verfügbar gemacht oder
b) es wird vom Lehrer eine
vorgefertigtes Projekt zur Verfügung gestellt, in dem
bereits die zum Zeichnen notwendigen Komponenten nebst
Prozedur enthalten sind.
(Download
von dreieck1.zip)
Verwendung von
TListBox-Komponenten:
Komponenten vom Typ TListBox werden auch als
Windows-Listenfenster bezeichnet. Als zentrale Eigenschaft steht
"Items" zur Verfügung, welche die Einträge der Liste
vom Typ String enthält.
Da wir uns in einer folgenden Aufgabenstellung noch ausführlich
mit TListBox-Komponenten beschäftigen, erfolgen hier nur zwei
elementare Hinweise zur unmittelbaren Nutzung im
Programmbeispiel:
- Anfügen eines Texteintrages an die Stringliste in
ListBox1:
ListBox1.Items.Add ('Beliebiger Text');
- Löschen aller Texteinträge in ListBox1:
ListBox1.Clear;
Verwendung von
TPaintBox-Komponenten:
Die Komponente TPaintBox bietet eine Möglichkeit, in einem
definierten rechteckigen Bereich des Formulars zu zeichnen, dies
jedoch außerhalb des Zeichenfelds zu unterbinden - quasi eine
definierte Zeichenfläche im Formular. Das Zeichenfeld enthält
Koordinaten, wobei der Punkt P1(0,0) die linke obere
Ecke und P2(PaintBox1.Height, PaintBox1.Width) die rechte
untere Ecke darstellt.
Hinweise zur Verwendung:
- "Löschen" der PaintBox:
Dies kann durch "übermalen" des aktuellen
Inhaltes mit einem weiß ausgefülltem Rechteck erfolgen,
dessen Größe der Paintbox entspricht.
PaintBox1.Canvas.Rectangle
(0,0,paintbox1.height,paintbox1.width);
- Zeichnen einer Linie:
PaintBox1.Canvas.LineTo(x,y);
Gezeichnet wird von der gegenwärtigen Stiftposition
(PenPos) zu dem durch x/y beschriebenen Punkt.
- Verändern der Stiftposition:
PaintBox1.Canvas.MoveTo(x,y);
Hierbei wird der Stift (ohne dass er eine Linie zeichnet)
zur Position x/y bewegt.
Beispiel:
In eine quadratische PaintBox soll ein
gleichseitiges Dreieck gezeichnet werden, dessen
Spitze nach oben zeigt
procedure
Gleichseitiges_Dreieck;
var
a,b,c: TPoint;
seitenlaenge: Integer;
begin
with PaintBox1 do begin
{Bestimmen der Koordinaten für a,b,c}
a.x := 1;
a.y := height-1;
b.x := width-1;
b.y := a.y;
seitenlaenge := b.x-a.x;
c.x := a.x + seitenlaenge DIV 2;
c.y := a.y - trunc(sqrt(3/4*sqr(seitenlaenge)));
{Zeichnen durch Verbinden der Eckpunkte}
canvas.moveto(a.x, a.y);
canvas.lineto(b.x, b.y);
canvas.lineto(c.x, c.y);
canvas.lineto(a.x, a.y);
end;{of with}
end; |
|
|
|