Potenzieren :-(
-
Hallo Leute,
ich habe da eine Frage. Ich kriege kein Programm hin, welches mir 2^x ausrechnet
googlen bringt mir da wenig, da alle nur die pow() funktion nutzen und gerade diese will ich nicht benutzen.
2^3 z.B. = 2*2=4*2=8
wie kann ich das in ein Programm schreiben? ich habe damit nur Probleme
habe eine For Schleife im Kopf aber naja
habe nun erstmal alles gelöscht wollte mir anregungen holen. Das es eine rein Mathematische Lösung ist weiss ich. Dass es google und die Suchfunktion gibt weiss ich auch
dass es diese Funktion (pow) bereits gibt weiss ich ebenfalls. Bin aber sturr und will das auf dem old-school weg machen 
für Anregungen wäre ich dankbar.
Achja ich will vorerst nur das ^berechnen also 2^x, wobei x der Benutzer eingibt. Die 2 ist von mir vorgegeben.
Danke schonmal für eure Antworten.
-
Wenn es nur um 2er Potenzen geht kannst du mit einer Zeile alle Potenzen bis 263 durch Bitverschiebung berechnen:
unsigned __int64 pow2( unsigned int exp ) { unsigned __int64 Result = 1; return Result << exp; }
-
Hallo
Wo ist dein Problem?

Wenn du pow nicht verwenden willst, sondern lieber eine Schleife, dann mach das dochint x = ...; int y = 2; for (int lv = 1; lv < x; ++lv) { y *= 2; } // In y steht nun 2^xbis bald
akari
-
Welche Werte kann x annehmen? Auch 0 oder negative?
-
hi,
danke für die Antworten.
0 und negativ sind egal. vorerst sollte es nur mit positiven getestet werden
danke ich melde mich gleich
-
akari schrieb:
Hallo
Wo ist dein Problem?

Wenn du pow nicht verwenden willst, sondern lieber eine Schleife, dann mach das dochint x = ...; int y = 2; for (int lv = 1; lv < x; ++lv) { y *= 2; } // In y steht nun 2^xbis bald
akariDocShoe deine Lösung verstehe ich leider nicht, da ich diese auch erklären muss, bringt mir das leider nicht viel

zu akari das hört sich gut an ich schreib ma fix mein Beispiel hin und warum mich deins durcheinander bringt

void main() { int a=2; int x,ergebnis; for(int i=1;i<=x;i++) { ergebnis=a*a; cout<<ergebnis; } }wollte deins benutzen, jedoch verstehe ich das in der for Schleife nicht, des Weiteren muss ich es ausgeben
was nun?
-
akari schrieb:
Hallo
Wo ist dein Problem?

Wenn du pow nicht verwenden willst, sondern lieber eine Schleife, dann mach das dochint x = ...; int y = 2; for (int lv = 1; lv < x; ++lv) { y *= 2; } // In y steht nun 2^xbis bald
akariDer Code liefert für x=0 das Ergebnis 2. Besser y mit 1 initialisieren und lv von 0 gegen x laufen lassen.
-
DocShoe schrieb:
akari schrieb:
Hallo
Wo ist dein Problem?

Wenn du pow nicht verwenden willst, sondern lieber eine Schleife, dann mach das dochint x = ...; int y = 2; for (int lv = 1; lv < x; ++lv) { y *= 2; } // In y steht nun 2^xbis bald
akariDer Code liefert für x=0 das Ergebnis 2. Besser y mit 1 initialisieren und lv von 0 gegen x laufen lassen.
habe das jetzt geändert, allerdings will ich ja in der for Schleife immer die Ausgabe haben also
fester wert=2
cin x
x=z.B.3for schleife
ausgabe
2
4
8weisste wie ich das meine?
wenn ich jetzt in der for Schleife cout<<a*=2; mache, dann gibt es einen Fehler, den ich nicht verstehe. Wie kann ich die Ausgabe machen?
-
Dieser Thread wurde von Moderator/in KlausB aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo
int a=1; int x; cin >> x; for(int i=0;i<x;i++) { a=a*2; cout<<"2^" << (i+1) << " = " << a << std::endl; }bis bald
akari
-
Poste den Quelltext, der den Fehler produziert.
Beschreibe den Fehler, der auftritt. Ist es ein Compilerfehler oder produziert dein Programm nicht die erwarteten Ergbnisse?Ohne diese Informationen kann man nur raten, was du tust und was der "Fehler" ist.
-
Hallo
Der Fehler war das
cout<<a*=2;keine gültige C++ Anweisung ist

bis bald
akari
-
Hi,
ne funktioniert leider nicht richtig.
bei der Abfrage habe ich mal 2 eingegeben. Demnach ist es ja 2^2. ausgabe ist 48. Also 4 und 8... falsch
was nun?
-
DocShoe schrieb:
Poste den Quelltext, der den Fehler produziert.
Beschreibe den Fehler, der auftritt. Ist es ein Compilerfehler oder produziert dein Programm nicht die erwarteten Ergbnisse?Ohne diese Informationen kann man nur raten, was du tust und was der "Fehler" ist.
stimmt. mache ich sofort

-
Hallo
Ich habe keine Ahnung was für einen Quellcode du benutzt, aber meiner lifert ein korrektes Ergebnis :
2 2^1 = 2 2^2 = 4bis bald
akari
-
#include<iostream> using namespace std; void main() { int a=2,x; cout<<"Die Basis ist 2.\n"; cout<<"geben Sie den exponenten ein:"; cin>>x; for (int i=0;i<x;i++) { a=a*2; cout<<a; } }das ist mein Quellcode

Also nochmal zur Ausgabe: 2^x soll gerechnet werden meine Vorgabe ist 2 und x soll eingegeben werden. Die Ausgabe soll bei 2^3 z.B. 248 sein bzw.
2
4
8aber so ein kleines Problem so einen riesen Aufwand
sitze schon seit 2 Stunden daran 
-
Hö?
int twoPower(int x) { return 1 << x; }läuft.
-
Eisflamme schrieb:
Hö?
int twoPower(int x) { return 1 << x; }läuft.
ja und was ist twoPower?....
-
Mathematisch beschrieben ist das dann f(x) = 2^x
Aber du schreibst jetzt oben auch, dass 2 x 3 = 248 sein soll, was ich dann wiederum nich verstehe.
Die Ausgabe soll bei 2^3 z.B. 248 sein
Wie ist jetzt deine mathematische Definition?
-
#include<iostream> using namespace std; void main() { int a=2,x; cout<<"Die Basis ist 2.\n"; cout<<"geben Sie den exponenten ein:"; cin>>x; for (int i=0;i<x;i++) { a=a*2; cout<<a; } }Dann geh es halt durch. Du weißt ja wie Potenzieren läuft.
2^0 = 1
2^1 = 2
2^2 = 4.
Was macht deine Schleife? Sie multipliziert den aktuellen Wert con a mit 2. Ist ja logisch. Doch macht sie es so we du denkst?
1. Kontrollcheck: x=0 -> x<2 -> a=2 -> a2 = 4
2. Kontrollcheck: x=1 -> x<2 -> a=4 -> a2 = 8
3. Kontrollcheck: x=2 -> x=2 -> Abbruch.
Und das heißt jetzt... (lies mal paar posts weiter oben...
Und jetzt bin ich der böse, weil ich deine Hausaufgabe gemacht hab...Ciao
Nullnix
-
Ich glaube, er möchte alle Potenzen für 2x für x = [0..n] ausgeben. Die 248 aus dem Posting oben sind dann wohl eher 2,4,8...
Zwei Stunden.. ZWEI STUNDEN!?
@NullNix
Ich war auch schon kurz davor. Zumal ja wirklich alle Informationen für den 3-Zeiler vorhanden sind, wenn man sich nur mal die Antworten durchliest.Allen Ernestes zwei Stunden?!