Autor Beitrag
sataan1337
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 27.11.08 19:53 
moin ;)

ich bin neu in c# und hab ein kleines problem ;)

ich wollte mir aus spass ein kleines programm basteln dass die größenbegrenzung für integer-werte umgeht

in ein array schreib ich dafür in array[0] den startwert, verändere ihn (in dem fall quadriert), dann überprüfe ich die grösse und schreibe das ergebnis der ganzzahldivision durch 1000000 ins nächst höhere feld und ersetzte den wert in array[0] durchs modulo
(sry im erklären von sowas bin ich ne niete ich häng mal am ende den quellcode an)

zur ausgabe wollte ich mir jetzt ne rekursive prozedur schreiben die mir die werte von array[99] bis array[0] aneinanderkettet - jeweils mit nem leerzeichen dazwischen

wenn ich das ganze jetzt ausführe krieg ich beim ersten aufruf der "ausgabe"-funktion innerhalb der "ausgabe"- funktion diese "stack overflow exception" ;)

vielleicht hat ja einer von euch ne idee was da nich stimmen könnte ;) thx im voraus

ausblenden volle Höhe C#-Quelltext
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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication3
{
    class Program
    {
        public static void Main(string[] args)
        {
            int max = 100;
            int pos = 0;
            int[] blub = new int[max];
            blub[0] = 1;
            while (1 == 1)
            {
                pos = position(pos, max, blub);
                for (int i = 0; i <= pos; i++)
                {
                    blub[i] = blub[i] + blub[i];
                    if (blub[i] > 999999)
                    {
                        if (i < 99)
                        {
                            blub[i + 1] = blub[i + 1] + (blub[i] / 1000000);
                            blub[i] = blub[i] % 1000000;
                        }
                    }
                }
               /* Console.WriteLine(Convert.ToString(blub[20]) + " " + Convert.ToString(blub[19]) + " " + Convert.ToString(blub[18]) + " " + Convert.ToString(blub[17]) + " " + Convert.ToString(blub[16]) + " " + Convert.ToString(blub[15]) + " " + Convert.ToString(blub[14]) + " " + Convert.ToString(blub[13]) + " " + Convert.ToString(blub[12]) + " " + Convert.ToString(blub[11]) + " " + Convert.ToString(blub[10]) + " " + Convert.ToString(blub[9]) + " " + Convert.ToString(blub[8]) + " " + Convert.ToString(blub[7]) + " " + Convert.ToString(blub[6]) + " " + Convert.ToString(blub[5]) + " " + Convert.ToString(blub[4]) + " " + Convert.ToString(blub[3]) + " " + Convert.ToString(blub[2]) + " " + Convert.ToString(blub[1]) + " " + Convert.ToString(blub[0])); 
*/
        //die alte ausgabe - war zu faul das bis array[99] so zu schreiben ^^
                Console.WriteLine(ausgabe(99, blub));
                System.Threading.Thread.Sleep(50);
            }
        }

        static string ausgabe(int i, int[] blub)
        {
            if (i == 0)
            {
                return (Convert.ToString(blub[i]));
            }
            string sülz = ausgabe(i--, blub);
            string blah = Convert.ToString(blub[i]);
            return (blah + " " + sülz);
        }


        static int position(int pos, int max, int[] blub)
        {
            for (int i = (max - 1); i >= pos; i--)
            {
                if (blub[i] != 0)
                {
                    return (i);
                }
            }
            return (-1);
        }
    }
}


*edit:

habs mal in java probiert da kommt das gleiche ;) also irgendwas muss ich übersehen haben ^^

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 27.11.08 20:24 
user profile iconsataan1337 hat folgendes geschrieben Zum zitierten Posting springen:
(sry im erklären von sowas bin ich ne niete ich häng mal am ende den quellcode an)
Keine Sorge, habs verstanden :D .

Schau dir mal im Debugger nach jedem Rekursionsschritt den Wert von i an und überlege dir nochmal den Unterschied zwischen Präinkrement- (++i) und Postinkrement-Operatoren (i++) ;) .

_________________
>λ=
sataan1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 28.11.08 09:09 
omg nein ;) ich danke dir ^^