Delphi 4 optimeringsproblem?

Tags:    delphi

Hej

Jeg bruger Delphi 4 til undervisning af mit mellemniveauhold i datalogi og vil gerne illustrere at 100+200-150!=100+(200-150) når man bruger variabeltypen byte.
Jeg har forsøgt at lave disse udregninger i Delphi men på en eller anden måde formår den at udregne begge udtryk til 150 også når jeg prøver først at skrive

res:=100+200;
res:=res-150;

Men det burde jo give overløb og en fejlberegning.
Det skal bemærkes at den første linie giver følgende error: "Constant expression violates subrange bounds".
Men det hjælper heller ikke at læse tallene ind fra brugeren så giver det stadig 150, selvom den godt nok skriver at 100+200=44.
Jeg tænker at der foregår en form for optimering, men jeg har slået optimeringen fra i Project|Options.
Er der nogen der har nogle ideer til hvordan jeg kan illustrere dette.



Hvis dine variabler er bytes er det vel meget naturligt, da en byte har en en værdi fra 0 - 255!

res := 100+200;

res er 300 men da en bytes højeste værdi er 255 vil det blive 45! Brug i stedet integer!

Helt ærligt, så troede jeg da en datalogi lærer burde vide basale ting som dette! ;-)



du skal slå range checking fra for at den ikke fejler på at evaluere udtryk der giver højere resultat end en byte kan håndtere.

men min basale matematik fejler for mig da jeg ikke kan se hvordan du, selv hvis delphi skulle opføre sig som du sikkert gerne vil have den til, formår at få udtrykket 100+200-150!=100+(200-150) til at blive sandt. Delphi vil ikke udvide typerne da de stadig skal konverteres for at kunne bruges som byte hvilket vil resultere i at begge udtryk bliver 150 ligegyldigt hvordan du vender det





t