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
