C# :: Aufgabe #199 :: Lösung #5
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
#5
von ulfk (100 Punkte)
- 31.05.2018 um 11:43 Uhr
Consolen-Programm mit Eingabeschleife zum Test unterschiedlicher Werte.
C#-Code
namespace Csharp_199_2DArray
{
using System;
public class Program
{
static void Main(string[] args)
{
string inputString;
// loop to enter and check several numbers in a row
do
{
Console.Write("Enter integer number or 'Q' to quit: ");
inputString = Console.ReadLine();
if(int.TryParse(inputString,out int inputNumber))
{
CalculateArrayIndexes(inputNumber, out int resultColumn, out int resultRow);
Console.WriteLine($"Number={inputNumber} -> Result: Column={resultColumn} Row={resultRow}");
}
} while (inputString.ToLower() != "q");
}
static void CalculateArrayIndexes(int inputNumber, out int resultColumn, out int resultRow)
{
resultColumn = 0;
resultRow = 0;
// value to be added when stepping from one diagonal to the next one
var addValue = 1;
// first and last value in a diagonal
var firstValueOfDiagonal = 1;
var lastValueOfDiagonal = 1;
var continueSearch = true;
while (continueSearch)
{
// check if given number is on this diagonal
if ( inputNumber >= firstValueOfDiagonal
&& inputNumber <= lastValueOfDiagonal)
{
// calculate the index values and terminate loop
resultColumn = lastValueOfDiagonal - inputNumber;
resultRow = inputNumber - firstValueOfDiagonal;
continueSearch = false;
}
else
{
// step to next diagonal
firstValueOfDiagonal += addValue;
lastValueOfDiagonal += addValue + 1;
addValue++;
}
}
}
}
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
