Aufgabenhilfe

SirWitan

Mitglied
Wie immer erhalten wir von unserem Informatiklehrer Aufgaben, die wir bis zu einem bestimmten Termin bearbeiten sollen.
Heute jedoch bin ich an 2 Aufgaben nicht mehr weitergekommen, ich sitze nun schon 6 Stunden an den Aufgaben...

Ich habe noch genau bis 24 Uhr zeit ihm die Lösungen per E-Mail zu schicken...

Ich bitte wirklich um Hilfe!

Hier die 2 Aufgaben:

Aufgabe 1 (while-Schleife)
Eine natürliche Zahl n heißt perfekt, wenn n als Summe aller natürlichen Zahlen i
, durch die n ohne Rest teilbar ist, dargestellt werden kann.
Die Zahl 28 ist beispielsweise eine perfekte Zahl. Es ist 28 = 1 + 2 + 4 + 7 + 14 und 1, 2,
4, 7, 14 sind genau alle Zahlen, durch die 28 ohne Rest teilbar ist.
Schreiben Sie eine Methode, das alle perfekten Zahlen zwischen 1 und 1000 auf dem Bildschirm ausgibt.

Mein "Ansatz":

Java:
public static int perfekteZahl(int n) {
int summe=0;
int i=1;
while(i<1000) {
summe=summe+i;
i++;
}

return summe;
}

Aufgabe 2 (while-Schleifen)
Implementieren Sie eine Methode, die tabellarisch das Kapital einer jährlichen
Verzinsung mit 7% ausgibt. Die Ausgabe soll nach dem Aufruf von
verzinsung(10,1000) wie folgt erfolgen: System.out.println (" Im "+ j++ +". Jahr beträgt das Kapital " + g++);

Mein "Ansatz":

Java:
public static double verzinsung(int j, double n) {
double s=0;
double g=0;
while(g<n && g<j) {
j++;
s=n*1.07;
g++;

System.out.println(" Im "+ j++ +". Jahr beträgt das Kapital " + g++);

}

return s;

}


Von guten Ansätzen lässt sich wohl kaum reden... ich habe leider gar keinen Plan und bin mir schon fast dabei dir Haare auszureißen...
 
Zuletzt bearbeitet von einem Moderator:

dschava

Mitglied
Die zweite Aufgabe ist recht einfach, bei der ersten muss ich nochmal überlegen


Java:
public class Zinsen {

	public static void main(String[] args) {
	
	verzinsung(10,1000); //Methodenaufruf
}

	public static void verzinsung(int jahreGesamt, double kapital) {
		int jahresanzahl = 0;
		while(jahresanzahl < jahreGesamt) {
			kapital = kapital * 1.07;
			jahresanzahl++;
                 System.out.println(" Im "+ jahresanzahl + ". Jahr beträgt das Kapital " + kapital + " Euro");
		}
		
	}
}

jahreGesamt = wielange das Kapital angelegt werden soll, ich gehe mal davon aus dass du mit Zinseszins rechnen willst...
 
Zuletzt bearbeitet:

SirWitan

Mitglied
Vielen Dank! Die Aufgabe 3 war wohl genau so gemeint...

Kann mir jemand noch bei der 2ten Aufgabe helfen? So wie ich hörte bruacht man hier 2 while-Schleifen...
 

Landei

Top Contributor
(ungetestet)
Java:
int zahl = 1;
while(zahl <= 1000) {
   int summe = 0;
   int teiler = 1;
   while(teiler < zahl) {
       if (zahl % teiler == 0) {
           summe = summe + teiler;
       }
   }
   if (summe == zahl) {
       System.out.println(zahl + " ist perfekt");
   }
   zahl++;
}
 
P

perfektezahe

Gast
(ungetestet)
Java:
int zahl = 1;
while(zahl <= 1000) {
   int summe = 0;
   int teiler = 1;
   while(teiler < zahl) {
       if (zahl % teiler == 0) {
           summe = summe + teiler;
       }
   }
   if (summe == zahl) {
       System.out.println(zahl + " ist perfekt");
   }
   zahl++;
}

das summiert die Teiler aller Zahlen von 1 bis 1000, man muss es unterteilen in eine Prüfung, ob eine Zahl perfekt ist, und in die Generierung der Zahlen von 1 bis 1000.
 

dschava

Mitglied
So sollte es stimmen:

Java:
public class PerfekteZahlen {

	public static void main(String[] args) {
		int zahl = 1;

		while (zahl < 1000) {
			zahl++;
			int summe = 0;
			for (int i = 1; i < zahl; i++) {
				if (zahl % i == 0) {
					summe = summe + i;
				}
			}
			if (zahl == summe)
				System.out.println(summe);
		}
	}
}


Sind allerdings nicht gerade viele Zahlen :D
 
Zuletzt bearbeitet:

SirWitan

Mitglied
Tja schön und gut aber ich habe wirklich keinen Plan wie ;(

EDIT: Ja nur gerade Zahlen, ob die 0 dazugehört weiß ich jetzt nicht... aber man darf ja soweiso nicht durch 0 teilen also denk ich Mal eher nicht...
 

dschava

Mitglied
Danke, aber wieso ist die Aufgabe bei dir in der main-Methode?

Ich hätte es auch so schreiben können:

Java:
public class PerfekteZahlen{
	
public static void main(String[] args) {
		perfekteZahlen();
	}

	public static void perfekteZahlen() {
		int zahl = 1;

		while (zahl < 1000) {
			zahl++;
			int summe = 0;
			for (int i = 1; i < zahl; i++) {
				if (zahl % i == 0) {
					summe = summe + i;
				}
			}
			if (zahl == summe)
				System.out.println(summe);
		}
	}
}

Aber bei so ner "kleinen" Aufgabe wollt ich mir die Schreibarbeit sparen :p

Übringens, in vielen Fällen, besonders beim Zählen, ist eine for-Schleife wesentlich eleganter und übersichtlicher als eine while-Schleife, doch bewirkt sie haargenau das gleiche ;)
 

Landei

Top Contributor
das summiert die Teiler aller Zahlen von 1 bis 1000, man muss es unterteilen in eine Prüfung, ob eine Zahl perfekt ist, und in die Generierung der Zahlen von 1 bis 1000.

Das ist Schwachfug, denn das [c]int summe = 0;[/c] steht in der äußeren Schleife. Ich hatte bloß vergessen, den Teiler hochzuzählen. So geht es:

Java:
int zahl = 1;
while(zahl <= 1000) {
   int summe = 0;
   int teiler = 1;
   while(teiler < zahl) {
       if (zahl % teiler == 0) {
           summe = summe + teiler;
       }
       teiler++; //<-----------------
   }
   if (summe == zahl) {
       System.out.println(zahl + " ist perfekt");
   }
   zahl++;
}
 

Neue Themen


Oben