[C] Fascio rette con for
Ciao ragazzi, mi son bloccato su un esercizio.
a) Lo studente consideri nell’intervallo [a,b], con a = 0 e b = 5, la seguente famiglia di rette descritta dal parametro c: y = c^2 x − c^3. Definisca un vettore che deve contenere 5 valori del parametro c, a partire dal valore c0 = 0.5 con un incremento ∆c = 0.5. Il vettore deve essere caricato con un ciclo usando la formula c_i = c_(i−1) + ∆c.
b) Per il tracciamento delle singole rette e sufficiente suddividere l’intervallo in m = 5 sottointervalli di uguale lunghezza h = (b−a)/m. In questo caso e richiesta la stampa separata delle singole rette e della curva inviluppo. Il ciclo piu esterno va fatto sui coefficienti c_i, quello piu interno calcola e stampa le coppie di valori (xk,yk), formate dalle ascisse xk dei punti estremi dei sottointervalli e dall’ordinata yk, della retta in esame. Si devono stampare solo i dati per poi poterli graficare.
in pratica prima volevo definire i g0,g1,g2,g3,g4 e poi usarli nel ciclo sotto.
x1=0 x2=1 x3=2 x4=3 x5=4 x6=5 e quà ci siamo, questi vengono bene. Il problema viene col calcolo delle y. Quando g diventa maggiore di g[1] il primo ciclo for non ha ancora calcolato quando vale g[2] quidi credo mi butti tutte le y a 0. Qualcuno ha qualche idea?
questi sono i risultati
per g[0] e g[1] immagino vadano bene, poi tutte azzerate. Ringrazio in anticipo a chi mi saprà dare una mano
a) Lo studente consideri nell’intervallo [a,b], con a = 0 e b = 5, la seguente famiglia di rette descritta dal parametro c: y = c^2 x − c^3. Definisca un vettore che deve contenere 5 valori del parametro c, a partire dal valore c0 = 0.5 con un incremento ∆c = 0.5. Il vettore deve essere caricato con un ciclo usando la formula c_i = c_(i−1) + ∆c.
b) Per il tracciamento delle singole rette e sufficiente suddividere l’intervallo in m = 5 sottointervalli di uguale lunghezza h = (b−a)/m. In questo caso e richiesta la stampa separata delle singole rette e della curva inviluppo. Il ciclo piu esterno va fatto sui coefficienti c_i, quello piu interno calcola e stampa le coppie di valori (xk,yk), formate dalle ascisse xk dei punti estremi dei sottointervalli e dall’ordinata yk, della retta in esame. Si devono stampare solo i dati per poi poterli graficare.
a=0; b=5; g[0]=0.5; for (i=1;i<=5;i++) { g[i]=g[i-1]+0.5; h=(b-a)/5; for (i=0;i<5;i++) { for (j=0;j<=5;j++) { x=a+j*h; y = g[i]*g[i]*x - g[i]*g[i]*g[i]; fprintf(fp," %12.6f %12.6f \n",x,y); } fprintf(fp,"\n"); } }
in pratica prima volevo definire i g0,g1,g2,g3,g4 e poi usarli nel ciclo sotto.
x1=0 x2=1 x3=2 x4=3 x5=4 x6=5 e quà ci siamo, questi vengono bene. Il problema viene col calcolo delle y. Quando g diventa maggiore di g[1] il primo ciclo for non ha ancora calcolato quando vale g[2] quidi credo mi butti tutte le y a 0. Qualcuno ha qualche idea?
questi sono i risultati
0.000000 -0.125000 1.000000 0.125000 2.000000 0.375000 3.000000 0.625000 4.000000 0.875000 5.000000 1.125000 0.000000 -1.000000 1.000000 0.000000 2.000000 1.000000 3.000000 2.000000 4.000000 3.000000 5.000000 4.000000 0.000000 0.000000 1.000000 0.000000 2.000000 0.000000 3.000000 0.000000 4.000000 0.000000 5.000000 0.000000 0.000000 0.000000 1.000000 0.000000 2.000000 0.000000 3.000000 0.000000 4.000000 0.000000 5.000000 0.000000 0.000000 0.000000 1.000000 0.000000 2.000000 0.000000 3.000000 0.000000 4.000000 0.000000 5.000000 0.000000
per g[0] e g[1] immagino vadano bene, poi tutte azzerate. Ringrazio in anticipo a chi mi saprà dare una mano
Risposte
Stai modificando l'indice di un ciclo all'interno di un altro. Dividi l'inizializzazione dell'array dal ciclo sulle rette.
grande ,grazie mille ho risolto
ecco la soluzione
Le rette vengono perfette !

ecco la soluzione
a=0; b=5; g[0]=0.5; for (i=1;i<5;i++) { g[i]=g[i-1]+0.5; h=(b-a)/5; } for (i=0;i<5;i++) { for (j=0;j<=5;j++) { x=a+j*h; y = g[i]*g[i]*x - g[i]*g[i]*g[i]; fprintf(fp," %12.6f %12.6f \n",x,y); } fprintf(fp,"\n"); }
Le rette vengono perfette !