16: Let’s code!

A questo punto abbiamo messo parecchia carne al fuoco, e per fissare un po’ le idee sui costrutti principali del C introdotti finora, direi che potremmo rallentare un attimo e provare a metterci alla prova con alcuni programmi, più o meno semplici.
Di seguito vi propongo una serie di esercizi di programmazione, iniziando da cose semplici per poi tirarne in ballo di più complesse, con relative soluzioni svolte.
Buon divertimento!

Scrivere un programma che calcola la somma, la media, il massimo e il minimo di 10 numeri inseriti dall’utente.

Prima di tutto pensiamo alle variabili che ci servono: potremmo usare un vettore in cui salviamo i 10 numeri e su cui poi andiamo a lavorare. In realtà si potrebbe fare anche senza l’uso di un vettore (per evitare di occupare della memoria non necessaria), sotto vi riporto entrambe le soluzioni. Inoltre abbiamo bisogno di una variabile SOMMA, una variabile MEDIA e due variabili MAX e MIN in cui andremo a salvare i risultati (tutte integer tranne media che è float) e di un contatore per i cicli.

#include<stdio.h>
int main(){
int i, SOMMA=0, V[10], MIN=100000, MAX=0;
float MEDIA=0;

for (i=0; i<10; i++)       //inserisco i numeri in un vettore
{
printf("inserisci il %d- esimo numero\n", i+1);
scanf("%d", &V[i]);

}


for (i=0; i<10; i++)       //calcolo e stampo la somma e la media, il massimo e il minimo.
{
SOMMA=SOMMA+V[i];
if (V[i]>MAX) MAX=V[i];
if (V[i]>MIN) MIN=V[i];
}
MEDIA=SOMMA/10;
printf("la somma dei numeri e' %d, la loro media e'%f\n", SOMMA, MEDIA);
printf("il massimo dei numeri e' %d, il minimo e' %d\n", MAX, MIN);

return 0;

}

Senza l’uso del vettore:

#include <stdio.h>
int i=0, SOMMA=0,  NUM, MAX=0, MIN=100000;
float MEDIA;
int main (void) {
for(i=0; i<10; i++)
{
printf("inserisci un numero\n");
scanf("%d", &NUM);

SOMMA=SOMMA+NUM;
if (NUM<MIN) MIN=NUM; if (NUM>MAX) MAX=NUM;

}
MEDIA=SOMMA/i;

printf("il massimo e' %d, il minimo e' %d , la somma dei numeri e' %d, la media e' %f\n", MAX, MIN, SOMMA, MEDIA );

return 0;
}

Ora passiamo ad analizzare un altro algoritmo di ordinamento chiamato Counting sort: esistono decine di algoritmi di ordinamento, ovvero algoritmi che servono ad ordinare un vettore di numeri in ordine crescente, alcuni più intuitivi di altri. Abbiamo già visto un esempio di Bubble sort precedentemente in questa rubrica.



#include <stdio.h>
#include <stdlib.h>
int V[10];
int k=100;
int i=0, j=0;


int main(int argc, char** argv) {
    int VETT[k];
    int V2[10];
    
    for (i=0; i<k; i++)
    {
        VETT[i]=0;                 //inizializzo vetore ausiliaro a 0
    }
    
    for (i=0; i<10; i++)
    {
        
    
    printf("inserisci un numero");     //inserisco i numeri in V
    scanf("%d", &V[i]);
    }
    
    for (i=0; i<10; i++)            //incremento gli elementi di VETT
    {
        VETT[V[i]]++;
        
    }
    j=0;
    
    
    for (i=0; i<k; i++) //ordino i numeri in V2 { while ((VETT[i]>0) &&(j<10)) 
        {
            V2[j]=i;
            VETT[i]--;
            j++;
        }
    
    
    
    printf("i numeri in ordine crescente sono i seguenti:\n");
    
    for(j=0; j<10; j++)             //stampo V2
           
    {
        printf("%d, ", V2[j]);
    }
return 0;
}

Come ultimo esercizio vediamo un programma che calcola il determinante di una matrice 3×3. Il determinante è un numero che viene associato ad ogni matrice quadrata, ed è definito in modo ricorsivo. Per questo il suo calcolo è generalmente un’operazione abbastanza onerosa anche per il calcolatore, tanto più quanto più è grande la matrice. Dato che ancora non abbiamo parlato del concetto di ricorsione, invece di calcolare il determinante applicando la definizione, useremo la formula di Sarrus per le matrici 3×3.

Questo è il codice:


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

int M[3][3];
int i=0, j=0, det;


int main() {
  
    printf("QUESTO PROGRAMMA CALCOLA IL DETERMINANTE DI UNA MATRICE 3X3 INSERITA DALL'UTENTE  TRAMITE LA FORMULA DI SARRUS\n si inseriscano i numeri per righe\n");
           
    for (i=0; i<3; i++)                        //inizializzazione matrice
    {
        for (j=0; j<3; j++)
        {
            printf("inserisci un numero della matrice\n");
            scanf("%d", &M[i][j]);
        }
    }
    
    for (i=0; i<3; i++)   //stampa matrice inizializzata
    {
        for (j=0; j<3; j++)
        {
            printf("%d ", M[i][j]);
            
        }
        printf("\n");
    }
                                      //calcolo e stampa del determinante

    det=(M[1][1]*M[2][2]*M[3][3])+(M[1][2]*M[2][3]*M[3][1])+(M[1][3]*M[2][1]*M[3][2])-((M[3][1]*M[2][2]*M[1][3])+(M[3][2]*M[2][3]*M[1][1])+(M[2][1]*M[1][2]*M[3][3]));
    
    printf("il determinante della matrice inserita e' %d", det);
    
                
    
    
    

    return 0;
}

Per oggi è tutto, alla prossima!

Please follow and like us: