Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Boolean fehler (https://www.delphipraxis.net/159416-boolean-fehler.html)

Gilmohr 27. Mär 2011 03:31

Delphi-Version: 5

Boolean fehler
 
Hi, hab grad mal ne Frage, evtl ist jemand wach und kann mir kurz sagen wo der fehler liegt?

hier der code:
Code:
procedure TForm1.Button1Click(Sender: TObject);

var a: integer;

begin
  a := 0 ;
  //for a := 0 to 10 do
  repeat
    if BerechnungStart = true then begin
    v[a] := FloatToStr((Volumenstrom * 4) / ( StrToInt(d[a]) * 3.1416 * 1000 ));
    memo1.Lines.add(v[a]);
    inc (a);
    end;
  until
    if a = j then
    BerechnungStart := false;
end;
wenn ich versuche zu compilieren kommt folgende fehlermeldung:

[Fehler] Rohrnetzberechnung.pas(249): Ausdruckstyp muss BOOLEAN sein

allerdings verstehe ich nicht wieso...:?: für den fall dass a=j (a = 10 // soll nur 10 berechnungen anzeigen) soll BerechnugsStart auf false gesetzt werden damit nicht weiter gerechnet wird.

hoffe mir kann jemand helfen.
Gruß

isilive 27. Mär 2011 03:44

AW: Boolean fehler
 
Zitat:

Zitat von Gilmohr (Beitrag 1091251)
Code:
procedure TForm1.Button1Click(Sender: TObject);

var a: integer;

begin
...
  repeat
... until
    if a = j then
    BerechnungStart := false;
end;

nach until muss ein boolean operator oder ein vergleich kommen. aber auf keinen fall ein "if". hast du sicher nur übersehen, oder? :stupid::cyclops::stupid:

Luckie 27. Mär 2011 03:45

AW: Boolean fehler
 
Guck dir mal die Syntax zu until an.

himitsu 27. Mär 2011 03:46

AW: Boolean fehler
 
Zitat:

Zitat von Gilmohr (Beitrag 1091251)
Code:
until
  if a = j then

Ich schlage mal vor, du befragst die OH, wie eine Repeat-Until-Schleife aufgebaut ist.

Wobei dein "sinnloses"
Delphi-Quellcode:
if BerechnungStart = true then begin
eigentlich besagt, daß du eine While-Schleife nutzen solltest, anstatt dem Repeat.

Aber das ist eh alles egal, da
Delphi-Quellcode:
inc(a); if a = j then
sowieso ganz laut nach einer For-Schleife schreit,
so wie du es auch schon angedeutet hattest.

PS:
Zitat:

soll nur 10 berechnungen anzeigen
0 bis 10 sind aber 11 Durchläufe und nicht 10.

PPS: Wo um Himmels Willen ist
Delphi-Quellcode:
BerechnungStart
deklariert?
Und sag jetzt bitte nicht, daß diese lokal genutzte Variable irgendwo global rumgammelt.

Und noch ein Tipp: Für 3.1416 kennt Delphi eine Konstante, namens PI.

Gilmohr 27. Mär 2011 03:50

AW: Boolean fehler
 
ah ja klar !! ^^
danke jetzt seh ichs auch. ...ist wohl doch schon bisl spät :shock:
hab jetzt die bedingung für false oben schon mit rein genommen und schon läufts.

Danke !!

Luckie 27. Mär 2011 03:55

AW: Boolean fehler
 
Das muss ich jetzt nicht verstehen oder?

Gilmohr 27. Mär 2011 04:06

AW: Boolean fehler
 
nee ^^ ... musst wissen das ich noch delphi anfänger bin.

aber habs jetzt auch ganz ohne boolean hinbekommen weil er zwar die anwendung gestartet, sich dann aber bei der rechnung gehangen hat.
so funktionierts ohne probleme

Code:
procedure TForm1.Button1Click(Sender: TObject);

var a: integer;

begin
  memo1.Clear;
  a := 0 ;
  repeat
    v[a] := FloatToStr((Volumenstrom * 4) / ( StrToInt(d[a]) * 3.1416 * 1000 ));
    memo1.Lines.add(v[a]);
    inc (a);
  until
    a = j

end;

Luckie 27. Mär 2011 04:21

AW: Boolean fehler
 
Und warum keine for-Schleife? Damit sparst du dir das hochzählen von a und die Abbruchbedingung.

Medium 27. Mär 2011 04:22

AW: Boolean fehler
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  K = 0.00127323954473; // ~= 4 / (PI*1000)
var
  a: integer;
begin
  memo1.Clear;
  for a := 0 to j do
    memo1.Lines.add(FloatToStr((Volumenstrom*K)/StrToInt(d[a])));
end;
Edit: Hallo roter Kasten, hallo Luckie :)
Edit2: An der Formel bissl gedreht. Weitgehend Kosmetik.

Gilmohr 27. Mär 2011 04:32

AW: Boolean fehler
 
mit For schleife hatte ich probiert...aber das hab ich nicht so hinbekommen ...und nu läufts ja. ob das schön gecodet ist spielt für mich momentan keine rolle. soll nur irgendwie laufen.

@Medium: cool ! danke, werd das auch mal so einbauen.

Luckie 27. Mär 2011 04:33

AW: Boolean fehler
 
Wo kommt j und das Array d her?

Delphi-Quellcode:
for a := 0 to Length(d) - 1  do
  memo1.Lines.add(FloatToStr((Volumenstrom*K)/StrToInt(d[a])));
Schon brauchen wir J nicht mehr.

Und Laufvariablen benennt man üblicherweise (aus historischen Gründen) mit i.

Und was spricht dagegen das jetzt zu verbessern? Das erhöht die Lesbarkeit- und Verständlichkeit.

Gilmohr 27. Mär 2011 04:49

AW: Boolean fehler
 
J bruach ich unbedingt.
ist keine einfache laufvariable sondern damit werden aus dateien einzelen strings ausgelesen und in nen StringGrid reingeschrieben wo verschiedene sachen aufgelistet werden.

diese berechnung hier ist nue eine von mehreren bie denen j genaus verwendet werden soll.

wollte das erst mit nem memo feld berechnen, aber denke es ist auch besser das im StringGrid zu machen weils aufem bildschirm besser aussieht.

also neue frage
kann ich das auch genaus wie bei dem memo feld machen, dass er mir nen StrinGrid in der nächsten zeile erstellt? und anstatt memo1.clear das er dann den ganzen stringGrid löscht?

Luckie 27. Mär 2011 04:55

AW: Boolean fehler
 
Also das mit der globalen Variable j kommt mir sehr gefährlich vor und schreit gerade zu nach Fehlern, die man nicht findet. Auch solltest du die Oberfläche von der Berechnung und den Daten trennen.

Für eine neue Frage eröffne bitte auch einen neuen Thread.

Gilmohr 27. Mär 2011 05:00

AW: Boolean fehler
 
das programm gehört zu dem Projekt das ich mal in nem andere thread angesprochen hab und nach hilfe gesucht hatte.
http://www.delphipraxis.net/158789-w...s-hamburg.html

werd dann alles weitere was ich gerade schrieben wollte und den quellcode dazu dann dort posten

Gilmohr 27. Mär 2011 05:02

AW: Boolean fehler
 
array d ist der durchmesser.
im prinzip ist da also noch ein fehlrr in der formel weil d noch zum quadrat muss. (darum wollte ich mich später kümmern)

isilive 27. Mär 2011 20:04

AW: Boolean fehler
 
Zitat:

Delphi-Quellcode:
for a := 0 to Length(d) - 1  do
  memo1.Lines.add(FloatToStr((Volumenstrom*K)/StrToInt(d[a])));

Delphi-Quellcode:
var i:integer
    d:double;
begin
for i := 0 to Length(d) - 1  do
  begin
    d:=StrToInt(d[i]);
    memo1.Lines.add(FloatToStr((Volumenstrom*K)/(d*d)));
  end;
end;
Du kannst bei jedem Schleifendurchlauf d "einlesen" und verwenden, oder - was noch eleganter wäre - d[] überhaupt als array of double statt array of string machen - nachdem ja eh nur Zahlen drinstehen. Wobei ich jetzt den Rest deines Programms nicht kenne.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.

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