You are not logged in.

wcf.regNote.message

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

1

Friday, July 21st 2006, 2:23am

Quersummen

Hi, hab ne Methode in Java geschrieben, die die Quersumme oder die Quersummen einer Zahl, die als Integer Variable übergeben wird, über die Konsole ausgibt. Hab das ziemlich unprofessionell gemacht. Um auf eine bestimmte Ziffer der Zahl zuzugreifen, hab ich die Zahl erst als String gespeichert, um anschließend mit "name.charOf(position)" darauf zuzugreifen. Das ganze sieht so aus.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public void Quersumme_ausgeben(int x)
    {
        String hilfe;   // Variable, die eine Zahl aufnimmt, um auf eine Stelle dieser Zahl zuzugreifen.
        int c = 0;      // Variable, die die Anzahl der wievielten Quersumme zählt.
        while (x > 9)
        {
            c++;
            hilfe = Integer.toString(x);
            x = 0;
            for (int i=0; i<hilfe.length(); i++)
            {
                x = x + hilfe.charAt(i) - 48;
            }
            System.out.println("Die " + c + ". Quersumme lautet " + x);
        }
    }


Habe noch ne Methode geschrieben die die kleinstmögliche Zahl ausgibt, aus der man bestimmt oft Quersummen ziehen kann. Also z.B. übergibt man als Parameter '3' und in der Konsole wird ausgegeben, dass die kleinste Zahl, aus der man 3 mal die Quersumme ziehen kann, 199 ist.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public void suchen(int x)
    {
        int c = 0;
        int y = 0;
        int z = 0;
        while (Anzahl_an_Quersummen_zurueckgeben(z) < x)
        {
            z++;
        }
        System.out.println("Die gesuchte Zahl lautet: " + z);
        System.out.println("Aus ihr kann " + x + " mal die Quersumme gezogen werden.");
    }    
    
    public int Anzahl_an_Quersummen_zurueckgeben(int x)
    {
        String hilfe;   // Variable, die eine Zahl aufnimmt, um auf eine Stelle dieser Zahl zuzugreifen.
        int c = 0;      // Variable, die die Anzahl der wievielten Quersumme zählt.
        while (x > 9)
        {
            c++;
            hilfe = Integer.toString(x);
            x = 0;
            for (int i=0; i<hilfe.length(); i++)
            {
                x = x + hilfe.charAt(i) - 48;
            }
        }
        return c;
    }


Wie kann man das denn besser machen? Ohne das konvertieren usw.

Edit:
Sehe grade, dass "int c = 0; int y = 0;" überflüssige Variablen sind...

This post has been edited 1 times, last edit by "logix" (Jul 21st 2006, 2:27am)


logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

2

Monday, July 31st 2006, 6:37am

Hier die ganze Klasse mal *g*

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
public class Quersumme
{
    public Quersumme()
    {
    }
    
    public void ermitteln(int x)
    {
        long z = 0;
        boolean weiter = true;
        while (weiter && z>=0)
        {
            z = z * 10;
            System.out.println("Zwischenergebnis: " + z);
            for (int i=0; i<9; i++)
            {
                if (Anzahl_an_Quersummen_zurueckgeben2(z) >= x)
                {
                    i = 9;
                    weiter = false;
                }
                else
                {
                    z++;
                }
            }
            if (Anzahl_an_Quersummen_zurueckgeben2(z) >= x)
            {
                weiter = false;
            }
        }
        if (Anzahl_an_Quersummen_zurueckgeben2(z) < x)
        {
            System.out.println("Ergebnis: Overflow");
        }
        else
        {
            System.out.println("Ergebnis: " + z);
        }
    }
    
    public void Quersumme_ausgeben(int x)
    {
        String hilfe;
        int c = 0;
        while (x > 9)
        {
            c++;
            hilfe = Integer.toString(x);
            x = 0;
            for (int i=0; i<hilfe.length(); i++)
            {
                x = x + hilfe.charAt(i) - 48;
            }
            System.out.println("Die " + c + ". Quersumme lautet " + x);
        }
    }
    
    public int Anzahl_an_Quersummen_zurueckgeben(int x)
    {
        String hilfe;
        int c = 0;
        while (x > 9)
        {
            c++;
            hilfe = Integer.toString(x);
            x = 0;
            for (int i=0; i<hilfe.length(); i++)
            {
                x = x + hilfe.charAt(i) - 48;
            }
        }
        return c;
    }
    
    public int Anzahl_an_Quersummen_zurueckgeben2(long x)
    {
        String hilfe;
        int c = 0;
        while (x > 9)
        {
            c++;
            hilfe = Long.toString(x);
            x = 0;
            for (int i=0; i<hilfe.length(); i++)
            {
                x = x + hilfe.charAt(i) - 48;
            }
        }
        return c;
    }
}


Quersumme_ausgeben: gibt die quersumme(n) von ner zahl, die als parameter übergeben wird, über die konsole aus

Anzahl_an_Quersummen_zurueckgeben: gibt zurück, wie oft die quersumme von ner zahl genommen werden kann, die als parameter übergeben wird

Anzahl_an_Quersummen_zurueckgeben2: hier das selbe, nur das auch "größere" zahlen als parameter übergeben werden können (datentyp long, anstatt integer)

ermitteln: ermittelt ziemlich schnell, dafür aber nicht ganz korrekt, ne zahl, aus der man bestimmt oft eine oder mehrere quersumme ziehen kann. als parameter wird übergeben, wie oft es hinterher mögl. sein soll quersummen ziehen zu können, in der konsole wird ausgegeben, aus welcher zahl man so oft (wie vorher angegeben...) die quersumme ziehen kann.



und wie gehts besser ?( *g*

This post has been edited 1 times, last edit by "logix" (Jul 31st 2006, 6:50am)


bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

3

Monday, July 31st 2006, 8:15am

hmmm, was heißt denn wie oft man die quersumme aus einer zahl ziehen kann ? das versteh ich nicht so ganz. weil egal wie oft ich die quersumme ziehe, die bleibt doch immer gleich ?
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

4

Tuesday, August 1st 2006, 4:15am

naja mit wie oft ist gemeint, wie oft man aus der quersumme wieder die nächste zeihen kann, bis man eine quersumme hat, die nur noch eine stelle hat.

hier ein beispiel:

die zahl lautet 199

die quersumme lautet 19

die quersumme aus der quersumme (also in gewisser weise die 2. quersumme) lautet 10

die quersumme aus der quersumme aus der quersumme (die 3. quersumme) lautet 1

man konnte also drei mal die quersumme berechnen bis nur noch eine ziffer da war. (weiter geht es ja logischerweise nicht *g*)


meine frage war nur, wie man es anders, ein bisschen effizienter programmieren kann. ich kenne mich mit java nicht so aus. :O

bauser

Intermediate

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

5

Tuesday, August 1st 2006, 8:30am

ah :) jetzt hab ichs verstanden. leider kenne ich mich mit java auch nicht aus.


aber ne andere frage: wieso ist es sinnvoll eine quersumme zu berechnen bis nur noch eine ziffer übrig ist ? also wozu benutzt man so eine berechnung ?
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

This post has been edited 1 times, last edit by "bauser" (Aug 1st 2006, 8:31am)


logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

6

Thursday, August 3rd 2006, 3:16am

naja, wenn du dir größere files runter lädst, gibts ja oft dateien die die quersummen enthalten um zu überprüfen, ob das was du runtergeladen hast korrekt geladen wurde... dafür z.B.

ansonst hats mich nur so interessiert 8)

ralle030583

Beginner

Posts: 51

Location: Neuss

Occupation: FI Anwendungsentwicklung

  • Send private message

7

Monday, August 21st 2006, 1:43pm

würde das wie folgt lösen:
(habs im Editor getippselt könnten tipfehler drin sein da kein Syntax Check)

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//rekursive Ermittlung der Prüfsumme
public int pruefsumme(int zahl)
{
        String zahlAsString;   // Hilfsvariable
	
	//Abbruchbedingung Rekursion
        if (zahl > 9){
		int neue_zahl = 0;
		zahlAsString= Integer.toString(zahl);
		// Ermittlung Prüfsumme mal übernommen
		for (int i=0; i<hilfe.length(); i++)
		{
			neue_zahl = neue_zahl + Integer.valueOf(hilfe.zahlAsString(i));
		}
		//Rekursiver Aufruf
		return pruefsumme(neue_zahl);
	}else{
		return zahl;
	}
}


//Anzahl der Quersummen
public int anz_quer(int zahl)
{
        String zahlAsString;   // Hilfsvariable
	
	//Abbruchbedingung Rekursion
        if (zahl > 9){
		int neue_zahl = 0;
		zahlAsString= Integer.toString(zahl);
		// Ermittlung Prüfsumme mal übernommen
		for (int i=0; i<hilfe.length(); i++)
		{
			neue_zahl = neue_zahl + Integer.valueOf(hilfe.zahlAsString(i));
		}
		//Rekursiver Aufruf
		return pruefsumme(neue_zahl)+1;
	}else{
		return 1;
	}
}

//anzahl quersummen anzeigen
public void show_anz_quer(int zahl){
	System.print.outline(anz_quer(zahl));
}

//prüfsumme anzeigen
public void show_pruefsumme(int zahl){
	System.print.outline(pruefsumme(zahl));
}

This post has been edited 2 times, last edit by "ralle030583" (Aug 21st 2006, 1:51pm)


logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

8

Monday, August 21st 2006, 8:36pm

Aha sieht ganz interessant aus. Auf die Idee mit der Rekursion bin ich noch nicht gekommen. Ich habs jetzt noch nicht kompiliert und auch nur einmal flüchtig überflogen. Ein paar Fragen hätte ich schon noch. Wie willst Du mit der Methode anz_quer(int zahl) an die Anzahl der möglichen Quersummen kommen? Ansonsten siehts aber ganz gut aus, bis auf einige Syntaxfehler die mir ins Auge geprungen sind, z.B. Zeile 46 und 51: "System.print.outline(pruefsumme(zahl));" würde man in java so schreiben "System.out.println(pruefsumme(zahl));". Aber ich hab ja verstanden was Du gemeint hast ;) Fein

ralle030583

Beginner

Posts: 51

Location: Neuss

Occupation: FI Anwendungsentwicklung

  • Send private message

9

Monday, August 21st 2006, 10:14pm

hehe hatte es ja nur mal schnell runtergetippselt hatte gerade keine eclipse zur hand gehabt^^ müßte mal bei gelegenheit das ganze mal checken aber atm. keine zeit bzw. lust^^ vielleicht morgen

//Edit: jetzt erst gesehen was du meinst... System.print.outline.. lol frage mich wie auf den quatsch kam.....

anz_quer hat als letzen Rückgabewert beim abbruch der Rekursion eine 1 und wenn ich die immer weiter aufaddiert habe ich die anzahl der rekursiven aufrufe, damit die anzahl der quersummen wenn ich da nicht gerade einen denkfehler drin habe. wäre auch anders gegangen das zählen z.B. mit ner static variable aber mag die dinger nicht ;-)

This post has been edited 2 times, last edit by "ralle030583" (Aug 21st 2006, 10:16pm)


CiL

Beginner

Posts: 37

  • Send private message

10

Wednesday, February 7th 2007, 4:06pm

es kann auch noch code gesparrt werden statt

x = x + 12
x+=12

Also der Grund für dieses Programm is mir noch schleierhaft. Es gibt Downloads die Quersummen enthalten?
Du meinst aber nicht die MD5-Checksum oder?

logix

Trainee

  • "logix" started this thread

Posts: 78

  • Send private message

11

Thursday, February 8th 2007, 11:02pm

Quoted

Original von CiL
es kann auch noch code gesparrt werden statt

x = x + 12
x+=12

Also der Grund für dieses Programm is mir noch schleierhaft. Es gibt Downloads die Quersummen enthalten?
Du meinst aber nicht die MD5-Checksum oder?


Hm, schon länger her, ich weiß nicht mehr warum ich das geschrieben habe, ist jetzt auch überflüssig geworden.

wcf.user.socialbookmarks.titel