141016
Goto Top

Java: Problem bei Aufgabe

Hallo zusammen,

ich habe bereits einwenig an der Aufgabe gearbeitet. Habe aber ein Problem - solltet ihr anhand der Aufgabe erkennen können.
Ich bin dankbar für eure Lösungshilfen.

Gruß Felix

_______________________________

Die folgende Reihe ist mit einem Programm zu berechnen: 1² + 2² + 3² + ... + n²

Vor dem Start des Programms wird ein Grenzwert für die Reihe eingeben, welcher nicht überschritten werden darf. Das Programm gibt am Ende die Anzahl der Summanden aus. Anschließend fragt es, ob eine weitere Reihe berechnet werden soll. Gibt der Anwender das Zeichen 'j' ein, so darf er anschließend einen neuen Grenzwert eingeben und die Reihe wird berechnet. Erstellen Sie ein Struktogramm und anschließend den Javacode.

Beispiel: Grenzwert = 16
1² + 2² + 3² = 14 (liegt unter dem Grenzwert) 1² + 2² + 3² + 4² = 30 (liegt über dem Grenzwert)
Anzahl der Summanden: 3

___________________________________________
Lösungsansatz:

package aufg1_1;
import java.util.Scanner;


public class aufgabe1_1 {
	public static void main(String args) {
		
	int grenzwert = 0;
	int anzSummand = 0;
	char nochmal;
	int ergebnis = 0;
	int zahl = 1;
	
	System.out.println("Berechnung von:  1² + 2² + 3²....n²");  
	System.out.println("Geben Sie einen Grenzwert ein: ");  
	
	Scanner scan = new Scanner(System.in);
	grenzwert = scan.nextInt();
	
	for(int i = 0; i < grenzwert; i++)
	{
		ergebnis = ergebnis + (zahl*zahl);
		zahl++;
		anzSummand++;
	}
		
	System.out.println("Ergebnis: " + ergebnis);  
	
	}
}

Content-Key: 507266

Url: https://administrator.de/contentid/507266

Printed on: May 18, 2024 at 17:05 o'clock

Member: Grinskeks
Grinskeks Oct 22, 2019 at 13:12:01 (UTC)
Goto Top
Hallo,

deine For-Schleife läuft 15 x durch bevor sie den Grenzwert erreicht. Eigentlich sollte die Anzahl der Iterationen gleich der Anzahl der Elemente in der Reihe entsprechen.

Lass dir einfach für jede Schleifen-Iteration die Werte in den Variablen ausgeben und du findest den Fehler selbst.
Und den zweiten Fehler direkt im Anschluss, sofern der Grenzwert nicht nur beliebig angenähert sondern auch tatsächlich erreicht wird.

Das ist ja gerade der Riesenspaß am Programmieren - es selbst herauszufinden face-wink

Gruß
Grinskeks
Member: SlainteMhath
SlainteMhath Oct 22, 2019 at 13:13:48 (UTC)
Goto Top
Moin,


Beispiel: Grenzwert = 16
1² + 2² + 3² = 14 (liegt unter dem Grenzwert) 1² + 2² + 3² + 4² = 30 (liegt über dem Grenzwert)
Anzahl der Summanden: 3
Dein Programm macht aber ganz was anders...

for(int i = 0; i < grenzwert; i++)
... überleg mal ob/wie das zu der Aufgabenstellung passt

lg,
Slainte
Member: Reinartz
Reinartz Oct 22, 2019 at 13:15:11 (UTC)
Goto Top
Da war einer schneller
Es fehlt auch noch eine weitere Schleife (oder ähnliches) in der du die Eingabe des Nutzers prüfst (sonst ist dein Program nach einem Durchlauf zu end)
Mitglied: 141016
141016 Oct 22, 2019 at 13:15:52 (UTC)
Goto Top
icih komm nicht ganz dahinter häng schon seit ein paar tagen an der aufgabe :D.....
Member: SlainteMhath
SlainteMhath Oct 22, 2019 at 13:25:42 (UTC)
Goto Top
icih komm nicht ganz dahinter häng schon seit ein paar tagen an der aufgabe :D.....
Wie sieht denn das geforderte Struktogramm aus?

Fragen die du dir stellen solltest:

Gegen was soll der Grenzwert geprüft werden? Gegen die Basis der Exponentialrechung? Gegen was prüfst du?
Und: was ist der Unterschied zwischen deinen Variablen i, zahl und anzSummand?
Mitglied: 141016
141016 Oct 22, 2019 at 13:27:09 (UTC)
Goto Top
der grenzwert soll gegen das ergebnis geprüft werden
Mitglied: 141016
141016 Oct 22, 2019 at 13:27:54 (UTC)
Goto Top
gut.. der unterschied ist eigentlich keiner :o alle variablen sollen sich nur um 1 erhöhen pro durchlauf,..
könnte man wohl also in einer variablen machen?
Member: Reinartz
Reinartz Oct 22, 2019 at 13:35:45 (UTC)
Goto Top
In deiner For Schleife würde bei Grenzwert 30, den der Nutzer ja eingegeben hat, 30 Mal die Schleife durchlaufen und nicht so lange bis die Berechnung <30 ist
Mitglied: 141016
141016 Oct 22, 2019 at 13:42:19 (UTC)
Goto Top
achso ja also i < ergebnis
Mitglied: 141016
141016 Oct 22, 2019 at 13:43:05 (UTC)
Goto Top
ups ne das ergibt keinen sinn...
ja wie sag ich dem denn dass der so lange durchlaufen soll bis ergebnis <= grenzwert
Member: Reinartz
Reinartz Oct 22, 2019 at 13:44:59 (UTC)
Goto Top
z.B i= ergebnis
Member: erikro
erikro Oct 22, 2019 at 14:12:16 (UTC)
Goto Top
Moin,
Zitat von @141016:

ups ne das ergibt keinen sinn...
ja wie sag ich dem denn dass der so lange durchlaufen soll bis ergebnis <= grenzwert

Na "während das Ergebnis kleiner oder gleich Grenzwert". Übersetze das einfach mal ins Englische. Dann hast Du Deine richtige Schleife. face-wink

hth

Erik
Member: Reinartz
Reinartz Oct 22, 2019 at 18:28:14 (UTC)
Goto Top
Hab es jetzt mal so gelöst
Es ist bei weitem nicht perfekt (man sollte noch die Eingaben abfragen ob der Nutzer das richtige eingiebt) und es geht auch deutlich schlanker aber es geht

public static void main(String args)
{
int grenzwert = 0;
int anzSummand = 0;
Scanner nochmal;
Scanner scan;
int ergebnis = 0;
int zahl = 1;
String weiter="j";
System.out.println("Berechnung von: 1² + 2² + 3²....n²");
while (weiter.equals("j") )
{
System.out.println("Geben Sie einen Grenzwert ein: ");
scan = new Scanner(System.in);
grenzwert = scan.nextInt();
for(int i = 0; i <= grenzwert; )
{
ergebnis = zahl*zahl;
System.out.println(zahl + " hoch "+ zahl + " ist gleich "+ ergebnis );
zahl++;
anzSummand++;
i=zahl*zahl;
}
System.out.println("Ergebnis: " + anzSummand);
System.out.println("Wollen Sie eine weitere Berechnung durchführen ?");
zahl=1;
ergebnis=0;
anzSummand=0;
nochmal =new Scanner(System.in);
weiter = nochmal.nextLine();
}
}
}
Member: SlainteMhath
SlainteMhath Oct 23, 2019 at 06:29:19 (UTC)
Goto Top
Zitat von @Reinartz:

Hab es jetzt mal so gelöst
Mal abgesehen, das dem das reine Lösen der Aufgabe beim TO keinen Lerneffekt erzielt, und du nichtmal code Tags verwendest, löst dein Code nicht die gestellte Aufgabe!!
Member: Reinartz
Reinartz Oct 23, 2019 at 06:53:09 (UTC)
Goto Top
Ohhh da habe ich doch tatsächlich was überlesen
Mitglied: 141016
141016 Oct 23, 2019 at 06:56:23 (UTC)
Goto Top
:D:D
Member: SlainteMhath
SlainteMhath Oct 23, 2019 at 07:11:15 (UTC)
Goto Top
@141016
Ich wiederhole nochmal meine Frage von oben, da du sie scheinbar übersehen hast:

Wie sieht denn das geforderte Struktogramm aus?
Mitglied: 141016
141016 Oct 23, 2019 at 07:11:52 (UTC)
Goto Top
Ich weiss ich werde jetzt gesteinigt, aber ich habe kein Struktogramm
Member: ITvortex
ITvortex Oct 23, 2019 at 07:45:58 (UTC)
Goto Top
Zitat von @Reinartz:

Hab es jetzt mal so gelöst
Es ist bei weitem nicht perfekt (man sollte noch die Eingaben abfragen ob der Nutzer das richtige eingiebt) und es geht auch deutlich schlanker aber es geht

public static void main(String args)
{
int grenzwert = 0;
int anzSummand = 0;
Scanner nochmal;
Scanner scan;
int ergebnis = 0;
int zahl = 1;
String weiter="j";
System.out.println("Berechnung von: 1² + 2² + 3²....n²");
while (weiter.equals("j") )
{
System.out.println("Geben Sie einen Grenzwert ein: ");
scan = new Scanner(System.in);
grenzwert = scan.nextInt();
for(int i = 0; i <= grenzwert; )
{
ergebnis = zahl*zahl;
System.out.println(zahl + " hoch "+ zahl + " ist gleich "+ ergebnis );
zahl++;
anzSummand++;
i=zahl*zahl;
}
System.out.println("Ergebnis: " + anzSummand);
System.out.println("Wollen Sie eine weitere Berechnung durchführen ?");
zahl=1;
ergebnis=0;
anzSummand=0;
nochmal =new Scanner(System.in);
weiter = nochmal.nextLine();
}
}
}

Das Ergebnis müsste ergebnis = ergebnis + (zahl*zahl); sein.


Aber wie schon oben erwähnt wurde, die Hausaufgaben sollten ja zum Lernen sein und nicht damit wir sie für den TO lösen face-smile
Member: SlainteMhath
SlainteMhath Oct 23, 2019 at 07:46:09 (UTC)
Goto Top
Dann mal doch mal eins. Dann wird dir auch klar, was du im Programm machen musst.
Member: ITvortex
ITvortex Oct 23, 2019 at 07:47:24 (UTC)
Goto Top
Zitat von @141016:

Ich weiss ich werde jetzt gesteinigt, aber ich habe kein Struktogramm

Hast du dir den überhaupt irgendwelche Gedanken zu deiner Aufgabenstellung gemacht oder hast du schlicht keine Lust?

Sorry aber ich verstehe nicht wieso man in einem Forum Leute mit einer Aufgabenstellung konfrontiert wenn man sich nicht mal 1 Minute hingesetzt hat.
Mitglied: 141016
141016 Oct 23, 2019 at 07:51:29 (UTC)
Goto Top
habe ich
habe auch den großteil der aufgabe schon gelöst gehabt nur gabs ein kleines problem

von keine lust ist hier nicht die rede, da die aufgaben auch freiwillig sind
Member: holli.zimmi
holli.zimmi Oct 24, 2019 updated at 10:01:11 (UTC)
Goto Top
Zitat von @141016:

habe ich
habe auch den großteil der aufgabe schon gelöst gehabt nur gabs ein kleines problem

von keine lust ist hier nicht die rede, da die aufgaben auch freiwillig sind

Hi

kannst Du bitte beim Schreiben folgendes beachten:
1. Groß und Kleinschreibung
2. Punkt, Ausrufezeichen und Fragezeichen setzen

Frage:
1. Wieso hast Du kein Struktogramm oder PAP ?

...

Gruß

Holli