36
Esempio - Array Bidimensionale
Definizione del problema: Inserire i valori degli elementi di un array bidimensionale di interi, composto da 5 righe e 7 colonne, e visualizzare il contenuto dell’array così ottenuto, ordinato per righe
Definizione dei dati del problema:
I: il valore di ciascun elemento dello array bidimensionale Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
U: l’array bidimensionale ‘riempito’ con i valori degli elementi
Pu: nessuna
Esempio
Nome variabile Descrizione Tipo
MAT array bidimensionale di interi INT
MAT(I) elemento dell’array INT
Nome variabile Descrizione Tipo
MAT array di interi con i valori immessi INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
38
Esempio - Array Bidimensionale
Descrizione del metodo di elaborazione:
Si legge il valore di ciascun elemento da immettere, immettendo i valori per riga.
Si visualizza il contenuto dell’array, visualizzando i valori immessi per righe
Esempio - il programma C
#include<stdio.h>
main() {
const cardR=5, cardC=7;
int MAT[cardR] [cardC], i,j;
// Legge in input tutti gli elementi della matrice for (i= 0; i< cardR; i++)
for (j= 0; j< cardC; j++) {
printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("% d", &MAT[i][j]);
}
// Stampa tutti gli elementi della matrice for (i= 0; i< cardR; i++)
for (j= 0; j< cardC; j++)
printf(”(%d, %d) = % d\n",i,j, MAT[i][j]);
40
Esempio
Definizione del problema: Verificare se in un array
bidimensionale di interi, composto da 5 righe e 7 colonne, esiste un determinato valore dato in input. Se questo valore esiste indicare la posizione, riga e colonna, dell’elemento che lo contiene.
Definizione dei dati del problema:
I: il valore di ciascun elemento; il valore da cercare Pi: il numero degli elementi da inserire non può essere maggiore della cardinalità dell’array
U: la posizione, indici di riga e colonna, dell’elemento con valore pari a quello cercato
Pu: nessuna
Esempio
Descrizione del metodo di elaborazione:
Si legge, in ordine di riga, il valore di ciascun elemento da immettere.
Si immette il valore da cercare nell’array bidimensionale.
Si verifica se tale valore esiste nell’array:
se esiste viene visualizzata la posizione dell’elemento che lo contiene;
se non esiste viene visualizzata la scritta ‘il valore indicato
non esiste nello array’.
42
Esempio
Nome variabile Descrizione Tipo
MAT array bidimensionale di interi INT
MAT(I,J) elemento dell’array INT
VAL valore da cercare nell’array INT
Nome variabile Descrizione Tipo
TROVATO Indica se esiste un elemento pari a VAL LOGICAL
I, J Posizione dove è contenuto VAL INT
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
#include<stdio.h>
main() {
const cardR=5, cardC=7;
int MAT[cardR] [cardC], i,j, VAL, trovato;
// Legge in input tutti gli elementi della matrice for (i= 0; i< cardR; i++)
for (j= 0; j< cardC; j++) {
printf(" dammi el. (%d , %d) di MAT\n", i,j);
scanf("%d", &MAT[i][j]);
}
// Immissione valore da cercare
printf(“Immetti il valore da cercare\n”);
scanf("%d", &VAL);
Esempio - il programma C
44
Esempio - il programma C
// Cerca se il valore immesso esiste nello array (ricerca lineare) trovato=0; i=0;
while ((trovato==0) && ( i<cardR)) { j=0;
while ((trovato==0) && ( j<cardC)) {trovato=(MAT[i] [j]==VAL);
j++;}
I++;
}
if (trovato == 1)
printf (“valore immesso %d in posizione %d, %d\n”, VAL, i-1, j-1);
else
printf(“il valore indicato %d non esiste nello array\n”, VAL);
}
Esempio
Definizione del problema: Calcolare il prodotto (riga per colonna) tra due matrici
Definizione della specifica del programma:
I: i due array bidimensionali; il valore di ciascun elemento degli array
Pi: il numero di colonne del primo array deve essere uguale al numero di righe del secondo
U: l’array bidimensionale risultante dal prodotto dei due in ingresso Pu: nessuna
Descrizione del metodo di elaborazione:Si legge, in ordine di riga, il valore di ciascun elemento del primo array. Si legge, in ordine di riga, il valore di ciascun elemento del secondo array. Si verifica che il numero di colonne del primo array sia uguale al numero di righe del secondo. Si calcola il valore di ciascun elemento della matrice prodotto secondo la nota regola:
= ∑
n k
j k k i j
i A B
C
1
, ,
, *
Stampare la matrice prodotto risultante C
46
Esempio
Nome variabile Descrizione Tipo
MAT1 prima matrice di interi INT
MAT1(I,J) elemento della prima matrice INT
MAT2 seconda matrice di interi INT
MAT2(I,J) elemento della seconda matrice INT
Nome variabile Descrizione Tipo
MATP Matrice prodotto di MAT1 e MAT2 INT Tabella delle variabili di ingresso
Tabella delle variabili di uscita
Esempio - il programma
#include<stdio.h>
main()
{ const cardR=5, cardC=7, cardC2=3;
int MAT1[cardR] [cardC], MAT2 [cardC] [cardC2];
int MATP[cardR] [cardC2],k , i,j;
// Legge in input tutti gli elementi della prima matrice for (i= 0; i< cardR; i++)
for (j= 0; j< cardC; j++)
{ printf(" dammi el. (%d , %d) di MAT1\n", i,j);
scanf("%d", &MAT1[i][j]);
}
// Legge in input tutti gli elementi della seconda matrice for (i= 0; i< cardC; i++)
for (j= 0; j< cardC2; j++)
{printf(" dammi el. (%d , %d) di MAT2\n", i,j);
scanf("%d", &MAT2[i][j]);
}
48
Esempio - il programma
// Calcolo prodotto tra MAT1 e MAT2 for(i=0;i<cardR;i++)
for(j=0;j<cardC2;j++) {
MATP[i,j]=0;
for (k=0; k<cardC;k++)
MATP[i][j]=MATP[i][j]+MAT1[i][k]*MAT2[k][j];
}
// Visualizzazione valori elementi matrice prodotto for(i=0;i<cardR;i++)
for(j=0;j<cardC2;j++)
printf(“MATP(%d, %d) = %d \n”, i,j,MATP[i] [j]);
}