Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 18-05-2004, 22.32.30   #1
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Numeri cumulati

Sto facendo un programma che ASSOLUTAMENTE per domani devo portare.

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();

 }
Downloader non è collegato   Rispondi citando
Vecchio 18-05-2004, 22.37.42   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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?
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 22.40.29   #3
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Dav82
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?
Ehm ops... non avevo letto gli ESPLICITI commenti a lato!
Guardo un attimo e ti dico eh!
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 22.46.10   #4
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Quota:
Originariamente inviato da Dav82


Ehm ops... non avevo letto gli ESPLICITI commenti a lato!
Guardo un attimo e ti dico eh!
Ok, grazie
Downloader non è collegato   Rispondi citando
Vecchio 18-05-2004, 22.49.52   #5
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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;
 }
scrivere
Codice:
float inten_ass_cum (float a, float b){
  return ((float) a+b);
 }
E' più leggibile e risparmi anche spazio di allocazione, anche se in sto caso è veramente una cavolata, pochi byte

Prova a modificare e guarda se funziona!
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 22.56.35   #6
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.14.06   #7
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Scusa, sono un po rico**** (pensa che ho mangiato 5 minuti fa) allora in pratica come mi comporto?
Downloader non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.26.45   #8
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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();

 }
P.S: non si dovrebbe postare il codice modificato... altrimenti è difficile che impari, ma ho fatto uno strappo alla regola!
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.34.00   #9
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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!
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.43.50   #10
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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?
Downloader non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.47.00   #11
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Downloader
Non ci sarebbe un modo per rendere un po piu elelentare il tutto, visto che non sono a questo livello?
In che senso più elementare?

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?
Dav82 non è collegato   Rispondi citando
Vecchio 18-05-2004, 23.55.19   #12
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
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
Dav82 non è collegato   Rispondi citando
Vecchio 19-05-2004, 00.09.01   #13
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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.



Downloader non è collegato   Rispondi citando
Vecchio 19-05-2004, 00.11.30   #14
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Downloader
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.



Mi dici gli input che metti e gli output errati che ti dà?
Dav82 non è collegato   Rispondi citando
Vecchio 19-05-2004, 00.13.34   #15
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
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!!

Downloader non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 16.35.52.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.