Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi case abfrage (https://www.delphipraxis.net/122265-case-abfrage.html)

delphidummy 12. Okt 2008 16:46


case abfrage
 
so,da sind wir wieder :) unser nächstes problem ist nun eine case abfrage
Delphi-Quellcode:
const TraegerTyp: array [1..18] of integer = (80,100,120,140,160,180,200,220,240,270,300,330,360,400,450,500,550,600);


//Berechnung des Gewichtes eines I-Träger + Typzuweisung
for a := 1 to 6 do
begin
  if (Widerstandsmomente_array[a] >= 1) and (Widerstandsmomente_array[a] <= 20) then
  begin
  KGItraeger_array[a] := (LaengeITraeger_array[a]/1000) * MproKilo[1]; //MproKilo= kg/m ; LaengeITraeger in m umrechnen
  ITraegerTyp := TraegerTyp[1];
  end;
usw. das funktioniert auch alles.
aber dann wollen wir abhängig vom ausgegebenen itraeger den gesamtpreis berechnen und dann kommt die fehlermeldung array type required...hilfe!

Delphi-Quellcode:
for a := 1 to 6 do

begin
//1.
case ITraegertyp of Traegertyp [1,2,3,4]:
  if (GewichtItraeger_array[a] > 0) and (GewichtItraeger_array[a] <= 399)
  then
  GesamtpreisI_array[a] := (GewichtItraeger_array[a])/1000 * EuroproTonne[1]
  else begin
  if (GewichtItraeger_array[a] >= 400 ) and (GewichtItraeger_array[a] <= 999)
  then
  GesamtpreisI_array[a] := (GewichtItraeger_array[a])/1000 * EuroproTonne[2]
  else begin
  if (GewichtItraeger_array[a] >=1000)
  then
  GesamtpreisI_array[a] := (GewichtItraeger_array[a])/1000 * EuroproTonne[3];

  end;
  end;

DeddyH 12. Okt 2008 16:48

Re: case abfrage
 
Von welchem Typ ist denn ITraegertyp?

[edit] Ah, scheint integer zu sein. Was wollt Ihr denn mit der case-Abfrage bezwecken? [/edit]

delphidummy 12. Okt 2008 17:12

Re: case abfrage
 
je nachdem welcher träger vorher bestimmt wurde und wie schwer das ganze is,soll abhängig davon der gesamtpreis ausgerechnet werden. der teil is jetzt nur nen auszug daraus, es gibt noch weitere abfragen,da wir eben 18 verschiedene trägertypen haben, drei gewichtskategorien und etliche unterschiedliche preise.

DeddyH 12. Okt 2008 17:24

Re: case abfrage
 
Also soll abgefragt werden, ob ITraegertyp 80,100,120 oder 140 beträgt?

delphidummy 12. Okt 2008 17:32

Re: case abfrage
 
ne,also wenn der trägertyp 80,100,120 oder 140 ist, soll eben abgefragt werden,wie schwer die träger sind und dann soll je nach gewicht (zwischen 0 und 399kg,zwischen 400 und 999kg und über 1000kg)ein bestimmter preis zugeordnet werden. daraus ergeben sich dann die gesamtkosten für die träger.

DeddyH 12. Okt 2008 17:45

Re: case abfrage
 
Da hab ich im Moment keine gescheite Idee dazu, alles was mir gerade einfällt, sieht unheimlich umständlich aus.

[edit] Naja, vielleicht etwas in der Art:
Delphi-Quellcode:
const
  i80 = 80;
  i100 = 100;
  ...
  TraegerTyp: array [1..18] of integer = (i80, i100,...);
  ...
  case iTraegertyp of
    i80,
    i100,
    ...: begin
           //Code
         end;
  end;

Uwe Raabe 12. Okt 2008 18:15

Re: case abfrage
 
Statt ITraegertyp den Wert aus dem Array Traegertyp zuzuweisen, solltest du dir besser den Index merken:

Delphi-Quellcode:
//Berechnung des Gewichtes eines I-Träger + Typzuweisung
for a := 1 to 6 do
begin
  if (Widerstandsmomente_array[a] >= 1) and (Widerstandsmomente_array[a] <= 20) then
  begin
  KGItraeger_array[a] := (LaengeITraeger_array[a]/1000) * MproKilo[1]; //MproKilo= kg/m ; LaengeITraeger in m umrechnen
  idxTraegerTyp := 1;
  end;
Wenn du den Arraywert wirklich brauchst, schreibst du einfach sowas wie:

Delphi-Quellcode:
ITraegertyp := Traegertyp[idxTraegertyp];
Dann kannst du später in der case-Anweisung einfach schreiben:

Delphi-Quellcode:
begin
//1.
case idxTraegertyp of
  1,2,3,4: begin
    if (GewichtItraeger_array[a] > 0) and (GewichtItraeger_array[a] <= 399)
    then
...

DeddyH 12. Okt 2008 18:18

Re: case abfrage
 
Das wird wirklich die beste Lösung sein.

delphidummy 13. Okt 2008 17:14

Re: case abfrage
 
haben schon den fehler, danke trotzdem :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 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