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
          
          
             
       
    
    
    
