Confronto Vettore Matrice
Salve! Avrei bisogno di una mano con questo esercizio!
L'esercizio in questione è questo :

la prima parte non mi crea problemi, ciò che mi crea difficoltà è la parte in cui devo calcolare il punteggio, in quanto non riesco a capire come impostare i cicli per confrontare il vettore contente la combinazione vincente e la matrice. Io ho utilizzato due sottoprogrammi per la lettura della matrice e del vettore, potreste suggerirmi come impostare il sottoprogramma per calcolare il punteggio?
Grazie!
L'esercizio in questione è questo :

la prima parte non mi crea problemi, ciò che mi crea difficoltà è la parte in cui devo calcolare il punteggio, in quanto non riesco a capire come impostare i cicli per confrontare il vettore contente la combinazione vincente e la matrice. Io ho utilizzato due sottoprogrammi per la lettura della matrice e del vettore, potreste suggerirmi come impostare il sottoprogramma per calcolare il punteggio?
Grazie!
Risposte
Non sapendo come hai impostato il tuo codice ti mostro un'idea generale. Supponiamo di voler confrontare due vettori \(A\) e \(B\) ordinati di lunghezza rispettivamente \(m\) ed \(n\). Per farlo possiamo seguire la seguente logica:
1. \(i = 0, j = 0, c = 0\).
2. Se \( i \ge m \vee j \ge n \) allora passa al punto 3, altrimenti esci
3. Se \( A_i == A_j \) allora \( c = c + 1, i = i + 1, j = j + 1 \) e torna al punto 2
4. Se \( A_i < A_j \) allora \( i = i +1 \) altrimenti \( j = j + 1\) e torna al punto 2
Il contatore \(c\) contiene il numero di elementi comuni. Spero che l'idea sia chiara. Ti mostro un esempio con \( (1, 2, 3, 4) \) e \( (0, 3, 4, 5) \)
Si parte con \( i, j, c \) tutti uguali a zero e quindi si entra nel ciclo. A questo punto si confrontano i primi due elementi di entrambi e siccome il primo elemento del secondo è minore di quello del primo si incrementa \( j \). A questo punto si confrontano il primo elemento del primo array e il secondo del secondo. Questa volta è l'elemento del primo array ad essere minore e quindi si incrementa \(i\) (e si fa la stessa cosa anche nel ciclo successivo). A questo punto confrontiamo il terzo elemento del primo array con il secondo del secondo. Questi sono uguali per cui si incrementano tutti i contatori. Lo stesso si fa nel ciclo successivo e a questo punto \(i\) supera la dimensione del primo array per cui si esce e si ottiene che gli array hanno due elementi in comune.
1. \(i = 0, j = 0, c = 0\).
2. Se \( i \ge m \vee j \ge n \) allora passa al punto 3, altrimenti esci
3. Se \( A_i == A_j \) allora \( c = c + 1, i = i + 1, j = j + 1 \) e torna al punto 2
4. Se \( A_i < A_j \) allora \( i = i +1 \) altrimenti \( j = j + 1\) e torna al punto 2
Il contatore \(c\) contiene il numero di elementi comuni. Spero che l'idea sia chiara. Ti mostro un esempio con \( (1, 2, 3, 4) \) e \( (0, 3, 4, 5) \)
Si parte con \( i, j, c \) tutti uguali a zero e quindi si entra nel ciclo. A questo punto si confrontano i primi due elementi di entrambi e siccome il primo elemento del secondo è minore di quello del primo si incrementa \( j \). A questo punto si confrontano il primo elemento del primo array e il secondo del secondo. Questa volta è l'elemento del primo array ad essere minore e quindi si incrementa \(i\) (e si fa la stessa cosa anche nel ciclo successivo). A questo punto confrontiamo il terzo elemento del primo array con il secondo del secondo. Questi sono uguali per cui si incrementano tutti i contatori. Lo stesso si fa nel ciclo successivo e a questo punto \(i\) supera la dimensione del primo array per cui si esce e si ottiene che gli array hanno due elementi in comune.