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

5 Lösungen Lösungen öffentlich
#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
#5
vote_ok
von ulfk (100 Punkte) - 31.05.2018 um 11:43 Uhr
Consolen-Programm mit Eingabeschleife zum Test unterschiedlicher Werte.
Quellcode ausblenden 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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben