# Teiler Java



## mtbrider (18. Jul 2010)

hey leutz,

ich raffe diese Aufgabe nicht. Ich bin eine große 0 in java deshalb hoffe ich ihr könnt mir helfen.

Aufgabe: 

1)Lassen Sie alle Teiler einer einzulesenden ganzen Zahl ausgeben. Benutzen Sie auch hier eine Division mit ganzzahligem Ergebnis. Beispiel: 8 hat die Teiler 1,2,4,8.

"Teiler
Geben Sie eine Zahl ein: 63
63 ist durch:
1 3 7 9 21 63 teilbar.
Programmende Teiler."

2) Lassen Sie eine beliebige Anzahl von Zahlen addieren, bis die Zahl 0 eingegeben wird. Danach wird die Gesamtsumme und der Durchschnitt ausgegeben.


Ich hoffe das ihr mir helfen könnt, ich verstehe nichts =(


----------



## XHelp (18. Jul 2010)

Wo genau ist denn die Frage?
"Benutzen Sie die Division mit ganzzahlingem Ergebnis" heißt wohl soviel wie:
8 div 4 = 2 : 2*4=8, also ist 4 ein Teiler von 8
8 div 5 = 1 : 5*1 != 8, also ist 5 kein Teiler von 8


----------



## Haave (18. Jul 2010)

Hast du Verständnisschwierigkeiten auf der mathematischen Seite oder bei der Umsetzung in Java (Einlesen von Werten etc.)?


Naja, hier mal ein paar Sachen, zu denen du dir Gedanken machen solltest, um dich auf den richtigen Weg zu schubsen:

Zu 1:
Unter welchen Umständen ist eine Zahl glatt durch eine andere Zahl teilbar? Worauf musst du prüfen?

Zu 2:
Wie berechnet man den Durchschnitt einer Summe bei x Summanden?


----------



## Strahlungsleck (19. Jul 2010)

Nachdem bei Ihm eh die Aufgabe besprochen wurde hier mal meine Idee dazu ^^
nimmt Rücksich, bin seit gestern früh aufn Beinen und noch net so Javaerfahren


----------



## XHelp (19. Jul 2010)

Ich habe es nur grob überflogen, deswegen kann ich mich auch täuschen, aber:
Teiler: Laut der Aufgabenstellung musste man die ganzzahlige Division und nicht Divisionsrest verwenden (siehe mein 1. Post)
Summand: wenn du gleich am Anfang eine 0 eingibst, bekommst du eine Division durch 0.


----------



## Strahlungsleck (20. Jul 2010)

XHelp hat gesagt.:


> Ich habe es nur grob überflogen, deswegen kann ich mich auch täuschen, aber:
> Teiler: Laut der Aufgabenstellung musste man die ganzzahlige Division und nicht Divisionsrest verwenden (siehe mein 1. Post)
> Summand: wenn du gleich am Anfang eine 0 eingibst, bekommst du eine Division durch 0.



zu Teiler: Also es ist doch so, alle Zahlen durch die die Eingegebene Zahl teilbar ist und das Ergebnis kein Rest hat bzw. eine Kommerzahl wird/ist. Um herauszufinden ob es bei der Division ein Rest gibt überprüfe ich alle Teiler von 1 bis zur eingegebenen
Zahl (kann man eleganter machen das er noch weniger abfragen muss und damit schneller ist/rechnet). Daher verstehe ich nicht,
wieso das nicht richtig sein soll.

zu Summand: Das weiß ich ja, habe ich aber nicht abgefangen, weil meines Erachten es schwachsinnig ist, eine 0 als erste Zahl einzugeben. Außer man will es wirklich auf jeden erdenklichen Fehler prüfen und abfangen lassen. Dann müsste man auch double, float und Strings als eingabe verhindern/abfangen usw. .....

Aber habs mal kurz geändert und ne If-Verzweigung eingebaut

```
package java.forum.hausaufgaben;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Summand {

	public static void main(String[] args) {

		// Variablen Deklaration
		int zahl = 1;
		int summe = 0;
		int sumanten = 0;

		// prüft vor dem schleifendurchlauf ob die eingegebene Zahl 0 ist.
		// Der Wert von Zahl wird überschrieben um ein falsches Ergebnis
		// auszuschließen
		while (zahl != 0) {
			System.out.println("Bitte Summanten eingeben: ");
			try {
				// Eingabe Dialog und parse
				BufferedReader input = new BufferedReader(
						new InputStreamReader(System.in));
				zahl = Integer.parseInt(input.readLine());

				// Summenbildung der eingabe
				summe = summe + zahl;
				// Verzweigung damit die 0 als Zahl nicht mitgezählt wird
				if (zahl != 0) {
					sumanten++;
				}

				// Fehlerbehandlung
			} catch (IOException ex) {
				System.out.println(ex.getMessage());
			}
		}
		// Ausgabe der Gesammtsumme und Durchschnittshöhe der Summanten
		if (sumanten == 0) {
			System.out.println("Erste eingegebene Zahl war eine 0! Daher kann keine Berechnung erfolgen");
		} else {
			System.out.println("Gesamtsumme: " + summe);
			summe = summe / sumanten;
			System.out.println("Durchschnitt der Summanten: " + summe);
		}
	}
}
```


----------



## XHelp (20. Jul 2010)

Strahlungsleck hat gesagt.:


> zu Teiler: Also es ist doch so, alle Zahlen durch die die Eingegebene Zahl teilbar ist und das Ergebnis kein Rest hat bzw. eine Kommerzahl wird/ist. Um herauszufinden ob es bei der Division ein Rest gibt überprüfe ich alle Teiler von 1 bis zur eingegebenen
> Zahl (kann man eleganter machen das er noch weniger abfragen muss und damit schneller ist/rechnet). Daher verstehe ich nicht, wieso das nicht richtig sein soll.


Weil es die Aufgabenstellung so besagt. Wenn in der Aufgabe steht: "Das Viereck muss rot sein" und man das Viereck grün macht, ist es falsch.
Es kann natürlich sein, dass ich zu viel in die Aufgabenstellung reininterpretiere, aber Divisionsrest und Division ohne Rest sind völlig verschiedene Sachen.


Strahlungsleck hat gesagt.:


> zu Summand: Das weiß ich ja, habe ich aber nicht abgefangen, weil meines Erachten es schwachsinnig ist, eine 0 als erste Zahl einzugeben. Außer man will es wirklich auf jeden erdenklichen Fehler prüfen und abfangen lassen. Dann müsste man auch double, float und Strings als eingabe verhindern/abfangen usw. .....


Also eine 0 am Anfang einzugeben, dass ist nicht "jeder erdenklicher Fehler", sondern der offensichliste.


----------



## Strahlungsleck (20. Jul 2010)

XHelp hat gesagt.:


> Weil es die Aufgabenstellung so besagt. Wenn in der Aufgabe steht: "Das Viereck muss rot sein" und man das Viereck grün macht, ist es falsch.
> Es kann natürlich sein, dass ich zu viel in die Aufgabenstellung reininterpretiere, aber Divisionsrest und Division ohne Rest sind völlig verschiedene Sachen.
> 
> Also eine 0 am Anfang einzugeben, dass ist nicht "jeder erdenklicher Fehler", sondern der offensichliste.



zu 1) Achso, nun verstehe ich was du genau damit meinst, sorry stand da ein wenig aufn Schlauch und wollte dich nicht angreifen
wenn es so rüber gekommen ist. Also ich verstehe die Aufgabenstellung und die zwei Beispiele so:
1. Eingegebende Zahl muss ganzzahlig sein (Aufgabenstellung)
2. Das der Teiler ganzzahlig sein muss (Aufgabenstellung + Beispiel)
3. Das dass Ergebnis ganzzahlig sein muss (Aufgabenstellung)
4. Jede Zahl von 1 bis zur eingegebenden Zahl sollte als Teiler geprüft werden (Aufgabenstellung + Beispiele)
5. Es nur Teiler ausgegeben werden, die Ohne Rest ein ganzzahliges Ergebnis liefern


zu2) Jap, da hast du Recht. Ich sag ja nichts mehr dazu xD Aber sonst war das soweit richtig oder ?


----------



## XHelp (20. Jul 2010)

Ne, keine Sorge, ich fühle mich nicht angegriffen. Wie gesagt, es kann ja auch gut sein, dass ich falsch liege.
Es geht mir um folgende Aussage:


> Benutzen Sie auch hier eine Division mit ganzzahligem Ergebnis


Deine Methode ist zwar richtig, aber die funktioniert mit Divisionsrest. Laut der Aufgabenstellung muss man es aber mit ganzzaliger Division machen.
Und zu deinen Punkten:
Ein Teiler ist laut Definition schon eine ganze Zahl und liefert bei der Division wiederum eine ganze Zahl.

zu 2) es sieht funktionsfähig aus, falls du das meinst


----------



## Strahlungsleck (20. Jul 2010)

achso...

naja das beste wäre, wenn der TO mal das in der Schule besprochene (Musterlösung) postet
damit wir wissen was der Lehrer nun genau wollte


----------



## mtbrider (20. Jul 2010)

Hier ist die Musterlösung!


----------



## XHelp (20. Jul 2010)

Ist aber eine ziemlich kurze Musterlösung


----------



## mtbrider (20. Jul 2010)

wupps sry    hab die blätter hier mit den musterlösungen, hab se auch kopiert bloß man sieht daruf so gut wie nix weil die druckerschwärze sau schwach is, wollte die antwort da oben löschen ging aber net


----------



## XHelp (20. Jul 2010)

Wie werden denn die Teiler überprüft?


----------



## mtbrider (20. Jul 2010)

bin ganz erhlich jetzt viel zu faul des einzutippen


----------



## XHelp (20. Jul 2010)

Ja, kann ich verstehen... so eine einzelne Codezeile kann ziemlich lang sein


----------



## Strahlungsleck (21. Jul 2010)

Scanner mit Texterkennung ftw ^^ 

oh man los *peitsche schwing* eintippen


----------



## mtbrider (21. Jul 2010)

public static void main(String args[])

{
int intN;
float flSumme=0;
Scanner eingabe = new scanner(System.in);
System.out.println("Berechnung der Summer der Reihe:");
System.out.println("   1^2+2^2+3^2+...n^2");
System.out.print("Geben sie eine pos. ganze Zahl ein (N):");
intN = eingabe.nextInt();
for (int i=1 ; i<=intN; i++)
{
flSumme = flSumme+(i*i);
}


----------



## XHelp (21. Jul 2010)

bist du dir sicher, dass es a) irgendwas mit deinen Aufgaben zu tun hat und b) eine Musterlösung ist?


----------



## mtbrider (21. Jul 2010)

joa hat der lehrer uns so ausgedruckt


----------



## XHelp (21. Jul 2010)

hm. das heißt also du hast keine Musterlösung  uns bleiben wohl doch nur die Vermutungen


----------



## mtbrider (22. Jul 2010)

aber wenn unser lehrer des so ausdruckt muss es doch ne richtige lösung sein, außer er is inkompetent was vll sein kann


----------



## XHelp (22. Jul 2010)

Naja... du hast *2* Aufgaben und kriegst als Musterlösung *1* einzelne Methode. Und deine Aufgaben sind über Teiler und Quersummen und die "Musterlösung" berechnet eine "Quadratsumme" einer Folge. Im Fachjargon heißt sowas glaube ich "Thema verfehlt - 6, setzen!"


----------

