PDA

Visualizza la versione completa : [c++] Prb modifica funzione random da int a vector


freetom
29-04-2012, 09:11
Ho questo cod






cout << "Quanti numeri?: ";
cin >> numeri;
cout << "\n"<<endl;
cout << "Quante combinazioni?: ";
cin >> combinazioni;
cout << "\nNumero iniziale?: ";
cin >> inizio;
cout << "\nNumero finale?: ";
cin >> fine;

finale=fine-(inizio+1);




che eseguendo mi genera le combinazioni volute nel range desiderato e limitato dai valori scelti da riga di comando inizio e fine. Lo vorrei modificare al fine di avere in finale non gli elementi nel range sopradetto ma definiti da riga di comando ad esempio mediante un semplice copia incolla...

Es.

il cout dovrebbe cambiare da "Numero iniziale? e Numero finale?" in
"numeri desiderati per la generazione delle combinazioni?"

In tal modo dovrebbe bastare un semplice copia incolla della lista di numeri intervallati da virgola voluti sulla riga richiesta dal comando cin per popolare correttamente il vector finale con i numeri desiderati.

Ora nell'esempio sopra postato finale è un int mentre io lo dovrei trasformare in vector

e l'ho già provato a fare così:




using namespace std;

//funzione per popolare il vector finale per prova... con valori fissi

template <class T>
void init(vector<T>& v,unsigned int n, ...)
{
T temp;
va_list vl;
va_start(vl,n);
for(unsigned int j=0;j<n;j++)
{
temp=va_arg(vl,T);
v.push_back(temp);
}
va_end(vl);
}



vector<int<finale>;

//inizializzazioe di finale con i valori fissi di prova...

init(finale,10,3,5,7,9,11,12,14,18,21,25);


//e non darebbe nessun errore se non durante l'operazione di geenrazione combinazione
//random con i valori voluti ovverosia gli elementi di finale...

//Infatti la vecchia operazione si riferiva d interi e non ad un vector...


numero = rand() % finale+2 + inizio;

//La domanda è... come posso trasformare questa funzione di generazione random per interi // in una funzione analoga che funzioni per il vector finale?




Provo a riformulare la domanda che ho posto nel codice in altri termini...
Come posso dato un vector popolato di valori interi definiti... estrapolare da questo un valore in modo random (casuale) e assegnarlo ad una variabile int numero?
Es. ho un vector numeridisponibili contenente: 10,3,5,7,9,11,12,14,18,21,25

Voglio che la variabile int numero assumi un valore casuale tra quelli disponibili nel vector numeridisponibili... E quindi dovrà essere in modo random o 10 o 3 o 5 o 7 o 9 o 11 o 12 o 14 o 18 o 21 o 25 ma non ad es. 89

:popcorn:




Grazie agli esperti/e e buona domenica

:ciauz:

premoli
29-04-2012, 09:53
Ciao!!!

Se non ho capito male, allora potresti risolvere semplicemente con:



numero = v.at(rand() % v.size);


dove v è il tuo vettore di numeri...

freetom
29-04-2012, 12:45
Originariamente inviato da premoli
Ciao!!!

Se non ho capito male, allora potresti risolvere semplicemente con:



numero = v.at(rand() % v.size);


dove v è il tuo vettore di numeri...

Grazie mille la tua soluzione funziona benissimo!

Adesso sapresti mica dirmi come caricare da CIN il vettore con una lista di numeri voluti semplicemente copiandoli da un txt, dove magari sono in una riga intervallati da una virgola, incollandoli su riga di comando alla richiesta del programma di dati input visualizzata ad esempio da un cout "Numeri voluti? "

------------------------------------------------------------------
Es. vari step di come dovrebbe funzionare...
step1) Numeri voluti?
step2) (copio e incollo su riga di comando) 1,4,25,37,40,55,62,77,81,90
step3) il vector numeridisponibili si carica automaticamente di questi valori...
senza doverli inserirli uno ad uno magari mediante un tedioso


cin >> valorerichiesto;
push_back(valorerichiesto);

------------------------------------------------------------------


Comunque sia grazie 1000!

:ciauz:

premoli
29-04-2012, 12:50
Cioè tu vuoi caricare il tuo vettore da file?

freetom
29-04-2012, 12:53
Originariamente inviato da premoli
Cioè tu vuoi caricare il tuo vettore da file?

Preferirei da riga di comando come ti ho scritto nei 3 step ma se non fosse possibile si mi andrebbe bene anche se riuscisse a caricare il vettore da file

es:

ho un file

gruppodesiderato.txt

contenente : 5,12,15,25,37,82,84

Se eseguendo il programma il vector si caricasse dei 7 valori della riga del file, mi andrebbe benissimo.

premoli
29-04-2012, 13:55
per leggere da file puoi fare una cosa di questo tipo:



ifstream in("file.txt");

while(!in.eof())
{
in >> n;
v.push_back(n);
}
in.close();



naturalmente io te l'ho solo abbozzato, tu dovrai fare i vari controlli per vedere se l'apertura è andata a buon fine ecc ecc...

in questo caso ho supposto che il file abbia una formattazione di questo tipo:
1 2 3 4 5 6 7 8 9 10...

quindi ogni numero è separato da uno spazio non dalla virgola...

Loading