Mathematischer Ansatz

11/19/2014 21:05 Yo123#1
Ach Herrje,
komm mir gerade so dumm vor :D
Also irgendwie kommen mir die Schleifenbedingungen gerade nicht in den Sinn, deswegen hab ich gedacht ich frag mal kurz nach, Realisierung mach ich dann auf jeden Fall selber.. Bin nur gerade irgendwie neben der Spur(Fehlgeburt etc, is ja auch egal)...
Aufgabe wäre wie folgt :
Quote:
Die L¨ange eines Schiffes in Metern ist eine beliebig große ganze Zahl. Der Kapit¨an
des Schiffes hat eine ungerade Anzahl Kinder. Sein Alter in Jahren ist gr¨oßer als die
Anzahl seiner Kinder, aber h¨ochstens 89. Wie alt ist der Kapit¨an, wieviele Kinder hat
er und wie lang ist sein Schiff, wenn das Produkt dieser drei Zahlen 35987 betr¨agt?
L¨osen Sie diese Aufgabe, indem sie eine Klasse Seemannsgarn erstellen, in deren Hauptprogramm
mittels ineinander verschachtelter for-Schleifen alle M¨oglichkeiten unter Beachtung der obigen
Einschr¨ankungen durchprobiert werden. Im Erfolgsfall sollen alle Schleifen verlassen und das
Ergebnis auf der Konsole ausgegeben werden. Z¨ahlen Sie außerdem mit, wieviele M¨oglichkeiten
Sie insgesamt durchprobiert haben und geben Sie diese Zahl im Erfolgsfall ebenfalls mit aus
Bin gerade einfach nicht so auf der Höhe, sorry.
11/19/2014 21:23 snow#2
Was unbekannt ist, bzw. irgendwo zwischen 1 und 35987, ist die Länge des Schiffs, das kannst du als äußerste Schleife nehmen.
Die Anzahl der Kinder ist ebenso unbekannt, aber man weiß, dass sie ungerade ist, er hat also mindestens ein Kind, maximal 35987, hier wird die Variable aber immer um 2 erhöht (damit die Variable weiterhin ungerade ist).
Das Alter ist Anzahl der Kinder + 1, aber maximal 89, wird immer um eins erhöht.
Da das Alter direkt von den Kindern abhängig ist (bzw. die Initialisierung der Variable), würde ich das als Schleife innerhalb der Schleife für die Anzahl der Kinder machen.

Ich nehme mal an, du nutzt Java? Ich hab das mal kurz geschrieben:

Code:
public class Seemannsgarn {
	
	public static void main(String[] args) {
		
		for (int shipLength = 1; shipLength <= 35987; ++shipLength) {
			for (int children = 1; children <= 35987; children += 2) {
				for (int age = children + 1; age <= 89; ++age) {
					if (shipLength * children * age == 35987) {
						System.out.println("shipLength: " + shipLength + ", children: " + children + ", age: " + age);	
					} 	
				}
			}
		}
	}
}
11/19/2014 21:30 warfley#3
Anzahl der kinder ist eine ungrade zahl das heißt eine zahl die modulo 2 = 1 ist
Das Alter ist größer als die anzahl, aber kleiner oder gleich 89
Die länge des schiffes ist 35987 / (Anzahl*Alter) meter.

Nun musst du Alter und Anzahl der kinder so wählen dass bei 35987 / (Anzahl*Alter) eine Ganze zahl rauskommt.

Eigentlich ein Typischer fall für logische programmiersprachen, für eine Imperative würde ich einfach so durchgehen

Code:
Alter = 89
(*)Wiederhole bis alter = 2:
Anzahl=Alter-1 Für alter grade, Alter-7 für Alter ungrade
(**)Widerhole bis Anzahl = 1
Wenn 35987 modulo (Anzahl * Alter) = 0 dann Beende(*)
Sonst Anzahl = Anzahl - 2
Ende(**)
Alter = Alter-1
Ende(*)
11/19/2014 22:15 Yo123#4
oki doki super danke, werd das noch wegen dem stop nach einmal anpassen und den counter einbauen und joo.. erstmal runterkommen. schicksalschläge op etc..