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

    [c++] problema con valutare un occorrenza ogni tot righe...

    Ho questo file estrazioni.txt

    23,46,2,59,1,
    52,62,77,49,87,
    17,49,67,27,6,
    27,60,89,80,10,
    26,62,39,27,32,
    57,31,6,4,10,
    29,71,13,42,77,
    18,67,31,48,53,
    53,86,87,8,85,

    e un altro combinazioni.txt

    1,7,11,15,16,17,21,22,24,27,30,37,38,39,50,59,60,6 2,73,75,79,80,83,84,85,87,88
    4,7,10,13,14,21,22,26,27,29,30,33,39,40,42,49,55,6 2,65,66,68,71,75,76,85,88,90
    4,7,8,9,13,23,31,33,37,44,45,47,49,52,53,55,56,57, 59,66,70,71,72,76,78,82,89
    2,5,6,11,12,17,20,23,24,26,30,33,34,36,37,38,43,51 ,55,62,66,67,68,69,71,76,89
    15,26,27,30,34,35,38,40,42,43,45,46,51,54,56,58,60 ,64,68,69,70,72,79,82,83,86,88
    2,5,6,7,8,12,17,19,20,25,28,32,44,46,48,49,52,56,5 7,61,64,65,66,71,76,80,82
    2,5,13,18,20,22,24,25,27,29,31,33,43,53,54,57,58,6 3,64,71,72,76,79,81,83,84,88
    10,12,17,19,23,25,27,28,29,35,37,45,46,48,49,50,53 ,56,60,61,67,73,77,78,80,82,86
    3,5,10,13,16,21,22,28,31,34,37,43,44,51,56,60,61,6 4,66,68,70,79,80,81,82,87,89
    1,5,6,14,16,24,25,28,32,34,41,45,47,51,54,55,58,60 ,64,65,67,71,72,74,82,85,88

    Ora valutando le presenze per (due valori) per ogni riga NO PROBLEM...

    Solo che dovrei valutarle per ogni riga e incrementare una terza variabile RA solo se ogni tre righe del file estrazioni.txt ho almeno due occorrenze in qualche riga... delle 3 esaminate...

    E qui mi areno...

    Ho provato con qualcosa del tipo

    codice:
    if (contatoreriga %3 == 0) {
    
    //OK VALUTA RA 
    
    }
    else {
    
    //NO aspetta che si analizzi altre righe
    
    }
    Ma i conti non mi tornano...

    Qualche strada migliore?

    Grazie


  2. #2
    Se ho capito bene (e ne dubito fortemente..) ti interessa analizzare ogni singola tripletta di righe, giusto?

    Precisa meglio per favore..


    A proposito, questa discussione a che punto è? La questione è stata risolta?

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da MdE2005
    Se ho capito bene (e ne dubito fortemente..) ti interessa analizzare ogni singola tripletta di righe, giusto?

    Precisa meglio per favore..
    Ti faccio un es. operativo... con la prima lunghettona di 27 elementi versus (VS) le prime 3 cinquine corrispondenti alle prime 3 estrazioni sulle rispettive prime ruote di BA, CA e FI.

    Dovrei effettuare confronti di questo tipo:

    1,7,11,15,16,17,21,22,24,27,30,37,38,39,50,59,60,6 2,73,75,79,80,83,84,85,87,88

    VS

    23,46,2,59,1, -> se ci sono almeno due valori uguali incrementa contatore di 1
    52,62,77,49,87, -> se ci sono almeno due valori uguali incrementa contatore di 1
    17,49,67,27,6, -> se ci sono almeno due valori uguali incrementa contatore di 1

    dopo aver analizzato 3 cinquine se contatore è !=0 ovvero sono state riscontrate almeno 2 occorrenze uguali in almeno una delle 3 cinquine allora si deve inizializzare il valore RA ponendolo = 0 altrimenti ogni tre cinquine analizzate RA andrà incrementato di 1

    In questo esempio tutte e tre le cinquine presentano almeno 2 valori uguali alla lunghettona di 27 elementi e quindi contatore sarebbe = 3 e l'RA verrebbe azzerato...


    A proposito, questa discussione a che punto è? La questione è stata risolta?
    Si tutto ok.

  4. #4
    Ora è più chiaro il problema, però dovrei sapere che metodo usi per il confronto: non sai come confrontare 3 righe anzichè 1?
    Posta il codice

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da MdE2005
    Ora è più chiaro il problema, però dovrei sapere che metodo usi per il confronto: non sai come confrontare 3 righe anzichè 1?
    Posta il codice

    Dunque...

    questo è quello che mi è venuto in mente per considerare 3 righe alla volta

    codice:
     if ( CONTATORE3RUOTE % 3 == 0) {
                
                CONTATORE3RUOTE=0;
                CONTATOREAMBI3RUOTE=0;
                
                }
    e questo è il codice che ne segue per i vari controlli ...

    codice:
      if (contaxambo > 1) {
                        
           cout << "\n\n";
           cout << "AMBO SCOVATO!";
           
           CONTATOREAMBI3RUOTE++;
           
           cout << "\n\n";
           //cin.get();
           
           cout << "INCREMENTO CONTATOREAMBI3RUOTE di 1";
           cout << "E controllo il suo valore affinche' non superi il valore 3.";
           cout << "In questo caso infatti si dovra' riazzerare";
           cout << "Se il suo valore e' = 0  si incrementera' l'RA";
           cout << " di 1 altrimenti si dovra' porre RA = 0";
           
           
           
           cout << "\n\n";
           cout << "Al momento la situazione e' : ";
           cout << "\n\n";
     
           
           cin.get();
                
           if ( CONTATORE3RUOTE==3 && CONTATOREAMBI3RUOTE != 0) {
                
                
           cout << "\n\n";
           cout << "CONTATORE3RUOTE = ";
           cout << CONTATORE3RUOTE;
         
           cout << "\n\n";
           cout << "CONTATOREAMBI3RUOTE = ";
           cout << CONTATOREAMBI3RUOTE;
           cout << "\n\n";
                
                
           cout << "\n\n";
           cout << "OK! SI PUO' AZZERARE RA!";
           cout << "\n\n";
           
           cout << "\n\n";
           cout << "CONTATORE3RUOTE = ";
           cout << CONTATORE3RUOTE;
           
           cin.get();
           
           
           presenze++;
           conteggio=0;
           //ritardi.push_back(conteggio);
           ritardi[1]=0;
                
           }
           else if( CONTATORE3RUOTE==3 && CONTATOREAMBI3RUOTE == 0)
           {
           
           cout << "\n\n";
           cout << "CONTATORE3RUOTE = ";
           cout << CONTATORE3RUOTE;
         
           cout << "\n\n";
           cout << "CONTATOREAMBI3RUOTE = ";
           cout << CONTATOREAMBI3RUOTE;
           cout << "\n\n";
               
               
               
           cout << "\n\n";
           cout << "OK! SI PUO' INCREMENTARE RA!";
           cout << "\n\n";  
           
           cout << "\n\n";
           cout << "CONTATORE3RUOTE = ";
           cout << CONTATORE3RUOTE;    
           
           cin.get(); 
             
    conteggio++;
    //ritardi.push_back(conteggio);  
    if (conteggio > ritardi[0]) { 
    ritardi[0]=conteggio;
    }
    ritardi[1]=conteggio;
               
               
                
           
          // cin.get();
            
                
         } else {
                
           cout << "\n\n";
           cout << "CONTATORE3RUOTE = ";
           cout << CONTATORE3RUOTE;
         
           cout << "\n\n";
           cout << "CONTATOREAMBI3RUOTE = ";
           cout << CONTATOREAMBI3RUOTE;
           cout << "\n\n";
                
         
           cout << "\n\n";
           cout << "CALMA! NON SI PUO' FARE ANCORA NULLA! ";
           cout << "\n\n"; 
           
           cin.get();
        
        
        }


    NB:Il codice non da errori ma non collima con altri risultati di riferimento...

  6. #6
    A me interessa capire come confronti una riga per volta, il resto è ininfluente senza il procedimento di confronto ed il resto del codice.
    Come fai il confronto? Come carichi il file per la verifica?

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da MdE2005
    A me interessa capire come confronti una riga per volta, il resto è ininfluente senza il procedimento di confronto ed il resto del codice.
    Come fai il confronto? Come carichi il file per la verifica?
    Ciao MdE2005 i punti che hai richiesto non sono un problema e funzionano perfettamente. Lo dimostra il fatto che se esamino ruota per ruota i conti tornano.

    Il mio problema è proprio nell'esaminare 3 righe alla volta e basta verificando o meno per ogni riga del gruppo di tre esaminate la presenza o meno di 2 o piu' valori uguali.

  8. #8
    Originariamente inviato da freetom
    Ciao MdE2005 i punti che hai richiesto non sono un problema e funzionano perfettamente. Lo dimostra il fatto che se esamino ruota per ruota i conti tornano.

    Il mio problema è proprio nell'esaminare 3 righe alla volta e basta verificando o meno per ogni riga del gruppo di tre esaminate la presenza o meno di 2 o piu' valori uguali.
    Se non so come esamini ruota per ruota, come posso fare per suggerirti la valutazione delle 3 righe?

    Per esempio, nel caso di un ciclo for generico, in pseudocodice:
    codice:
    bool primariga, secondariga, terzariga
    for (i=0, i<totalerighe, i=i+3)
    primariga = confronto(riga(i))
    secondariga = confronto(riga(i+1))
    terzariga = confronto(riga(i+2))
    Quindi, senza sapere come le confronti, non posso aiutarti..

  9. #9
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    ok ecco l'intero cod

    Originariamente inviato da MdE2005
    Se non so come esamini ruota per ruota, come posso fare per suggerirti la valutazione delle 3 righe?

    Per esempio, nel caso di un ciclo for generico, in pseudocodice:
    codice:
    bool primariga, secondariga, terzariga
    for (i=0, i<totalerighe, i=i+3)
    primariga = confronto(riga(i))
    secondariga = confronto(riga(i+1))
    terzariga = confronto(riga(i+2))
    Quindi, senza sapere come le confronti, non posso aiutarti..

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <sstream>
    #include <iomanip>
    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #include <cstring>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    string intToString(int value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    string floatToString(float value) {
        stringstream ss;
        ss << value;
        return ss.str();
    }
    
    int main (int argc, char *argv[]) {
    vector<string> vec;
    int contaterzina=0;
    int contatore=0;
    int conteggio=0;
    int presenze=0;
    int presenze3=0;
    
    int contaxambo=0;
    int contaestrazioni=0;
    int conteggio2=0;
    
    vector<int> ritardi;
    vector<int> ritardi2;
    vector<string> terzineconritardi;
    vector<string> terzineconritardi2;
    int contacolpibuoni=0;
    int RAtreruoteunite=0;
    int RStreruoteunite=0;
    
    ifstream fin("27ine.txt");
    if (fin) {
       string s;
       while(fin) // cattura tutti gli errori.
       {
     getline(fin,s);
     //cout << s;
     vec.push_back(s);
     }
    }
    int sz = vec.size()-1;
    for (int x=0; x<sz; x++) {
    cout << vec[x];
    }
        
    cout << "\n\n\n  ESEMPIO DI VISUALIZZAZIONE DI UN ELEMENTO ARRAY ALL'INTERNO: ";
    cout << "\n\n\n";   
    cout << "NUMERO DI ELEMENTI DEL VETTORE: ";
    cout << "\n\n\n"; 
    cout << sz;
    cout << "\n\n\n";
    cout << "Press ENTER to continue...";
    cin.get();
    vector<string> vec2;
    int contatore2=0;
    ifstream f2in("ESTRAZIONI-BACAFI-ok.txt");
    if (f2in) {
    string s;
    while(f2in) // cattura tutti gli errori.
    {
    getline(f2in,s); 
    vec2.push_back(s);
       }
    }
    
    int sz2 = vec2.size()-1;
    for (int x=0; x<sz2; x++) {
    cout << vec2[x];
     }
    cout << "\n\n\n";   
    cout << "NUMERO DI ELEMENTI DEL VETTORE: ";
    cout << "\n\n\n"; 
    cout << sz2;
    cout << "\n\n\n";
    cout << "\n\n\n"; 
    cout << "\n\n\n"; 
    cin.get();
    
    for (int z=0; z<sz; z++)  {
    
    cout << vec[z];
    contaterzina++;
    string testo,estratta;
      vector<string> token;
      int inizio,fine,i,lparola;
      bool continua;
    
      cout << "Estrae tutte le parole contenute in un testo" << endl;
      testo = vec[z];
      continua = true;
      inizio = -1;	/*1*/
      while(continua){
    
        fine = testo.find(',',inizio+1);	/*2*/
        if(fine==-1){	/*3*/
          continua = false;
          fine = testo.length();	/*4*/
        }
    
        lparola = (fine-inizio)-1;	/*5*/
        estratta = testo.substr(inizio+1,lparola);	/*6*/
        token.push_back(estratta);	/*7*/
    
        inizio = fine;	/*8*/
      }
    
    
      cout << "\n\nParole che compongono il testo" << endl;
    for (int z2=0; z2<sz2; z2++)  {
    string testo2,estratta2;
      vector<string> token2;
      int inizio2,fine2,x,lparola2;
      bool continua2;
    
      testo2 = vec2[z2];
    
      continua2 = true;
      inizio2 = -1;	/*1*/
     while(continua2){
    
        fine2 = testo2.find(',',inizio2+1);	/*2*/
    
    
        if(fine2==-1){	/*3*/
         continua2 = false;
         fine2 = testo2.length();	/*4*/
        }
    
    
        lparola2 = (fine2-inizio2)-1;	/*5*/
        estratta2 = testo2.substr(inizio2+1,lparola2);	/*6*/
        token2.push_back(estratta2);	/*7*/
    
        inizio2 = fine2;	/*8*/
      }
    
      cout << "\n\nElementi che compongono la combinazione uscita:\n\n" << endl;
    
      for(x=0;x<token2.size();x++)
    
        cout << token2.at(x) << endl;
        cout << "\n\n";
        cout << "N. ";
        cout << contaterzina;
        cout << "\n";
        cout << "COMBINAZIONE:"+testo<< endl;
    (2)<< endl;
        cout << "\n";
    (2)+","+token2.at(3)+","+token2.at(4)<< endl;
        
        cout << "\n\n";
        cout << "RITARDO A in COMBINAZIONE: ";
        cout << conteggio;
        cout << "\n\n";
    
        
        int contaxambo=0;
        
        for (int y=0; y<token2.size();y++) {
            
        for (x=0; x<token.size();x++)   {
            
         if (token2.at(y)==token.at(x)) {    
           
           contaxambo++;
           cout << "\n\n";
           cout << "QUANTO VALE CONTAPUNTI ADESSO? ";
           cout << contaxambo;
           cout << "\n\n";
           cin.get();
          
          }  
          
          else
          
          {    
          
          }     
          
        }      
            
        } 
    
    cout << "\n\n";
          cout << "punteggi totali x questa estrazione: ";
          cout << contaxambo;
    cout << "\n\n";
          cin.get(); 
     
         if (contaxambo > 1) {
                        
           cout << "\n\n";
           cout << "AMBO SCOVATO!";
           presenze++;
           conteggio=0;
           ritardi.push_back(conteggio);
           cout << "\n\n";
           cin.get();
           
           cout << "INCREMENTO RAtreruoteunite   di 1";
           cout << "E controllo il suo valore affinche' non superi il valore 3. Se > 3 si dovra' riazzerare";
           cout << "Se il suo valore e' = 0  si incrementera' l'RA di 1 altrimenti si dovra' porre RA = 0";
           
           cin.get();
            
                
         } else {
         
        conteggio++;
        ritardi.push_back(conteggio);
        
        
        } 
       
       
       //individuazione valore maximo
       vector<int>::iterator max;
       max = max_element(ritardi.begin(), ritardi.end());
       cout << *max << endl;
       cout << ritardi[ritardi.size()-1] << endl;
       int ritardomassimo =*max;
       //----------------------------
       
       //individuazione valore ultimo
        int ritardoultimo = ritardi[ritardi.size()-1];
        //--------------------------------------------
        
        //individuazione colpirimanenti
        
        int colpirimanenti = *max-(ritardi[ritardi.size()-1]);
        //cout << colpirimanenti ;
        //cout << "\n\n";
        
        //cin.get();
        
        string rapportorars2;
        string contaestrazioni2;
        string colpirimanenti2;
        string ritardomassimo2;
        string ritardoultimo2;
        string presenze2;
        
        
        colpirimanenti2 = intToString(colpirimanenti);
        ritardomassimo2 = intToString(ritardomassimo);
        ritardoultimo2 = intToString(ritardoultimo);
    
        contaestrazioni2 = intToString(contaestrazioni);
        presenze2 = intToString(presenze);
    
           
        string stringariassuntiva = "presenze: "+presenze2+" combinazione: "+testo+" rs: "+ritardomassimo2+" ra: "+ritardoultimo2+" colpirimanenti: "+colpirimanenti2;
        
        
        terzineconritardi.push_back(stringariassuntiva);
        
         }
    
        //prova salvataggio NUMERO PRESENZE x ESTRATTO (E) con relativi parametri su file...
        
        cout << "salvataggio nel primo file txt-";
        //cin.get();
    
        ofstream fout;
    	
    	fout.open("RITARDI-A-su-lunghette-generate-prglento.txt", ios::app);
    
    	
    	//DATO ULTIMO DELLA TERZINA ANALIZZATA...
    	string datoultimoterzina= terzineconritardi[terzineconritardi.size()-1];
    //SE l'ULTIMO CARATTERE di string datoultimoterzina è uguale a 0 o a 1 allora mettimelo nel file //altrimenti nulla...
    	
    	cout << "VERIFICA ULTIMO CARATTERE DELLA STRINGA:";
    	cout << "\n";
    	cout << datoultimoterzina;
    	cout << "\n";
        
        cout << "|"; 
        cout << datoultimoterzina.size()-1;
    	cout << "|";
    	
    	string line;
    
    	line = datoultimoterzina.substr(datoultimoterzina.size()-2, line.length()-1);
    	
    	cout << line;
    	
    	cout << "\n";
    	cout << "\n";
    	cout << "\n";
    	
    	cout << "|";
    	cout << line;
    	cout << "|";
    	cout << "\n";
    	cout << "\n";
    	cout << "\n";
    	cout << "|";
    	cout << line.size();
    	cout << "|";
    	
    	string b,c;
    	
    	b=" 9";
    	c=" 1";
             
             if((line.compare(b) == 0) || (line.compare(c) == 0)) {
                    
                    cout << "\n\n";
                    cout << "OK!";
                    cout << "\n\n";
                    
    	fout << datoultimoterzina;
    	fout << "\n";
                    
        cin.get();
                     
        }         else {
                  
                    cout << "\n\n";
                    cout << "NO!";
                    cout << "\n\n";     
                  
                  }     
    contaestrazioni=0;
    presenze=0;
    presenze3=0;
    conteggio=0;
    conteggio2=0;
    ritardi.clear();
    ritardi2.clear();
    terzineconritardi.clear();
    }
    cout << "\n\n\n"; 
    cout << "Press ENTER to continue...x CHIUDERE..." << endl;
    cout << "\n\n\n"; 
    cin.get();
    }
    l'obiettivo ti ricordo sarebbe quello di calcolare, nel miglior modo possibile in modo che i calcoli tornino con altri programmi molto piu' performanti e ben fatti , il ritardo attuale e quello massimo di tre combinazioni alla volta (ognuna xA) come specificato sopra...

    Mi rendo conto che non sia per nulla facile ma grazie comunque per il tentativo

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.