PDA

View Full Version : ARRAY , VETTORE e SALVATAGGIO VALORI


AYAMY
24-01-2007, 19:28
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!!

cionci
24-01-2007, 23:21
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]

wingman87
24-01-2007, 23:30
#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;
}
Te l'ho scritto con un array di strutture, così vedi anche una cosa in più...

cionci
24-01-2007, 23:34
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;

AYAMY
25-01-2007, 08:48
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...
angoli[i-1].degree=estrazione;
angoli[i-1].rad=conversionerad;
in sostanza cosa significano?

cionci
25-01-2007, 09:44
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.