Esercizio matrici

di il
3 risposte

Esercizio matrici

Salve a tutti, ho un problema con questo esercizio:
#include <stdio.h>
#include <stdlib.h>

/* Realizzare la funzione f(m) in base alle specifiche seguenti. La
   funzione accetta come parametro una matrice di caratteri di 8 righe
   x 8 colonne. Ogni elemento della matrice puo' essere '*' (il
   carattere asterisco) oppure '.' (il carattere punto). La funzione
   deve modificare il contenuto della matrice in modo tale che, per
   ogni colonna, i simboli '*' siano tutti "appiattiti verso l'alto",
   mentre i simboli '.' siano tutti "appiattiti verso il basso".

   Ad esempio, si consideri la matrice seguente:

   .******.
   *......*
   *.*..*.*
   *......*
   *.*..*.*
   *..**..*
   *......*
   .******.

   La funzione deve modificarla affinche' alla fine abbia il contenuto

   ********
   ********
   *.****.*
   *.*..*.*
   *......*
   *......*
   ........
   ........

   In sostanza, e' come se gli asterischi di ciascuna colonna vengano
   fatti "galleggiare" verso l'alto. e' sempre consentito definire ulteriori
   funzioni di supporto.
*/
---------------------------------------------------------
void f( char m[8][8] )
{
    int i, j, found;
        for(j=0; j<8;j++){
            if( m[0][j] != '.') {
                found =1;
                for (i=1; i<8 && found; i++){
                    if (m[i][j] != m[0][j]) {
                        found = 0;
                }
            }
            }
        }
}
----------------------------------------------
void test( char m[8][8], char expect[8][8] )
{
    int i, j;
    f(m);
    for (i=0; i<8; i++) {
        for (j=0; j<8; j++) {
            if (m[i][j] != expect[i][j]) {
                printf("Test FALLITO\n");
                return;
            }
        }
    }
    printf("Test OK\n");
}

int main( void )
{
    char m1[8][8] = {".******.",
                     "*......*",
                     "*.*..*.*",
                     "*......*",
                     "*.*..*.*",
                     "*..**..*",
                     "*......*",
                     ".******."};

    char e1[8][8] = {"********",
                     "********",
                     "*.****.*",
                     "*.*..*.*",
                     "*......*",
                     "*......*",
                     "........",
                     "........"};

    char m2[8][8] = {"........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........"};

    char e2[8][8] = {"........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........",
                     "........"};

    char m3[8][8] = {"*.*.*.*.",
                     ".*.*.*.*",
                     "*.*.*.*.",
                     ".*.*.*.*",
                     "*.*.*.*.",
                     ".*.*.*.*",
                     "*.*.*.*.",
                     ".*.*.*.*"};

    char e3[8][8] = {"********",
                     "********",
                     "********",
                     "********",
                     "........",
                     "........",
                     "........",
                     "........"};

    char m4[8][8] = {"********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********"};

    char e4[8][8] = {"********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********",
                     "********"};

    char m5[8][8] = {".******.",
                     "*.*****.",
                     "**.****.",
                     "***.***.",
                     "****.**.",
                     "*****.*.",
                     "******..",
                     "*******."};

    char e5[8][8] = {"*******.",
                     "*******.",
                     "*******.",
                     "*******.",
                     "*******.",
                     "*******.",
                     "*******.",
                     "........"};

    printf("=== Inizio test ===\n");
    test(m1, e1);
    test(m2, e2);
    test(m3, e3);
    test(m4, e4);
    test(m5, e5);
    printf("=== Fine test ===\n");

    return 0;
}
La parte tra i tratteggi è quella che ho svolto io, tutto il resto era presente nella traccia... il codice che ho scritto compila ma non verifica tutti i test. Qualcuno potrebbe aiutarmi?

3 Risposte

  • Re: Esercizio matrici

    Nella tua funzione non vedo spostamenti di caratteri nella matrice. Così non cambi niente
  • Re: Esercizio matrici

    Sto facendo vari tentativi ma non riesco.. Sapresti indicarmi la soluzione per favore?
  • Re: Esercizio matrici

    Prova a contare i numeri di asterischi per colonna e te li salvi in un array. Poi sovrascrivi la matrice con gli '*' e i '.' decrementando i counter degli asterischi nelle colonne a mano a mano che procedi
Devi accedere o registrarti per scrivere nel forum
3 risposte