Roland: Ich verstehe eine Aufgabenstellung nicht

Hi,

in meinem Programmierselbststudium (Anfänger) bin ich auf eine Aufgabe gestoßen, deren Fragestellung ich nicht verstehe, sprich, ich weiß nicht, was gefragt ist.

Nicht falsch verstehen, ich möchte die Lösung selber erarbeiten, aber ich weiß schlicht nicht, wonach gefragt ist.

Aufgabe:
Es seien a (reelle Zahl) und n (natürliche Zahl).
Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.
Zähle die Schritte bis zur Lösung.

a^n = a * a^(n-1)

Es wird ja eine Schleife gefordert, aber ich verstehe nicht ganz was dort gefordert ist??

Roland

P.S: Bitte nicht die Lösung, sondern mir geht es darum, die Aufgabe zu verstehen.

  1. @@Roland:

    nuqneH

    a^n = a * a^(n-1)

    Es wird ja eine Schleife gefordert

    Nein, nicht unbedingt.

    aber ich verstehe nicht ganz was dort gefordert ist??

    Rekursion: eine Funktion, die sich selbst aufruft.

    P.S: Bitte nicht die Lösung, sondern mir geht es darum, die Aufgabe zu verstehen.

    „Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.“ (Cheatah)

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. „Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.“ (Cheatah)

      Wobei die Zitate interessant sind, da Sie immer einen Zeitgeist wiederspiegeln, so mitte der 2000er Jahre, als javascript einige Zeit "out" war

      Javascript wird nicht aktiviert

      Mittlerweile geht ohne javascript nichts mehr. Ob das gut oder schlecht ist mag jeder selbst beurteilen.

      1. @@fenn:

        nuqneH

        Mittlerweile geht ohne javascript nichts mehr. Ob das gut oder schlecht ist mag jeder selbst beurteilen.

        Alle Nutzer haben JavaScript nicht aktiviert, solange es nicht geladen ist.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      2. Hallo

        „Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.“ (Cheatah)

        Wobei die Zitate interessant sind, da Sie immer einen Zeitgeist wiederspiegeln, so mitte der 2000er Jahre, als javascript einige Zeit "out" war

        Javascript wird nicht aktiviert

        Mittlerweile geht ohne javascript nichts mehr. Ob das gut oder schlecht ist mag jeder selbst beurteilen.

        Da frag' am besten mal Martin, den Autor des verlinkten Beitrags. :-)

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
        1. Hi,

          „Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.“ (Cheatah)
          Wobei die Zitate interessant sind, da Sie immer einen Zeitgeist wiederspiegeln, so mitte der 2000er Jahre, als javascript einige Zeit "out" war
          Javascript wird nicht aktiviert
          Mittlerweile geht ohne javascript nichts mehr. Ob das gut oder schlecht ist mag jeder selbst beurteilen.
          Da frag' am besten mal Martin, den Autor des verlinkten Beitrags. :-)

          der wird dann bestätigen, dass das heute noch so ist, wie damals beschrieben: Ja, es gibt hier und da Webangebote, bei denen ohne Javascript gar nichts geht, oder das Angebot stark eingeschränkt ist. Bei der Mehrheit derer, die ich regelmäßig nutze, ist aber der bewusste Verzicht auf Javascript ein Plus an Surfqualität.

          Erfordert eine Seite, die ich unbedingt nutzen will, zwingend JS, dann richte ich entweder eine Site-spezifische Ausnahmeregel ein (wenn ich damit rechne, diese Site häufiger zu nutzen), oder ich nehme stattdessen mal schnell den Firefox, der bei mir als Schmuddelbrowser herhalten muss und so ziemlich alle Sauereien darf. Sogar Flash.

          Ciao,
           Martin

          --
          Soso, der Klügere gibt nach.
          Aber warum sollen sich immer nur die Dummen durchsetzen?  .oO(?)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. oder ich nehme stattdessen mal schnell den Firefox, der bei mir als Schmuddelbrowser herhalten muss und so ziemlich alle Sauereien darf. Sogar Flash

            Das hebelt aber doch den Sicherheitsgedanken wieder völlig aus?

            1. Hallo,

              oder ich nehme stattdessen mal schnell den Firefox, der bei mir als Schmuddelbrowser herhalten muss und so ziemlich alle Sauereien darf. Sogar Flash
              Das hebelt aber doch den Sicherheitsgedanken wieder völlig aus?

              welchen Sicherheitsgedanken? Ich rede nicht von Sicherheit, sondern von der Minimierung unangenehmer Belästigungen. Höchstens beim IE hätte man früher das Thema Sicherheit als Argument bringen können, denn Microsofts Javascript-Implementierung JScript hat in Kombination mit ActiveX sogar Zugriff auf die Browser- und Systemeinstellungen und auf die Registry. Da konnte ein Script einem zum Beispiel nach Herzenslust neue Favoriten anlegen, just like that.

              Ob das in den aktuellen Versionen immer noch ein Thema ist, weiß ich nicht.

              Ciao,
               Martin

              --
              Wer schläft, sündigt nicht.
              Wer vorher sündigt, schläft besser.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. welchen Sicherheitsgedanken?

                Zum eine betrifft das sicherlich auch die Privatsphäre, wenn durch die genannten unangenehmen Belästigungen irgendwelche Kennungen an die Werbewirtschaft oder "soziale" Netzwerke gehen. Muss schon mal gar nicht sein, auch das ist ein Grund warum ich einen JS Blocker habe.

                Dann denke ich gibt es sicher Schädlinge die sich durch dubiose Weiterleitungen im Browser einnisten. Wie ist es mit den sog. drive by downloads? Wer weiß schon was eine Seite alles nachladen will, oder wohin sie einen weiterschickt.

                1. Hallo,

                  welchen Sicherheitsgedanken?
                  Zum eine betrifft das sicherlich auch die Privatsphäre, wenn durch die genannten unangenehmen Belästigungen irgendwelche Kennungen an die Werbewirtschaft oder "soziale" Netzwerke gehen.

                  ah, okay, das ist wohl wahr. Ich fasse den Begriff "Sicherheit" anscheinend wesentlich enger, meine damit nämlich nur die Betriebssicherheit der eingesetzten Hard- und Software. Also hauptsächlich Malware, die auf die eine oder andere Weise in ein System eingreift.

                  Datenschutz bzw. Schutz der Privatsphäre ist für mich ein ganz eigenständiger Themenkomplex, den ich nicht der Sicherheit zuordne.

                  Dann denke ich gibt es sicher Schädlinge die sich durch dubiose Weiterleitungen im Browser einnisten.

                  Da gibt es sicher die eine oder andere Möglichkeit. Aber nur durch JS allein? Kann ich mir zumindest nicht vorstellen, zumal immer wieder gepredigt wird, Javascript laufe in seiner Sandbox. Flash oder andere Plugins, die das Ausführen von beliebigem Code ermöglichen, sehe ich da schon wesentlich kritischer. Aber da hoffe ich, dass mich das Rechtekonzept des Betriebssystems (normaler User vs. root) vor Schlimmerem bewahrt. Abgesehen vom Sicherheitsnetz regelmäßiger Backups.

                  Ciao,
                   Martin

                  --
                  Wenn der Computer wirklich alles kann,
                  dann kann er mich mal kreuzweise.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Aber nur durch JS allein? Kann ich mir zumindest nicht vorstellen, zumal immer wieder gepredigt wird, Javascript laufe in seiner Sandbox.

                    Ich frage mich auch wie sowas gehen soll, habe bisher noch nichts schlüssiges darüber gefunden. Aber anscheinend haben Browser auch so ihre Lücken.

                    Flash oder andere Plugins, die das Ausführen von beliebigem Code ermöglichen

                    Das wusste ich noch gar nicht, ich dachte Flash läuft auch in einer Box? So ein Dreck!
                    Flash kann ja auch überall eingebettet sein ohne dass man es merkt.

                    1. Hallo,

                      Flash oder andere Plugins, die das Ausführen von beliebigem Code ermöglichen
                      Das wusste ich noch gar nicht, ich dachte Flash läuft auch in einer Box? So ein Dreck!

                      soweit ich weiß, laufen Browser-Plugins als ganz normale Kindprozesse des Browsers selbst und damit mit allen Rechten und Zugriffsmöglichkeiten, die die Software "Browser", letztendlich also der Nutzer, der den Browser startet, auch hat. Ob zum Beispiel das Flash-Objekt selbst, das innerhalb dieses Plugins läuft, irgendwelchen Beschränkungen unterliegt (also ob das Plugin selbst nur eingeschränkte Funktionalität bietet), kann ich nicht sagen, da ich das Flash-API nicht kenne.

                      Flash kann ja auch überall eingebettet sein ohne dass man es merkt.

                      So isses. Außer man hat einen Flash-Blocker, der diese Objekte erst nach Intervention des Nutzers "scharfmacht".

                      Ciao,
                       Martin

                      --
                      Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. Moin Gunnar,

      a^n = a * a^(n-1)

      Es wird ja eine Schleife gefordert

      Nein, nicht unbedingt.

      Doch, unbedingt:

      Es seien a (reelle Zahl) und n (natürliche Zahl).
      Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.

      Da steht ganz deutlich *iterativ* und nicht *rekursiv*.

      LG,
       CK

      1. @@Christian Kruse:

        nuqneH

        Es seien a (reelle Zahl) und n (natürliche Zahl).
        Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.

        Da steht ganz deutlich *iterativ* und nicht *rekursiv*.

        Wer lesen kann, ist klar im Vorteil.

        Dann wäre also der Hinweis angebracht gewesen, dass es außer for noch andere Schleifen gibt. Damals™, denn das weiß der OP ja.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    3. Mahlzeit,

      Es wird ja eine Schleife gefordert

      Nein, nicht unbedingt.

      aber ich verstehe nicht ganz was dort gefordert ist??

      Rekursion: eine Funktion, die sich selbst aufruft.

      Nur mal wegen der Definition, ist eine Rekursion nicht auch eine Schleife?

      --
      eigentlich ist mir bewusst, dass ich hin und wieder einfach mal die Klappe halten sollte. Doch genau in den unpassendsten Momenten erwische ich mich dabei, wie ich dennoch etwas sage ...
      1. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

        Nur mal wegen der Definition, ist eine Rekursion nicht auch eine Schleife?

        Rein logisch betrachtet würde ich hier eine strickte Unterscheidung treffen, denn:

        Schleifen (for,while,do usw.) sind imperative Kontrollfluss-Strukturen. Der Programmierer gibt damit den Lösungsweg eines Problems vor. Eine rekursive Definition ist dagegen eine deklarative Beschreibung eines Problems, die unabhängig von einem konkreten Lösungsweg ist. Imperative und deklarative Programmierung sind in ihren Grundfesten verschiedene Programmierparadigmen. Obwohl die meisten Sprachen beides erlauben, gibt es auch Extrema: Haskell, Prolog, SQL, XSLT sind Vertreter von rein deklarativen Programmiersprachen. Assembler ist ein Beispiel für das andere Extremum.

        --
        “All right, then, I'll go to hell.” – Huck Finn
      2. Hallo,

        Nur mal wegen der Definition, ist eine Rekursion nicht auch eine Schleife?

        ja, man könnte es so betrachten. Genauer ist es aber eine Verschachtelung von Funktionsaufrufen. Normalerweise wird man daher eine Rekursion nicht als Schleife betrachten, sondern genau dieses Merkmal als Abgrenzung nehmen.

        Ciao,
         Martin

        --
        Politik ist die Kunst, die Menschen so zu bescheißen, dass sie auch noch glauben, sie hätten das selbst so gewollt.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Tach!

    Es seien a (reelle Zahl) und n (natürliche Zahl).
    Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.
    Zähle die Schritte bis zur Lösung.
    a^n = a * a^(n-1)
    Es wird ja eine Schleife gefordert, aber ich verstehe nicht ganz was dort gefordert ist??

    Wie erkläre ich es, ohne die Lösung zu weit zu erklären?

    Klar ist eine iterative Lösung gefordert und keine rekursive. Angenommen a hoch 5 ist gefordert, dann rechnest du das auf dem Papier als a · a · a · a · a. Du nimmst zuerst die ersten beiden und dann jeweils ein a dazu und immer so weiter ein a dazu. Also a² · a ergibt a³, das wieder ·a. Wenn man das ganze rückwärts aufzieht ist der Exponent 4 gleich n-1 wie in der Formel.

    dedlfix.

    1. Hi delfix,

      Klar ist eine iterative Lösung gefordert und keine rekursive. Angenommen a hoch 5 ist gefordert, dann rechnest du das auf dem Papier als a · a · a · a · a. Du nimmst zuerst die ersten beiden und dann jeweils ein a dazu und immer so weiter ein a dazu. Also a² · a ergibt a³, das wieder ·a. Wenn man das ganze rückwärts aufzieht ist der Exponent 4 gleich n-1 wie in der Formel.

      Erstmal dankeschön.
      Du meinst, es würde eine Schleife wie
      while (n > 0) {
              //echo("a * ");
          result = result * a;
          schritte ++;
          n--;
      }

      zur Lösung ausreichen? Ich sehe da zu wenig den Zusammenhang zur Ausgangsgleichung in der Frage.

      Roland

      1. Hi delfix,

        Klar ist eine iterative Lösung gefordert und keine rekursive. Angenommen a hoch 5 ist gefordert, dann rechnest du das auf dem Papier als a · a · a · a · a. Du nimmst zuerst die ersten beiden und dann jeweils ein a dazu und immer so weiter ein a dazu. Also a² · a ergibt a³, das wieder ·a. Wenn man das ganze rückwärts aufzieht ist der Exponent 4 gleich n-1 wie in der Formel.

        Erstmal dankeschön.
        Du meinst, es würde eine Schleife wie
        result = 1;
        while (n > 0) {
                //printf("a * ");
            result = result * a;
            schritte ++;
            n--;
        }

        zur Lösung ausreichen? Ich sehe da zu wenig den Zusammenhang zur Ausgangsgleichung in der Frage.

        Roland

        1. Hallo,

          result = 1;

          while (n > 0) {
                  //printf("a * ");
              result = result * a;
              schritte ++;
              n--;
          }

            
          sauber entwickelt - und im Gegensatz zur einfacheren (und falschen) Variante, bei der result mit dem Wert von a initialisiert und dann nur noch (n-1) mal mit a multipliziert wird, liefert deine Lösung sogar für n=0 das mathematisch korrekte Ergebnis 1.  
            
          Ciao,  
           Martin  
          
          -- 
          Er war ein Mann wie ein Baum. Sie nannten ihn Bonsai.  
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          
      2. Tach!

        Du meinst, es würde eine Schleife wie
        while (n > 0) {
            result = result * a;
            schritte ++;
            n--;
        }
        zur Lösung ausreichen? Ich sehe da zu wenig den Zusammenhang zur Ausgangsgleichung in der Frage.

        Naja, die Initialisierung der verwendeten Variablen fehlt noch, damit nicht irgendwas von vorherigen Operationen drinsteht, aber so in der Art wird die Lösung sein.

        dedlfix.

        1. Hi dedlfix,

          Naja, die Initialisierung der verwendeten Variablen fehlt noch, damit nicht irgendwas von vorherigen Operationen drinsteht, aber so in der Art wird die Lösung sein.

          Klar. Mir ging es nur um die Schleife selber. Dankeschön nochmal.

          Roland

      3. Moin Roland,

        Ich sehe da zu wenig den Zusammenhang zur Ausgangsgleichung in der Frage.

        Das ist exakt die Umsetzung der Aufgabenstellung. Du hast damit die "Gleichung" genau umgesetzt. Du subtrahierst in einer Schleife immer 1 vom Exponenten (das ist der ^(n-1)-Part) und multiplizierst die Basis mit dem Zwischenergebnis (das ist der a \* a^(n-1)-Part).

        LG,
         CK

        1. Hallo Christian,

          Das ist exakt die Umsetzung der Aufgabenstellung. Du hast damit die "Gleichung" genau umgesetzt. Du subtrahierst in einer Schleife immer 1 vom Exponenten (das ist der ^(n-1)-Part) und multiplizierst die Basis mit dem Zwischenergebnis (das ist der a \* a^(n-1)-Part).

          Aha, klasse erklärt. Danke vielmals!
          Jetzt habe ich es verstanden.

          Roland

  3. Moin Roland,

    Aufgabe:
    Es seien a (reelle Zahl) und n (natürliche Zahl).
    Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.
    Zähle die Schritte bis zur Lösung.

    a^n = a * a^(n-1)

    Es wird ja eine Schleife gefordert, aber ich verstehe nicht ganz was dort gefordert ist??

    Gefragt wird gar nichts, dass ist eine Aufgabenstellung :)

    Du sollst eine iterative Lösung (also mit einer Schleife statt Rekursion) schreiben, die a^n berechnet, wobei a eine reelle Zahl ist (also ein double oder float oder so) und n eine natürliche Zahl (also ein unsigned int, wobei dann natürliche Zahlen inklusive 0 enthalten sind). Dabei sollst du das Verfahren benutzen, dass du die Basis mit sich selbst multiplizierst und dann 1 von dem Exponenten abziehst. Rinse and repeat.

    LG,
     CK

  4. hi,

    Aufgabe:
    Es seien a (reelle Zahl) und n (natürliche Zahl).
    Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.
    Zähle die Schritte bis zur Lösung.

    a^n = a * a^(n-1)

    Es wird ja eine Schleife gefordert, aber ich verstehe nicht ganz was dort gefordert ist??

    Wenn über n iteriert werden soll, wird das eine kopfgesteuerte Schleife. Kopfgesteuert deswegen, weil die Anzahl der Iterationen von vornherein feststeht aufgrund n. Des Weiteren haben wir für den Kopf der Schleife auch die Abbruchbedingung aufgrund der Festlegung, dass n eine natürliche Zahl ist und bei jedem Schleifendurchlauf um 1 verringert wird.

    MfG

    1. nochwas,

      Aufgabe:
      Es seien a (reelle Zahl) und n (natürliche Zahl).
      Schreibe ein iteratives Programm zur Berechnung von a^n, das folgendes Verfahren verwendet.
      Zähle die Schritte bis zur Lösung.

      a^n = a * a^(n-1)

      Es wird ja eine Schleife gefordert, aber ich verstehe nicht ganz was dort gefordert ist??

      Wenn über n iteriert werden soll, wird das eine kopfgesteuerte Schleife. Kopfgesteuert deswegen, weil die Anzahl der Iterationen von vornherein feststeht aufgrund n. Des Weiteren haben wir für den Kopf der Schleife auch die Abbruchbedingung aufgrund der Festlegung, dass n eine natürliche Zahl ist und bei jedem Schleifendurchlauf um 1 verringert wird.

      Wobei eine Schleife fragwürdig ist, wenn bei jedem Schleifendurchlauf das Ergebnis überschrieben wird: Nach dem letzten Schleifendurchlauf kommt ne 1 raus und das kannst Du auch ohne Schleife ermitteln ;)

      Gut' Nacht.

      1. Wobei eine Schleife fragwürdig ist, wenn bei jedem Schleifendurchlauf das Ergebnis überschrieben wird: Nach dem letzten Schleifendurchlauf kommt ne 1 raus und das kannst Du auch ohne Schleife ermitteln ;)

        Gut' Nacht.

        Hallo,

        es wird aber letztlich nach der Anzahl der Schritte bis dahin gefragt. Daher macht es dann doch Sinn.

        Roland