Autor Beitrag
Dahe85
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.10.02 16:05 
Hi!

Ich bin noch recht unerfahren in Delphi. Da ich die Sprache aber am Erlernen bin, habe ich mir mal verschiedenste Tutorials durchgelesen, und habe nun bei einem Projekt ein Problem:

Es geht darum, dass ich eine Anwendung erstellen will, in der man 3 Werte eingibt, und man dann beim Mausklick auf TButton1 in einer TListBox Eigenschaften genannt bekommt.

Hier erstmal der Quelltext der Prozedur:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c: real;
begin
{Dreiecksanalyse}
  a := strtofloat(felda.text);
  b := strtofloat(feldb.text);
  c := strtofloat(feldc.Text);
  if not (a + b > c) and not
         (a + c > b) and not
         (b + c > a) then
    listbox1.Items.add ('Dreieck nicht konstruierbar!') else begin
      listbox1.Items.add ('Dreieck konstruierbar!');
      if (a=b) or (b=c) or (a=c) then
        listbox1.Items.add ('gleichseitig') else begin
          listbox1.Items.add ('nicht gleichseitig');
          if (a=b) or (a=c) or (b=c) then
            listbox1.Items.add ('gleichschenklig') else
            listbox1.items.add ('nicht gleichschenklig');
          if (sqrt((a*a)+(b*b))=c) or sqrt((a*a)+(c*c))=b) or sqrt((b*b)+(c*c)=a) then
            listbox1.items.add ('rechtwinklig') else
            listbox1.items.add ('nicht rechtwinklig')
        end;
    end;
end;


In der Zeile if (sqrt((a*a)+(b*b))=c) or sqrt((a*a)+(c*c))=b) or sqrt((b*b)+(c*c)=a) then erscheint die Meldung [Fehler] Unit1.pas(55): Operator ist auf diesen Operandentyp nicht anwendbar Diese Zeile soll bewirken, dass herausgefunden wird, ob mit den 3 angegebenen Werten (a,b,c) ein rechtwinkliges Dreeck hergestellt werden kann. Ich habe diese Formel benutzt, da sie eine Abwandlung des Satzes des Pythagoras ist.

Ich hoffe ihr könnt mir bei diesem Problem(chen) weiterhelfen:)
Falls dies das falsche Forum für diese Frage sein sollte, kann ein Mod den Thread ja verschieben...

MFG,
Dahe85
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 07.10.02 16:10 
sqrt ist eine Rechenfunktion, die einen Integer-Wert ausgibt. Da gibt's kein or drin. Also musst du irgendwie das or zwischen den beiden Qurzelberechnungen wegmachen. Was soll das überhaupt da?

Nachtrag: Genauer gesagt musst du die gesamte IF-Abfrage weglassen...

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Dahe85 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.10.02 16:24 
Erstmal thx für die schnelle Antwort!

Das "or" soll ausdrücken, dass, wenn eine der drei Gleichungen zutrifft, ein rechtwinkliges Dreieck existiert. Also wenn z.B. sqrt((a*a)+(b*b))=c , dann liegt ein rechtwinkliges Dreieck vor. Ich habe nur diese Gleichung auch für die anderen Variablen aufstellen müssen, da es ja theoredisch egal ist, ob a=b, b=c oder a=c ist.
Und wie du gemeint hat, die If-Abfrage wegzulassen, wäre nicht möglich, da ich diese ja brauche, um herauszufinden, ob die Bedingungen erfüllt sind.

Aber den Fehler habe ich inzwischen dank der hilfe eines Freundes gefunden:
Nichts schwieriges, aber trotz mehreren Hinguckens habe ich den Fehler nicht entdeckt. Ich habe die Klammern vor "sqrt" vergessen.
Die berichtigten Zeilen lautet also:

ausblenden Quelltext
1:
2:
3:
if (sqrt((a*a)+(b*b))=c) or (sqrt((a*a)+(c*c))=b) or (sqrt((b*b)+(c*c)=a) then
            listbox1.items.add ('rechtwinklig') else
            listbox1.items.add ('nicht rechtwinklig')


Allerdings ist nun ein weiteres Problem aufgetreten:
ausblenden Quelltext
1:
[Fehler] Unit1.pas(55): Inkompatible Typen					
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 07.10.02 17:27 
Vor dem letzten Gleichheitszeichen muss eine ) hin. Sonst steht es in der Wurzel drin!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dahe85 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.10.02 18:18 
stimmt!
danke!

...diese blöde Klammer;)
Jetzt funzt das Programm.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 07.10.02 20:01 
Stimmt peter,
Ich habe das Gleichheitszeichen gar nicht gesehen, daher habe ich es für eine Berechnung und nicht für einen Vergleich gehalten.
Sorry... :roll:

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 07.10.02 20:34 
Der Ausdruck ist ja auch alles andere als übersichtlich!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dahe85 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 11.10.02 23:43 
hmmm...eigentlich hätte ich über antworten informiert werden sollen... :roll:


was meinst du mit unübersichtlich?
meinst du damit, dass man hier die befehle, die in delphi fett gechrieben werden, nicht gut erkennen kann?
oder einfach die art und weise meiner beschreibung?

vielleicht kannst dus ja sagen, damit ich das in zukunft besser machen kann...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 12.10.02 09:00 
Hi!

An Deiner Beschreibung ist nichts auszusetzen. Es ist einfach so, dass in manchmal in Delphi Ausdrücke zusammenkommen, die soviele Klammern enthalten, dass man hinterher nicht mehr weiß, welche geschlossene Klammer zu welcher Offenen gehört. Und dann passiert es schnell, das man etwas übersieht.
Man hätte die Wurzeln natürlich vorher in temporären Variablen berechnen können und dann nur diese Variablen mit a,b,c vergleichen können. Aber das ist Geschmackssache.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".