C# :: Aufgabe #199 :: Lösung #4
5 Lösungen

#199
Ermittlung von Zeilen- und Spaltennummer eines 2D-Array-Feldes
Anfänger - C#
von hollst
- 09.02.2018 um 11:03 Uhr
Die Felder eines "unendlich" großen 2D-Arrays seien nach folgendem "Diagonal-Schema" nummeriert:
1 2 4 7 . . .
3 5 8 . . . .
6 9 . . . . .
10 . . . . . .
. . . . . . usw.
Man schreibe ein Programm, das für eine gegebene Feldnummer N die Zeilen- (ZN) und die Spaltennummer (SN) zurückgibt.
Zeilen- und Spaltennummerierungen beginnen wie üblich mit 0.
Beispiele:
N = 8 -> ZN = 1, SN = 2
N = 31 -> ZN = 2, SN = 5
1 2 4 7 . . .
3 5 8 . . . .
6 9 . . . . .
10 . . . . . .
. . . . . . usw.
Man schreibe ein Programm, das für eine gegebene Feldnummer N die Zeilen- (ZN) und die Spaltennummer (SN) zurückgibt.
Zeilen- und Spaltennummerierungen beginnen wie üblich mit 0.
Beispiele:
N = 8 -> ZN = 1, SN = 2
N = 31 -> ZN = 2, SN = 5
#4

von hollst (13980 Punkte)
- 11.04.2018 um 13:53 Uhr

using System; using static System.Console; /* Ermittlung von Zeilen- und Spaltennummer eines Array-Feldes Die Felder eines 2D-Arrays seien nach folgendem "Diagonal-Schema" nummeriert: 1 2 4 7 . . . 3 5 8 . . . . 6 9 . . . . . 10 . . . . . . . . . . . . usw. Man schreibe ein Programm, das für eine gegebene Feldnummer N die Zeilen- (ZN) und die Spaltennummer (SN) zurückgibt. Zeilen- und Spaltennummerierungen beginnen wie üblich mit 0. Beispiele: N = 8 -> ZN = 1, SN = 2 N = 31 -> ZN = 2, SN = 5 */ class MAIN { static void Main() { uint N = 0; bool bo_exit = false; WriteLine(give_1_numbers(100)); while (!bo_exit) { bool bo_input_ok = false; while (!bo_input_ok) { Write("give me N (> 0): "); bo_input_ok = uint.TryParse(ReadLine(), out N) && (N > 0); } Algorith alg = new Algorith(N); WriteLine($"N = {N,2} -> ZN = {alg.ZN}, SN = {alg.SN}"); InversAlgorith inv_alg = new InversAlgorith(alg.ZN, alg.SN); WriteLine($"ZN = {alg.ZN}, SN = {alg.SN} -> N = {inv_alg.N}"); WriteLine("press any key (exit ESC)"); bo_exit = ReadKey(true).Key == ConsoleKey.Escape; } } class Algorith { public uint ZN, SN; public Algorith(uint N) { uint s = 0, value = 1; while (value <= N) value += s++; this.ZN = N - value + s - 1; this.SN = s - 2 - this.ZN; } } class InversAlgorith { public uint N; public InversAlgorith(uint ZN, uint SN) { uint s = 0, value = 1; while(s <= SN + ZN) value += s++; this.N = value + ZN; } } static string give_1_numbers(uint bis) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.AppendLine("numbers of diagonal elements"); for (uint i = 0; i < bis; i++) { if (i > 0 && i % 10 == 0) sb.AppendLine(); InversAlgorith ia = new InversAlgorith(i, i); sb.Append($"{ia.N.ToString("n0"), 10}"); } return sb.ToString(); } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1