Entwickler-Ecke
Basistechnologien - variablen zur laufzeit definieren
sataan1337 - Sa 29.11.08 10:53
Titel: variablen zur laufzeit definieren
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:
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 ;)
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; } } }
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
Kha: Code- durch C#-Tags ersetzt
Kha - Sa 29.11.08 12:24
jaenicke hat folgendes geschrieben : |
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.
Bloß nicht, das ist noch ein Relikt aus 1.1 und sollte immer durch eine typisierte
System.Collections.Generic.List<T> ersetzt werden.
jaenicke - Sa 29.11.08 12:26
Kha hat folgendes geschrieben : |
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 ;-).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!