|
| IfThen igen Fra : ms1@skindbeni.dk |
Dato : 26-07-05 10:10 |
|
Hej.
Jeg har tidligere fået hjælp herinde til samme problem, men det
"irriterer" mig alligevel, at jeg ikke kan få det, som jeg vil...
Det drejer sig om nogle komplicerede beregninger, som jeg skal
foretage. Der er en del hvis'er i mine beregninger. I Excel kunne jeg
fx have skrevet det som flg.
HVIS(G8="Gift";
E6+HVIS(E7>0;E7;0)-HVIS(E8>E71;E8-E71;0)+
HVIS(G7<0;HVIS(E7+G7>=0;G7;-E7);0))*E11);0)
Men i Delphi kan jeg ikke få det på lignende måde.
If sætninger kan ikke sættes som fx
a:= b + if b>0 then b else 0 + if c > 100 then c*2 else 100;
Jeg har i oprindelig tråd fået foreslået at bruge ifthen
Fx i simpel form a := IfThen(b>0; b+2; 2);
Men denne funktion kan jeg ikke få til at virke som jeg vil heller.
Er der ingen måde hvorpå jeg nemt kan lave ovenstående excel
eksempel i Delphi fremfor at skulle lave en hel masse if sætninger,
der hurtigt kan ende med at blive til en masse kode, hvis alle
beregninger skal skrives hver gang en ny if sætning skal prøves.
I Excel kan jeg jo sige
Hvis "udtryk"; udføres hvis sandt; udføres hvis falsk
hvilket er optimalt, da det kan indgå inde midt i en beregning.
Hmm... er i forvirret? Det er jeg næsten ved at forklare det nu
| |
Finn Bindeballe (26-07-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 26-07-05 11:03 |
|
hej....
nu kan jeg ikke lige huske hvilken ver. delphi du bruger, men IfThen
virker altsaa fint i delphi 7.....
mht dei andet forslag/problem, saa er der ikke mulighed for den slags i
pascal. meeeen det maa være til at komme over....
/Finn
ms1@skindbeni.dk wrote:
> Hej.
>
> Jeg har tidligere fået hjælp herinde til samme problem, men det
> "irriterer" mig alligevel, at jeg ikke kan få det, som jeg vil...
>
> Det drejer sig om nogle komplicerede beregninger, som jeg skal
> foretage. Der er en del hvis'er i mine beregninger. I Excel kunne jeg
> fx have skrevet det som flg.
>
> HVIS(G8="Gift";
> E6+HVIS(E7>0;E7;0)-HVIS(E8>E71;E8-E71;0)+
> HVIS(G7<0;HVIS(E7+G7>=0;G7;-E7);0))*E11);0)
>
> Men i Delphi kan jeg ikke få det på lignende måde.
>
> If sætninger kan ikke sættes som fx
>
> a:= b + if b>0 then b else 0 + if c > 100 then c*2 else 100;
>
> Jeg har i oprindelig tråd fået foreslået at bruge ifthen
>
> Fx i simpel form a := IfThen(b>0; b+2; 2);
>
> Men denne funktion kan jeg ikke få til at virke som jeg vil heller.
>
> Er der ingen måde hvorpå jeg nemt kan lave ovenstående excel
> eksempel i Delphi fremfor at skulle lave en hel masse if sætninger,
> der hurtigt kan ende med at blive til en masse kode, hvis alle
> beregninger skal skrives hver gang en ny if sætning skal prøves.
>
> I Excel kan jeg jo sige
>
> Hvis "udtryk"; udføres hvis sandt; udføres hvis falsk
>
> hvilket er optimalt, da det kan indgå inde midt i en beregning.
>
> Hmm... er i forvirret? Det er jeg næsten ved at forklare det nu
>
| |
ms1@skindbeni.dk (26-07-2005)
| Kommentar Fra : ms1@skindbeni.dk |
Dato : 26-07-05 12:00 |
|
Finn Bindeballe skrev:
> hej....
>
> nu kan jeg ikke lige huske hvilken ver. delphi du bruger, men IfThen
> virker altsaa fint i delphi 7.....
Jeg bruger ver 6,0 PE indtil videre. Formentligt bruger jeg den forkert
så. (det er der også stor sandsynlighed for)
> mht dei andet forslag/problem, saa er der ikke mulighed for den slags i
> pascal. meeeen det maa være til at komme over....
Okay. Har du et forslag til at opstille følgende beregning, som jeg
her giver i tekstform.
Resultat, A, B, C, D, E.
Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
ellers D) + (hvis D < 0 så D ellers 0).
Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
da den ikke kan finde ud af den anden måde. Det bliver jo det samme
procedurer/beregninger kun med en enkelt forskel hver gang.
medmindre du (i andre erfarne) kender en genial opstilling
| |
Michael Haase (26-07-2005)
| Kommentar Fra : Michael Haase |
Dato : 26-07-05 14:58 |
|
ms1@skindbeni.dk skrev:
>
> Okay. Har du et forslag til at opstille følgende beregning, som jeg
> her giver i tekstform.
>
>
> Resultat, A, B, C, D, E.
>
> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
> ellers D) + (hvis D < 0 så D ellers 0).
>
> Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
> mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
> da den ikke kan finde ud af den anden måde. Det bliver jo det samme
> procedurer/beregninger kun med en enkelt forskel hver gang.
>
> medmindre du (i andre erfarne) kender en genial opstilling
>
Umiddelbart vil jeg mene at nedenstående giver det du efterlyser
resultat:=a + fx(b>0)*(-b) + fx(c<d)*(-c) + fx(c>=d)*(-d) + fx(d<0)*(-d);
hvor fx(b>0) = strtoint(booltostr(b>0)) osv
hvis en sammenligning er sand, returnerer den -1, derfor skal der ganges
med minus igen. Hvis falsk returnerer den 0.
--
Michael Haase
| |
pb (26-07-2005)
| Kommentar Fra : pb |
Dato : 26-07-05 15:32 |
|
ms1@skindbeni.dk wrote:
> Finn Bindeballe skrev:
>
>>hej....
>>
>>nu kan jeg ikke lige huske hvilken ver. delphi du bruger, men IfThen
>>virker altsaa fint i delphi 7.....
>
>
> Jeg bruger ver 6,0 PE indtil videre. Formentligt bruger jeg den forkert
> så. (det er der også stor sandsynlighed for)
>
>
>>mht dei andet forslag/problem, saa er der ikke mulighed for den slags i
>>pascal. meeeen det maa være til at komme over....
>
>
> Okay. Har du et forslag til at opstille følgende beregning, som jeg
> her giver i tekstform.
>
>
> Resultat, A, B, C, D, E.
>
> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
> ellers D) + (hvis D < 0 så D ellers 0).
>
> Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
> mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
> da den ikke kan finde ud af den anden måde. Det bliver jo det samme
> procedurer/beregninger kun med en enkelt forskel hver gang.
>
> medmindre du (i andre erfarne) kender en genial opstilling
>
16? Det var mange. Burde det her ikke give det rigtige resultat:
Resultat := A;
if B > 0 then
Resultat := Resultat + B;
if C < D then
Resultat := Resultat + C
else
Resultat := Resultat + D;
if D < 0 then
Resultat := Resultat + D;
16 sætninger er der i hvert fald ikke Håber det hjælper
pb
| |
Skindbeni (26-07-2005)
| Kommentar Fra : Skindbeni |
Dato : 26-07-05 19:49 |
|
"pb" <pb@nospam.invalid> skrev i en meddelelse
news:42e6496f$0$716$edfadb0f@dread12.news.tele.dk...
> ms1@skindbeni.dk wrote:
>> Okay. Har du et forslag til at opstille følgende beregning, som jeg
>> her giver i tekstform.
>>
>>
>> Resultat, A, B, C, D, E.
>>
>> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
>> ellers D) + (hvis D < 0 så D ellers 0).
>>
>> Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
>> mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
>> da den ikke kan finde ud af den anden måde. Det bliver jo det samme
>> procedurer/beregninger kun med en enkelt forskel hver gang.
>>
>> medmindre du (i andre erfarne) kender en genial opstilling
>>
> 16? Det var mange. Burde det her ikke give det rigtige resultat:
>
> Resultat := A;
> if B > 0 then
> Resultat := Resultat + B;
> if C < D then
> Resultat := Resultat + C
> else
> Resultat := Resultat + D;
> if D < 0 then
> Resultat := Resultat + D;
>
> 16 sætninger er der i hvert fald ikke Håber det hjælper
Hej pb.
Sådan havde jeg ikke overvejet opstillingen før nu. Tænkte slet ikke i den
retning (at det er muligt at bruge fx Resultat som mellemregning hele vejen
igennem).
Super!
Tak for det.
| |
pb (26-07-2005)
| Kommentar Fra : pb |
Dato : 26-07-05 20:10 |
|
Skindbeni wrote:
> "pb" <pb@nospam.invalid> skrev i en meddelelse
> news:42e6496f$0$716$edfadb0f@dread12.news.tele.dk...
>
>>ms1@skindbeni.dk wrote:
>
>
>>>Okay. Har du et forslag til at opstille følgende beregning, som jeg
>>>her giver i tekstform.
>>>
>>>
>>>Resultat, A, B, C, D, E.
>>>
>>>Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
>>>ellers D) + (hvis D < 0 så D ellers 0).
>>>
>>>Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
>>>mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
>>>da den ikke kan finde ud af den anden måde. Det bliver jo det samme
>>>procedurer/beregninger kun med en enkelt forskel hver gang.
>>>
>>>medmindre du (i andre erfarne) kender en genial opstilling
>>>
>>
>>16? Det var mange. Burde det her ikke give det rigtige resultat:
>>
>>Resultat := A;
>>if B > 0 then
>> Resultat := Resultat + B;
>>if C < D then
>> Resultat := Resultat + C
>>else
>> Resultat := Resultat + D;
>>if D < 0 then
>> Resultat := Resultat + D;
>>
>>16 sætninger er der i hvert fald ikke Håber det hjælper
>
>
> Hej pb.
>
> Sådan havde jeg ikke overvejet opstillingen før nu. Tænkte slet ikke i den
> retning (at det er muligt at bruge fx Resultat som mellemregning hele vejen
> igennem).
>
> Super!
>
> Tak for det.
>
>
Det var så lidt.
pb
| |
Haastrup (26-07-2005)
| Kommentar Fra : Haastrup |
Dato : 26-07-05 20:05 |
|
On 26 Jul 2005 04:00:17 -0700, ms1@skindbeni.dk wrote:
>Finn Bindeballe skrev:
>> hej....
>>
>> nu kan jeg ikke lige huske hvilken ver. delphi du bruger, men IfThen
>> virker altsaa fint i delphi 7.....
>
>Jeg bruger ver 6,0 PE indtil videre. Formentligt bruger jeg den forkert
>så. (det er der også stor sandsynlighed for)
>
>> mht dei andet forslag/problem, saa er der ikke mulighed for den slags i
>> pascal. meeeen det maa være til at komme over....
>
>Okay. Har du et forslag til at opstille følgende beregning, som jeg
>her giver i tekstform.
>
>
>Resultat, A, B, C, D, E.
>
>Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
>ellers D) + (hvis D < 0 så D ellers 0).
>
>Umiddelbart vil jeg mene, at der vil komme uoverskueligt og riiiiigtig
>mange sætninger (vist nok 16) og megen skriveri af det samme i Delphi,
>da den ikke kan finde ud af den anden måde. Det bliver jo det samme
>procedurer/beregninger kun med en enkelt forskel hver gang.
>medmindre du (i andre erfarne) kender en genial opstilling
Hvorfor laver du så ikke bare en procedure eller funktion?
F.eks. ala (ikke testet):
function ITE( test:boolean; res1,res2:real):real;
begin
if test then result:=res1 else result:=res2;
end;
...
resultat:=A+ITE( (B>0), B, 0)+ITE( (C<D), C, D)+ITE( (D<0), D, 0);
Regards S. Haastrup.
| |
Erik Klausen (26-07-2005)
| Kommentar Fra : Erik Klausen |
Dato : 26-07-05 21:23 |
|
ms1@skindbeni.dk wrote in news:1122375617.138206.311730
@g49g2000cwa.googlegroups.com:
> Finn Bindeballe skrev:
> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
> ellers D) + (hvis D < 0 så D ellers 0).
Resultat := A+Max( B, 0 )+Min( C, D )+Min( D, 0 );
mvh.
Erik Klausen
| |
Skindbeni (27-07-2005)
| Kommentar Fra : Skindbeni |
Dato : 27-07-05 01:15 |
|
"Erik Klausen" <ekl@host.domain> skrev i en meddelelse
news:Xns969FE3B64DB5EErikKlausen@62.243.74.162...
> ms1@skindbeni.dk wrote in news:1122375617.138206.311730
> @g49g2000cwa.googlegroups.com:
>
>> Finn Bindeballe skrev:
>> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
>> ellers D) + (hvis D < 0 så D ellers 0).
>
> Resultat := A+Max( B, 0 )+Min( C, D )+Min( D, 0 );
Hvordan får jeg brugt Max og min?
Jeg får fejlbeskeden Undeclared identifier når jeg forsøger at anvende
ovenstående..
| |
Haastrup (27-07-2005)
| Kommentar Fra : Haastrup |
Dato : 27-07-05 08:47 |
|
On Wed, 27 Jul 2005 02:15:06 +0200, "Skindbeni"
<ms1@FJERNDETTEskindbeni.dk> wrote:
>
>"Erik Klausen" <ekl@host.domain> skrev i en meddelelse
>news:Xns969FE3B64DB5EErikKlausen@62.243.74.162...
>> ms1@skindbeni.dk wrote in news:1122375617.138206.311730
>> @g49g2000cwa.googlegroups.com:
>>
>>> Finn Bindeballe skrev:
>>> Resultat = A + (hvis B er positiv så B ellers 0) + (hvis C < D så C
>>> ellers D) + (hvis D < 0 så D ellers 0).
>>
>> Resultat := A+Max( B, 0 )+Min( C, D )+Min( D, 0 );
>
>Hvordan får jeg brugt Max og min?
>
>Jeg får fejlbeskeden Undeclared identifier når jeg forsøger at anvende
>ovenstående..
>
Er den ikke i en unit. f.eks
uses math;
....
vh
Regards S. Haastrup.
| |
Erik Klausen (28-07-2005)
| Kommentar Fra : Erik Klausen |
Dato : 28-07-05 14:36 |
|
Haastrup <abc3@noplanet.com> wrote in
news:4meee11jfbltan0u7gqjt3eum6papu987l@4ax.com:
> On Wed, 27 Jul 2005 02:15:06 +0200, "Skindbeni"
> <ms1@FJERNDETTEskindbeni.dk> wrote:
>>Hvordan får jeg brugt Max og min?
>>
>>Jeg får fejlbeskeden Undeclared identifier når jeg forsøger at anvende
>>ovenstående..
>>
> Er den ikke i en unit. f.eks
>
> uses math;
Jo, det er da rigtigt. Math skal tilføjes i USES-linien, der står øverst i
programmet. Derved kommer USES-statementet til at ligne dette:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Math;
Jeg var ellers sikker på at Max og Min hørte til Standard Pascal, men der
kan man bare se.
mvh.
Erik Klausen
| |
|
|