[C] Fascio rette con for

Messaggioda Zyzzoy » 09/01/2019, 15:00

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
Zyzzoy
Starting Member
Starting Member
 
Messaggio: 4 di 28
Iscritto il: 06/01/2019, 17:36

Re: [C] Fascio rette con for

Messaggioda vict85 » 09/01/2019, 18:04

Stai modificando l'indice di un ciclo all'interno di un altro. Dividi l'inizializzazione dell'array dal ciclo sulle rette.
vict85
Moderatore
Moderatore
 
Messaggio: 9452 di 9507
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] Fascio rette con for

Messaggioda Zyzzoy » 09/01/2019, 19:42

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 !
Zyzzoy
Starting Member
Starting Member
 
Messaggio: 5 di 28
Iscritto il: 06/01/2019, 17:36


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti