|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
18-05-2004, 22.32.30 | #1 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Numeri cumulati
Ma non risco tramite una funzione a fargli fare una serie di numeri cumulati. Mi spiego meglio: ho questi numeri: 60 75 120 30 15 e il risultato del calcolo è il seguente: 60 135 255 285 300 ma non ci riesco, dateme na mano allego il codice in c++ Codice:
#include<iostream.h> #include<dos.h> #include<conio.h> #include<iostream.h> float media_classe (float a, float b) { float tot; tot=(a+b)/2; return tot; } float intensita (float a, float b) { float tot; tot=a*b; return tot; } float freq_ass_cum (float a, float b) // NON VIENE UN ACCIDENTE { float tot,totale; tot=a; tot=tot+b; totale=tot+0; return totale; } float inten_ass_cum (float a, float b) // NON VIENE UN ACCIDENTE { float tot; tot=a; tot=tot+b; return tot; } float freq_rel_cum (float a, float b) { float tot; tot=a/b; return tot; } float inten_rel_cum (float a, float b) { float tot; tot=a/b; return tot; } void main() { clrscr(); float x[5]; float x2[5]; float y[5]; int i,totaley=0; float z[5]; // media_classe float h[5]; // intensita float l[5]; // frequenza assoluta cumulata float k[5]; // intensita relativa cumulata float g[5]; // frequenza relativa cumulata float v[5]; // intensita assoluta cumulata float e[5]; // frequenza assoluta cumulata for (i=0;i<5;i++) { cout<<"Primo numero: "; cin>>x[i]; cout<<"Secondo numero: "; cin>>x2[i]; z[i]=media_classe (x[i],x2[i]); } for (i=0;i<5;i++) { cout<<"Valori della Y: "; cin>>y[i]; totaley=totaley+y[i]; } for (i=0;i<5;i++) { h[i]= intensita (z[i],y[i]); } for (i=0;i<5;i++) { l[i]=freq_ass_cum (y[i], y[i+1]); cout<<l[i]<<endl; } for (i=0;i<5;i++) { v[i]=inten_ass_cum (h[i], h[i+1]); } for (i=0;i<5;i++) { k[i]=inten_rel_cum (v[i],totaley); } for (i=0;i<5;i++) { g[i]=freq_rel_cum (e[i],totaley); } // STAMPA RISULATATI for (i=0;i<5;i++) { cout<<"Le intensita sono: "<<h[i]<<endl; } for (i=0;i<5;i++) { cout<<"Le frequenze assolute cumulate: "<<l[i]<<endl; } for (i=0;i<5;i++) { cout<<"Le intensita assolute cumulate: "<<v[i]<<endl; } for (i=0;i<5;i++) { cout<<"Frequenze relative cumulate: "<<g[i]<<endl; } for (i=0;i<5;i++) { cout<<"Intensita relative cumulate: "<<k[i]<<endl; } getch(); } |
18-05-2004, 22.37.42 | #2 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Calma calma, io ti dò una mano!
Ma come chiami sta cosa nel codice? In poche parole: qual è la funzione che dovrebbe fare sto calcolo ma canna miseramente? |
18-05-2004, 22.40.29 | #3 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Quota:
Guardo un attimo e ti dico eh! |
|
18-05-2004, 22.46.10 | #4 | |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Quota:
|
|
18-05-2004, 22.49.52 | #5 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Ok ci siamo.
Tu inserisci i valori in input in due array che hanno 5 posti ciascuno, numerati da 0 a 4. Poi quando chiami le due funzioni le chiami fino a che l'indice è 4, ma le chiami con parametri gli elementi dell'array che hanno indice pari all'indice del ciclo e pari all'indice del ciclo più uno! Quindi in sostanza tu gli passi il sesto elemento di ognuno degli array (quello in posizione 5) che non esiste. Questo ovviamente solo nell'ultima chiamata di ognuna delle due funzioni "cumulative". Ah ecco, non è che l'elemento in posizione 5 non esiste: lo spazio di memoria esiste eccome! Semplicemente non ha un valore che gli hai assegnato tu deterministicamente, potrebe essere qualsiasi altra cosa, un valore a caso oppure anche il valore di un'altra variabile del tuo programma! Anche un piccolo consiglio per le funzioni: al posto di dichiarare una variabile interna, assegnarle un valore, assegnare questo valore ad un'altra variabile e poi restituire quest'ultima, basta al posto di Codice:
float inten_ass_cum (float a, float b){ float tot; tot=a; tot=tot+b; return tot; } Codice:
float inten_ass_cum (float a, float b){ return ((float) a+b); } Prova a modificare e guarda se funziona! |
18-05-2004, 22.56.35 | #6 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Ah no aspè... ho letto solo adesso il tipo di risultato che vuoi: una cosa tipo Fibonacci.
La funzione va bene, ma devi modificare la chiamata alla funzione stessa: gli devi passare l'ultimo valore calcolato dalla funzione (e ce l'hai, visto che lo salvi in l[i] e v[i] nei due casi delle funzioni che non... funzionano ) come primo parametro e come secondo passi il nuovo valore da aggiungere, cioè quello che c'è già adesso nella chiamata. E' da modificare a metà, quindi |
18-05-2004, 23.14.06 | #7 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Scusa, sono un po rico**** (pensa che ho mangiato 5 minuti fa) allora in pratica come mi comporto?
|
18-05-2004, 23.26.45 | #8 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Questo è il codice che scrivere io!
N.B: da controllare, errori possibili perchè non ho un compilatore e non ho potuto eseguirlo nè compilarlo! Ho modificato un po' le funzioni - ma sono cavolate, in sè erano perfette - , con la cosa che ti ho detto prima: niente variabili "inutili", basta un semplice return; ho messo il cast, anche se penso che non serva, visto che la somma di due float dà float... ma siccome sono un paio di annetti che non programmo in C... La modifica sostanziale è nelle chiamate dei due metodi che non funzionavano (o meglio funzionavano, ma erano chiamati male): è tutto commentato nel codice Codice:
#include<iostream.h> #include<dos.h> #include<conio.h> #include<iostream.h> float media_classe (float a, float b) { return ((float)(a+b)/2); } float intensita (float a, float b) { return ((float) a*b); } float freq_ass_cum (float a, float b) // ADESSO VIENE! { return ((float) a+b); } float inten_ass_cum (float a, float b) // ADESSO VIENE! { return ((float) a+b); } float freq_rel_cum (float a, float b) { return ((float) a/b); } float inten_rel_cum (float a, float b) { return ((float) a/b); } void main() { clrscr(); float x[5]; float x2[5]; float y[5]; int i,totaley=0; float z[5]; // media_classe float h[5]; // intensita float l[5]; // frequenza assoluta cumulata float k[5]; // intensita relativa cumulata float g[5]; // frequenza relativa cumulata float v[5]; // intensita assoluta cumulata float e[5]; // frequenza assoluta cumulata for (i=0;i<5;i++) { cout<<"Primo numero: "; cin>>x[i]; cout<<"Secondo numero: "; cin>>x2[i]; z[i]=media_classe (x[i],x2[i]); } for (i=0;i<5;i++) { cout<<"Valori della Y: "; cin>>y[i]; totaley=totaley+y[i]; } for (i=0;i<5;i++) { h[i]= intensita (z[i],y[i]); } //calcoli la prima somma, che è pari al primo numero l[0] = freq_ass_cum (0, y[0]); //stavolta parti da uno, tanto lo zeresimo l'hai già calcolato for (i=1;i<5;i++) { //qua passi il valore della somma appena calcolata, la usi //come base di partenza a cui aggiungere il nuovo numero //al primo ciclo sommiamo a l[0] il primo valore da aggiungere, //che è y[i] = y[1], y[0] l'abbiamo già contato! l[i]=freq_ass_cum (l[i-1], y[i]); cout<<l[i]<<endl; } //queste modifiche sono pari pari a quelle sopra! v[0] = inten_ass_cum (0, h[0]) for (i=1;i<5;i++) { v[i]=inten_ass_cum (v[i-1], h[i]); } for (i=0;i<5;i++) { k[i]=inten_rel_cum (v[i],totaley); } for (i=0;i<5;i++) { g[i]=freq_rel_cum (e[i],totaley); } // STAMPA RISULATATI for (i=0;i<5;i++) { cout<<"Le intensita sono: "<<h[i]<<endl; } for (i=0;i<5;i++) { cout<<"Le frequenze assolute cumulate: "<<l[i]<<endl; } for (i=0;i<5;i++) { cout<<"Le intensita assolute cumulate: "<<v[i]<<endl; } for (i=0;i<5;i++) { cout<<"Frequenze relative cumulate: "<<g[i]<<endl; } for (i=0;i<5;i++) { cout<<"Intensita relative cumulate: "<<k[i]<<endl; } getch(); } |
18-05-2004, 23.34.00 | #9 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Un'altra cosa: in sostanza hai scritto due coppie di funzioni che fanno le stesse cose. Infatti ci sono due funzioni che calcolano la somma di due float e restituiscono un float, e altre due che fanno la stessa cosa col rapporto.
E' meglio dividerle dal punto di vista dell'organizzazione logica del programma: se devi cambiare le caratteristiche di una espressione (non so, decidi che la frequenza e l'intensità devono essere calcolate in modo diverso) va benissimo, perchè così non devi scrivere altro codice; tieni presente che cmq potevi usare una sola funzione! Non cambiarlo che va benissimo così, è solo una domanda che ti può esser fatta dall'insegnante! |
18-05-2004, 23.43.50 | #10 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Ok, ti ringrazio per la gross mano che me stai a da.
Ma non ci sarebbe un modo per rendere un po piu elelentare il tutto, visto che non sono a questo livello? |
18-05-2004, 23.47.00 | #11 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Quota:
Lascia pure perdere, se vuoi, la mia scrittura delle funzioni, la tua va cmq bene se sei all'inizio... ma non vedo, per come è strutturato il programma, un metodo più semplice... prova a rileggere con calma il codice delle chiamate con i commenti che ho messo... vedrai, è una cavolata P.s: ah, per la cronaca... ma il codice che ho postato io funziona? |
|
18-05-2004, 23.55.19 | #12 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Guarda, seplicemente fai così:
prima di entrare nel ciclo for, immetti in l[0] il valore che c'è in y[0], visto che a y[0] sommi zero; poi sommi a l[0] il valore di y[1] e ottieni l[1] poi sommi a l[1] il valore di y[2] e ottieni l[2] ... e così via |
19-05-2004, 00.09.01 | #13 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Il codice che hai postato va bene, apparte un ; che manca, ora pero ho problemi con le freq relative cumulate e con le intensita relative cumulate.
|
19-05-2004, 00.11.30 | #14 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Quota:
|
|
19-05-2004, 00.13.34 | #15 |
Gold Member
Top Poster
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
|
Vabbe, il piu del programma viene, mica mi posso sta a spreme fino a mezzanotte, grazie per tutto l'aiuto che mi hai dato. (Y)
p.s. ti ricordi quel programma sul fattoriale? ho preso 7!! |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[Excel 2003] solo numeri sugli assi | crazy.cat | Office suite | 3 | 12-03-2008 11.03.44 |
[MS Excel] Conversione numeri decimali: dalla virgola al punto | dajebizio | Office suite | 1 | 23-07-2007 22.10.33 |
Comparazione e ripetizione di numeri | comtrex | Programmazione | 1 | 21-07-2006 22.11.03 |
[Excel] Generare numeri con precise caratteristiche | Lionsquid | Office suite | 9 | 07-05-2005 18.54.11 |
Inserire due diversi numeri di pagine in word | LUCAB | Office suite | 3 | 14-03-2005 15.53.58 |