[C] Array e allocazione dinamica
Ragazzi, sto svolgendo un esercizio:
"Si considerino due array VL[ ] e VR[ ] di n elementi di tipo double, allocati dinamicamente e con n
inserito da tastiera, riempito di numeri casuali generati secondo la formula:
(rand()%1500 + 1)/1500.0
Si supponga che tali array siano relativi alle velocita' della ruota sinistra e destra di un veicolo a due
ruote in moto in uno spazio bidimensionale; supporre che i valori siano campionati ogni ogni 10
millisecondi (T=102).
1. Scrivere una funzione che restituisce tre nuovi array x[ ], y[ ] e alpha[ ] allocati dinamicamente,
calcolati nel seguente modo:
$x_[i+1]=x_+(v_r_+v_l_)/2*T*cos(alpha_);
y_[i+1]=y_+(v_r_+v_l_)/2*T*sin(alpha_);
alpha_[i+1]=alpha_+(v_r_-v_l_)/0.6*T; $
Scrivere due funzioni ognuna delle quali determina e restituisce:
1. la lunghezza complessiva della traiettoria percorsa
2. il numero di volte in cui il veicolo attraversa l'asse X "
Sinora ho cercato di svolgere il primo punto. Ed effettivamente sino alla generazione dei vettori riempiti con valori casuali è tutto ok.
Il problema nasce nel momento in cui voglio allocare tre nuovi vettori e restituirne il valore.
Il codice è il seguente:
Potreste spiegarmi dove sbaglio e aiutarmi nel correggere gli errori? L'errore segnalato dal compilatore è incompatible types in assignment in new_vect. Grazie.
Alex
"Si considerino due array VL[ ] e VR[ ] di n elementi di tipo double, allocati dinamicamente e con n
inserito da tastiera, riempito di numeri casuali generati secondo la formula:
(rand()%1500 + 1)/1500.0
Si supponga che tali array siano relativi alle velocita' della ruota sinistra e destra di un veicolo a due
ruote in moto in uno spazio bidimensionale; supporre che i valori siano campionati ogni ogni 10
millisecondi (T=102).
1. Scrivere una funzione che restituisce tre nuovi array x[ ], y[ ] e alpha[ ] allocati dinamicamente,
calcolati nel seguente modo:
$x_[i+1]=x_+(v_r_+v_l_)/2*T*cos(alpha_);
y_[i+1]=y_+(v_r_+v_l_)/2*T*sin(alpha_);
alpha_[i+1]=alpha_+(v_r_-v_l_)/0.6*T; $
Scrivere due funzioni ognuna delle quali determina e restituisce:
1. la lunghezza complessiva della traiettoria percorsa
2. il numero di volte in cui il veicolo attraversa l'asse X "
Sinora ho cercato di svolgere il primo punto. Ed effettivamente sino alla generazione dei vettori riempiti con valori casuali è tutto ok.
Il problema nasce nel momento in cui voglio allocare tre nuovi vettori e restituirne il valore.
Il codice è il seguente:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h> #include <math.h> #define T 0.01 /* Dichiarazione funzioni */ void riempi_vettore ( double *, int ); double new_vett( double *v_l, double *v_r, int size); int main (void) { double *v_l, *v_r, *new_vect; int n; printf ("Inserire la dimensione dei vettori da tastiera \n"); scanf ("%d", &n); v_l=malloc(n*sizeof(double)); v_r=malloc(n*sizeof(double)); riempi_vettore ( v_l, n); riempi_vettore ( v_r, n); new_vect=new_vett( v_l, v_r, n); system("pause"); } /* FUNZIONI */ void riempi_vettore (double * v, int size) { int i; srand(time(NULL)); for (i=0; i<size; i++) { v[i]=(rand()%1500+1)/1500.0; printf (" v[%d]=%lf \n", i, v[i]); } } /* scrivere funzione che restituisce (return) tre array allocati dinamicamente */ double new_vett( double *v_l, double *v_r, int size) { double *x, *y, *alpha; int i; x=malloc(size*sizeof(double)); y=malloc(size*sizeof(double)); alpha=malloc(size*sizeof(double)); for (i=0; i<size; i++) { x[i+1]=x[i]+(v_r[i]+v_l[i])/2*T*cos(alpha[i]); y[i+1]=y[i]+(v_r[i]+v_l[i])/2*T*sin(alpha[i]); alpha[i+1]=alpha[i]+(v_r[i]-v_l[i])/0.6*T; } printf (" Il valore di x[%d]=%lf\n", i+1, x[i+1]); printf (" Il valore di y[%d]=%lf\n", i+1, y[i+1]); printf (" Il valore di alpha[%d]=%lf \n", i+1, alpha[i+1]); }
Potreste spiegarmi dove sbaglio e aiutarmi nel correggere gli errori? L'errore segnalato dal compilatore è incompatible types in assignment in new_vect. Grazie.
Alex
Risposte
Perfetto! Adesso parte correttamente. Ti ringrazio
