Pagina 1 di 1

[C] Fascio rette con for

MessaggioInviato: 09/01/2019, 15:00
da Zyzzoy
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.
Codice:
  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[i] 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
Codice:
  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

Re: [C] Fascio rette con for

MessaggioInviato: 09/01/2019, 18:04
da vict85
Stai modificando l'indice di un ciclo all'interno di un altro. Dividi l'inizializzazione dell'array dal ciclo sulle rette.

Re: [C] Fascio rette con for

MessaggioInviato: 09/01/2019, 19:42
da Zyzzoy
grande ,grazie mille ho risolto :smt023

ecco la soluzione

Codice:
        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 !