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



BeitragVerfasst: Sa 29.11.08 10:53 
moin ;)

also ich hab wieder ein kleines problem ^^ - ich sitze noch an einem programm dass mit "beliebig" langen zahlen rechnen kann (zumindest die grundrechenoperationen^^)

das problem was ich im moment habe ist folgendes: - ich schreibe die zahl in ein array[0] - sobald sie eine bestimmte länge erreicht schreibe ich zahl/1000000 ins array[1] und zahl%1000000 ins array[0] - dann wird die operation erst auf array[0] angewendet, der übertrag zu array[1] addiert, und die operation auf array[1] angewendet - und so weiter (im code unten isses ne operation ohne ende nich wundern;)
problem ist jetzt dass ich vorher definieren muss wie gross das array ist - gibts irgendeine möglichkeit zur laufzeit variablen zu definieren?

so a'la:
ausblenden C#-Quelltext
1:
2:
3:
4:
string test = "blubb";
int zahl = 42;
string (test + Convert.ToString(zahl)); 
System.Console.WriteLine(test42);



so ich häng nochmal den quelltext von dem programm an um dasses geht ;)

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:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;

namespace ConsoleApplication3
{
    class Program
    {
        public static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("ungültige parameter");
                Environment.Exit(5);
            }
            int max = Convert.ToInt32(args[0]);
            int pos = 0;
            int[] blub = new int[max];
            blub[0] = Convert.ToInt32(args[1]);
            while (blub[max - 1] == 0)
            {
                pos = position(pos, max, blub);
                for (int i = 0; i <= pos; i++)
                {
                    blub[i] = blub[i] + blub[i];
                    if (blub[i] > 999999)
                    {
                        if (i < (max - 1))
                        {
                            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]));
                
               

                //  System.Threading.Thread.Sleep(30);

                string strg = ausgabe((max - 1), blub);
                Console.Clear();
                Console.WriteLine(strg);
                save(strg);
            }
        }

        static void save(string strg)
        {
            TextWriter strgwriter = new StreamWriter("zahl.txt");
            strgwriter.WriteLine(strg);
            strgwriter.Close();
            Console.WriteLine("gespeichert");
        }

        static string ausgabe(int i, int[] blub)
        {
            string ret = "";
            for (int j = i; j >= 0; j--)
            {
                if (blub[j] != 0)
                {
                    ret = ret + " " + Convert.ToString(blub[j]);
                }
            }
            return (ret);
        }

        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);
        }
    }
}


Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 29.11.08 11:08 
Du definierst die Variable blub doch schon zur Laufzeit. Du meinst, ob du die Größe eines bestehenden Arrays ändern kannst? Das geht glaube ich nicht, jedenfalls wäre es mir neu. Ich glaube am besten ist stattdessen eine ArrayList geeignet, diese hat keine feste Größe. (EDIT: siehe unten)


Zuletzt bearbeitet von jaenicke am Sa 29.11.08 12:25, insgesamt 1-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 29.11.08 12:24 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du definierst die Variable blub doch schon zur Laufzeit. Du meinst, ob du die Größe eines bestehenden Arrays ändern kannst? Das geht glaube ich nicht, jedenfalls wäre es mir neu.
Eines bestehenden Arrays nicht, ja, aber mit Array.Resize lässt es sich transparent durch ein neues Array der gewünschten Größe ersetzen. Da beim Addieren die Arraygröße höchstens einmal geändert werden muss, wäre Resize hier auch in Ordnung, im Allgemeinen benutzt man aber eine Liste, wie du schon sagtest.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube am besten ist stattdessen eine ArrayList geeignet, diese hat keine feste Größe.
Bloß nicht, das ist noch ein Relikt aus 1.1 und sollte immer durch eine typisierte System.Collections.Generic.List<T> ersetzt werden.

_________________
>λ=
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 29.11.08 12:26 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Bloß nicht, das ist noch ein Relikt aus 1.1 und sollte immer durch eine typisierte System.Collections.Generic.List<T> ersetzt werden.
Ja, man merkt, dass ich mich mit C# noch nicht so gut auskenne wie mit Delphi ;-).