# Kopfgesteuerte Schleife



## Gast (11. Jan 2007)

Hallo!

Ich bin absoluter Neuling in Java und habe folgende Aufgabe zu lösen, bei der ich gerade ziemlich hänge:

Das Programm berechnet die Summe bis zum Grenzwert, der über die Tastatur eingegeben wird.

Also: 1+2+3+4+...+n uws.

Wie kann ich jetzt die Anzahl der Glieder ermitteln, die für den eingegebenen Grenzwert benötigt werden? Und wie bekomme ich die Summe raus?

Bsp.: Beim Grenzwert 16: 6 Glieder. Summe wäre da: 21.


Ein noch größeres Problem: wie setze ich das mit der kopfgesteuerten Schleife um? Hier mein bisheriger Code:


```
import java.io.*;


public class SumA

{
	public static void main (String args[]) throws IOException
	
	{
		
		//Variablendeklaration

		int g, glieder, summe
		
		
		int i=1;
		
		
		String str;
		
		System.out.println("SumA");
		
		
		//Eingabeobjekt
		
		BufferedReader input=new BufferedReader(
								new InputStreamReader(
									System.in));
									
		System.out.println("Berechnung der Summe 1+2+3+4+... bis zum Grenzwert");
		
		System.out.print("Grenzwert: ");
		
		
		//Einlesen Information
		
		str=input.readLine();
		
		g=Integer.parseInt(str);
		
	
		//Kopfgesteuerte Schleife(n)
		
		
		while(g>=0)
		
		{
					
			i=i++;
				
			
			while(g<=i)
		
			{
				i=i++;

			
		
			}

		
	}
	
	
}
```


Ich zerbreche mir schon den ganzen Tag den Kopf darüber wie ich das umsetzen kann.. Ich weiß ich hab noch nicht viel Code, aber ich hoffe ihr könnt mir trotzdem helfen bzw. einen Schritt zeigen (und wenn es nur ein kleiner ist) wie ich weiterkomme!

Danke.

Liebe Grüße


----------



## Der Müde Joe (11. Jan 2007)

was ist eine Kopf gesteuerte Schleife?

for, while ,.... iterativ
via methode...rekursiv

zb:

for(int i = 0 ; summe < grenzwert ; i++{
 summe += i;
}

oder wie denn?


----------



## Wildcard (11. Jan 2007)

Der Müde Joe hat gesagt.:
			
		

> was ist eine Kopf gesteuerte Schleife?


Na das Gegenteil einer schwanzgesteuerten...  :wink:


----------



## Gast (11. Jan 2007)

Ich meine eine "While" Schleife. Erst wenn eine bestimmte Bedingung erfüllt ist, wird die Schleife durchlaufen.

Hoffe ihr könnt mir irgendeinen Tipp zur weiteren Umsetzung geben.


----------



## Gast (11. Jan 2007)

wenn ich mich richtig entsinne:

Kopgesteuerte schleife : while
Die while-Schleife heißt deshalb kopfgesteuert, weil am Kopf der Schleife entschieden wird, ob die Anweisungen im Schleifenkörper ausgeführt werden sollen. 

fußgesteuerte schleife : do while
Die fußgesteuerte do-while-Schleife ist ähnlich den kopfgesteuerten while-Schleife mit dem Unterschied, daß die Bedingung für ein wiederholtes Durchlaufen der Schleife nicht zum Schleifenbeginn, sondern am Schleifenende abgefragt wird.


gruß


----------



## MatthiasKnorr (11. Jan 2007)

Und wie definiert man "ferngesteuerte Schleife"?


----------



## Der Müde Joe (11. Jan 2007)

int counter =1;
while( summe < grenzwert){
summe += counter;
counter++;
}


----------



## Gast (11. Jan 2007)

Okay die schleife sieht schon viel logischer aus als meine, aber in der Variable "summe" steht ja noch nichts drin... die muss ja erst noch errechnet werde.... :bahnhof:  :bahnhof:


----------



## Der Müde Joe (11. Jan 2007)

```
int summe = 0;
int grenzwert = 100;
int counter = 1;

while( summe < grenzwert){

summe = summe + counter;
counter = counter +1;

}
```

oder halt so


----------



## Gast (11. Jan 2007)

Okay danke! Die Summe funktioniert...jetzt muss ich das mit den gliedern noch hinbekommen. ich rätsel mal weiter...Dankeschön, hast mir sehr geholfen!

Liebe Grüße


----------



## Der Müde Joe (11. Jan 2007)

du fängst mit den ersten glied an

counter = 1

und wenn die schleife aufhört bist du bei
glied x;

viel spass bei rätsel  ;-)


----------



## Gast (11. Jan 2007)

Okay danke! Ich werde rumprobieren, muss doch zu lösen sein.


----------



## Der Müde Joe (11. Jan 2007)

okay...schwer von begriff 

counter= 1

jede runde counter + 1
bei runde xxx ist der counter = xxx

also hast du xxx glieder summiert


----------



## Gast (11. Jan 2007)

Ha! Es funktioniert! Ich stand echt auf dem Schlauch irgendwie!  

Perfekt, dankeschön nochmal! *freu* 

Grüße


----------



## Marco13 (11. Jan 2007)

Die Summe der Zahlen von 1 bis n ist 
(n*(n+1))/2

Wenn man da ein bißchen rum-umformt, kommt man für die Anzahl der benötigten Glieder auf

x = -0.5 + WurzelAus(0.25 + 2*Grenzwert)

Das muss man dann noch zum nächstgrößeren int runden (z.B. mit Math.ceil(...))

Aber ohne Gewähr :wink:

Edit: Schleifen kommen dann zwar keine mehr vor, aber 1. ist es dann i.a. effizienter, und 2. muss man ja nicht unbedingt eine Schleife verwenden, sofern das nicht explizit teil der Aufgabenstellung ist !?


----------



## Gast (12. Jan 2007)

Doch ist Teil der Aufgabenstellung. Werde trotzdem es versuchen nochmal mit deiner Lösung umzusetzen. Man kann immer wieder was dazulernen. ;-)


----------



## Spacerat (13. Jan 2007)

Kurz 'ne Frage...

Kann es sein, das im Code-Schnipsel vom Müden Joe die Anzahl der Glieder in der Variable "counter" steht?

cu Spacerat


----------



## Eldar (13. Jan 2007)

Na.. übersetz doch mal counter ins deutsche.. vielleicht kommst du von alleine drauf


----------



## André Uhres (13. Jan 2007)

Eldar hat gesagt.:
			
		

> Na.. übersetz doch mal counter ins deutsche.. vielleicht kommst du von alleine drauf


counter = widersprechen  :lol:


----------



## Eldar (13. Jan 2007)

grmlgrml.. :?


----------



## Spacerat (19. Jan 2007)

[quote="André Uhres]counter = widersprechen  :lol:[/quote]
Da steht glücklicherweise ein :lol: ... denn conter = wieder und counter = Zähler...

OK. so weit, so gut. Nun ja, ich bin leider kein Student. Mir sind derartige Rechnungen zwar bekannt, aber mir fehlt irgendwie der Bezug zu dem Begriff "Glieder". Was solls rein intuitiv würde ich meine Frage mal mit "yes" beantworten.

cu Spacerat


----------



## André Uhres (19. Jan 2007)

@Spacerat: Ich meinte "counter" als Verb. "conter" gibt's übrigens nicht.


----------

