Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] Prb modifica funzione random da int a vector

    Ho questo cod

    codice:
    
    
      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ì:

    codice:
    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






    Grazie agli esperti/e e buona domenica


  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59
    Ciao!!!

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

    codice:
    numero = v.at(rand() % v.size);
    dove v è il tuo vettore di numeri...

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da premoli
    Ciao!!!

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

    codice:
    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
    codice:
    cin >> valorerichiesto;
    push_back(valorerichiesto);
    ------------------------------------------------------------------


    Comunque sia grazie 1000!


  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59
    Cioè tu vuoi caricare il tuo vettore da file?

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    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.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59
    per leggere da file puoi fare una cosa di questo tipo:

    codice:
            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...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.