Abfrage aus einem Array?



  • Hallo Community,

    Ich habe ein Problem, und zwar habe ich ein 5*5 Array (Matrix) erstellt und sie mit einem Key und dem ABC Gefüllt (Playfair). Jetzt müsste ich eine Abfrage machen, an Welcher Stelle ein bestimmtes Zeichen ist? Habe aber überhaupt keinen Plan wie das funktionieren kann?

    Also Abfrage 'C' -> Ausgabe z.B. [2][3]



  • Du machst zwei verschachtelte Schleifen (je eine für jeden Index) und prüfst dann ob an der Stelle dein gesuchter Buchstabe ist.
    Wenn ja, merkst du dir die Position



  • DirkB schrieb:

    Du machst zwei verschachtelte Schleifen (je eine für jeden Index) und prüfst dann ob an der Stelle dein gesuchter Buchstabe ist.
    Wenn ja, merkst du dir die Position

    Könnten das vom Aufbau die gleichen Schleifen sein wie beim befüllen der Matrix?

    #define ROWS 5
    #define COLUMNS 5
    
    for (y = 0; y < ROWS; y++)
        {
    
            for (x = 0; x < COLUMNS; x++)
            {
    
                if (findLetter(matrix, letter) == 0)
                {
    
                    matrix[y][x] = letter;
                 }
             }
         }
    


  • Habe das/die Themen dazu nicht so verfolgt, aber ja:

    #define ROWS 5
    #define COLUMNS 5
    
    size_t y = 0;
    size_t x = 0;
    
    for( ; y < ROWS; y++ ) {
    
        for( x = 0; x < COLUMNS; x++ ) {
    
            /* mach was mit matrix[x][y] */
        }
    }
    


  • Ja, klar können sie.

    Aber deine if-abfrage ist merkwürdig.
    Warum das findLetter und danach die Zuweisung?



  • DirkB schrieb:

    Ja, klar können sie.

    Aber deine if-abfrage ist merkwürdig.
    Warum das findLetter und danach die Zuweisung?

    findLetter ist eine Funktion die überprüft ob "letter" schon einmal in der Matrix vorkommt, dann wird letter in die Matrix geschrieben.



  • pangea schrieb:

    findLetter ist eine Funktion die überprüft ob "letter" schon einmal in der Matrix vorkommt, dann wird letter in die Matrix geschrieben.

    Ist die von dir?

    Nimm findLetter und ändere das so um, dass du die Indizes deiner Buchstaben findest. Dann hast du schon was du suchst.



  • int findLetter(char matrix[ROWS][COLUMNS], char letter)
    {
        int x = 0;
        int y = 0;
    
        for (y = 0; y < ROWS; y++)
        {
    	    for (x = 0; x < COLUMNS; x++)
    	    {
                if (matrix[b][a]==letter)
                    return 1;
    	    }
        }
    	return 0;
    }
    

    Und wie sollte dass in meinem Fall ausschauen?



  • Eine Möglichkeit:

    int findLetter2(char matrix[ROWS][COLUMNS], char letter, int *x, int *y)
    {
        for (y = 0; y < ROWS; y++)
        {
            for (x = 0; x < COLUMNS; x++)
            {
    //          if (matrix[b][a]==letter)  // Wo kommen denn a und b her?
                if (matrix[y][x]==letter)  // Wo kommen denn a und b her?
                    return (y * COLUMNS + x);
            }
        }
        return -1;
    }
    // Aufruf:
    findLetter(matrix, letter, &x, &y);
    

    oder

    int findLetter3(char matrix[ROWS][COLUMNS], char letter)
    {
        int x = 0;
        int y = 0;
    
        for (y = 0; y < ROWS; y++)
        {
            for (x = 0; x < COLUMNS; x++)
            {
    //          if (matrix[b][a]==letter)  // Wo kommen denn a und b her?
                if (matrix[y][x]==letter)  // Wo kommen denn a und b her?
                    return (y * COLUMNS + x);
            }
        }
        return -1;   // Nicht vorhanden
    }
    // Aufruf:
    if (index= findLetter(matrix, letter) >= 0) {
      x = index % COLUMNS;
      y = index / COLUMNS;
    }
    

Log in to reply