AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Operator ist auf diesen Operandentyp nicht anwendbar
Thema durchsuchen
Ansicht
Themen-Optionen

Operator ist auf diesen Operandentyp nicht anwendbar

Ein Thema von KnutschKugel · begonnen am 1. Jan 2011 · letzter Beitrag vom 1. Jan 2011
Antwort Antwort
KnutschKugel

Registriert seit: 1. Jan 2011
11 Beiträge
 
#1

Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:26
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

Geändert von mkinzler ( 1. Jan 2011 um 12:30 Uhr) Grund: Quote-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:32
In welcher Zeile erscheint der Fehler?
Markus Kinzler
  Mit Zitat antworten Zitat
KnutschKugel

Registriert seit: 1. Jan 2011
11 Beiträge
 
#3

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:35
49 - 58

Also quasi ab der Zeile wo ich ihm sagen möchte:
'von 7 bis 8,1 berechne für a = 7'
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:40
Richte erst mal deine Blöcke

Delphi-Quellcode:
then
begin
   <Zuweisung>
   ...
end;
und nicht
Delphi-Quellcode:
then
  <Zuwesiung>
begin
   ...
end,
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:45
Klammern setzen?

or und and hat Vorrang vor < und >
[edit]
das Tier war schneller, aber da er den Grund für den Fehler zwar behoben, aber nicht benannt hat, war ich schneller

PS:
Es kann sein, daß a nicht gesetzt wurde.
Kennst du <= ? Wobei das eher nach einem Delphi-Referenz durchsuchenTrunc aussieht.
Und wo wird a eigentlich verwendet?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Jan 2011 um 12:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:46
Die Berechnung ist falsch

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.
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 1. Jan 2011 um 12:56 Uhr)
  Mit Zitat antworten Zitat
KnutschKugel

Registriert seit: 1. Jan 2011
11 Beiträge
 
#8

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 12:58
Vielen Dank
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*
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Operator ist auf diesen Operandentyp nicht anwendbar

  Alt 1. Jan 2011, 13:00
Die Frage bitte in einem neuen Thread stellen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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