Potenz mit Summer der ungeraden Zahlen

klopstock

Mitglied
hallo
also ich hab da eine Aufgabe bekommen, die darauf hinaus will, dass man ein Programm schreibt, welches jede GANZE zahl ² nimmt ohne mathpow oder ähnliche Spielereien. ( Ich benutze übrigens Linux )

Meine Idee ist die folgende: wenn ich zB "3" eintippe soll ja 9 rauskommen.
Ich wollte es folgendermaßen erst so machen, dass ich die ersten 3 ungeraden zahlen addiere. 1+3+5=9 tata
ABER ich hatte keine Ahnung, wie ich nur die ungeraden Zahlen angeben soll... nun kam mir eine andere idee, bei der der letzte schliff noch fehlt:

Java:
public class Potenz {
	public static void main (String [] args) {
 int x, y, i, a, f;
	x= 0;
	y=1;
	a=0;
	f= Integer.parseInt (args [0]);
 for (i=1 ; i <= f ; i = i + 1 )
a = x+y+a;
x=x+1 ; 
y=y+1;
 
System.out.println (a);
	} 
}

Die Idee besteht darin aus 1+3+5 einfach (0+1)+(1+2)+(2+3) zu machen. Deswegen habe ich x=0 definiert und y=1
und eigentlich sollte sich der x wert UND der y wert jedes mal wenn die schleife wiederholt wird, weil "i" kleiner "f" ( f wird in dem terminal / kommandozeile wie auch immer vorher eingetippt.
[ Linux : java Potenz 3 - z.B. vorher natürlich javac Potenz.java ]
Aber dier klappt leider nicht ich verstehe nicht wieso er den x und y wert nicht jede "Runde" erhöht. Er ignoriert diese quasi und lässt diese ständig bei 0 und 1.

Hoffe es ist anständig beschrieben und ihr versteht mein Problem.
MfG Klopstock
 
{ anweisungen; } klammern nach dem for() vergessen
 
Zuletzt bearbeitet von einem Moderator:
{ anweisungen; } klammern nach dem for() vergessen

mit anweisungen meinst du die anweisungen für a,x,y
also
Java:
 for (i=1 ; i <= f ; i = i + 1 )
{a = x+y+a;
x=x+1 ; 
y=y+1;}
das klappt auf jedenfall nicht ... habe eben ausprobiert x und y vor die definition von a zu packen, dann macht er das zwar einmal, aber auch wirklich nur einmal ...

Edit: wobei er ja auch erst mit den alten werten rechnen (x,y) rechnen soll und für die nächste wiederholung der schleife die werte um jeweils 1 erhöhen soll :rtfm:
 
Zuletzt bearbeitet:
der code stimmt schon
Java:
    public static void main(String[] args) {
        int a = 0;
        int x = 0;
        int y = 1;
        int f = 5;
        for (int i = 1; i <= f; i = i + 1) {
            a = x + y + a;
            x = x + 1;
            y = y + 1;
            System.out.printf("x: %d y: %d\n", x, y);
        }
        System.out.println(a);
    }
ausgabe
Code:
x: 1 y: 2
x: 2 y: 3
x: 3 y: 4
x: 4 y: 5
x: 5 y: 6
25
 
ich brauchte die geschweiften klammern um die anweisungen, jedoch habe ich sie falsch gesetzt!
jetzt bin ich auf jeden fall ne ecke klüger ich danke euch beiden :toll:
 
Moin,

also ich hab da eine Aufgabe bekommen, die darauf hinaus will, dass man ein Programm schreibt, welches jede GANZE zahl ² nimmt ohne mathpow oder ähnliche Spielereien. ( Ich benutze übrigens Linux )
Meine Idee ist die folgende: wenn ich zB "3" eintippe soll ja 9 rauskommen.

Ich wollte es folgendermaßen erst so machen, dass ich die ersten 3 ungeraden zahlen addiere. 1+3+5=9 tata

Ich will ja kein Spielverderber sein 😀, aber so wie Deine Aufgabe verstehe, sollst Du doch jede eingegebene ganz Zahl quadrieren, oder ???:L
Dafür halte ich Deinen Ansatz für reichlich umständlich .... :noe:

Warum nicht nicht ganz simpel so :
Java:
public class Potenz 
{
    public static void main( String [] args ) 
    {
        int iResult = 0; 
        int iZahl = Integer.parseInt( args [0] );
        iResult = iZahl * iZahl;
        System.out.println( iZahl );
    } 
}

Gruß
Klaus

[EDIT]
Tipp: gewöhne Dir am besten gar nicht an, bei Variablennamen nur mit einzelnen Buchstaben zu arbeiten, sondern nimm' stets "sprechende Bezeichner" 😉 Du wirst es mir schon sehr bald danken, wenn Dein Projekt mal 100 oder 1000 oder gar 10000 Zeilen umfasst 😀
[/EDIT]
 
Zuletzt bearbeitet:
Moin,



Ich will ja kein Spielverderber sein 😀, aber so wie Deine Aufgabe verstehe, sollst Du doch jede eingegebene ganz Zahl quadrieren, oder ???:L
Dafür halte ich Deinen Ansatz für reichlich ungeeignet .... :noe:

Warum nicht nicht ganz simpel so :
Java:
public class Potenz 
{
    public static void main( String [] args ) 
    {
	int iResult = 0;
        int iZahl = Integer.parseInt( args [0] );
	iResult = iZahl * iZahl;
	System.out.println( iZahl );
    } 
}

Gruß
Klaus

Hi Klaus,

das Problem darin ist, dass ich die Summe(!!) von den ungeraden Zahlen dazu benutzen sollen um das Quadrat zu bilden 🙂. Ich meine ich hätte das geschrieben, falls nicht dann tut’s mir leid und dann wäre deine Lösung sicherlich besser.

MfG Klopstock
 
Ah, ok - ich hatte Dich so verstanden, als ob es Dein Ansatz hierzu gewesen wäre ...

Code:
Ich wollte es folgendermaßen erst so machen, dass ich die ersten 3 ungeraden zahlen addiere

Na denn - und achte mal bitte auf den EDIT-Teil, den ich in meinem letzten Post noch angehängt habe 😉

tschüss
Klaus
 
mit anweisungen meinst du die anweisungen für a,x,y
also
Java:
 for (i=1 ; i <= f ; i = i + 1 )
{a = x+y+a;
x=x+1 ; 
y=y+1;}
das klappt auf jedenfall nicht ... habe eben ausprobiert x und y vor die definition von a zu packen, dann macht er das zwar einmal, aber auch wirklich nur einmal ...

klappt bei mir problemlos^^

außer den angesprochenen variablennamen, schau dir auch an wie bygones eingerückt hat. übersicht ist wichtig
 
Ja, ich werde in Zukunft darauf achten, dass ich richtig einrücke und die Variablen besser benenne. Das macht wirklich Sinn auch bei so einem kleinen "Projekt" 🙂

und zu bone2

ich werde jetzt das mit den Klammern nochmal anders ausprobieren wenn das jetzt doch klappen sollte frage ich mich, was ich davor falsch gemacht habe :S vielleicht habe ich ja vergessen das Projekt erst zu speichern dann im Terminal zu kompilieren ;D

danke euch für die Hilfe und die guten Ratschläge

MfG
Klopstock
 
Das is ja n Ding. Also wenn ich das Quadrat einer Zahl x bilden soll, dann addiere ich die x ersten ungeraden Zahlen von 1 an? Dann wäre doch der einfachste Ansatz folgender:

Java:
...
int x = Integer.parseInt(args[0]), result=0, counter=0;

for(int i=1;counter<x;i+=2){
     result+=i;
     counter++;
}
...

Oder hab ich da was übersehen? Oder ist es den Herren gar zu banal? 😀
 
Zuletzt bearbeitet von einem Moderator:
Hm, ich finde meine Lösung einfacher ;-)

Java:
public class Quadrat {

	private static int quadrat (int pInput) {
		int retVal = 0;
		for(int i=0; i<pInput; i++) {
			retVal += (i*2)+1;
		}
		return retVal;
	}

	public static void main(String[] args) {
		for(int i=1;i<=5;i++) {
			System.out.println("Quadrat("+i+") = " + quadrat(i));
		}
	}

}
Output:
Code:
Quadrat(1) = 1
Quadrat(2) = 4
Quadrat(3) = 9
Quadrat(4) = 16
Quadrat(5) = 25
 
Jetzt würde mich interessieren, ab welcher Zahl welche Lösung effizienter ist. Würde schätzen, dass "meine" Lösung für kleine Zahlen nicht so geeignet ist, weil sie 1 Variable mehr benutzt, für größere hingegen schon, weil sie einfachere Rechenoperationen in der Schleife hat. Ist denn multiplizieren rechenintensiver als summieren?
 
Zuletzt bearbeitet von einem Moderator:
Man kann

Java:
retVal += (i*2)+1;

auch als

Java:
retVal += (i << 1) | 1;

schreiben, das sollte einen Fitz schneller sein.

Ganz persönlich finde ich ja die folgende Variante hypsch kryptisch:
Java:
private static int quadrat (int pInput) {
    int retVal = 0;
    for(int i=0; i<pInput; retVal += i++);
    return (retVal << 1) + pInput;
}
 
Zuletzt bearbeitet:

Zurück
Oben