iterierte Quersumme bilden

Diskutiere iterierte Quersumme bilden im Java Basics - Anfänger-Themen Bereich.
R

Rivi92

Hi,
ich habe in der uni folgende Aufgaben bekommen:

Schreiben Sie ein Java-Programm, das eine naturliche Zahl auf der Kommandozeile
ubergeben bekommt, die Quersumme dieser Zahl berechnet und ausgibt.
Lassen Sie die Quersumme der Zahlen 42, 3678 und 6947859 berechnen.

2. Schreiben Sie auf Grundlage des Programms aus Aufgabenteil 1 ein Java-Programm,
das fur eine naturliche Zahl die iterierte Quersumme einer Zahl berechnet und ausgibt.
Testen Sie Ihr Programm mit den Zahlen 24, 8763 und 9587496.

Zu Aufgabe 1 habe ich auch eine gut funktionierende Lösung gefunden:
Java:
public class Quersumme
{
	public static void main(String[] args)
	{
		int Zahl = Integer.parseInt(args[0]);
		int Quersumme = 0;
  
		System.out.print("Die Quersumme von " + Zahl + " lautet: ");
 
		while (Zahl != 0)
		{
			Quersumme = Quersumme + Zahl % 10;

			Zahl = Zahl / 10;
 		}
	System.out.println(Quersumme);
	}
}
zu dem 2. Teil der Aufgabe finde ich nun leider keine funktionierende Lösung. Habe bis jetzt folgendes script geschrieben:
Java:
public class iQuersumme
{
	public static void main(String[] args)
	{
		int Zahl = Integer.parseInt(args[0]);
		int Quersumme = 0;
  
		System.out.print("Die iterierte Quersumme von " + Zahl + " lautet: ");
  
		while (Zahl != 0)
		{
			Quersumme = Quersumme + Zahl % 10;

			Zahl = Zahl / 10;
 		}
		int iterierteQuersumme = 0;
		while (Quersumme > 9)
		{
			while (Quersumme != 0)
			{
				iterierteQuersumme = iterierteQuersumme + Quersumme % 10;

				Quersumme = Quersumme / 10;
			}	
		}
		Quersumme = iterierteQuersumme;
	System.out.println(iterierteQuersumme);
	}
}
nach kleineren Veränderungen in ab dem Teil wo die iterierteQuersumme iengeführt wird, wird entweder 0 oder nur 1 durchlauf der while-schleife ausgegeben (Bsp: iterierte Quersumme von 8763 = 24 = 6 funktioniert; iterierte Quersumme von 9587496 = 48 = 12 (=3, dies wird allerdings nicht mehr ausgegeben) funktioniert nicht.)

weiß jemand von euch wo der Fehler liegt? bin noch nicht so erfahren im Programmieren und würde mich über Hilfe freuen.

LG Rivi
 
X

XHelp

Auf den ersten Blick muss die Zeile 26 eine Zeile nach oben (IN die Schleife) und du musst die iterierteQuersumme am Anfang der Schleife auf 0 setzen.

P.S. Variablen fangen mit einem Kleinbuchstaben an, Klassen mit Großbuchstaben.
 
Zuletzt bearbeitet:
R

Rivi92

Dann wird (nach langer berechnung) -2147483647 ausgegeben. --> überlauf?
 
R

Rivi92

auch das ändert am Problem leider nichts...
gibt immernoch diesen negativbetrag aus
 
X

XHelp

Bei mir schon. Was hast du jetzt nach den ganzen Änderungen stehen?
 
R

Rivi92

Java:
public class IQuersumme
{
	public static void main(String[] args)
	{
		int zahl = Integer.parseInt(args[0]);
		int quersumme = 0;
  
		System.out.print("Die iterierte Quersumme von " + zahl + " lautet: ");
  
		while (zahl != 0)
		{
			quersumme = quersumme + zahl % 10;

			zahl = zahl / 10;
 		}
		int iterierteQuersumme = 0;
		while (quersumme > 9)
		{
			while (quersumme != 0)
			{
				iterierteQuersumme = iterierteQuersumme + quersumme % 10;

				quersumme = quersumme / 10;
			}
		quersumme = iterierteQuersumme;			
		}
	System.out.println(iterierteQuersumme);
	}
}
 
R

Rivi92

Ah okay, ich dachte das Bezog sich auf das Groß-/Kleinschreiben der Variablen und Klassen.
Jetzt gehts soweit. das is schonmal sehr gut! nur habe ich es grade auch mal mit der Zahl 24 (wie in der aufgabe gefordert) getest und es kam 0 raus (ebenso wie bei 16, mit der ich es auch einfach mal getestet hab). woran könnte das jetzt liegen? eigentlich dürften zahlen deren Quersumme auch ohne die iterierung gebildet werden garnicht in die 2. while schleife gelangen.
 
X

XHelp

Weil du dein Code doppelt schreibst.
Zuerst berechnest du die Quersumme, dann berechnest du nochmal die Quersumme in der Schleife.
Bei Zahlen, wo die Quersumme=iterierte Quersumme ist, springt er gar nicht in die Schleife, so dass iterierteQuersumme immer 0 bleibt. Gib also nicht die iterierteQuersumme, sondern
Code:
quersumme
aus
 
R

Rivi92

Sauba, es geht! Vielen Dank für die schnellen und sehr guten Antworten!
 
X

XHelp

Optional lässt sich das ganze auch rekursiv berechnen:
Java:
public static int quersumme(int x) {
	if (x<10) {
		return x;
	}
	return x%10+quersumme(x/10);
}
public static int iterierteQuersumme(int x) {
	if (x<10) {
		return x;
	}
	return iterierteQuersumme(quersumme(x));
}
 
R

Rivi92

Jo cool, danke, aber ich glaube ich bleibe erstmal bei meinem script, muss das nämlich in nem testat erklären und da is es denk ich mal schon besser, wenn ich weiß warum ich was gemacht hab ;)
 
K

Kwabena12

Hi,
ich habe in der uni folgende Aufgaben bekommen:

Schreiben Sie ein Java-Programm, das eine naturliche Zahl auf der Kommandozeile
ubergeben bekommt, die Quersumme dieser Zahl berechnet und ausgibt.
Lassen Sie die Quersumme der Zahlen 42, 3678 und 6947859 berechnen.

2. Schreiben Sie auf Grundlage des Programms aus Aufgabenteil 1 ein Java-Programm,
das fur eine naturliche Zahl die iterierte Quersumme einer Zahl berechnet und ausgibt.
Testen Sie Ihr Programm mit den Zahlen 24, 8763 und 9587496.

Zu Aufgabe 1 habe ich auch eine gut funktionierende Lösung gefunden:
Java:
public class Quersumme
{
    public static void main(String[] args)
    {
        int Zahl = Integer.parseInt(args[0]);
        int Quersumme = 0;

        System.out.print("Die Quersumme von " + Zahl + " lautet: ");

        while (Zahl != 0)
        {
            Quersumme = Quersumme + Zahl % 10;

            Zahl = Zahl / 10;
         }
    System.out.println(Quersumme);
    }
}
zu dem 2. Teil der Aufgabe finde ich nun leider keine funktionierende Lösung. Habe bis jetzt folgendes script geschrieben:
Java:
public class iQuersumme
{
    public static void main(String[] args)
    {
        int Zahl = Integer.parseInt(args[0]);
        int Quersumme = 0;

        System.out.print("Die iterierte Quersumme von " + Zahl + " lautet: ");

        while (Zahl != 0)
        {
            Quersumme = Quersumme + Zahl % 10;

            Zahl = Zahl / 10;
         }
        int iterierteQuersumme = 0;
        while (Quersumme > 9)
        {
            while (Quersumme != 0)
            {
                iterierteQuersumme = iterierteQuersumme + Quersumme % 10;

                Quersumme = Quersumme / 10;
            }
        }
        Quersumme = iterierteQuersumme;
    System.out.println(iterierteQuersumme);
    }
}
nach kleineren Veränderungen in ab dem Teil wo die iterierteQuersumme iengeführt wird, wird entweder 0 oder nur 1 durchlauf der while-schleife ausgegeben (Bsp: iterierte Quersumme von 8763 = 24 = 6 funktioniert; iterierte Quersumme von 9587496 = 48 = 12 (=3, dies wird allerdings nicht mehr ausgegeben) funktioniert nicht.)

weiß jemand von euch wo der Fehler liegt? bin noch nicht so erfahren im Programmieren und würde mich über Hilfe freuen.

LG Rivi

Moin , wie ich sehe hatten sie die gleiche Aufgabe wie ich.
Könnten sie mir den Vorgang zu Aufgabe 1 ``Quersumme```erklären, wenn man zum Beispiel die Zahl 22 einsetzt?
oder vielleicht irgendjemand aus dem Forum`?
 
K

Kwabena12

Ich weiß, dass das Thema 10 Jahre alt ist, aber ich habe genau die gleiche Aufgabe gestellt bekommen und ich wollte die iterierte Summe mit den Ansatz von Rivi92 berechnen
 
MoxxiManagarm

MoxxiManagarm

Ich wollte damit nur sagen, ich würde keine großen Hoffnungen rein stecken, dass er dir nach 10 Jahren noch antwortet. Zudem war er seit 9 Jahren nicht mehr online.
 
mihe7

mihe7

Ich weiß, dass das Thema 10 Jahre alt ist, aber ich habe genau die gleiche Aufgabe gestellt bekommen und ich wollte die iterierte Summe mit den Ansatz von Rivi92 berechnen
In dem Fall wäre es besser, einen neuen Thread zu eröffnen und auf den Thread hier zu verlinken.

Könnten sie mir den Vorgang zu Aufgabe 1 ``Quersumme```erklären, wenn man zum Beispiel die Zahl 22 einsetzt?
oder vielleicht irgendjemand aus dem Forum`?
Naja, % ist der Remainder-Operator und / die ganzzahlige Division. Wenn Du eine Zahl % 10 rechnest, erhältst Du die letzte Stelle, z. B. 123 % 10 == 3. Dividierst Du die Zahl durch 10, bleibt nur die Ganzzahl übrig: 123 / 10 = 12.

Code:
z := 123
s := 0
s := s + z % 10 = s + 3 = 3
z := z / 10 = 123 / 10 = 12
z == 0 ? Nein, also nochmal
s := s + z % 10 = s + 2 = 3 + 2 = 5
z := z / 10 = 12 / 10 = 1
z == 0? Nein, also nochmal
s := s + z % 10 = s + 1 = 5 + 1 = 6
z := z / 10 = 1 / 10 = 0
z == 0? Ja, also fertig. s = 6 ist die Quersumme von 123.
 
Thema: 

iterierte Quersumme bilden

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben