Esercizio con le matrici in C

Esercizio con le matrici in C

Proponiamo un semplice esercizio con le matrici in C.

Si vuole realizzare un programma che richieda all’utente di inserire i voti corrispondenti a 7 prove sostenute in Matematica durante l’anno da 6 studenti della classe e calcoli la media di ogni prova e la media di ogni studente.

Ogni linea deve contenere pertanto i voti dello studente e la rispettiva media; quindi ci saranno 7 righe e 8 colonne. L’ottava colonna dunque conterrà la media delle prove sostenute da ciascun studente e la settima riga conterrà la media di ciascuna prova di tutti gli studenti.

Es: Nella riga 1 inserisco quindi i voti delle 7 prove sostenute nell’anno da uno studente.

Studente 1: 8, 10, 7, 7, 9, 7, 8

Il programma dovrà aggiungere la media nell’ottava colonna cioè:

Studente 1: 8, 10, 7, 7, 9, 7, 8, 8

Allo stesso modo per le altre righe.

Facciamo lo stesso discorso per le colonne. Nella prima colonna ci saranno tutti i voti della prima prova sostenuta da ciascun studente, aggiungiamo nell’ultima riga la media.

Prova1
studente16
studente2 7
studente3 8
studente4 9
studente5 10
studente6 8
media8

Continuiamo così per ogni colonna.

Procedimento algoritmo esercizio con le matrici in C

Innanzitutto occorre definire il numero di righe e di colonne. Come dicevamo prima aggiungeremo una riga e una colonna per la media.

Quindi:

#define M 8
#define N 7

Inseriamo i dati come abbiamo già spiegato negli esempi precedenti e dopo calcoliamo la media. L’unico accorgimento è quello di fermarsi ad N-1 ed M-1 in quanto dobbiamo inserire 6 righe e 7 colonne, l’ultima riga e l’ultima colonna è riservata alla media.

Per fare la media di ciascun studente, cioè la media per riga, basta scorrere la matrice con i due cicli, avendo l’accortezza di inizializzare la somma a zero e sommare tutti gli elementi della riga:

a[i][M-1]=a[i][M-1]+a[i][j];

e dopo occorre dividere per n-1

a[N-1][j]=a[N-1][j]/(N-1);

Lo stesso ragionamento per la colonna.

Ecco il listato completo.

#include<stdio.h>
#define M 8
#define N 7

int main(){
	float a[N][M];
	int i,j;
		
	printf("\nInseriamo i voti nella matrice \n");
	for(i=0;i<N-1;i++)
	    for(j=0;j<M-1;j++) {
		printf("Studente %d \tprova %d: ", i, j);
		scanf("%f", &a[i][j]);
	    }
				
	printf("\nCalcolo media delle prove \n");
	for(j=0;j<M;j++) {
	    a[N-1][j]=0;
	    for(i=0;i<N-1;i++)
	       a[N-1][j]=a[N-1][j]+a[i][j];
	    a[N-1][j]=a[N-1][j]/(N-1);
	}
		
	printf("\nCalcolo media studente \n");
	for(i=0;i<N-1;i++){
	     a[i][M-1]=0;
	     for(j=0;j<M-1;j++) 
		a[i][M-1]=a[i][M-1]+a[i][j];
	     a[i][M-1]=a[i][M-1]/(M-1);
	}
		
	printf("\nStampiamo i dati \n");
	for (i=0;i<N;i++) {	
	    printf("\n");
	    for(j=0;j<M;j++) 
	      printf("\t%7.2f", a[i][j]);				
	}				
}

Questo è solo un esempio di possibile risoluzione dell’esercizio con le matrici in C.

Alcuni link utili:

Somma elementi diagonale principale di una matrice

Esempio sulla somma degli elementi cornice esterna

Sommare due matrici

Somma dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C


Selection sort con Scratch

Selection sort con Scratch

Oggi sviluppiamo l’algoritmo selection sort con Scratch.
Infatti anche con Scratch è possibile implementare anche gli algoritmi di ordinamento che di solito si sviluppano con i vari linguaggi di programmazione.

Ragioniamo come abbiamo anche fatto per il selection sort in C.


Come sviluppare l’algoritmo selection sort con Scratch?

Occorre premettere che per realizzare questo algoritmo bisogna saper utilizzare le liste.

Liste in Scratch

Le liste ricordiamo sono dei contenitori che permettono di contenere più valori alla volta e di organizzare i dati in maniera sequenziale.
È inoltre possibile aggiungere elementi alla lista durante l’esecuzione di un programma.
Per accedere agli elementi della lista dobbiamo accedere alla sua posizione.


Procedimento algoritmo selection sort con Scratch

Occorre innanzitutto creare la lista, in questo caso di numeri, che chiamo senza troppa fantasia numeri!

lista numeri iin scratch

Chiedo dunque quanti elementi inserire e memorizzo la risposta in una variabile che chiamo N.
Successivamente con un ciclo popolo la mia lista di numeri.

In che modo?

Creo una variabile contatore che chiamo conta che ha la funzione di tenere traccia dei numeri che a mano a mano verranno inseriti. Tale variabile deve essere inizializzata a zero, si incrementerà per ogni inserimento e si fermerà quando raggiungerà N, ovvero il numero di elementi richiesti.

All’interno del ciclo chiedo ogni volta di inserire un numero.

In questo modo ho popolato la mia lista con dei numeri a caso che ho inserito da tastiera.

Elenco sotto le variabili che ho utilizzato. Le variabili min, j e temp verranno spiegate più avanti.

variabili utilizzate per selection sort in scratch

Chiedo dunque di visualizzare gli elementi della lista con una semplice lettura della lista stessa.

Utilizzo lo stesso contatore che inizializzo nuovamente a zero e creo un ciclo che consentirà di leggere tutti gli elementi della lista, grazie al comando delle liste di Scratch: elemento …. di numeri, che visualizzerà prima l’elemento con indice 0, poi l’elemento con indice 1 e così via.

lettura lista scratch

Adesso dobbiamo ordinare l’array e per farlo procediamo in questo modo.

Ci servono le variabili:

  • min
  • j
  • temp

Assegniamo a min il valore di conta, così da farlo partire dalla posizione zero e a j assegniamo il valore di conta + 1, in modo tale da fare partire l’indice dalla posizione 1.

Poi scorriamo la lista e se l’elemento di posizione j della lista è minore dell’elemento di posizione min allora assegno a min il valore j. Altrimenti vado avanti incrementando j e utilizzando una variabile temporanea che ad esempio chiamo temp per effettuare lo scambio.

Non ci resta che visualizzare l’array ordinato.

Allego lo script nell’immagine sotto.

selection sort in scratch

Questo è solo un esempio di sviluppo dell’algoritmo selection sort con Scratch, proponete pure la vostra nei commenti sotto.

Alcuni link utili

Selection sort in C

Array o vettori

Quick sort in linguaggio C

Merge sort in linguaggio C

Insertion Sort in lingaggio C