Premi qui per scaricare il PDF
[adinserter block="7"]
In questa esercitazione, vedremo alcuni esercizi risolti di programmazione in C riguardanti i puntatori, combinati con array e matrici.
Esercizio 1
Scrivere un programma in C che dichiari ed inizializzi due variabili intere. Utilizzare una variabile puntatore per stampare a video il contenuto delle due variabili.
#include <stdio.h>
int main()
{
int var1, var2;
int *p;
var1 = 5;
var2 = -10;
//Se p = var1 corrisponde a p = 5 -> il puntatore punta alla cella 5 (non sappiamo dove sia)
p = &var1; //Assegno a p, l'indirizzo di memoria di var1
printf("%d", *p);
p = &var2;
printf("%d", *p);
return 0;
}
[adinserter block="5"]
Esercizio 2: Array e puntatori
Scrivere un programma in C che:
- Dichiara un array di numeri interi di 10 elementi;
- Chiede all’utente l’indice dell’elemento che vuole modificare. Se l’indice non è corretto (minore di 0 o maggiore di 9) il programma stampa un opportuno messaggio;
- Chiede all’utente il valore da inserire nell’array;
- Modifica l’array e stampa a video l’array utilizzando i puntatori;
- Il programma ripete la richiesta fino a che l’utente non inserisce come indice 0.
#include <stdio.h>
#define MAXDIM 10
int main()
{
int temp[MAXDIM];
int indice, valore, finito, i;
valori = &temp[0];
for (i = 0; i < MAXDIM; i++)
*(valori + i) = 0; //equivale a temp[i] = 0
finito = 0
do
{
printf("Inserire l'indice da modificare: 0 per terminare\\n");
scanf("%d", &indice);
if (indice < 0 || indice > 10)
printf("ATTENZIONE, inserisci un indice compreso tra 0 e 9\\n");
else if (indice == 0)
finito = 1;
else
{
printf("Inserire il valore:");
scanf("%d", &valore);
*(valori + indice-1) = valore;
printf("L'array modificato e':\\n");
for (i = 0; i < MAXDIM; i++)
printf("\\t%d", *(valori + i));
}
}while (!finito); //equivale a finito == 0
return 0;
}
[adinserter block="7"]
Esercizio 3: Comparazione Array
Scrivere un programma in C che usi i puntatori per verificare che due array di numeri interi (massimo 20 posizioni) siano uguali.
#include <stdio.h>
#define MAXDIM 20
int main()
{
int vettore1[MAXDIM], vettore2[MAXDIM];
int *p1, *p2;
int i, uguali;
for (i = 0; i < MAXDIM; i++)
{
printf("Inserire il valore %d per il vettore 1\\n", i+1);
scanf("%d", &vettore1[i]);
printf("Inserire il valore %d per il vettore 2\\n", i+1);
scanf("%d", &vettore2[i]);
}
uguali = 1;
p1 = vettore1; //equivale a p1 = &vettore1[0]
p2 = vettore2; //equivale a p2 = &vettore2[0]
for (i = 0; i < MAXDIM && uguali; i++) //Uguali equivale a Uguali != 0
if (*(p1+i) != *(p2 + i))
uguali = 0;
if (uguali) //uguali != 0 (Se uguali non è 0)
printf("I due array sono uguali\\n");
else
printf("I due array sono diversi\\n");
return 0;
}
[adinserter block="7"]
Esercizio 4: Matrice e puntatori
Scrivere un programma in C che esegua le seguenti operazioni:- Dichiara una matrice NxM (con N = 10 e M = 13) e inizializza tutte le posizioni a 0;
- Dichiara un puntatore a interi che punta all’elemento della matrice (0, 0);
- Esegue un algoritmo che sposta il puntatore di i righe e j colonne rispetto alla posizione corrente e imposta l’elemento della matrice a 1. L’algoritmo viene eseguito fino a che l’utente decide di non ripetere l’operazione;
- Stampa tutte le coordinate modificate e la matrice risultante.
#include <'stdio.h>
#define MAXROW 10
#define MAXCOL 13
int main()
{
int matrice [MAXROW][MAXCOL];
int *p;
int i, j, decisione, row, col;
int limite1, limite2;
p = matrice; //equivale a p = &matrice[0][0]
//INIZIALIZZARE UNA MATRICE A 0
//NORMALMENTE
/*for (i = 0; i < MAXROW; i++)
for (j = 0; j < MAXCOL; j++)
matrice[i][j] = 0;*/
//CON I PUNTATORI
for (i = 0; i < MAXROW * MAXCOL; i++)
*(p + i) = 0;
printf("Vuoi spostare il puntatore (1: si, 0:no)\\n");
scanf ("%d", &decisione);
row = 0;
col = 0;
while (decisione) //equivale a decisione != 0
{
printf("La posizione corrente e' (%d, %d)", row, col);
limite1 = row * -1; //Massimo numero di righe tra le quali l'utente si può muovere
limite2 = MAXROW - 1 - row; //Massimo numero di righe nel quale l'utente si può muovere
do
{
printf("Inserire il numero di righe:");
scanf("%d", &i);
if (i < limite1 || i > limite2)
printf("Il valore inserito deve essere compreso tra %d e %d", limite1, limite2);
}while (i < limite1 || i > limite2);
limite1 = col * -1;
limite2 = MAXCOL - 1 - col;
do
{
printf("Inserire il numero di colonne:");
scanf("%d", &j);
if (j < limite1 || j > limite2)
printf("Il valore inserito deve essere compreso tra %d e %d", limite1, limite2);
}while (j < limite1 || j > limite2);
row = row + i;
col = col + j;
//SENZA PUNTATORI, PER PUNTARE AD UNA POSIZIONE SPECIFICA -> matrice[row][col]
*(p + MAXCOL * row + col) = 1 //Mettiamo a 1 la posizione scelta dall'utente
for (i = 0; i < MAXROW; i++)
{
for (j = 0; j < MAXCOL; j++)
printf("\\t%d", *(p + MAXCOL * i + j));
printf("\\n");
}
printf("Vuoi spostare ancora il puntatore? (1:si, 0:no)\\n");
scanf("%d", &decisione);
}
return 0;
}
In una matrice [3][4], se ci troviamo nella posizione [0][0], e contiamo 4 colonne (3 colonne se partiamo da 0) verso destra ci troveremo nella posizione matrice[1][0].
Premi qui per scaricare il PDF
[adinserter block="5"]