Problema utilizzo File: torre solida o torre che crolla

di il
2 risposte

Problema utilizzo File: torre solida o torre che crolla

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?

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte