/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409074
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste