Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Operator ist auf diesen Operandentyp nicht anwendbar (https://www.delphipraxis.net/157164-operator-ist-auf-diesen-operandentyp-nicht-anwendbar.html)

KnutschKugel 1. Jan 2011 11:26

Operator ist auf diesen Operandentyp nicht anwendbar
 
Hallo :)

Ich hoffe ihr könnt mir weiter helfen: Ich schreibe meine Facharbeit in Informatik und muss dazu ein Programm mit Delphi erstellen.
Ich muss dazu sagen, dass ich kompletter Anfänger bin, was Delphi betrifft.
Das Programm ist für einen Segelverein, der Gastlieger bekommt: Je nach Dauer des Aufenthalts (T), Länge des Bootes (L) und Anzahl der benötigten Duschmarken (D) soll errechnet werden, was der ganze Spaß kosten soll. Dann soll das Programm im Hintergrund diese Summen abspeichern, sodass sie nach Passwortabfrage wieder erscheinen und man beispielsweise Abrechnungen damit machen kann.
Mein Problem ist folgendes: Ich bekomm schon allein die Berechnung nicht hin :(

Hier mein Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    edtL: TEdit;
    edtT: TEdit;
    edtD: TEdit;
    edtS: TEdit;
    btnRechnen: TBitBtn;
    procedure btnRechnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnRechnenClick(Sender: TObject);
var L, T, D, a, Ausgabe: real;
Laenge:String;
begin
L:=StrToFloat(edtL.Text);
T:=StrToFloat(edtT.Text);
D:=StrToFloat(edtD.Text);

begin
if L<=7
then a:=6
end;
begin
if L>7 and L<8.1
then a:=7
end;
begin
if L>8 and L<9.1
then a:=8
end;
begin
if L>9 and <10.1
then a:=9
end;
begin
Ausgabe:=(L*T)+D;
edtS.Text:=FloatToStr(Ausagbe);
end;
end.
Ich hoffe ihr könnt mir weiter helfen :(

Liebe Grüße

mkinzler 1. Jan 2011 11:32

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
In welcher Zeile erscheint der Fehler?

KnutschKugel 1. Jan 2011 11:35

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
49 - 58

Also quasi ab der Zeile wo ich ihm sagen möchte:
'von 7 bis 8,1 berechne für a = 7'

mkinzler 1. Jan 2011 11:40

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Richte erst mal deine Blöcke

Delphi-Quellcode:
then
begin
   <Zuweisung>
   ...
end;
und nicht
Delphi-Quellcode:
then
  <Zuwesiung>
begin
   ...
end,

Die Muhkuh 1. Jan 2011 11:44

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Erstmal Herzlich Willkommen in der DP :-)

Du hast in Deinem Code sowieso unnütz viele begin end Konstrukte drin.

Hier mal übersichtlicher:

Delphi-Quellcode:
procedure TForm1.btnRechnenClick(Sender: TObject);
var
  L, T, D, a, Ausgabe: real;
  Laenge:String;
begin
  L := StrToFloat(edtL.Text);
  T := StrToFloat(edtT.Text);
  D := StrToFloat(edtD.Text);

  if L <= 7 then
    a := 6;

  if (L > 7) and (L < 8.1) then
    a := 7;

  if (L > 8) and (L < 9.1) then
    a := 8;

  if (L > 9) and (L < 10.1) then
    a := 9;

  Ausgabe := (L * T) + D;
  edtS.Text := FloatToStr(Ausagbe);
end;
Dein Fehler ist damit auch behoben. :)

himitsu 1. Jan 2011 11:45

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Klammern setzen?

Delphi-Quellcode:
or
und
Delphi-Quellcode:
and
hat Vorrang vor
Delphi-Quellcode:
<
und
Delphi-Quellcode:
>

[edit]
das Tier war schneller, aber da er den Grund für den Fehler zwar behoben, aber nicht benannt hat, war ich schneller :tongue:

PS:
Es kann sein, daß
Delphi-Quellcode:
a
nicht gesetzt wurde.
Kennst du
Delphi-Quellcode:
<=
? Wobei das eher nach einem Delphi-Referenz durchsuchenTrunc aussieht.
Und wo wird
Delphi-Quellcode:
a
eigentlich verwendet?

Sir Rufo 1. Jan 2011 11:46

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Die Berechnung ist falsch ;)

Delphi-Quellcode:
Ausgabe := ( L * T ) + D;
Hier wird stumpf die Länge mit den Tagen multipliziert und dann die Anzahl der Duschmarken addiert?
Und dabei soll was vernünftiges rauskommen?
Wenn wir uns mal nur die Einheiten ansehen dann stellt man schnell fest, dass da was nicht stimmen kann:
Code:
( Meter * Tag ) + Stück = TagMeter + Stück
Also brauchen wir wohl etwas mehr
Code:
Meter * Euro/( Meter * Tag ) * Tag + Stück * Euro/Stück
Kürzt man jetzt alles weg, dann bleibt nur noch Euro über, also ein Preis.
Somit fehlt in der Berechnung der Wert für die Miete (Preis pro Meter und Tag) und die Kosten für die Duschmarken.
Delphi-Quellcode:
Ausgabe := L * T * BootPreisProMeterTag + D * DuschmarkePreisProStueck;
Und die Abfragen würde ich auch so handeln
Delphi-Quellcode:
a := 6;
if L > 7 then
  a := 7;
if L > 8 then
  a := 8;
if L > 9 then
  a := 9;

KnutschKugel 1. Jan 2011 11:58

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Vielen Dank :D
Es funktioniert *hüpf*

Und wie kann ich jetzt diese Summen hinterrücks speichern?
Ich dachte vielleicht daran das mit nem neuen Formular zu machen, sodass das dann angezeigt wird, nachdem die Passwortabfrage getätigt wurde. Neues Formular anzeigen mach ich doch mit Form.visible:=true, oder?
Aber von der Passwortabfrage.. *schulterzuck*

Sir Rufo 1. Jan 2011 12:00

AW: Operator ist auf diesen Operandentyp nicht anwendbar
 
Die Frage bitte in einem neuen Thread stellen


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz