martedì 5 marzo 2013

C - Copia di vettore dinamico


In questo esercizio viene copiato un vettore dinamico in un altro, dopo aver verificato che la grandezzia dei due sia la medesima. La funzione di copia utilizza funzioni definite in precedenza (attenzione all'ordine, il compilatore le vede nell'ordine in cui sono scritte).
Tutte le funzioni ritornano void in quanto dal main vengono passati solo gli indirizzi.


#include <stdlib.h>
#include <stdio.h>

typedef struct{
int* data;
unsigned size;
} vector;

void vector_create(vector *pv, unsigned size){
pv->size = size;
pv->data = (int*) malloc(pv->size * sizeof(int));
}

void vector_fill_rand(vector *pv){
int i;
for(i=0;i<pv->size;i++)
pv->data[i] = rand();
}

void vector_print(vector *pv){
int i;
for(i=0;i<pv->size;i++)
printf("%d, ", pv->data[i]);
}

void vector_destroy(vector *pv){
free(pv->data);
}

void vector_copy(vector *pdest, vector *psorg){
int i;
if(pdest->size != psorg->size){
printf("\nRiallocazione memoria");
vector_destroy(pdest);
vector_create(pdest, psorg->size);
}
printf("\nInizio copia...\n");
for(i=0;i<pdest->size;i++)
pdest->data[i] = psorg->data[i];
printf("\nStampa di v2\n");
vector_print(pdest);
}

int main(void){
vector v, v2;
unsigned i;
double iMedia;

vector_create(&v, 10);
vector_fill_rand(&v);
vector_print(&v);

vector_create(&v2, 1);
vector_copy(&v2, &v);

iMedia = 0;
for(i=0;i<v.size;i++)
iMedia += v.data[i];
iMedia /= v.size;
printf("\nLa media di v e' %f\n", iMedia);

vector_destroy(&v);
vector_destroy(&v2);
}

Nessun commento:

Posta un commento