Aiuto Progetto

di il
21 risposte

Aiuto Progetto

Salve ragazzi, mi son iscritto a questo forum perchè ho un problema con l'ultima parte del mio progetto, la parte e:

Dopo aver sviluppato un algoritmo per la simulazione di dinamica di cellule, considerando un array
2D 80x80, una cellula può essere bianca o nera. Una cellula bianca viene visualizzata con uno spazio (blank ‘ ‘), una cellula nera con ‘X’. All’inizio vi è solo una cellula nera, al centro della prima riga; tutte le altre cellule sono bianche. Sviluppare un algoritmo iterativo che, a partire dalla prima riga, a ogni passo aggiorna una sola riga dell’array, ovvero al secondo passo aggiorna la
seconda riga, al terzo passo aggiorna la terza riga e così via, fino all’ultima riga. Al passo
i-simo, la riga i-sima viene aggiornata considerando solo la riga (i-1)-sima, secondo la
seguente regola:
la cellula j della riga i-sima diventa nera se
a. nella riga (i-1)-sima la cellula j e la cellula j-1 sono nere e la cellula j+1 è
bianca;
b. nella riga (i-1)-sima la cellula j-1 è nera e le cellule j e j+1 sono bianche;
c. nella riga (i-1)-sima la cellula j e la cellula j+1 sono nere e la cellula j-1 è
bianca;
d. nella riga (i-1)-sima la cellula j+1 è nera e le cellule j e j-1 sono bianche;
e. la cellula j della riga i-sima diventa nera se nella riga (i-1)-sima la cellula j o la cellula j-1 o la cellula j+1 sono nere;
   void simulazionecellule(char cellule[80][80])
    {         
    
    int i=0; 
    int j=0;
    int r=80;
    int c=80;    
    char nera='X';
    char bianca=' ';
    
        
        for(i=0;i<r;i++) 
        {
           for(j=0;j<c;j++)
           {          
              cellule[i][j]=bianca;
           }
        }   
        
    //    solo la cellula a metà della prima riga è nera
         cellule[0][c/2]=nera;
             
     
         //inizio dalla prima riga
         
       for(i=0;i<r;i++) 
        {
           for(j=0;j<c;j++)
           {
            if(i!=0 && (j!=0 || j!=c) )
              {          
                //sono in una cella che può essere analizzata, 
                //cioè che mi permette di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
                
                if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione a
                  {
                    cellule[i][j]=nera;
                  }                    
                if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione b
                  {
                    cellule[i][j]=nera;
                  }   
                if(cellule[i-1][j]==nera && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione c
                  {
                    cellule[i][j]=nera;
                  }   
                if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione d
                  {
                    cellule[i][j]=nera;
                  }    
              }//if
           }//for su j
           
           if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79)//se sono ai passi indicati da stampare
                  {
                       //stampo a video l'array 
                       stampacellule(cellule);                       
                  }                        
        }    //for su i         
    }// fine function simulazionecellule
ora dovrei implementare il punto e, qualcuno può darmi qualche dritta? grazie mille in anticipo.

21 Risposte

  • Re: Aiuto Progetto

    La regola mi sembra chiara ... che dritta vorresti? Cosa non ti è chiaro? Cosa hai provato a scrivere?
  • Re: Aiuto Progetto

    oregon ha scritto:


    La regola mi sembra chiara ... che dritta vorresti? Cosa non ti è chiaro? Cosa hai provato a scrivere?
    come dovrei scrivere il punto e affinchè sia corretto.
  • Re: Aiuto Progetto

    Ma il punto (e) mi sembra molto simile ai precedenti... Se sei riuscito a fare gli altri, quali particolari difficoltà incontri in questo?
  • Re: Aiuto Progetto

    minomic ha scritto:


    Ma il punto (e) mi sembra molto simile ai precedenti... Se sei riuscito a fare gli altri, quali particolari difficoltà incontri in questo?
    dovrei fare tipo:
     if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==nera) //condizione e
                      {
                        cellule[i][j]=nera;
                      }   
  • Re: Aiuto Progetto

    Up!
  • Re: Aiuto Progetto

    E cosa non va nel codice che hai proposto? Se non funziona, cosa non va esattamente?
  • Re: Aiuto Progetto

    oregon ha scritto:


    E cosa non va nel codice che hai proposto? Se non funziona, cosa non va esattamente?
    allora io uso codeblocks, ho inserito il testo seguente nel main:
       
    
        #include <stdio.h>
        #include <stdlib.h>
    
        int simulazioneDinamicaCellule(char cellule[80][80])
        {
    
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        char nera='X';
        char bianca=' ';
    
        //inizializzo il mio array come indicato,  rendo tutte le cellulare bianche all'inizio
    
            for(i=0;i<r;i++)
            {
               for(j=0;j<c;j++)
               {
                  cellule[i][j]=bianca;
               }
            }
    
        //    solo la cellula a metà della prima riga è nera
             cellule[0][c/2]=nera;
    
             //ora riempio l'array come richiesto per simulare le cellule
             //parto dalla prima riga come richiesto
    
           for(i=0;i<r;i++)
            {
               for(j=0;j<c;j++)
               {
                if(i!=0 && (j!=0 || j!=c) )
                  {
                    //sono in una cella che può essere analizzata,
                    //cioè che mi permette di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
    
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione a
                      {
                        cellule[i][j]=nera;
                      }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione b
                      {
                        cellule[i][j]=nera;
                      }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione c
                      {
                        cellule[i][j]=nera;
                      }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione d
                      {
                        cellule[i][j]=nera;
                      }
                        if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==nera) //condizione e
                      {
                        cellule[i][j]=nera;
                      }
                  }//if
               }//for su j
    
               if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79)//se sono ai passi indicati da stampare
                      {
                           //stampo a video l'array
    
                stampaDinamicaCellule(cellule);
    
                      }
            }
             return 0;   //for su i
        }
    // fine function simulazioneDinamicaCellule
    
    int stampaDinamicaCellule(char cellule[80][80])
        {
    
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
    
           for(i=0;i<r;i++)
            {
               for(j=0;j<c;j++)
                {
                   printf("%c",cellule[i][j]);
               }
                printf("\n");
            }
              system("pause");
    
              return 0;
        }
    
    //function
    
    mi esce: g++ -o bin/Debug/Simulazione_Dinamica_Cellule obj/Debug/main.o
    Undefined symbols for architecture x86_64:
    "_main", referenced from:
    implicit entry/start for main executable
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • Re: Aiuto Progetto

    Ma è la prima volta che scrivi un programma?
    Affinché il tuo codice parta, devi scrivere una funzione "main" del tipo
    int main(){ ... }
    che è la prima ad essere chiamata..
  • Re: Aiuto Progetto

    tuixte ha scritto:


    Ma è la prima volta che scrivi un programma?
    Affinché il tuo codice parta, devi scrivere una funzione "main" del tipo
    int main(){ ... }
    che è la prima ad essere chiamata..
    No, ma:
    
    int main();
    
    void stampaDinamicaCellule(char cellule[80][80])
    {
        
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                printf("%c",cellule[i][j]);
            }
            printf("\n");
        }
        system("pause");
    }
    
    void simulazioneDinamicaCellule(char cellule[80][80])
     {
       
        
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        char nera='X';
        char bianca=' ';
        
        //inizializzo il mio array come indicato,  rendo tutte le cellulare bianche all'inizio
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                cellule[i][j]=bianca;
            }
        }
        
        //    solo la cellula a metà della prima riga è nera
        cellule[0][c/2]=nera;
        
        //ora riempio l'array come richiesto per simulare le cellule
        //parto dalla prima riga come richiesto
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                if(i!=0 && (j!=0 || j!=c) )
                {
                    //sono in una cella che può essere analizzata,
                    //cioè che mi permette di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
                    
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione a
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione b
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione c
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione d
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==nera) //condizione e
                    {
                        cellule[i][j]=nera;
                    }
                }//if
            }//for su j
            
            if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79)//se sono ai passi indicati da stampare
            {
                //stampo a video l'array
                stampaDinamicaCellule(cellule);
            }
        }  
    }
    Ho quel problema
  • Re: Aiuto Progetto

    Ti ripeto, manca il codice del main...
  • Re: Aiuto Progetto

    tuixte ha scritto:


    Ti ripeto, manca il codice del main...
    ora non ho errori, ma non mi stampa a video la simulazione:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        }
        void stampaDinamicaCellule(char cellule[80][80])
    {
        
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                printf("%c",cellule[i][j]);
            }
            printf("\n");
        }
        system("pause");
    }
     
    void simulazioneDinamicaCellule(char cellule[80][80])
     {
       
        
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        char nera='X';
        char bianca=' ';
        
        //inizializzo il mio array come indicato,  rendo tutte le cellulare bianche all'inizio
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                cellule[i][j]=bianca;
            }
        }
        
        //    solo la cellula a metà della prima riga è nera
        cellule[0][c/2]=nera;
        
        //ora riempio l'array come richiesto per simulare le cellule
        //parto dalla prima riga come richiesto
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                if(i!=0 && (j!=0 || j!=c) )
                {
                    //sono in una cella che può essere analizzata,
                    //cioè che mi permette di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
                    
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione a
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione b
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione c
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione d
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==nera) //condizione e
                    {
                        cellule[i][j]=nera;
                    }
                }//if
            }//for su j
            
            if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79)//se sono ai passi indicati da stampare
            {
                //stampo a video l'array
                stampaDinamicaCellule(cellule);
            }
        }    //for su i
    }// fine function simulazioneDinamicaCellule
  • Re: Aiuto Progetto

    Perché continui a non scrivere il codice del main, cioè quello che viene eseguito..
  • Re: Aiuto Progetto

    tuixte ha scritto:


    Perché continui a non scrivere il codice del main, cioè quello che viene eseguito..
    Scusami..questa è la versione attuale, senza errori, ma non mi compare la matrice...se è sempre lo stesso errore, se mi puoi dare qualche dritta, grazie.
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        }
    
    void simulazioneDinamicaCellule(char cellule[80][80])
     {
       
        
        int i=0; //mi indicherrano le mie righe
        int j=0;//mi indicheranno le mie colonne
        int r=80;
        int c=80;
        char nera='X';
        char bianca=' ';
        
        //inizializzo il mio array come indicato,  rendo tutte le cellulare bianche all'inizio
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                cellule[i][j]=bianca;
            }
        }
        
        //    solo la cellula a metà della prima riga è nera
        cellule[0][c/2]=nera;
        
        //ora riempio l'array come richiesto per simulare le cellule
        //parto dalla prima riga come richiesto
        
        for(i=0;i<r;i++)
        {
            for(j=0;j<c;j++)
            {
                if(i!=0 && (j!=0 || j!=c) )
                {
                    //sono in una cella che può essere analizzata,
                    //cioè che mi permette di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
                    
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione a
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==bianca) //condizione b
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione c
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==bianca && cellule[i-1][j-1]==bianca && cellule[i-1][j+1]==nera) //condizione d
                    {
                        cellule[i][j]=nera;
                    }
                    if(cellule[i-1][j]==nera && cellule[i-1][j-1]==nera && cellule[i-1][j+1]==nera) //condizione e
                    {
                        cellule[i][j]=nera;
                    }
                }//if
            }//for su j
            
            if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79)//se sono ai passi indicati da stampare
            {
                int i=0; //mi indicherrano le mie righe
                int j=0;//mi indicheranno le mie colonne
                int r=80;
                int c=80;
                //stampo a video l'array
                for(i=0;i<r;i++)
                {
                    for(j=0;j<c;j++)
                    {
                        printf("prova %c", cellule[i][j]);
                    }
                    printf("\n");
                }
            }
        }    //for su i
    }//
  • Re: Aiuto Progetto

    Si, continui a fare lo stesso errore.. Ma sei sicuro di aver già scritto in C/C++?

    Il codice che viene eseguito è quello contenuto nel main. Non importa quante funzioni ci metti: ciò che viene eseguito è sempre e solo quello nel main.
    Il tuo main è
    int main(){ }
    Il che significa: niente. Dunque, il programma esegue: niente.
    All'interno del main devi scrivere del codice, qualcosa, ciò che vuoi fare, che poi andrà a chiamare le tua funzione simulazioneDinamicaCellule.
Devi accedere o registrarti per scrivere nel forum
21 risposte