unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 =
class(TForm)
Memo1: TMemo;
Button1: TButton;
// Gegenstände mit Zufallswerten erzeugen
Button2: TButton;
// Ergebnis bestimmen
Button3: TButton;
// Programm beenden
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Ergebnis:
array [1..5]
of Integer;
// Speichert die Nummer der 5 wertvollsten
// Gegenstände vom Index 1 = wertvollster
// bis Index 5 = 5. wertvollster Gegenstand
Ergebniswerte:
array [1..5]
of Real;
// Speichert die 5 niedrigsten Quotienten
// vom Index 1 = wertvollster bis Index
// 5 = 5. wertvollster Gegenstand
Gewicht:
array [1..10]
of Integer;
// Das Gewicht der Gegenstände 1-10
Quotient:
array [1..10]
of Real;
// Der Quotient (von Gewicht durch Wert) der
// Gegenstände 1-10
Wert:
array [1..10]
of Integer;
// Der Wert der Gegenstände 1-10
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
// i ist Schleifen-Hilfsvariable
begin
Randomize;
// Zufallszahlengenerator starten
Memo1.Lines.Clear;
// Text aus Memo1 komplett löschen
for i := 1
to 10
do // den 10 Gegenständen Zufallswerte geben
begin
Gewicht[i] := Random(15)+1;
// damit Gewicht zwischen 1 und 15 liegt
Wert[i] := Random(15)+1;
// damit Wert zwischen 1 und 15 liegt
end;
Memo1.Lines.Add('
Die 10 Gegenstände haben folgende Eigenschaften:');
Memo1.Lines.Add('
');
for i := 1
to 10
do
Memo1.Lines.Add('
Gegenstand '+IntToStr(i)+'
: Gewicht: '
+IntToStr(Gewicht[i])+'
Wert: '+IntToStr(Wert[i]));
end;
procedure TForm1.Button2Click(Sender: TObject);
var i, j: Integer;
// i und j sind Schleifen-Hilfsvariablen
begin
for i := 1
to 10
do // für die Gegenstände 1-10
begin
Quotient[i] := Gewicht[i]/Wert[i];
// ermittelt den Quotienten
Memo1.Lines[1+i] := Memo1.Lines[1+i]+'
Quotient: '
+FloatToStrF(Quotient[i], ffFixed, 10, 2);
// Real-Zahl wird auf 2 Stellen
// gerundet mit Genauigkeit 10
end;
for i := 1
to 5
do // Bestimmung der 5 wertvollsten Gegenstände
begin
Ergebnis[i] := 1;
// gehe davon aus, dass direkt der 1. Gegenstand
// der Wertvollste ist
Ergebniswerte[i] := Quotient[1];
// speichere den Quotienten des
// wertvollsten Gegenstandes
for j := 2
to 10
do // überprüfe die anderen 9 Gegenstände, ob sie
// nicht wertvoller sind
if Ergebniswerte[i]>Quotient[j]
then // falls der aktuelle Gegenstand doch
// wertvoller ist, dann ...
begin
Ergebnis[i] := j;
// ... speichere den aktuellen Gegenstand und
Ergebniswerte[i] := Quotient[j];
// speichere den aktuellen Quotienten
end;
// Jetzt wurden alle 10 Gegenstände überprüft. Der Wertvollste unter ihnen
// wurde gefunden. Damit er nicht als nächst wertvoller Gegenstand
// identifiziert wird ...
Quotient[Ergebnis[i]] := 16;
// ... setze seinen Quotienten, der nun nicht
// mehr gebraucht wird - da er bereits in die
// "Top5-Liste" aufgenommen wurde - auf "16".
// Somit ist er außerhalb der Skala 1-15 und
// wird bei weiteren Schleifendurchläufen nicht
// mehr als wertvoll eingestuft.
// Durchlaufe die Schleife erneut, bis alle 5 wertvollsten Gegenstände
// gefunden sind
end;
Memo1.Lines.Add('
');
Memo1.Lines.Add('
');
Memo1.Lines.Add('
Die 5 wertvollsten Gegenstände lauten:');
Memo1.Lines.Add('
');
for i := 1
to 5
do
Memo1.Lines.Add(IntToStr(i)+'
: Gegenstand '+IntToStr(Ergebnis[i])+
'
mit Quotient '+FloatToStrF(Ergebniswerte[i], ffFixed, 10, 2));
// Real-
// Zahl wird auf 2 Stellen gerundet mit Genauigkeit 10
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.