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?