Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

[C] Fascio rette con for

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

Re: [C] Fascio rette con for

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.

Re: [C] Fascio rette con for

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 !
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.