|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#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!! |
|
|
|
|
|
#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] |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
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;
}
|
|
|
|
|
|
#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; |
|
|
|
|
|
#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; |
|
|
|
|
|
#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: 09:26.



















