Anteprima
Vedrai una selezione di 1 pagina su 4
Algoritmo per la simulazione dinamica di cellule Pag. 1
1 su 4
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ALGORITMO PER LA SIMULAZIONE DINAMICA DI "CELLULE"

Questo è un programma che simula il comportamento di alcune cellule, che si dividono in cellule bianche e cellule nere con particolari condizioni.

Si consideri un array 2D 40x40. Ogni elemento dell'array è detto 'cellula'. 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 60-simo posto 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

La cella diventa nera se:

  1. nella riga (i-1)-sima la cellula j e la cellula j-1 sono nere e la cellula j+1 è bianca;
  2. nella riga (i-1)-sima le cellule j-1 e j+1 sono nere e la cellula j è bianca;
  3. nella riga (i-1)-sima la cellula j e la cellula j+1 sono nere e la cellula j-1 è bianca;
  4. nella riga (i-1)-sima la cellula j è nera e le cellule j+1 e j-1 sono bianche;
  5. nella riga (i-1)-sima la cellula j+1 è nera e le cellule j e j-1 sono bianche;

//Main.c

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

//All'interno del main sono andato ad inserire la condizione iniziale
//della matrice per poi stamparla
int main() {
    int i=0, j;
    int righe = 40, colonne = 40; //Variabili che indicano il numero di righe e colonne della matrice
    char v1[40][40]; //Dichiarazione della matrice
    
    for (i=0; i<righe; i++) { //Ciclo for annidato che permette lo scorrimento di tutta la matrice
        for(j=0; j<colonne; j++) {
            v1[i][j] = ' '; //Stampo in tutte le
        }
    }
    
    //Stampa della matrice
    for (i=0; i<righe; i++) {
        for(j=0; j<colonne; j++) {
            printf("%c", v1[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

posizioni della matrice un '-' che indica che la cellula in quella posizione è BIANCA

v1[0][19] = 'X'; //TRANNE IN QUESTA POSIZIONE, v1[0][19], CHE RAPPRESENTA LA CONDIZIONE INIZIALE DELLA MATRICE, QUI VIENE STAMPATA UNA 'X', //CHE INDICA CHE LI LA CELLULA È NERA

stampa_matrice(v1); //Richiamo della function stampa matrice, che stamperà la trice iniziale

simulazione_cellule(v1); //Richiamo della function simulazione cellule che permetterà invece di stampare, sempre dopo comando dell'utente, //la stessa matrice ma aggiornata di una riga.

#include "header.h"
/*Function che permette di stampare la matrice 40x40*/
int stampa_matrice(char v1[40][40]){
  int i=0, j;
  int n = 40; //Variabile che indica la quantità di righe della matrice
  int m = 40; //Variabile che indica la quantità di colonne della matrice
  system("cls"); //Funtion che permette di pulire lo schermo prima di cominciare a
printf("Al passo %d-esimo, la matrice e': \n",i);
for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
        printf(" %c", v1[i][j]);
    }
    printf("\n");
}
system("pause");
return 0;
}

/* Function che, stipulate determinate condizioni, permette di stampare la
stessa matrice iniziale, ma con i valori delle cellule aggiornate, cioè,
ad ogni passo i-esimo, viene aggiornata solo una riga alla volta.
Ricordiamo che con la 'X' indico una cellula NERA, con un ' ' una
cellula BIANCA */
int simulazione_cellule(char v1[40][40]) {
    int i, j;
    int righe = 40;
    int colonne = 40;

    /* Ciclo for annidato che permette di scorrere tutta la matrice.
    Il For più esterno va da 1 fino alla riga massima perché deve
    sostanzialmente continuare */

/*ad aggiornare dalla riga 1 poichè la riga 0 è già sistemata nella condizione iniziale della matrice.
Il For interno invece comincia sempre da 1 ma termina a 39, cioè la colonna massima. */
for (i=1;i<righe;i++){
    for(j=0;j < 39;j++) //Questi due cicli for ANNIDATI mi permettono di controllare la riga precedente e le colonne precedenti e seguenti della cella di riferimento
    {
        /*QUANDO SI SCRIVE v1[i-1][...] SI FA RIFERIMENTO ALLA RIGA PRECEDENTE, POICHÈ SOLO TRAMITE LA CONDIZIONE DELLE CELLULE NELLA RIGA PRECEDENTE, SI POSSONO VERIFICARE LE CONDIZIONI DELLA RIGA CORRENTE */
        if(v1[i-1][j]=='X' && v1[i-1][j-1]=='X' &&v1[i-1][j+1]==' ') //CONDIZIONE A
        {
            v1[i][j]='X';
        } 
        if(v1[i-1][j]==' ' && v1[i-1][j-1]=='X' && v1[i-1][j+1]==' ') //CONDIZIONE B
        {
            v1[i][j]='X';
        } 
        if(v1[i-1][j]=='X' && v1[i-1][j-1]==' ' &&


v1[i-1][j+1]=='X') //CONDIZIONE C{
    v1[i][j]='X';
} 
if(v1[i-1][j]==' ' &&v1[i-1][j-1]==' ' && v1[i-1][j+1]=='X') //CONDIZIONE D{
    v1[i][j]='X';
}

Dettagli
Publisher
A.A. 2020-2021
4 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher rggctt di informazioni apprese con la frequenza delle lezioni di Programmazione I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Napoli - Parthenope o del prof Giunta Giulio.