PDA

Visualizza la versione completa : [C] File incluso nel sorgente: errore di lettura


bad.alex
20-05-2013, 16:56
Ragazzi, avrei bisogno del vostro aiuto. Sono alle prese con un esercizio:

"Si consideri un sistema massa-molla, la cui traiettoria viene campionata con intervallo di tempo di T 0.01 s. La massa parte da uno stato di quiete x0=20. I dati campionati sono forniti nel vettore di float "traiettoria" , di lunghezza MAX_CAMPIONI, definito nel file "massa_molla.h" ( file che non posso inviarvi) da includere nel sorgente C.
Si stampi la traiettoria, indicando tempo e valore della posizione ( punto in cui chiedo il vostro aiuto); si calcoli il periodo e la frequenza di oscillazione del sistema ( punto svolto correttamente)".

Il programma che ho scritto il seguente, ma non riesco a far leggere correttament e gli elementi contenuti nel file massa_molla e inoltre non so svolgere il primo punto. Spero possiate aiutarmi. Grazie


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


#define x0 20
#define T 0.01

void stampa_vettore ( float *v, int size);
float calcola_periodo (float *v, int size, float T);

int main (void) {
float *traiettoria;
float periodo;



stampa_vettore( traiettoria, MAX_CAMPIONI);
periodo = calcola_periodo(traiettoria, MAX_CAMPIONI, 0.01);
printf("Periodo = %f\n", periodo);
printf("Frequenza = %f\n", 1/periodo);


system ("pause");
}


/* Funzioni */

void stampa_vettore( float *v, int size) {
int i;

for (i=0; i<size; i++) {
printf( "La traiettoria e' v[%d]=%f \n", i, v[i]);
}
}

float calcolo_periodo(float *v, int size, float T)
{
int i, min_index;

min_index = 0;
for (i = 1; i < size;i++) {
if (v[i] < v[min_index])
min_index = i;
}

return 2 * min_index * T;
}

oregon
20-05-2013, 20:26
Il file questo ?

http://www.dmi.unict.it/~santoro/teaching/informatica/software/massa_molla.h

bad.alex
20-05-2013, 21:56
credo di si ( il testo del problema e' lo stesso, quindi credo anche il file)

oregon
20-05-2013, 22:25
Quindi anche il programma

http://www.dmi.unict.it/~santoro/teaching/informatica/software/massa_molla.c

...

bad.alex
20-05-2013, 22:59
si, ma non credo possa imparare qualcosa nel copiare. ho provato a svolgerlo senza guardare la soluzione, anche perch il file me lo hanno passato ed anche il testo del problema. Il compito svolto no. Io ho scritto questo codice e chiedo a voi di dirmi dove sbaglio, cosa c' che non va. Penso sia meglio che di fare copia e incolla :zizi:

oregon
20-05-2013, 23:03
Mica ti suggerivo di fare copia-incolla ma di tentare di valutare quel codice e il tuo codice per capire da solo il problema. Del resto cosa impari se gli errori del tuo codice te li dice il forum?

In ogni caso, c' una funzione

calcolo_periodo

che chiami con

calcola_periodo

Poi, perch un argomento T se T una costante?

E ancora ... come mai dichiari

float *traiettoria;

se traiettoria esistente ed il vettore che devi usare?

bad.alex
20-05-2013, 23:42
ti ringrazio, oregon. Non mi ero accorto di aver scritto prima calcolo e poi calcola -.-'
Comunque, apportando queste correzioni il programma viene compilato ma la schermata in esecuzione viene chiusa improvvisamente ( e si mostra vuota).

oregon
20-05-2013, 23:44
Cio ? Adesso il codice qual ?

bad.alex
21-05-2013, 00:26
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "massa_molla.h"


#define x0 20
#define T 0.01

void stampa_vettore ( float *v, int);
float calcolo_periodo (float *v, int);

int main (void) {
float *traiettoria;
float periodo;



stampa_vettore( traiettoria, MAX_CAMPIONI);
periodo = calcolo_periodo(traiettoria, MAX_CAMPIONI);
printf("Periodo = %f\n", periodo);
printf("Frequenza = %f\n", 1/periodo);


system ("pause");
}


/* Funzioni */

void stampa_vettore( float *v, int size) {
int i;

for (i=0; i<size; i++) {
printf( "La traiettoria e' v[%d]=%f \n", i, v[i]);
}
}

float calcolo_periodo(float *v, int size)
{
int i, min_index;

min_index = 0;
for (i = 1;i < size;i++) {
if (v[i] < v[min_index])
min_index = i;
}

return 2 * min_index * T;
}




Non ho capito il discorso della traiettoria..

oregon
21-05-2013, 00:27
Ti avevo scritto gi che questo

float *traiettoria;

lo devi eliminare ...

Loading