Fondamenti di programmazione

Corso php a cura del prof. Pietro De Paolis

Cicli e contatori

Cominciamo dai contatori. I contatori sono delle variabili al cui interno memorizziamo dei numeri; di solito usiamo numeri interi in quanto vogliamo contare quante volte avviene un determinato evento; ma possiamo usare anche valori decimali. Il valore del contatore può essere aumentato o diminuito di una certa quantità:

Esempio

$t = 1;

$t ++;     incremento di 1 il contatore $t che si porta a: 1+1 =2;

$t ++;     incremento di 1 il contatore $t che si porta a: 2+1 =3;

$t ++;     incremento di 1 il contatore $t che si porta a: 3+1 =4;

e così via.

Esercizio

Visualizzare lo stato di un contatore che conti da 1 a 5.

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per visualizzare lo stato di un contatore.<br><br>");

$t = 1;

print ("Ora il contatore t si trova al valore $t .<br>");

$t++;

print ("Ora il contatore t si trova al valore $t .<br>");

$t++;

print ("Ora il contatore t si trova al valore $t .<br>");

$t++;

print ("Ora il contatore t si trova al valore $t .<br>");

$t++;

print ("Ora il contatore t si trova al valore $t .<br>");

 

?>

<body>

</html>

 

Salviamo il programma con il nome di contatore1.php e vedremo:

Il contatore funziona; ad ogni esecuzione della istruzione:

st++;

il contatore viene incrementato di 1.

Possiamo anche contare per -1 se scriviamo:

$t--;

Oppure contare di 2 in 2 se scriviamo:

$t= $t+2;

equivalente a

$t+=2;

o per -5 se scriviamo:

$t = $t-5;

equivalente a

$t-=5;

 

I cicli

Per ciclo intendiamo una parte di un programma che deve essere ripetutto un certo numero di volte. Noi abbiamo visto già un programma nel quale una certa istruzione veniva ripetuta un certo numero di volte.

Ricordiamo il seguente:

<?php

print ("Programma per calcolare lo stipendio annuo lordo.<br><br>");

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

$rigo1 = fgets ($fp, 4096);

$rigo2 = fgets ($fp, 4096);

$rigo3 = fgets ($fp, 4096);

$rigo4 = fgets ($fp, 4096);

fclose($fp);

?>

 

In questo programma che leggeva un file di nome stipendi.txt in cui avevamo memorizzato la tabella degli stipendi di un professore di scuola superiore, notiamo che la istruzione:

$rigo1 = fgets ($fp, 4096);

viene ripetuta quattro volte. Se non ci fossero i cicli noi dovrebbero ripetere nel programma la stessa istruzione un notevole numero di volte quando i dati aumentano ed il programma diventerebbe troppo lungo. Con l'uso dei cicli possiamo scrivere la istruzione:

$rigo1 = fgets ($fp, 4096);

una volta sola ed indicare il numero di volte che il computer la deve eseguire.

La istruzione dei cicli è la istruzione for. La istruzione for ha una struttura del genere:

for ( $t=1; $t<6; $t++) print ("Il valore di t è $t <br>");

Importante è quello che scrivo tra parentesi tonde; vi sono tre espressioni separate da un punto e virgola. La prima espressione deve indicare il valore iniziale di una variabile che scegliamo come contatore. Nel nostro caso scrivendo:

$t=1;

poniamo il valore iniziale del contatore ad 1.

La seconda espressione indica la condizione di controllo che serve per interrompere il ciclo. Se la seconda espressione è verificata il ciclo viene interrotto ed il programma prosegue con la istruzione successiva al ciclo. Nel nostro caso avendo scritto:

$t<6;

il ciclo si interrompe quando il contatore $t raggiunge il valore 5, cioè viene eseguito 5 volte e alla quinta volta si interrompe; la sesta volta non viene eseguita, perché deve essere minore di 6 per essere eseguita.

La terza espressione:

$t++

indica di quanto dobbiamo incrementare il contatore; nel nostro caso lo incrementiamo di 1.

Proviamo, allora il seguente programma:

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per visualizzare lo stato di un contatore.<br><br>");

for ($t=1; $t<6; $t++) print ("Ora il contatore t si trova al valore: $t .<br>");

?>

<body>

Questo programma esegue la istruzione print cinque volte; ed ogni volta stampa il valore che ha il contatore. Salviamolo con il nome di contatore2.php ed eseguiamolo; vedremo:

Se dobbiamo eseguire più istruzioni nello stesso ciclo usiamo le parentesi graffe.

Esempio

for ($t=1; $t<6; $t++) {

                                    print ("Ora il contatore t si trova al valore: $t .<br>");

                                 if ($t==5) print (ora il contatore è cinque.<br>");   

                                };

Quando il contatore raggiunge il valore cinque esegue una seconda print; altrimenti non la esegue. Ricordiamo che al termine del ciclo il contatore si trova  al valore di 6 e resta sempre a 6, come se fosse una variabile normale.

La parentesi { la facciamo con Alt 123.

La parentesi } la facciamo con Alt 125.

Vediamo ora di utilizzare  la istruzione for per leggere una serie di dati da un file e stampare il valore che ha letto.

Prendiamo allora il vecchio programma che avevamo salvato come letturafile.php:

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per calcolare lo stipendio annuo lordo.<br><br>");

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

$matrice[1] = fgets ($fp, 4096);

$matrice[2] = fgets ($fp, 4096);

$matrice[3] = fgets ($fp, 4096);

$matrice[4] = fgets ($fp, 4096);

fclose($fp);

print (" Se gli anni di servizio sono $matrice[1] lo stipendio annuo lordo è €  $matrice[2] <br><br>");

print (" Se gli anni di servizio sono $matrice[3]  lo stipendio annuo lordo è €  $matrice[4] <br><br>");

?>

<body>

</html>

 

e modifichiamolo usando opportunamente la istruzione for in questo modo:

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per calcolare lo stipendio annuo lordo.<br><br>");

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

for ($t=1; $t<8; $t++) {

                                $matrice1[$t] = fgets ($fp, 4096);

                                $matrice2[$t] = fgets ($fp, 4096);

                                print (" Se gli anni di servizio  sono $matrice1[$t] lo stipendio annuo lordo è €  $matrice2[$t] . <br><br>");

                                };

fclose($fp);

?>

<body>

</html>

 

Vediamo la for:

for ($t=1; $t<8; $t++) 

il contatore $t viene posto ad 1; si verifica che il valore sia inferiore ad 8; si incrementa di 1 il contatore. Il valore 8 è stato preso in quanto le righe del file da leggere dalla tabella:

anni di servizio Docente laureato istituti sec. II° 
da 0 a 2
 19082.50
da 3 a 8
 20163.59
da 9 a 14
 21893.39
da 15 a 20
 24027.25
da 21 a 27
 26745.11
da 28 a 34
 28525.83
da 35 a
 29945.29

 

sono 7, cioè 8-1, in quanto il contatore esegue 7 volte e non esegue la ottava volta. Notiamo che abbiamo usato due matrici:

$matrice1[$t] = fgets ($fp, 4096);

$matrice2[$t] = fgets ($fp, 4096);

$matrice1 legge la prima riga del file stipendi.txt e $matrice2 legge la seconda riga del file. Questa volta l'indice della matrice lo abbiamo fatto coincidere col valore del contatore $t, in modo da razionalizzare le scelte; in tal modo $matrice1 contiene la prima colonna della tabella; $matrice2 contiene la seconda colonna della tabella. Inoltre il valore del contatore $t corrisponde alla riga corrispondente della tabella; cioè se $t è 1 in $matrice1[$t] viene memorizzata la riga 1 della colonna 1; mentre in $matrice2[$t] viene memorizzata la riga 1 della colonna 2.

Salviamo il programma come letturafile2.php ed eseguiamolo; otteniamo:

cioè la lettura e la stampa della intera tabella.

 

Corso di programmazione in PHP

Dizionario php

 

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica