Buon pomeriggio a tutti! Scrivo nuovamente qui per chiedervi aiuto nel seguente esercizio:
"Un file contiene una matrice di caratteri di dimensione massima uguale a 20 righe e 20 colonne. La matrice rappresenta la sezione verticale di una torre. La prima riga corrisponde al piano più alto e l'ultima al primo piano. Ogni riga del file è composta da ' * ', indicanti le "parti di torre" e ' ' (spazi) indicanti le "parti vuote". Una torre può sostenersi verticalmente se e solo se ciascun piano (a parte il primo) ha almeno due punti di contatto con il piano inferiore e se il primo piano ha almeno due punti di appoggio. Scrivere un programma che legga da tastiera il nome di un file contenente la matrice e determini se la torre contenuta al suo interno sia solida o meno." Ad esempio:
TORRE SOLIDA TORRE CHE CROLLA
****** *** ***
*** * * *
* ** ** *
*** * ** *
Di seguito vi riporto il mio tentativo di risoluzione:
#include <stdio.h>
#include <stdlib.h>
#define N 30//numero massimo di righe
#define M 30//numero massimo di colonne
int main()
{ int numero_righe,numero_colonne,punto_contatto,riga_sicura;
int i,j,k;
char c;
char torre[N][M];
FILE*fp;
fp=fopen("torre.txt","r");
if(fp==NULL)
{
printf("Errore!Impossibile aprire il file!");
return -1;
}
numero_righe=0;
numero_colonne=0;
while(fscanf(fp,"%c",&c)!=EOF)
{
if(c!='\n')
{
torre[numero_righe][numero_colonne]=c;
numero_colonne++;
if(numero_colonne>M)
{
//dimensioni sbagliate
printf("Numero di colonne sbagliato!");
exit(-1);
}
}
else
{
numero_righe++;
if(numero_righe>N)
{
printf("Numero di righe sbagliato!");
exit(-2);
}
}
}
punto_contatto=0;
riga_sicura=1;
for(i=0; i<numero_righe-1 || riga_sicura==0; i++)
{ if(i==N-1)
{
for(k=0; k<numero_colonne; k++)
{
if(torre[i][k]=='*')
{
punto_contatto++;
}
}
if(punto_contatto>=2)
{
printf("Torre solida!");
}
}
for(j=0; j<numero_colonne; j++)
{
if(torre[i][j]=='*')
{
if(torre[i+1][j]=='*')
{
punto_contatto++;
}
}
}
if(punto_contatto>=2)
{
riga_sicura=1;
}
else
{
riga_sicura=0;
}
}
if(riga_sicura==1)
{
printf("La torre e' solida!\n");
}
else
{
printf("La torre crollerà!\n");
}
return 0;
}
Cosa non va nel programma? E altre possibili strade per la risoluzione quali potrebbero essere?