In questa lezione studieremo la gestione di una coda in C.
Una coda (o queue) è una struttura dati astratta che, al contrario della pila, utilizza una politica di tipo FIFO. Ovvero il primo elemento ad entrare è anche il primo ad uscire.
Nella coda quindi l’inserimento avviene ad una estremità (coda), mentre la cancellazione e il prelievo dei dati avvengono all’altra estremità, cioè dalla testa.
Gestione di una coda in C mediante un array
Anche la gestione della coda può essere realizzata appoggiandosi ad un array.
Utilizzeremo inoltre una variabile fine per indicare l’ultima posizione occupata.
Dunque per inizializzare o svuotare la coda assegniamo all’indice fine il valore -1.
Quando facciamo l’operazione Pop dobbiamo spostare di una posizione a sinistra gli altri elementi.
La funzione Push aggiunge un nuovo elemento in coda e aggiorna l’indice fine.
Ecco dunque il semplice algoritmo che realizza le operazioni di inserimento ed estrazione di un elemento in un coda in c. Inoltre implementeremo le operazioni di stampa e svuotamento della coda.
Anche in questo esercizio, proposto principalmente a scopo didattico, facciamo uso delle variabili globali.
Ecco dunque il listato completo sulla gestione di una coda in C:
#include <stdio.h>
#define MAX 3
int fine;
int Coda[MAX];
int menu_scelta(void)
{
int selezione = 0;
do
{
printf("\n" );
printf("\n1 -> Aggiungi un dato" );
printf("\n2 -> Estrai un dato");
printf("\n3 -> Svuota pila");
printf("\n4 -> Stampa pila");
printf("\n5 -> Esci");
printf("\n" );
printf("\nEffettua una scelta: " );
scanf("%d", &selezione );
}
while (selezione<1 || selezione>5);
return selezione;
}
void Push() {
int n;
if(fine==MAX)
printf("\n -> Coda piena" );
else {
printf("\nInserisci un dato: " );
scanf("%d", &n);
Coda[fine++]=n;
}
}
void Pop() {
int i;
if(fine==-1)
printf("\n - Coda vuota" );
else {
printf("%d", Coda[0]);
for(i=1;i<=fine;i++)
Coda[i-1]=Coda[i];
fine--;
}
}
void Clear() {
fine=-1;
printf("\n -> Coda svuotata" );
}
void Print() {
int i;
if(fine==-1)
printf("\n -> Coda vuota" );
else
for(i=0;i<fine;i++)
printf("indice i: %d elemento %d\n", i, Coda[i]);
}
int main(){
int scelta;
while((scelta=menu_scelta())!=5){
switch(scelta){
case 1:
Push();
break;
case 2:
Pop();
break;
case 3:
Clear();
break;
case 4:
Print();
break;
case 5:
break;
}
}
return 0;
}
Chiaramente questo è solo un esempio di gestione di una coda in C, prossimamente proporrò altri esercizi.
Vi mostro adesso lo stesso procedimento con Scratch 3:
Quindi innanzitutto, dopo il blocco di inizio, chiediamoin input un numero. Dopo memorizziamo nella variabile numerola risposta, stiamo cioè assegnando un valore inserito da tastiera alla variabile numero.
Poi creiamo una variabile precedentee gli assegniamo il valore di numero – 1. Poi una variabile successivoe gli assegniamo il valore di numero +1.
Infine con il blocco dire visualizziamo in output i risultati così ottenuti.
Non dimentichiamoci di inserire il blocco ferma tutto per terminare l’algoritmo.
Per chi volesse visionare il codice in C++, può notare come non sia per niente difficile tradurre un diagramma a blocchi.
#include <iostream>
using namespace std;
main() {
int n,s,p;
cout<<"Inerisci il numero: ";
cin>>n;
s=n+1;
p=n-1;
cout<<"Il successivo e': "<<s<<endl;
cout<<"Il precedente e': "<<p;
}
Secondo esempio sui successivi di un numero
Realizziamo un altro esempio di algoritmo, molto simile al precedente, che calcola i successivi tre numeri di un numero preso in input.
L’esempio utilizza quattro variabili:
numero il numero preso in input
successivoil numero +1
successivo_due il numero +2
successivo_tre il numero +3
Dopo averli calcolati, visualizziamo in output il risultato.
Lo stesso programma lo sviluppiamo in C++:
#include <iostream>
using namespace std;
main() {
int n,s1,s2,s3;
cout<<"Inerisci il numero: ";
cin>>n;
s1=n+1;
s2=n+2;
s3=n+3;
cout<<"I tre numeri successivi sono: "<<s1<<"\t"<<s2<<"\t"<<s3<<"\t"<<endl;
}
In queste lezioni abbiamo approfondito l’uso delle variabili, nelle prossime lezioni presenteremo degli elementi nuovi. In particolare impareremo a inserire degli sfondi e ad utilizzare altri sprite.
In questa lezione proponiamo un semplice esercizio per lo sviluppo dell’area del cerchio in Scratch 3.
L’algoritmo è molto semplice, ed è stato già sviluppato con i diagrammi a blocchi, se volete potete consultarlo al seguente link: area del cerchio.
Quindi prendiamo in input il raggio e calcoliamo l’area con la formula: areaCerchio = raggio * raggio * piGreco.
Script per il calcolo dell’area del cerchio in Scratch 3
Ecco dunque il diagramma a blocchi completo:
I passaggi da seguire per il calcolo dell’area del cerchio in Scratch 3, sono questi:
1 – Inizio: andiamo su situazionie scegliamo quando si clicca sulla bandiera verde.
2 – Istruzione: andiamo su sensorie scegliamo il blocco chiedi ‘Come ti chiami?’ e attendi. Sostituiamo al posto di Come ti chiami? il testo Inserisci il raggio.
3 – Creazione di una variabile: andiamo su variabilie creiamo la variabile di nome raggio.
4 – Istruzione: trasciniamo il blocco porta raggio a.
5 – Risposta: inseriamo il blocco risposta che si trova nella sezione sensori.
6 – Creazione di una variabile: andiamo su variabili e creiamo la variabile di nome piGreco. In realtà piGreco in questo caso è una costante, ma in Scratch vengono creati allo stesso modo.
7 – Istruzione: trasciniamo il blocco porta piGreco a 3.14
8 – Creazione di una variabile: andiamo su variabilie creiamo la variabile di nome areaCerchio.
9 – Istruzione: trasciniamo il blocco porta areaCerchio a.
10 – Operatore: trasciniamo due volte l’operatore con il *.
11 – Variabili: trasciniamo le variabili raggio e piGreco all’interno degli spazi vuoti del blocco operatore *.
12 – Istruzione: andiamo su sensorie scegliamo il blocco chiedi ‘Come ti chiami?’ e attendi. Sostituiamo al posto di Come ti chiami? il testo con la variabile area.
13 – Fine: andiamo su controllo e scegliamo ferma tutto.
Modifichiamo adesso l’algoritmo includendo anche il calcolo della circonferenza in Scratch 3 e inserendo le unità di misura.
Programma C++
Allego il programma per il calcolo dell’area e della circonferenza del cerchio in C++, per chi volesse consultarlo.