Pascal: Bevölkerungswachstum Potenzfunktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Pascal: Bevölkerungswachstum Potenzfunktion

    Hi Leute,
    ich muss für die Schule ein Programm schreiben (Bevölkerungswachstum).
    Ich habe jetzt noch ein Problem. Beim Complirieren kommt bei den Potenzen ein Fehler, nur leider weis ich nicht was falsch ist. Könnt ihr mir helfen?

    Hier mein Programm:

    Quellcode

    1. program Bevoelkerung;
    2. uses wincrt;
    3. var d, i, c, Jahr, r:real;
    4. begin
    5. writeln('Dieses Programm berechnet die Bevölkerung der Länder Indien und China');
    6. writeln; writeln;
    7. writeln('Geben sie ein Jahr, ab 1987, ein für welches sie die Bevölkerung dieser länder wissen möchten: ');
    8. readln(Jahr);
    9. if jahr < 1987 then begin
    10. writeln('Das Jahr muss ab 1987 sein!');
    11. readln;
    12. donewincrt
    13. end;
    14. d := 1987 - Jahr;
    15. i := 700000000 * 1.021^d;
    16. c := 990000000 * 1.014^d;
    17. writeln('Bevölkerung Indiens im ',Jahr,' : ',i,' ');
    18. writeln('Bevölkerung Chinas im ',Jahr,' : ',c,' ');
    19. readln;
    20. donewincrt
    21. end.
    Alles anzeigen
  • Hi, ich habs mal ausprobiert:

    Quellcode

    1. program Bevoelkerung;
    2. uses wincrt;
    3. var d, i, c, Jahr, r:real;
    4. begin
    5. writeln('Dieses Programm berechnet die Bevölkerung der Länder Indien und China');
    6. writeln; writeln;
    7. writeln('Geben sie ein Jahr, ab 1987, ein für welches sie die Bevölkerung dieser länder wissen möchten: ');
    8. readln(Jahr);
    9. if jahr < 1987 then begin
    10. writeln('Das Jahr muss ab 1987 sein!');
    11. readln;
    12. donewincrt
    13. end;
    14. d := 1987 - Jahr;
    15. i := power(700000000 * 1.021, d);
    16. c := power(9900000000 * 1.014, d);
    17. writeln('Bevölkerung Indiens im ',Jahr,' : ',i,' ');
    18. writeln('Bevölkerung Chinas im ',Jahr,' : ',c,' ');
    19. readln;
    20. donewincrt
    21. end.
    Alles anzeigen

    nur es funktioniert irgendwie nicht :( . es zeigt mir jetzt einen fehler in der zeile an, wo die neue powerfunktion steht.

    achso und ich arbeite mit pascal und nicht mit delphi. sry falls ich das vergessenhab zu erwähnen.
  • die power funktion heißt erst seit delphi 4 power()
    bei älteren delphi versionen und pascal heißt es dann Pow() oder pow()

    auf der borland seite habe ich aber außerdem eine Funktion gefunden, die wohl schneller als die Basis Pow() Funktionen sein soll

    http://bdn.borland.com/article/20026

    Quellcode

    1. {** A power function from Jack Lyle. Said to be more powerful than the
    2. Pow function that comes with Delphi. }
    3. function Power2(Base, Exponent : Double) : Double;
    4. { raises the base to the exponent }
    5. CONST
    6. cTiny = 1e-15;
    7. VAR
    8. Power : Double; { Value before sign correction }
    9. BEGIN
    10. Power := 0;
    11. { Deal with the near zero special cases }
    12. IF (Abs(Base) < cTiny) THEN BEGIN
    13. Base := 0.0;
    14. END; { IF }
    15. IF (Abs(Exponent) < cTiny) THEN BEGIN
    16. Exponent := 0.0;
    17. END; { IF }
    18. { Deal with the exactly zero cases }
    19. IF (Base = 0.0) THEN BEGIN
    20. Power := 0.0;
    21. END; { IF }
    22. IF (Exponent = 0.0) THEN BEGIN
    23. Power := 1.0;
    24. END; { IF }
    25. { Cover everything else }
    26. IF ((Base < 0) AND (Exponent < 0)) THEN
    27. Power := 1/Exp(-Exponent*Ln(-Base))
    28. ELSE IF ((Base < 0) AND (Exponent >= 0)) THEN
    29. Power := Exp(Exponent*Ln(-Base))
    30. ELSE IF ((Base > 0) AND (Exponent < 0)) THEN
    31. Power := 1/Exp(-Exponent*Ln(Base))
    32. ELSE IF ((Base > 0) AND (Exponent >= 0)) THEN
    33. Power := Exp(Exponent*Ln(Base));
    34. { Correct the sign }
    35. IF ((Base < 0) AND (Frac(Exponent/2.0) <> 0.0)) THEN
    36. Result := -Power
    37. ELSE
    38. Result := Power;
    39. END; { FUNCTION Pow }
    Alles anzeigen