Kann man potenzieren auch nur mit einer verschatelten for-schleife?

2 Antworten

Zum Potenzieren (Power) brauchst du nur eine For-Loop. In diesem Beispiel berechnen wir 3^2 (Drei hoch Zwei) :

int base = 3
int exponent = 2
int power = 1
for(i=1; i<=exponent; i++){
    power = power * base;
}


Das kannst Du aber noch viel besser!

Stelle Dir mal vor, Du solltest relativ große Zahlen zu relativ großen Potenzen erheben. OK: Du könntest argumentieren, daß das eh nicht so recht geht mit dem kleinen Wertebereich von 32...64 bit. Aber wenn Du schon bei reinen Additionsmaschinen bist, kannst Du ja auch gleich mal die Grundlagen für sogenannte "big integer"- oder "big decimal"-Rechnungen durchnehmen. Da geht es nämlich durchaus um etwas ähnliches. Und DAMIT macht diese Beschäftigung sogar richtig Sinn (obwohl: ist eh schon vielfach in Bibliotheken gegossen, aber zum Verständnis vielleicht ganz nützlich).

Weil: Das Ausrollen von einfachen und übersichtlichen Funktionen würde ich wenn überhaupt dem Compiler überlassen (der macht das tatsächlich, wenn es ihm erlaubt wird (inlining von Funktionen)). Dafür brauchst Du Deinen menschlichen Grips nicht mehr zu opfern. Es geht da nur um das copy & paste der Funktionsinnerei.

Bei der etwas intelligenteren Beschäftigung mit dem Problem geht's um die Ausnutzung des Stellensystems, um die Rechenzeiten drastisch gegenüber dem linearen Aneinanderreihen von Summanden zu verkürzen. Das kann man für die Multiplikationszusammensetzung aus Additionen genauso anwenden wie für die Potenzzusammensetzung aus Multiplikationen.

So, wie Du bei der Multiplikation durch eine Addition eines der Summanden mit sich selbst eine Stellenverschiebung desselben um ein Bit nach oben bezüglich des anderen Summanden erreichst, um die Zwischenwerte je nach zugehörigem Bitwert im anderen Summanden aufs Ergebnis zu akkumulieren, kannst Du bei der Potenzierung durch eine Multiplikation der Basis mit sich selbst eine Stellenverschiebung dieses Faktors um eine Bitstelle nach oben bezüglich der Bits im Exponenten erreichen, um die Zwischenwerte aufs Ergebnis multiplikativ zu akkumulieren.

In beiden Fällen reduziert sich der Gesamtaufwand auf den Logarithmus der Breite der verarbeiteten Zahlen.

Rechenergebnis im Javaeditor ausgeben & Punktesystem in Java programmieren?

Hallo, ich arbeite im Moment im Rahmen eines Projektes für das Fach Informatik (Gymnasium Klasse 10) an einem Rechenspiel, welches ich im Javaeditor programmiere.Das Prinzip ist simpel. Man bekommt eine Zufällige Gleichung (+;-;;/), tippt das Ergebnis ein und das Programm sagt ob es richtig oder falsch ist. Dazu gibt es noch ein Punktesystem. Ich habe allerdings 2 große Probleme. Zum einem habe ich einen String erstellt, der zufälig +,-,,/ wählt. Nun weiß ich allerdings leider nicht wie ich diesen String so in das Lösungsprogramm einfüge, dass es auch funktioniert. Außerdem habe ich angefangen ein Punktesystem zu programmieren, da das Programm allerdings immer wieder von vorne startet, ist der Punktezähler nie höher als 1. Wie kann ich das beheben?? Anbei findet ihr meinen gesammten Code Vielen Dank Max

public class Superhirn 
{
  
  public static void main (String[] args)
  {    
    new Spiel();
  }
}

  

class Spiel
{
  public Spiel() // Konstruktor, Aufruf bei "new"
  {
    System.out.println("Willkommen bei Superhirn!");
    System.out.println("Gleich geht das Spiel los!");
    rateEinmal();
  
      
    
    
  } 
                                                                      
    int zahl1 = zufallszahl(50);
    int zahl2 = zufallszahl(50);
    int ergebnis = zahl1+zahl2; 
    int punkte1 = 0;  
    
      
    
  void rateEinmal()
  
  {
    int zahl1 = zufallszahl(50);
    int zahl2 = zufallszahl(50);
    int ergebnis = zahl1+zahl2; 
    System.out.println("Wie viel ist " + zahl1 + rechensymbol + zahl2 + "?");
    if (leseZahl() == ergebnis) {
      System.out.println("Richtig!" );
         punktzahl();
         rateEinmal(); 
               
      
    } else {
       System.out.println("Falsch! Das Ergebnis war " + ergebnis );
       System.out.println("GAME OVER!");
    } 
    }
    void punktzahl()
    {  
    int punkte1 = 0;
    punkte1++;
    System.out.println("Deine Punktanzahl ist " + punkte1 );
      
      }
  ;
  int zeichen = zufallszahl(3);
  String rechensymbol;
  {
   
    if(zeichen == 0){
      rechensymbol = ("+");
      }
    if(zeichen == 1){
      rechensymbol = ("-");
      }
    if(zeichen == 2){
      rechensymbol = ("*");
      }
    if(zeichen == 3){
      rechensymbol = ("/");
      }   
  }
  int zufallszahl(int n)
  {
    return new java.util.Random().nextInt(n);
  }
  
  int leseZahl()
  {
    return new java.util.Scanner(System.in).nextInt();
  } 
  
  
}
...zur Frage

Warum Geht dieses Programm nicht?

Ich soll ein Programm mit einer Funktion erstellen, das wenn eine Zahl in dem Vektor "folge" doppelt vorkommt "0" für falsch ausgibt, und wenn alle zahlen nur einmal vorkommen "1" für wahr ausgibt.

Nun bekomme ich immer die Fehlermeldung in Codeblocks für die Zeile in Main mit dem Funktionsaufruf:

error: expected expression before ']' token|

Ist das ein Falsche Funktionsaufruf?

wie mache ich das richtig? Ich kann mein Programm wegen dem Error nichtmal testen ^^'

Programm:

#include <stdio.h>

#include <stdlib.h>

#define WAHR 1

#define FALSCH 0

int doppelt (float ffolge[], int fanzahl){

int ferg;

ferg=1;

for (int z1=0;z1<fanzahl-1;z1++){

  for (int z2=1; z2<fanzahl;z2++){

    if (ffolge[z1]== ffolge[z2]){

      ferg=0;

      break;}

  }

}

return ferg;

}

int main()

{

int anzahl;

printf ("wieviele Zahlen stehen in dem Vektor?");

scanf ("%d",& anzahl);

float folge[anzahl];

int i;

for ( i=0; i<anzahl;i++){

  printf ("%d. Zahl im Vetor", i+1);

  scanf ("%f",&folge[i] );}

int erg= doppelt (folge[],anzahl);

printf ("%d", erg);

return 0;

}

Danke für die Hilfe

...zur Frage

php zeichen verbieten?

hallo ich möchte in meinem taschenrechner dokument ändern, dass man ausschließlich nur zahlen eingeben kann also falls ein buchstabe oder ein zeichen eingegeben wird soll ein kurzer satz angezeigt werden wie "nur zahlen eingeben"
wie kann ich das am besten lösen?

hier mein quellcode

<!DOCTYPE html>
<html>
<head>
<!DOCTYPE html>

<html>

<head>

 <title>Taschenrechner</title>

</head>

<body>

<h2>Mein erster Taschenrechner</h2>

<hr><br />

<?php

if($_POST){

 $zahl1 = $_POST["zahl1"];

 $zahl2 = $_POST["zahl2"];

 $rechenart = $_POST["Rechenart"];
 
 include 'function.php';
 
 }

 switch($rechenart) {

     case "+":

          $ergebnis= addieren($zahl1, $zahl2);

     break;

     case "-":

          $ergebnis= subtrahieren($zahl1, $zahl2);

     break;

     case "*":

          $ergebnis= multiplizieren($zahl1, $zahl2);

     break;

      case "/":

          $ergebnis= dividieren($zahl1, $zahl2);

     break;

  }

 print "ergebnis ist ". $zahl1. $rechenart. $zahl2. "=". $ergebnis;


?>

<form action="case.php" method="post" >

 <p>Zahl 1:<input name="zahl1" value="<?php echo $ergebnis; ?>" size="30" maxlength="30"></p>

 <p>Zahl 2:<input name="zahl2" size="30" maxlength="30"></p>

 <input type="submit" value="Rechnen!">

 <p><input type="radio" name="Rechenart" value="+">addieren</p>

 <p><input type="radio" name="Rechenart" value="-">subtrahieren</p>

 <p><input type="radio" name="Rechenart" value="*">multiplizieren</p>

 <p><input type="radio" name="Rechenart" value="/">dividieren</p>

 </form>

<hr><br>

</body>

</html>
...zur Frage

wörter umdrehen und palindrome finden in c?

heyho :) ich wollte testen ob das wort, was ich eingegeben habe auch ein palindrom ist, also umgekehrt genau dasselbe wort ergibt. Nun versuche ich nach dem letzten kommentar zu vergleichen also ob die werte gleich sind, weil so wäre es ein palindrom. Jedoch finde ich meinen fehler nicht und wollte mal fragen ob einer von euch ihn findet :) LG Alina

include
include
int main(){
//einlesen
printf("Geben Sie die Länge des Strings an");
int a;
scanf("%i", &a);
char text[a];
printf("Text eingeben:\n");
int i;
for (i=0;i<a;i++){
scanf("%c", &text[i]);
}
//umgekehrt ausgeben
int c;
c=a;
while (c!=0){
printf("%c", text[c]);
c--;
}
//Palindrom oder nicht
int count=0;
i=1;
int d;
d=a; //5
while (text[i]==text[d]){
count ++;
i++;
d--;
}
if(count == a){
printf("palindrom");
}
return 0;
}
...zur Frage

Was möchtest Du wissen?