Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Potenzberechnung

Hallo
ich brauche unbedingt hilfe...

wir müssen in der schule mal wieder ein programm schreiben und ich finde meinen fehler nicht

es handelt sich um ein programm zum berechnen einer potenz (iterative und rekursive Berechnung)
die basis (ba/b) kann beliebig sein und der exponent (ex/e) soll eine natürliche zahl sein

das habe ich ja soweit
bis auf den fehler (kann ihn nicht beheben - weiß nicht wie)

und dann kommt noch dazu, dass wir die wiederholungen bei der iterativen berehnung zählen sollen
und bei der rekursiven sollen wir die funktionsaufrufe zählen

bei der iterativen muss ich das einfach nur in die schleife der funktion iteration einfügen, oder?
also im prinzip:
  BEGIN
    pot:= pot*b;
    wiederholung:= wiederholung+1;
  END;

und wie geht das bei der rekursiven?




hier noch mein programm:

PROGRAM sortieren;
USES CRT;

VAR auswahl, nochmal: CHAR;
    ba: REAL;
    ex: INTEGER;

FUNCTION iteration (b: REAL; e: INTEGER): LONGINT;
VAR pot: LONGINT;
    i: INTEGER;
BEGIN
  pot:= 1;
  FOR i:= 1 TO e DO pot:= pot*b;
  iteration:= pot;
END;

FUNCTION rekursion (b: REAL; e: INTEGER): LONGINT;
VAR pot: REAL;
BEGIN
  IF e= 1
    THEN pot:= b
    ELSE pot:= pot (b, e-1)* b;
    rekursion:= pot;
END;

BEGIN
  WRITELN ('Dieses Programm stellt Iteration und Rekursion gegenüber.');
  WRITELN ('Des Weiteren vergleicht es, welches Verfahren schneller ist.');
  WRITELN ('Iteration: ');
  WRITELN ('Rekursion: ') ;

  REPEAT
    WRITELN ('Gib eine Basis und einen Exponent ein!');
    READLN (ba);
    READLN (ex);

    REPEAT
      WRITELN ('Wähle, ob du mit der iterativen (i) oder rekursiven (r) Berechnung fortfahren willst');
      WRITELN ('oder ob du mit neuen Werten beginnen möchtest(e)');
      READLN (auswahl);
      IF auswahl:= 'i'
        THEN WRITELN (iteration (ba, ex))
        ELSE IF auswahl:= 'r'
          THEN WRITELN (rekursion (ba, ex));
    UNTIL auswahl= 'e';

    WRITELN ('Möchtest du mit neuen Werten beginnen (j) oder das Programm beenden (n)');
    READLN (nochmal);
  UNTIL nochmal= 'n';
END.



ich danke euch schon mal für eure mühe
lg lissyssil


Antworten zu Potenzberechnung:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
bei der iterativen muss ich das einfach nur in die schleife der funktion iteration einfügen, oder?
Genau.

Zitat
und wie geht das bei der rekursiven?
Da zählst du einfach am Anfang der Funktion einen Zähler hoch. Musst natürlich darauf achten, dass du den Zähler außerhalb der Funktion definierst (also ganz oben bei den VAR) und in deinem Hauptprogramm auf 0 setzt.

PROGRAM sortieren;
USES CRT;

VAR auswahl, nochmal: CHAR;
    ba: REAL;
    ex: INTEGER;
    step: INTEGER;

FUNCTION iteration (b: REAL; e: INTEGER): LONGINT;
VAR pot: LONGINT;
    i: INTEGER;
BEGIN
  pot:= 1;
  FOR i:= 1 TO e DO
  BEGIN
    step = step + 1;
    pot:= pot*b;
  END;
  iteration:= pot;
END;

FUNCTION rekursion (b: REAL; e: INTEGER): LONGINT;
VAR pot: REAL;
BEGIN
  step = step + 1;
  IF e= 1
    THEN pot:= b
    ' hier musstest du natürlich rekursion aufrufen!
    ELSE pot:= rekursion(b, e-1)* b;
    rekursion:= pot;
END;

BEGIN
  WRITELN ('Dieses Programm stellt Iteration und Rekursion gegenüber.');
  WRITELN ('Des Weiteren vergleicht es, welches Verfahren schneller ist.');
  WRITELN ('Iteration: ');
  WRITELN ('Rekursion: ') ;

  REPEAT
    WRITELN ('Gib eine Basis und einen Exponent ein!');
    READLN (ba);
    READLN (ex);

    REPEAT
      WRITELN ('Wähle, ob du mit der iterativen (i) oder rekursiven (r) Berechnung fortfahren willst');
      WRITELN ('oder ob du mit neuen Werten beginnen möchtest(e)');
      READLN (auswahl);
      ' Der Zähler. Muss natürlich nach der Berechnung
      ' noch ausgegeben werden
      step = 0;
      IF auswahl:= 'i'
        THEN WRITELN (iteration (ba, ex))
        ELSE IF auswahl:= 'r'
          THEN WRITELN (rekursion (ba, ex));
    UNTIL auswahl= 'e';

    WRITELN ('Möchtest du mit neuen Werten beginnen (j) oder das Programm beenden (n)');
    READLN (nochmal);
  UNTIL nochmal= 'n';
END.

Kanns gerade nicht testen, könnte aber klappen. Ansonsten wäre die genaue Fehlermeldung hilfreich...

ich danke dir
ausprobieren kann ich das erst morgen
aber ich melde mich dann auf jeden fall nochmal
lg lissyssil


« Java - ausführbare Datei erstellen???visual studio 2008 »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Programm
Siehe Software...

Formatieren
  Das Formatieren einer Festplatte, HDD oder SSD bereitet das Laufwerk auf neue Daten vor. Dazu werden sämtliche alten Daten gelöscht, damit die...

Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...