Zweierpotenzen addieren

Jats

Aktives Mitglied
Hey, kann mir jemand helfen, eine Datei zu schreiben, die Zweierpotenzen von 2^1 - 2^10 addiert ?

Habe mal so angefangen:

Java:
public class Potenzieren {						

public static void main(String [] args) {

for ( int f = 1; f <= 10; f++) {

	int summe = 1;

		for ( int s = 1; f <= 10; f++) {
	
		summe = summe + (potenzieren(2,f));
		System.out.println(summe);
		
		}

	}

}

public static int potenzieren(int basis, int exponent) { 		//Methode potenzieren faengt an

	int potenz = 1;

for (int i = 1; i <= exponent; i++) {

	potenz = potenz * basis;

}

return potenz;

}									//Ende potenzieren

}
Aber ich komme irgendwie nicht weiter .. kann mir jemand mal helfen ?
 
F

Firephoenix

Gast
Benutz doch für Potenzen Math.pow(Basis,Exponent) oder willst du bewusst um den befehl herum?
Gruß
 
F

Firephoenix

Gast
wie wäre es denn damit (ungetestet)
Java:
			for ( int s = 1; s <= 10; s++) {
				int summe = 0;
				summe = summe + (potenzieren(2,f));
				System.out.println(summe);
			
			}
	 
 
	public static int potenzieren(int basis, int exponent) {        //Methode potenzieren faengt an
	 
		int potenz = 0;
	 
		for (int i = 1; i <= exponent; i++) {
	 
		potenz = potenz * basis;
	 
		}
	 
		return potenz;
	 
	}                                   //Ende potenzieren
 
G

Gast2

Gast
Java:
            for ( int s = 1; s <= 10; s++) {
                int summe = 0;
                summe = summe + (potenzieren(2,f));
                System.out.println(summe);
            
            }
summe sollte wohl außerhalb der if initalisiert werden, oder? ;)
 

Jats

Aktives Mitglied
Also so ..
Java:
public class Potenzieren {						//Potenzieren, 06.10.2010, 21:20Uhr, Jason Tschorn		

public static void main(String [] args) {

for ( int s = 1; s <= 10; s++) {
                int summe = 0;
                summe = summe + (potenzieren(2,f));
                System.out.println(summe);
            
            
	}


	}

}

public static int potenzieren(int basis, int exponent) { 		//Methode potenzieren faengt an

	int potenz = 1;

for (int i = 1; i <= exponent; i++) {

	potenz = potenz * basis;

}

return potenz;

}									//Ende potenzieren

}

das geht nicht, dann kommt immer zehnmal 2,4,8 usw. raus :/
 
F

Firephoenix

Gast
bau dir noch eine int gesamtsumme rein und führe nach jedem durchlauf folgendes aus:
Java:
gesamtsumme += summe
am Ende gesamtsumme ausgeben.
 

XHelp

Top Contributor
Zumal noch eine Anmerkung... Ist es immer zur Basis 2? Das ganze mal binär betrachtet:
Code:
2^1 =   10
2^2 =  100
2^3 = 1000
dementsprechend:
2^1+2^2 =   110
+2^3    =  1110
+2^4    = 11110
usw.

Dann könntest du dir das Potenzieren sparen. Zumal du zum Potenzieren bzw. *2 auch Shiften kannst.
 

Jats

Aktives Mitglied
Zumal noch eine Anmerkung... Ist es immer zur Basis 2? Das ganze mal binär betrachtet:
Code:
2^1 =   10
2^2 =  100
2^3 = 1000
dementsprechend:
2^1+2^2 = 110
+2^3 = 1110
+2^4 = 11110
usw.

Dann könntest du dir das Potenzieren sparen.

Tut mir Leid, bin grad ein bisschen durch den Wind .. ihr hab nicht zufaellig ein Forum fuer zwischenmenschliches ? :/

Also .. es ist schon immer mit 2 als Basis, sind ja Zweierpotenzen .. aber ich verstehe deinen Ansatz nicht.
Tut mir Leid, ich muss jetzt weg .. ich gucke, dass ich das entweder gleich nochmal oder morgen mache .. trtozdem danke .
 

XHelp

Top Contributor
aber ich verstehe deinen Ansatz nicht.

Vllt wird er dadurch deutlicher:
Java:
public static void workOR() {
	int b = 0;
	int c = 1;
	for (int i = 0; i < 9; i++) {
		c = c << 1;
		b = b | c;
		System.out.println(b);
	}
}

public static void workBinary() {
	char[] sum = new char[] { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' };
	for (int i = sum.length - 2; i >= 0; i--) {
		sum[i] = '1';
		System.out.println(Long.parseLong(String.valueOf(sum), 2));
	}
}

Die erste Methode bezieht sich auf das Shiften, dadurch kannst du entweder *2 oder /2 rechnen.
Die 2. bezieht sich auf das einfache Setzen der Bits (wobei es in dieser Form eher zur Veranschaulichung gilt)
 

Jats

Aktives Mitglied
Vllt wird er dadurch deutlicher:
Java:
public static void workOR() {
	int b = 0;
	int c = 1;
	for (int i = 0; i < 9; i++) {
		c = c << 1;
		b = b | c;
		System.out.println(b);
	}
}

public static void workBinary() {
	char[] sum = new char[] { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' };
	for (int i = sum.length - 2; i >= 0; i--) {
		sum[i] = '1';
		System.out.println(Long.parseLong(String.valueOf(sum), 2));
	}
}

Die erste Methode bezieht sich auf das Shiften, dadurch kannst du entweder *2 oder /2 rechnen.
Die 2. bezieht sich auf das einfache Setzen der Bits (wobei es in dieser Form eher zur Veranschaulichung gilt)

Okay, alles klar hab's soweit verstanden.
Aber ich glaube, ich verschachtel die Schleifen entweder falsch, oder mache falsche Wertzuweisungen.
Bei mir kommt fast immer 4,1 oder die Zweierpotezen von 1 bis 10, nur das nach jeder Runde -1 gerechnet wird -.-

Wie muss ich die Schleifen veschachteln .. falls ich das muss ^^
 

Andi_CH

Top Contributor
Warum denn kompliziert wenns auch einfach geht? ;-)

Java:
		int Summe = 0;
		for (int i =1; i<=10; i++) {
			Summe += Math.pow(2.0, i);
			System.out.println("i = " + i + ", Summe = " + Summe);
		}

und anstellen von Math.pow passt jede beliebige implementation von "pow" ;-)
 

Jats

Aktives Mitglied
ja aber gerade so wollte er es nicht machen!

soll anscheind kompliziert sein :D

Richtig, ich will kein Math.pow benutzen, sondern lieber meine eigene Methode .
Aber die muss ich jetzt doch nur so einsetzen, wie Math.pow von Andi_CH gezeigt wurde, oder ?

Dann würde ich das so machen
Java:
public class Potenzieren {                      
 
public static void main(String [] args) {
 
int summe = 0;

for ( int f = 1; f <= 10; f++) {

		summe += (potenzieren(2,f));
    		System.out.println(summe);        
        }
 
}
 
public static int potenzieren(int basis, int exponent) {        //Methode potenzieren faengt an
 
    int potenz = 1;
 
for (int i = 1; i <= exponent; i++) {
 
    potenz = potenz * basis;
 
}
 
return potenz;
 
}                                   //Ende potenzieren
 
}

und das würde herauskommen:

shittrra.png
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Java:
	private static int pow(int pBase, int pExp) {
		if (pExp < 1) {
			System.out.println("ungültig!");
			return 0;
		}
		if (pExp == 1)
			return pBase;
		else
			return (pBase * pow(pBase, pExp-1));
	}

Na ja ich gebs zu '-'liesse sich sicher auch so implementieren, aber ich war zu faul ;-)
 

Landei

Top Contributor
Nehmt wenigstens einen ordentlichen Algorithmus...
Java:
    public static long pow(long x, int n) {
        long result = 1;
        for (;n > 0; x *= x, n >>= 1) 
           if ((n & 1) != 0) result *= x;
        return result;
    }
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Nehmt wenigstens einen ordentlichen Algorithmus...
Java:
    public static long pow(long x, int n) {
        long result = 1;
        while (n != 0) {
            if ((n & 1) != 0) {
                result *= x;
                n--;
            }
            x *= x;
            n >>= 1;
        }
        return result;
    }

Ach immer diese Landeier die in einem früheren Leben mal C-Programmierer waren ;-)
(Meiner gefällt mir viel besser :D)

Aber gibt mal einen negativen Exponenten ein - das Resultat dürfte spektakulär sein :eek:

siehe Zeile: n--;
 

mariusbopp

Bekanntes Mitglied
:D:D:D
oh man wie blind kann man sein^^
dann tuts mir leid für meinen unqualifizierten beitrag zu diesem thema :eek:

edit okay dann wars doch nicht so falsch gewesen es hieß mal nur ausgeben!!! :toll:
hab schon an mir gezweifelt grade^^
 

Landei

Top Contributor
Ach immer diese Landeier die in einem früheren Leben mal C-Programmierer waren ;-)
War ich nie. Und den Code habe ich noch etwas verhypscht.

(Meiner gefällt mir viel besser :D)
Dafür ist er ineffizient. Du hast O(n) und ich habe O(log n) oder so: Binäre Exponentiation ? Wikipedia

Aber gibt mal einen negativen Exponenten ein - das Resultat dürfte spektakulär sein :eek:

siehe Zeile: n--;
Nörgler! Negative Exponenten lassen sich grundsätzlich nicht in einer Funktion behandeln, die einen Ganzzahltyp zurückgibt. Einfach einen Wrapper drum schreiben, und gut ist:

Java:
public static double betterPow(long x, int n) {
   return n > 0 ? pow(x,n) : 1.0 / pow(x, -n); 
}
 

Andi_CH

Top Contributor
Nörgeln tue ich doch gerne .... gleich noch was: :lol:

Vergiss 2^0 nicht

die Reihe könnte auch
2^0 = 1
+ 2^1 = 3
+ 2^2 = 7
sein ...
 

Andi_CH

Top Contributor
Moin,
die Aussage war auch nicht, dass da einzelne Zahlen fehlen, sondern das jedes Ergebnis um 2 zu niedrig ist :
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64 ..... etc.
Es geht um den Ausdruck "... um 2 zu niedrig ..."
ich nörgle nicht immer an denselben Usern rum - es dürfen alle was haben ...

Edit: Laut Ausgangsposting beginnt die Reihe bei 2^1, also liege ich daneben

PS: Das mit O(n) habe ich schon im Nachdiplomstudium nicht so richtig begriffen - hab aber danach doch so einen Zettel erhalten ;-)
 
Zuletzt bearbeitet:

Jats

Aktives Mitglied
stimmt aber nicht ganz...

s fehlen immer 2...soweit ich das jetzt sehe...


Ich weiß ^^
Das ist ja das Problem .. ich hatte das Programm schon so weit, dass es mir jede Potenz zusammenrechnet, aber das wäre ja dasselbe, wie 2^n*2.
Ich möchte aber (2^1)+(2^2)+(2^3)...(2^10) ausgerechnet haben.
Vor mir aus kann das Programm schon jeden Schritt einzeln ausgeben, aber es muss doch irgendwie auch das richtige rauskommen :D

Jetzt fehlt doch eigentlich nurnoch der Schritt, indem das, was beim ersten Durchgang von "summe += potenzieren(2,f);" herauskommt zu dem Ergebnis vom nächsten Durchgang dazugerechnet wird, und dann imemr so weiter, oder ?
 

Andi_CH

Top Contributor
Ich weiß ^^
Das ist ja das Problem .. ich hatte das Programm schon so weit, dass es mir jede Potenz zusammenrechnet, aber das wäre ja dasselbe, wie 2^n*2.
Ich möchte aber (2^1)+(2^2)+(2^3)...(2^10) ausgerechnet haben.
Vor mir aus kann das Programm schon jeden Schritt einzeln ausgeben, aber es muss doch irgendwie auch das richtige rauskommen :D

Jetzt fehlt doch eigentlich nurnoch der Schritt, indem das, was beim ersten Durchgang von "summe += potenzieren(2,f);" herauskommt zu dem Ergebnis vom nächsten Durchgang dazugerechnet wird, und dann imemr so weiter, oder ?

???:L += rechnet doch dazu ???:L
 

Jats

Aktives Mitglied
???:L += rechnet doch dazu ???:L

Ja, aber das Ergebnis stimmt doch nicht, oder .. ? :bahnhof:
Es würde ja als Addition so aussehen:
2+4+8+16+32+64+128+256+512+1024+2048

Dann is das was oben herauskommt aber falsch .. oder wie oder was oder .. was macht das Programm überhaupt, ich begreif es nicht, dass da einfach 2 pro Ergebnis fehlen ^^
 

Jats

Aktives Mitglied
Öhm... was soll denn deiner Meinung für ein Ergebnis rauskommen, wenn nicht 2046?

Alles zusammen .. bis dahin ist es ja richtig (wenn nicht 2 fehlen würden, Prinzip stimmt ja) und dann noch 2048 dazu .
Also 4096 .. EDIT: SCHEIßE :lol:
Jaa .. ihr habt Recht .. ich sollte Kopfrechnen besser üben oder erstmal gucken, was ich schreibe ^^
Also dann müsste es ja so stimmen, oder ?
Nur das immer 2 fehlt ..
 

XHelp

Top Contributor
2048 ist 2^11, in wie fern soll es bei der Summe von 2^1 bis 2^10 auftauchen? :bahnhof:
Nimm dir doch ein Zettel und ein Strift und rechne es nach.
 

Andi_CH

Top Contributor
i = 1 : 0 + 2 = 2
i = 2 : 2 + 4 = 6
i = 3 : 6 + 8 = 14
i = 4 : 14 + 16 = 30
i = 5 : 30 + 32 = 62
i = 6 : 62 + 64 = 126
i = 7 : 126 + 128 = 254
i = 8 : 254 + 256 = 510
i = 9 : 510 + 512 = 1022
i = 10 : 1022 + 1024 = 2046

da fehlt nichts!
 

Jats

Aktives Mitglied
i = 1 : 0 + 2 = 2
i = 2 : 2 + 4 = 6
i = 3 : 6 + 8 = 14
i = 4 : 14 + 16 = 30
i = 5 : 30 + 32 = 62
i = 6 : 62 + 64 = 126
i = 7 : 126 + 128 = 254
i = 8 : 254 + 256 = 510
i = 9 : 510 + 512 = 1022
i = 10 : 1022 + 1024 = 2046

Gut, jetzt hat auch der letzte es Verstanden :oops:
Dann weiß ich jetzt, wodran es liegt, aber ich weiß noch nicht Recht, warum es mir nicht vorher aufgefallen ist .

Auf jeden Fall danke für eure Mühe und Geduld :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Alle Zweierpotenzen bis 2^10 ausgeben lassen Java Basics - Anfänger-Themen 15
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
B Primzahlen bis 100 addieren Java Basics - Anfänger-Themen 16
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
S Arraywerte quadrieren und danach addieren Java Basics - Anfänger-Themen 11
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
G Array Werte addieren Java Basics - Anfänger-Themen 4
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
parrot Binär Addieren Java Basics - Anfänger-Themen 21
K Subklassen mit einzigem Befehl addieren Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
M Addieren von Polynomen Java Java Basics - Anfänger-Themen 22
M Werte des Arrays addieren Java Basics - Anfänger-Themen 5
W Parameter solange addieren bis 13 auftaucht Java Basics - Anfänger-Themen 11
E Mehrere Arrays addieren mit Übertrag Java Basics - Anfänger-Themen 13
G OOP- Brüche addieren Java Basics - Anfänger-Themen 3
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
J Zahlen addieren Java Basics - Anfänger-Themen 12
S Zahlenstrings addieren Java Basics - Anfänger-Themen 6
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
A Arrays addieren- Was mache ich falsch?? Java Basics - Anfänger-Themen 2
ArkHeat Erste Schritte Zwei 2-dimensionale Matritzen addieren Java Basics - Anfänger-Themen 0
reza_4247 addieren Nummern Java Basics - Anfänger-Themen 7
R Werte aus Array addieren und Mittelwert bilden Java Basics - Anfänger-Themen 2
Viktormk Methoden Gleitpunktzahlen nach IEEE 754 addieren ! Java Basics - Anfänger-Themen 1
J Arrays erstellen und dann addieren Java Basics - Anfänger-Themen 19
S int addieren geht nicht Java Basics - Anfänger-Themen 13
N Kalender - Tag addieren gibt 31. Juni zurück Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
I Werte zu existierendem int addieren Java Basics - Anfänger-Themen 4
Silvascus Erste Schritte Werte innerhalb eines Arrays addieren Java Basics - Anfänger-Themen 3
C Java Eingabeaufforderung-Basic Zwei Zahlen addieren Java Basics - Anfänger-Themen 2
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
M Arrays addieren Java Basics - Anfänger-Themen 2
C Rekursion auf einem Array(negative werte addieren) Java Basics - Anfänger-Themen 4
V addieren der ausgabewerte Java Basics - Anfänger-Themen 6
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
B Vektor addieren Java Basics - Anfänger-Themen 4
G Summen addieren und Durchschnitt bilden Java Basics - Anfänger-Themen 4
A Erste Schritte aufeinanderfolgende Zahlen addieren Java Basics - Anfänger-Themen 5
J Methoden Einzelne Objekte eines Vectors addieren Java Basics - Anfänger-Themen 10
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
K Rekursion gerade Zahlen addieren Java Basics - Anfänger-Themen 11
M Zweidimensionales Array um 1 addieren Java Basics - Anfänger-Themen 3
J Objektwerte addieren / Konstruktor Java Basics - Anfänger-Themen 19
J arrays miteinander addieren Java Basics - Anfänger-Themen 11
L Erste Schritte Programm Bestellung/Rechnung addieren Java Basics - Anfänger-Themen 3
T Zahl addieren problem Java Basics - Anfänger-Themen 1
H n Zahlen aus einem Array addieren Java Basics - Anfänger-Themen 17
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
putinator Mehrdimensionale Array addieren Java Basics - Anfänger-Themen 10
Eileen Brüche addieren in Zwei Klassen mit JOptionPane Java Basics - Anfänger-Themen 4
K double Arrays addieren Java Basics - Anfänger-Themen 5
L Durchgang addieren Java Basics - Anfänger-Themen 5
L Zufallszahlen addieren Java Basics - Anfänger-Themen 6
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
O Werte aus ArrayList multiplizieren und dann Ergebnis addieren Java Basics - Anfänger-Themen 3
P Erste Schritte Arrays addieren Java Basics - Anfänger-Themen 18
R Binärzahlen addieren Java Basics - Anfänger-Themen 8
S 2 TimeObjekte Addieren Java Basics - Anfänger-Themen 2
K Arrays zusammen addieren - brauche Denkanstoß:) Java Basics - Anfänger-Themen 4
B Werte eines Arrays addieren Java Basics - Anfänger-Themen 16
D Inhalt der Spalten einer Tabelle addieren Java Basics - Anfänger-Themen 4
N NullPointerException beim Addieren von Matrizen Java Basics - Anfänger-Themen 3
D 3 Monate addieren Java Basics - Anfänger-Themen 10
U Diagonalen in 2D Array addieren Java Basics - Anfänger-Themen 4
T Größte und 2. Größte zahl Addieren Java Basics - Anfänger-Themen 29
X 2 Daten addieren Java Basics - Anfänger-Themen 5
S Zahlen in Array speichern und addieren Java Basics - Anfänger-Themen 4
B Zahlenfolge addieren Java Basics - Anfänger-Themen 5
J In einer for Schleife zu einer Zahl 4 addieren? Java Basics - Anfänger-Themen 3
S primitives Objekt mit Primitiv addieren Java Basics - Anfänger-Themen 13
L longwert mit Methode addieren geht nicht! Java Basics - Anfänger-Themen 20
W Binärbaum zahlen addieren Java Basics - Anfänger-Themen 7
J Bitweise addieren Java Basics - Anfänger-Themen 6
P Kopie erstellen / addieren von Arrays Java Basics - Anfänger-Themen 5
M einen Tag addieren Java Basics - Anfänger-Themen 4
S [HILFE] Brüche addieren, multiplizieren, kürzen Java Basics - Anfänger-Themen 17
C ArrayList: Elemente addieren Java Basics - Anfänger-Themen 3
J 2 zahlen addieren Java Basics - Anfänger-Themen 3
T integer Werte einer ArrayList miteinander addieren Java Basics - Anfänger-Themen 5
N Addieren von zwei Arrays Java Basics - Anfänger-Themen 4
D Addieren und ausgeben Java Basics - Anfänger-Themen 28
V Hexadezimal Zahlen addieren Java Basics - Anfänger-Themen 14
S 2 Byte Arrays addieren Java Basics - Anfänger-Themen 45
G Arrays Addieren Java Basics - Anfänger-Themen 5
O Integer addieren - Wo ist der Fehler? Java Basics - Anfänger-Themen 7
X reele Zahlen zwischen zwei Werten addieren Java Basics - Anfänger-Themen 11
M EInfaches Addieren mit Abbruchbedingung Java Basics - Anfänger-Themen 9
G Zahlen addieren in einer Schleife Java Basics - Anfänger-Themen 4
M zwei zweidimensionale Arrays addieren Java Basics - Anfänger-Themen 4
Spin Integer addieren Java Basics - Anfänger-Themen 22
G int zusammenfügen NICHT addieren Java Basics - Anfänger-Themen 9
G Benutzereingaben addieren Java Basics - Anfänger-Themen 14
S Addieren zweier Arrays Java Basics - Anfänger-Themen 10
B Java Dateien zu Projektstruktur addieren Java Basics - Anfänger-Themen 5
M Double Werte exakt addieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben