Aiuto Array Bidimensionale

di il
5 risposte

Aiuto Array Bidimensionale

Buon pomeriggio a tutti, mi sono appena iscritto. Sto iniziando ad avvicinarmi al mondo della programmazione in ambiente objective-c. Ho acquista un libro tempo fa e alla fine di ogni capitolo ci stanno degli esercizi, purtroppo mi sono bloccato su un esercizio e spero che qualcuno di voi possa aiutarmi a risolvere il mio problema. Il testo dell 'esercizio dice:

Scrivere un programma che tramite l'uso di un array bidimensionale, modelli il gioco della battaglia navale.

Ciò che ho scritto è questo:


#import <Foundation/Foundation.h>

#define A 7
#define L 7

int main(int argc, const char * argv[])
{

@autoreleasepool {

char campo [A][L] = {
{'0','1','2','3','4','5','6'},
{'A','A','A','A','A','A','A'},
{'B','B','B','B','B','B','B'},
{'C','C','C','C','C','C','C'},
{'D','D','D','D','D','D','D'},
{'E','E','E','E','E','E','E'},
{'F','F','F','F','F','F','F'},
};

int i, j;

for (i = 0 , j = 0; i < A, j < L; i++, j++) {
NSLog(@" %c %c \n", campo[j]);
}
}
return 0;
}

il risulato:

013-10-29 15:05:07.810 BattagliaNavale[27543:303] 0
2013-10-29 15:05:07.812 BattagliaNavale[27543:303] A
2013-10-29 15:05:07.812 BattagliaNavale[27543:303] B
2013-10-29 15:05:07.813 BattagliaNavale[27543:303] C
2013-10-29 15:05:07.813 BattagliaNavale[27543:303] D
2013-10-29 15:05:07.813 BattagliaNavale[27543:303] E
2013-10-29 15:05:07.814 BattagliaNavale[27543:303] F

Spero che qualcuno mi possa aiutare.

5 Risposte

  • Re: Aiuto Array Bidimensionale

    Il risultato che vorresti ottenere nei log sarebbe questo??
    0 1 2 3 4 5 6
    A
    B
    C
    D
    E
    F
  • Re: Aiuto Array Bidimensionale

    Esattamente...
  • Re: Aiuto Array Bidimensionale

    Tieni, ti ho aggiunto i commenti per farti capire. Se hai dubbi chiedi.
    
    
    char campo [A][L] = {
            {'0','1','2','3','4','5','6'},
            {'A','A','A','A','A','A','A'},
            {'B','B','B','B','B','B','B'},
            {'C','C','C','C','C','C','C'},
            {'D','D','D','D','D','D','D'},
            {'E','E','E','E','E','E','E'},
            {'F','F','F','F','F','F','F'},
        };
        
    
        for (int i = 0; i < A; i++)
        {
            //La stringa che andrò a stampare nel log, inizialmente vuota
            NSString *row = @"";
            for (int j = 0; j < L; j++)
            {
                //Definisco il carattere che andrò ad aggiungere alla stringa da stampare
                char character;
                //Se non è la prima colonna e non è la prima riga
                if (j != 0 && i != 0)
                {
                    //Aggiungo spazio vuoto
                    character = ' ';
                }
                else
                {
                    //Aggiungo il valore
                    character = campo[i][j];
                }
                
                //Compongo la stringa appendendoci il carattere ottenuto dall if
                row = [NSString stringWithFormat:@"%@ %c",row,character];
            }
            //Stampo a video la stringa
            NSLog(@"%@",row);
        }
    
    
    NB: L' if per controllare se non è la prima colonna o riga, poteva essere sintetizzato in questo modo:
    
    (j > 0 && i != 0 ? ' ' : campo[i][j])
    
    Quindi se vuoi diminuire il codice (a discapito della leggibilità), potresti fare cosi:
    
    char campo [A][L] = {
            {'0','1','2','3','4','5','6'},
            {'A','A','A','A','A','A','A'},
            {'B','B','B','B','B','B','B'},
            {'C','C','C','C','C','C','C'},
            {'D','D','D','D','D','D','D'},
            {'E','E','E','E','E','E','E'},
            {'F','F','F','F','F','F','F'},
        };
        
    
        for (int i = 0; i < A; i++)
        {
            //La stringa che andrò a stampare nel log, inizialmente vuota
            NSString *row = @"";
            for (int j = 0; j < L; j++)
            {
                //Definisco il carattere che andrò ad aggiungere alla stringa da stampare
                char character;
                //Se non è la prima colonna e non è la prima riga
                
                //Compongo la stringa appendendoci il carattere ottenuto dall if
                row = [NSString stringWithFormat:@"%@ %c",row,(j != 0 && i != 0 ? ' ' : campo[i][j])];
            }
            //Stampo a video la stringa
            NSLog(@"%@",row);
        }
    

    Questo è il mio risultato:
    
    2013-10-30 10:41:14.863 prova[673:a0b]  0 1 2 3 4 5 6
    2013-10-30 10:41:14.865 prova[673:a0b]  A            
    2013-10-30 10:41:14.868 prova[673:a0b]  B            
    2013-10-30 10:41:14.869 prova[673:a0b]  C            
    2013-10-30 10:41:14.872 prova[673:a0b]  D            
    2013-10-30 10:41:14.873 prova[673:a0b]  E            
    2013-10-30 10:41:14.875 prova[673:a0b]  F            
    
  • Re: Aiuto Array Bidimensionale

    Ti ringrazio, non avevo pensato ad utilizzare una NSString.
  • Re: Aiuto Array Bidimensionale

    Volendo puoi farlo anche senza le stringhe se preferisci, però secondo me con la stringa è meglio:
    char campo [A][L] = {
            {'0','1','2','3','4','5','6'},
            {'A','A','A','A','A','A','A'},
            {'B','B','B','B','B','B','B'},
            {'C','C','C','C','C','C','C'},
            {'D','D','D','D','D','D','D'},
            {'E','E','E','E','E','E','E'},
            {'F','F','F','F','F','F','F'},
        };
        
        for (int i = 0; i < A; i++)
        {
            char row[A];
            
            for (int j = 0; j < L; j++)
            {
                char character;
                if (j != 0 && i != 0)
                {
                    character = ' ';
                }
                else
                {
                    character = campo[i][j];
                }
                row[j] = character;
            }
            
            NSLog(@"%c %c %c %c %c %c %c",
                  row[0],
                  row[1],
                  row[2],
                  row[3],
                  row[4],
                  row[5],
                  row[6]);
        }
Devi accedere o registrarti per scrivere nel forum
5 risposte