Sinora ho svolto soltanto il primo punto ( però il programma non viene eseguito correttamente...).
il testo del problema completo è:
"Si consideri un vettore “serie” di reali (double), allocato dinamicamente, di dimensioni “n” fornite da
tastiera, contenente elementi generati casualmente nell'intervallo continuo [0, 10] (usare la funzione
“rand()”, scalando opportunamente ad un reale il valore restituito).
1. Scrivere una funzione “filter_vector” che riceve il vettore “serie”, la sua dimensione, e
restituisce un nuovo vettore contenente solo le componenti del vettore in ingresso che
soddisfanno alla relazione:
(in_vector[i] + in_vector[i+1] + in_vector[i+3]) / 3 < 0.5
il prototipo della funzione filter_vector e' il seguente:
double * filter_vector (double * in_vector, int in_vector_size,
int * out_vector_size);
2. scrivere una funzione “istogramma” che riceve il vettore “serie”, la sua dimensione, un numero
di intervalli “k” in cui suddividere l'intervallo [0, 10], e restituisce un vettore di interi di “k”
elementi, le cui componenti sono cosi' calcolate:
elemento 0 = numero di valori del vettore in ingresso compresi tra [0, h]
elemento 1 = numero di valori del vettore in ingresso compresi tra ]2h, 3h]
elemento 2 = numero di valori del vettore in ingresso compresi tra ]3h, 4h]
……
dove “h” e' la dimensione del singolo sottointervallo (da calcolare opportunamente). Il prototipo
della funzione da e' il seguente:
int * istogramma (double * in_vector, int in_vector_size, int k) ".
Ho provato a svolgere, quantomeno, il primo punto ma qualcosa riesco comunque a sbagliarla
codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
/* Dichiarazioni funzioni */
void riempi_vettore (double *v, int size, double a, double b);
double * filter_vector( double *, int , int *);
int main (void) {
double *serie;
double *out;
int i,n, out_size;
printf ("Immetti da tastiera le dimensioni del vettore:\n");
scanf ("%d", &n);
serie=(double *) malloc(n*sizeof(double));
riempi_vettore (serie,n,0,10);
out= *filter_vector(serie, 100, out_size);
printf("la dim del vettor in uscita e %d\n" , out_size);
for(i=0; i<out_size; i++){
printf("out[%d]=%f\n" , i , out[i]);
}
system("pause");
}
/* Funzione riempi vettore */
void riempi_vettore (double *v, int size,double a, double b) {
int i;
srand(time(NULL));
for (i=0; i<size; i++) {
v[i]= (rand()*(b-a))/size;
}
}
double * filter_vector( double *in_vector , int in_vector_size, int *out_vector_size){
int i, j;
double *out_vector;
*out_vector_size=0;
for(j=0; j<in_vector_size; j++){
if(((in_vector[j]+in_vector[j+1]+in_vector[j+3])/3)<0.5){
*out_vector_size=*out_vector_size+1;
}
}
out_vector=(double*)malloc(*out_vector_size*sizeof(double));
i=0;
for(j=0; j<in_vector_size; j++){
if(((in_vector[j]+in_vector[j+1]+in_vector[j+3])/3)<0.5){
out_vector[i]=in_vector[j];
i++;
}
}
return out_vector;
}
Non risultano errori nel momento della compilazione. Potreste aiutarmi? ( ancora non ho svolto il secono punto perchè non so come procedere con la funzione istogramma... un passo alla volta :-)
Grazie