| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  24-01-2007, 19:28 | #1 | 
| Senior Member Iscritto dal: Dec 2003 
					Messaggi: 704
				 | 
				
				ARRAY , VETTORE e SALVATAGGIO VALORI
			 
		Ciao a tutti.. ho questo problemino.. dovrei salvare dei NUMERI CON VIRGOLA in un array o vettore che si voglia ... il codice che mi genera i numeri secondo una determinata formula matematica già l'ho fatto e va bene...lo trovate poco sotto... adesso però dovrei salvare tutti questi valori all'interno di un array e sceglierne 1 a caso.. qualche idea? PS: per la lettura a caso io ho pensato di leggere una "delle caselle" dell'array costituito da 100 numeri basandomi sulla lettura del valore della "cella" il cui indice andrei a generarlo in modo casuale (tra 100 numeri appunto)....ADESSO PERO' IL PROBLEMA RESTA SEMPRE LO STESSO COME SALVO I NUMERI IN UN ARRAY? #include <iostream> using namespace std; int main(){ double angle = 180; // concetto di misura: la misura �data dal valor vero +- una certa incertezza // data appunto dallo strumento di misurazione // un buon strumento di misura , come assumiamo che sia la nostra antenna // ha una precisione dell'ordine del 5% della grandezza misurata che � // appunto il valore dell'angolo. // Assumo che l'incertezza abbia un valore pari a 3sigma sfruttando cos�la propriet� // della distribuzione di Gauss che mi garantisce una probabilit�pari al 99.7% // di estrarre all'interno del nostro campione la Media della distribuzione // della popolazione Madre //IMPLEMENTAZIONE // scelgo 3sigma = all'incertezza cio�appunto a 5% del valore dell'angolo float triplo = (0.05*angle); float singolo = (triplo/3); float doppio = (singolo*2); // impongo il valore di 3sigma= alla precisione dell'antenna * angolo non affetto // da errore (cio�* la Media della distribuzione di Gauss) int maxuno = ((((int)singolo))); int maxdue = ((((int)doppio))); int maxtre = ((((int)triplo))); srand(time(0)); // inizializzo il seme per il calcolo dei numeri random for (int i = 1; i <= 68; i++) { // numero decimale con la virgola per aumentare la precisione o meglio // la sensibilit�dell'antenna float fValore = (float)rand() / (float)RAND_MAX; // valore che pu�assumere un campione della distribuzione float sim = rand()%maxdue ; // ci aggiungo anche la parte decimale per avere maggiore precisione float gauss = (sim)+fValore ; // mi sposto sull'estremo inferiore della distribuzione centrata in angle // cio�appunto angle meno triplosigma float inferiore = (angle - (singolo)); // ho definito un intervallo centrato in Angle di ampiezza 3sigma // all interno del quale e' contenuto "estrazione" float estrazione = inferiore + gauss; //effettuo la conversione in radianti double conversionerad = (estrazione/57.325); //return estrazione; cout << "All'estrazione di " << endl; cout << estrazione << endl; cout << "Gradi dell'Angolo percepito corrispondono" << endl; cout << conversionerad << endl; cout << "radianti" << endl; cout << i << endl; } cout << "INIZIO SECONDA SEZIONE VETTORE" << endl; for (int i = 69; i <= 81; i++) { // numero decimale con la virgola per aumentare la precisione o meglio // la sensibilit�dell'antenna float fValore = (float)rand() / (float)RAND_MAX; // valore che pu�assumere un campione della distribuzione float sim = rand()%maxuno ; // ci aggiungo anche la parte decimale per avere maggiore precisione float gauss = (sim)+fValore ; // mi sposto sull'estremo inferiore della distribuzione centrata in angle // cio�appunto angle meno triplosigma float inferiore = (angle - (doppio)); // ho definito un intervallo centrato in Angle di ampiezza 3sigma // all interno del quale e' contenuto "estrazione" float estrazione = inferiore + gauss; //effettuo la conversione in radianti double conversionerad = (estrazione/57.325); //return estrazione; cout << "All'estrazione di " << endl; cout << estrazione << endl; cout << "Gradi dell'Angolo percepito corrispondono" << endl; cout << conversionerad << endl; cout << "radianti" << endl; cout << i << endl; } cout << "INIZIO TERZA SEZIONE VETTORE" << endl; for (int i = 82; i <= 95; i++) { // numero decimale con la virgola per aumentare la precisione o meglio // la sensibilit�dell'antenna float fValore = (float)rand() / (float)RAND_MAX; // valore che pu�assumere un campione della distribuzione float sim = rand()%maxuno ; // ci aggiungo anche la parte decimale per avere maggiore precisione float gauss = (sim)+fValore ; // mi sposto sull'estremo inferiore della distribuzione centrata in angle // cio�appunto angle meno triplosigma float inferiore = (angle + (singolo)); // ho definito un intervallo centrato in Angle di ampiezza 3sigma // all interno del quale e' contenuto "estrazione" float estrazione = inferiore + gauss; //effettuo la conversione in radianti double conversionerad = (estrazione/57.325); //return estrazione; cout << "All'estrazione di " << endl; cout << estrazione << endl; cout << "Gradi dell'Angolo percepito corrispondono" << endl; cout << conversionerad << endl; cout << "radianti" << endl; cout << i << endl; } cout << "INIZIO ULTIMA SEZIONE VETTORE" << endl; for (int i = 96; i <= 100; i++) { // numero decimale con la virgola per aumentare la precisione o meglio // la sensibilità dell'antenna float fValore = (float)rand() / (float)RAND_MAX; // valore che pu�assumere un campione della distribuzione float sim = rand()%maxuno ; // ci aggiungo anche la parte decimale per avere maggiore precisione float gauss = (sim)+fValore ; // mi sposto sull'estremo inferiore della distribuzione centrata in angle // cio�appunto angle meno triplosigma float inferiore = (angle - (triplo)); // ho definito un intervallo centrato in Angle di ampiezza 3sigma // all interno del quale e' contenuto "estrazione" float estrazione = inferiore + gauss; //effettuo la conversione in radianti double conversionerad = (estrazione/57.325); //return estrazione; cout << "All'estrazione di " << endl; cout << estrazione << endl; cout << "Gradi dell'Angolo percepito corrispondono" << endl; cout << conversionerad << endl; cout << "radianti" << endl; cout << i << endl; } cout << "Press ENTER to continue..." << endl; cin.get(); return 0; } Grazie a tutti in anticipo!! | 
|   |   | 
|  24-01-2007, 23:21 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		L'indentazione dov'è ? Così ci si capisce poco... Usa il tag code del forum... Spigati cosa intendi per "salvare"... Vuoi mettere i vari numeri in un vettore ? double vett[100]; Nei vari for memorizzi i numeri nel vettore tramite l'indice...vett[i-1] | 
|   |   | 
|  24-01-2007, 23:30 | #3 | 
| Senior Member Iscritto dal: Nov 2005 
					Messaggi: 2777
				 | Codice: #include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
typedef struct{
    float degree;
    double rad;
    }angolo;
int main(){
double angle = 180;
// concetto di misura: la misura �data dal valor vero +- una certa incertezza
// data appunto dallo strumento di misurazione 
// un buon strumento di misura , come assumiamo che sia la nostra antenna
// ha una precisione dell'ordine del 5% della grandezza misurata che �
// appunto il valore dell'angolo.
// Assumo che l'incertezza abbia un valore pari a 3sigma sfruttando cos�la propriet�
// della distribuzione di Gauss che mi garantisce una probabilit�pari al 99.7% 
// di estrarre all'interno del nostro campione la Media della distribuzione
// della popolazione Madre 
//IMPLEMENTAZIONE
// scelgo 3sigma = all'incertezza cio�appunto a 5% del valore dell'angolo 
float triplo = (0.05*angle);
float singolo = (triplo/3);
float doppio = (singolo*2);
// impongo il valore di 3sigma= alla precisione dell'antenna * angolo non affetto
// da errore (cio�* la Media della distribuzione di Gauss)
int maxuno = ((((int)singolo)));
int maxdue = ((((int)doppio)));
int maxtre = ((((int)triplo)));
srand(time(0)); // inizializzo il seme per il calcolo dei numeri random
angolo angoli[100];
for (int i = 1; i <= 68; i++) {
    // numero decimale con la virgola per aumentare la precisione o meglio
    // la sensibilit�dell'antenna 
    float fValore = (float)rand() / (float)RAND_MAX;
    // valore che pu�assumere un campione della distribuzione 
    float sim = rand()%maxdue ;
    // ci aggiungo anche la parte decimale per avere maggiore precisione
    float gauss = (sim)+fValore ;
    // mi sposto sull'estremo inferiore della distribuzione centrata in angle
    // cio�appunto angle meno triplosigma
    float inferiore = (angle - (singolo));
    // ho definito un intervallo centrato in Angle di ampiezza 3sigma 
    // all interno del quale e' contenuto "estrazione"
    float estrazione = inferiore + gauss;
    //effettuo la conversione in radianti
    double conversionerad = (estrazione/57.325);
    angoli[i-1].degree=estrazione;
    angoli[i-1].rad =conversionerad;
    }
    
for (int i = 69; i <= 81; i++) {
    // numero decimale con la virgola per aumentare la precisione o meglio
    // la sensibilit�dell'antenna 
    float fValore = (float)rand() / (float)RAND_MAX;
    // valore che pu�assumere un campione della distribuzione 
    float sim = rand()%maxuno ;
    // ci aggiungo anche la parte decimale per avere maggiore precisione
    float gauss = (sim)+fValore ;
    // mi sposto sull'estremo inferiore della distribuzione centrata in angle
    // cio�appunto angle meno triplosigma
    float inferiore = (angle - (doppio));
    // ho definito un intervallo centrato in Angle di ampiezza 3sigma 
    // all interno del quale e' contenuto "estrazione"
    float estrazione = inferiore + gauss;
    //effettuo la conversione in radianti
    double conversionerad = (estrazione/57.325);
    angoli[i-1].degree=estrazione;
    angoli[i-1].rad=conversionerad;
    }
    
for (int i = 82; i <= 95; i++) {
    // numero decimale con la virgola per aumentare la precisione o meglio
    // la sensibilit�dell'antenna 
    float fValore = (float)rand() / (float)RAND_MAX;
    // valore che pu�assumere un campione della distribuzione 
    float sim = rand()%maxuno ;
    // ci aggiungo anche la parte decimale per avere maggiore precisione
    float gauss = (sim)+fValore ;
    // mi sposto sull'estremo inferiore della distribuzione centrata in angle
    // cio�appunto angle meno triplosigma
    float inferiore = (angle + (singolo));
    // ho definito un intervallo centrato in Angle di ampiezza 3sigma 
    // all interno del quale e' contenuto "estrazione"
    float estrazione = inferiore + gauss;
    //effettuo la conversione in radianti
    double conversionerad = (estrazione/57.325);
    angoli[i-1].degree=estrazione;
    angoli[i-1].rad=conversionerad;
    }
for (int i = 96; i <= 100; i++) {
    // numero decimale con la virgola per aumentare la precisione o meglio
    // la sensibilità dell'antenna 
    float fValore = (float)rand() / (float)RAND_MAX;
    // valore che pu�assumere un campione della distribuzione 
    float sim = rand()%maxuno ;
    // ci aggiungo anche la parte decimale per avere maggiore precisione
    float gauss = (sim)+fValore ;
    // mi sposto sull'estremo inferiore della distribuzione centrata in angle
    // cio�appunto angle meno triplosigma
    float inferiore = (angle - (triplo));
    // ho definito un intervallo centrato in Angle di ampiezza 3sigma 
    // all interno del quale e' contenuto "estrazione"
    float estrazione = inferiore + gauss;
    //effettuo la conversione in radianti
    double conversionerad = (estrazione/57.325);    
    angoli[i-1].degree=estrazione;
    angoli[i-1].rad=conversionerad;
    }
//return estrazione;
int i=rand()%100;
cout << "All'estrazione di " << endl;
cout << angoli[i].degree << endl;
cout << "Gradi dell'Angolo percepito corrispondono" << endl;
cout << angoli[i].rad << endl;
cout << "radianti" << endl;
cout << i << endl;
    
cout << "Press ENTER to continue..." << endl; 
cin.get();
return 0;
} | 
|   |   | 
|  24-01-2007, 23:34 | #4 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Nota che tutto questo codice può essere messo in una funzione con max e l'angolo come parametri: // numero decimale con la virgola per aumentare la precisione o meglio // la sensibilit�dell'antenna float fValore = (float)rand() / (float)RAND_MAX; // valore che pu�assumere un campione della distribuzione float sim = rand()%maxuno ; // ci aggiungo anche la parte decimale per avere maggiore precisione float gauss = (sim)+fValore ; // mi sposto sull'estremo inferiore della distribuzione centrata in angle // cio�appunto angle meno triplosigma float inferiore = (angle + (singolo)); // ho definito un intervallo centrato in Angle di ampiezza 3sigma // all interno del quale e' contenuto "estrazione" float estrazione = inferiore + gauss; //effettuo la conversione in radianti double conversionerad = (estrazione/57.325); angoli[i-1].degree=estrazione; angoli[i-1].rad=conversionerad; | 
|   |   | 
|  25-01-2007, 08:48 | #5 | 
| Senior Member Iscritto dal: Dec 2003 
					Messaggi: 704
				 | 
		grazie x l'info.. ma poi in notturna , vedendo qualche esempio non c'ho messo molto a risolvere il problema del salvataggio: ho aggiunto float numGenerati[100]; (ma mi sa che dovrei mettere double...poi vedo) e per ogni ciclo ho fatto appunto.... numGenerati[i]=estrazione; Mi pare che vada bene...Secondo voi? ho fatto qualche errore di cui non mi sono reso conto? Grazie ancora!! PS: una cosa non ho capito... Codice: angoli[i-1].degree=estrazione; angoli[i-1].rad=conversionerad; | 
|   |   | 
|  25-01-2007, 09:44 | #6 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Come ti dicevo puoi creare una funzione con il codice sopra...rendenderebbe il tutto molto + leggibile... Anche l'inserimento di qualche riga vuota, senza commenti, farebbe bene ogni tanto. Devi fare numGenerati[i-1]=estrazione; perchè il tuo ciclo va da 1 a 100, mentre un vettore di 100 elementi va da 0 a 99. Metti pure double. | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 14:03.









 
		 
		 
		 
		







 
  
 



 
                        
                        










