Program do obliczania czynszu - błąd

0

Witam! Programuję w Delphi 7 i chcę zrobić program według polecenia:

Zadanie 3. Zaprojektuj arkusz kalkulacyjny, który umożliwi obliczenie wartości czynszu dla mieszkańców pewnego bloku. Wysokość kwoty za czynsz dla każdego mieszkania jest obliczana według takich samych zasad. Jest to suma opłat za centralne ogrzewanie, eksploatację, ciepłą wodę i użytkowanie windy. Stawki za poszczególne składowe czynszu są następujące:
ˇ centralne ogrzewanie 2,75 zł za metr kwadratowy mieszkania,
ˇ eksploatacja 4,27 zł za metr kwadratowy,
ˇ ciepła woda 15, 07 zł za osobę,
ˇ winda 18,67 zł za osobę.
Opłata za windę jest zróżnicowana, obowiązuje tylko lokatorów mieszkających powyżej pierwszego piętra. Lokatorzy z pięter od drugiego do piątego płacą 3/4 stawki, a począwszy od szóstego piętra obowiązuje cała stawka. Do tabeli głównej arkusza dodaj dwie kolumny wpłata za czynsz oraz uwagi o wpłacie. W kolumnie uwagi powinien być wygenerowany odpowiedni komunikat w zależności od tego, czy nastąpiła nadpłata, niedopłata lub brak wpłaty. Gdy wpłata równa jest wysokości czynszu, komórka pozostaje pusta. Zadbaj o estetyczny wygląd arkusza. Arkusz zapisz na dyskietce w pliku Czynsz.

Adres zadania:
http://www.gimnazjumlipski.neostrada.pl/zadinf.html

Wiem, że to zadanie jest przewidziane na arkusz kalkulacyjny, ale chciałbym wykonać je w Delphi.
Dobrze mi szło, ale gdy chciałem zrobić tak, żeby wyświetlał wiedomość, gdy suma wpisana w Edit1 jest większa lub mniejsza od sumy do zapłacenia, wyskakuje błąd. Oto zdjęcie:

http://img179.imageshack.us/img179/8944/czynszre1.jpg

A oto klucz programu:
Unit1:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
x, y, z : Real;
co, e, cw, w, r : Real;
begin
x := StrToFloat(Edit1.Text);
y := StrToFloat(Edit2.Text);
z := StrToFloat(Edit3.Text);
co := x * 2.75;
e := x * 4.27;
cw := z * 15.07;
if z <= 1 then begin
w := 0;
end;
if (z = 2) or (z = 3) or (z = 4) or (z = 5) then begin
w := (3/4) * 18.67 * z;
end;
if z >= 6 then begin
w := 18.67 * z;
end;
ceny.Label2.Caption := FloatToStr(co) + '  zł';
ceny.Label4.Caption := FloatToStr(e) + '  zł';
ceny.Label6.Caption := FloatToStr(cw) + '  zł';
ceny.Label8.Caption := FloatToStr(w) + '  zł';

r := StrToFloat(ceny.Label10.Caption);
r := co + e + cw + w;
ceny.Label10.Caption := FloatToStr(r) + '  zł';

ceny.showmodal;
end;

end.

A oto Unit2:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tceny = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit1: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Button1: TButton;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ceny: Tceny;

implementation

{$R *.dfm}

procedure Tceny.Button1Click(Sender: TObject);
var
e, r, s : Real;
begin
e := StrToFloat(Edit1.Text);
r := StrToFloat(Label10.Caption);
if e = r then begin
Label13.Caption := '';
end;
if e > r then begin
Label13.Caption := 'Wpłacona suma jest zbyt duża.';
s := e - r;
Label15.Caption := FloatToStr(s);
Label14.Caption := 'Nadwyżka wynosi ' + Label15.Caption + ' zł.';
end;
if e < r then begin
Label13.Caption := 'Wpłacona suma nie wystarczy na zapłacenie czynszu.';
s := r - e;
Label15.Caption := FloatToStr(s);
Label14.Caption := 'Należy dopłacic ' + Label15.Caption + ' zł.';
end;
end;

end.

Dla wyjaśnienia:
ceny to nazwa drugiej formatki.

Jeżeli ktoś wie, o co chodzi, niech odpisze. Z góry dziękuję!

0

błąd:
r := StrToFloat(Label10.Caption);

0
MarkII napisał(a)

błąd:
r := StrToFloat(Label10.Caption);

Może to i jest problem, ale jak go rozwiązać??? [???]

0

usuń końcówkę ' zł.' i będzie ok.

0
if (z = 2) or (z = 3) or (z = 4) or (z = 5) then begin
w := (3/4) * 18.67 * z;
end;

Nie zbyt eleganckie to...

zmień na:

if z in [2..5] then w := (3/4) * 18.67 * z;
0
puchi napisał(a)

usuń końcówkę ' zł.' i będzie ok.

Dzięki, zadziałało!!! [soczek]

1 użytkowników online, w tym zalogowanych: 0, gości: 1