Array e procedure
Soluzione:
void leggi_vet(int v[], int n)
{
int i;
for (i=0; i<n; i++) {
printf("v[%d] = ",i);
scanf("%d",&v[i]);
}
}
void stampa_vet(int v[], int n)
{
int i;
for (i=0; i<n; i++) printf("%d ",v[i]);
}
Soluzione:
#include <stdio.h>
#include "vet_io.h"
#define N 5
void fondi(int v1[], int v2[], int v3[], int n);
main()
{
int v1[N],v2[N],v3[2*N];
leggi_vet(v1,N);
leggi_vet(v2,N);
fondi(v1,v2,v3,N);
stampa_vet(v3,2*N);
}
void fondi(int v1[], int v2[], int v3[], int n)
{
int i;
for (i=0; i<n; i++){
v3[2*i] = v1[i];
v3[2*i+1] = v2[i];
}
}
Soluzione:
#include <stdio.h>
#define N 7
void leggi_vet(int v[], int n); /* si riutilizzano le procedure
gia' scritte */
void stampa_vet(int v[], int n);
/* Per scambiare i valori di due variabili si utilizza una procedura che ha come ingressi i puntatori alle variabili, tramite i quali accede ai valori dei parametri attuali e li modifica. Osservare anche come deve essere invocata la procedura. */
void scambia(int *a, int *b)
{
int aux;
aux = *a; /* Triangolazione: memorizzo temporaneamente
il valore di a... */
*a = *b; /* metto in a il
valore di b... */
*b = aux; /* e infine scrivo in b
il valore che aveva in precedenza a */
}
/* Procedo scambiando gli elementi "simmetrici" fino a quando non
arrivo a meta' vettore */
void inverti(int v[], int n)
{
int i;
for (i=0; i<n/2; i++) scambia(&v[i],&v[n-i-1]);
}
main()
{
int v[N];
leggi_vet(v,N);
stampa_vet(v,N);
inverti(v,N);
printf("\nVettore invertito: ");
stampa_vet(v,N);
}
Soluzione:
#define N 10
int pari(int n);
void stampa_vet(int v[], int n);
main()
{
int vett[N]={1,2,3,4,5,6,7,8,9,10};
int vpari[N],vdispari[N];
int i,ivp,ivd;
ivp = ivd = 0;
for (i=0; i<N; i++)
if (pari(vett[i])){
vpari[ivp] = vett[i];
ivp++;
}
else{
vdispari[ivd] = vett[i];
ivd++;
}
stampa_vet(vett,N);
printf("\n");
stampa_vet(vpari,ivp);
printf("\n");
stampa_vet(vdispari,ivd);
}
int pari(int n){return !(n%2);} /* versione "short", ma poco leggibile */