Premi qui per scaricare il PDF
[adinserter block="7"]
In questo laboratorio di informatica, vedremo alcuni esercizi di programmazione risolti in C con array (ordinamenti) e matrici.
Esercizio 1
Scrivere un programma in C che:
- dichiara un array che possa contenere 10 numeri interi;
- chiede all’utente di inserire tutti i valori previsti;
- inverte le posizioni dei numeri all’interno dell’array e ne stampa il contenuto. Dichiarare tutte le variabili necessarie per eseguire l’operazione.
#include < stdio.h>
#define DIM 10
void inverti (int* a);
int main()
{
int myarray[DIM], i;
int *p;
p = &myarray[0];
for (i = 0; i < DIM; i++)
{
printf("Inserisci il %d numero dell'array\n", i+1);
scanf("%d", (p+i));
}
printf("L'array inserito e':\n");
for(i = 0; i < DIM; i++)
{
printf("%d\t", *(p+i));
}
inverti(p);
return 0;
}
void inverti (int *a)
{
int array_inv[DIM], i, j;
int *punt;
punt = &array_inv[0];
for(i = 0, j = 9; i < DIM && j >= 0; i++, j--)
{
*(punt+j) = *(a+i);
}
printf("\nL'array invertito e':\n");
for(i = 0; i < DIM; i++)
{
printf("%d\t", *(punt+i));
}
}
[adinserter block="7"]
Esercizio 2
Scrivere un programma in C che permetta di copiare una parte di matrice (sottomatrice) in un’altra matrice. Il programma deve:
- Dichiarare due matrici di dimensioni 4×6;
- Inizializzare la prima matrice. Il valore di ogni cella della matrice sarà dato dal prodotto numero riga * numero colonna. Per questa inizializzazione considerare come indice prima riga e indice prima colonna 1;
- Inizializzare la seconda matrice a 0;
- Chiedere all’utente di inserire un indice di riga e di colonna e verificare che gli indici siano corretti;
- Chiedere all’utente di inserire numero di righe e di colonne da copiare e verificare che i numeri siano corretti;
- Copiare la parte identificata della prima matrice nella seconda matrice a partire dall’indice 0,0.
#include < stdio.h>
#define ROW 4
#define COL 6
int main()
{
int matrix_1[ROW][COL], matrix_2[ROW][COL];
int i, j, indice_riga, indice_colonna, n_riga, n_colonna;
int *p1, *p2;
p1 = &matrix_1[0][0];
p2 = &matrix_2[0][0];
for(i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
*(p1 + (i * COL + j)) = (i + 1) * (j +1);
printf("%d\t", *(p1 + (i * COL + j)));
}
printf("\n");
}
for(i = 0; i < ROW * COL; i++) //Inizializzo la seconda matrice a 0
*(p2 + i) = 0;
do
{
printf("Inserisci un indice di riga: ");
scanf("%d", &indice_riga);
if (indice_riga > ROW || indice_riga < 1)
printf("ATTENZIONE, Inserisci un indice di riga compreso tra 1 e 4\\n");
} while(indice_riga > ROW || indice_riga < 1);
do
{
printf("Inserisci un indice di colonna: ");
scanf("%d", &indice_colonna);
if (indice_colonna > COL || indice_colonna < 1)
printf("ATTENZIONE, Inserisci un indice di colonne compreso tra 1 e 6\\n");
}while (indice_colonna > COL || indice_colonna < 1);
do
{
printf("Inserisci il numero di righe da copiare: ");
scanf("%d", &n_riga);
if (n_riga < 0 || n_riga > ROW - indice_riga+1)
printf("ATTENZIONE, Inserisci un numero di riga minore di %d\\n", ROW - indice_riga+1);
} while(n_riga > ROW - indice_riga+1 || n_riga < 0);
do
{
printf("Inserisci il numero di colonne da copiare: ");
scanf("%d", &n_colonna);
if (n_colonna < 0 ||n_colonna > COL - indice_colonna + 1)
printf("ATTENZIONE, Inserisci un numero di colonna minore di %d\\n", COL - indice_colonna +1);
}while(indice_colonna > COL - indice_colonna+1 || n_colonna < 0);
for (i = 0; i < n_riga; i++)
for (j = 0; j < n_colonna; j++)
*(p2 + i * COL + j) = *(p1 + (i + indice_riga-1) * COL + (j+indice_colonna-1));
for(i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
printf("%d\t", *(p2 + (i * COL + j)));
}
printf("\n");
}
return 0;
}
[adinserter block="7"]