Aiuto con Matrice

di il
53 risposte

53 Risposte - Pagina 3

  • Re: Aiuto con Matrice

    oregon ha scritto:


    Rileggi il mio post precedente ... modificato
    Grazie mille ora funziona perfettamente! Però non ho capito perchè bisogna azzerare il contatore. Se ho impostato la condizione di incremento solo se lo 0 si trova alla riga 0, non dovrebbe bastare già così?
  • Re: Aiuto con Matrice

    Perché quel pezzo di codice sta dentro un altro ciclo, quindi ci passi più di una volta. Usa un debugger, che secondo me hai bisogno di chiarirti le idee su come procede il flusso di istruzioni
  • Re: Aiuto con Matrice

    Weierstrass ha scritto:


    Perché quel pezzo di codice sta dentro un altro ciclo, quindi ci passi più di una volta. Usa un debugger, che secondo me hai bisogno di chiarirti le idee su come procede il flusso di istruzioni
    Grazie seguirò il tuo consiglio

    Mi permetto di chiederti un'ultima cosa: Io ho fissato la riga della matrice da scansionare manualmente con [0];
    Ovviamente il gioco della tombola prevede di scansionare tutte le righe della matrice e la prima riga che avrà raggiunto minimo 2 zeri stamperà il risultato. Ora devo settarle tutte manualmente con un contatore per ogni riga (quindi 9 cicli e 9 contatori) oppure c'è un modo più automatico dove basta un solo ciclo e un solo contatore?
  • Re: Aiuto con Matrice

    Non ci provi neanche ad arrivarci da solo? In fondo sono questi problemini che "formano" i programmatori ... non chiedere subito, fai i tuoi ragionamenti, sbattici la testa, fai le prove ...
  • Re: Aiuto con Matrice

    cslash89 ha scritto:


    Però non ho capito perchè bisogna azzerare il contatore. Se ho impostato la condizione di incremento solo se lo 0 si trova alla riga 0, non dovrebbe bastare già così?
    Scusa .... se, alla prima estrazione, contazeririga diventa 1 e poi gli dici di fare una nuova estrazione, secondo te contazeririga non avrà il suo valore precedente se non lo azzeri?
  • Re: Aiuto con Matrice

    cslash89 ha scritto:


    Weierstrass ha scritto:


    Perché quel pezzo di codice sta dentro un altro ciclo, quindi ci passi più di una volta. Usa un debugger, che secondo me hai bisogno di chiarirti le idee su come procede il flusso di istruzioni
    Grazie seguirò il tuo consiglio

    Mi permetto di chiederti un'ultima cosa: Io ho fissato la riga della matrice da scansionare manualmente con [0];
    Ovviamente il gioco della tombola prevede di scansionare tutte le righe della matrice e la prima riga che avrà raggiunto minimo 2 zeri stamperà il risultato. Ora devo settarle tutte manualmente con un contatore per ogni riga (quindi 9 cicli e 9 contatori) oppure c'è un modo più automatico dove basta un solo ciclo e un solo contatore?



    Certo hai ragione, ci stavo ragionando su velocemente e sono andato subito nel panico solo a pensare che avrei dovuto fare tutto manualmente quindi mi sono avventato a chiedere Ci ragionerò su per un pò
  • Re: Aiuto con Matrice

    Ma

    Io sono dubbioso


    A parte il fatto di riazzerare il contatore, vero ma non ancora necessario, dato che non ha ancora mai cambiato riga

    Ma secondo me va, c'è qualche inghippo nascosto

    Vorrei vedere La Stampa della matrice prima del conteggio e il risultato del conteggio stesso,
  • Re: Aiuto con Matrice

    Scusatemi l'intromissione ma è per capire una cosa mia..
    Nel codice al FOR dove viene controllato il tabellone e quando trova il numero estratto lo sostituisce con 0, invece di riutilizzare altri FOR successivamente per riscorrere la matrice non si può direttamente scorrere la matrice per righe invece che per colonne e con un controllo incrementare già la variabile per vedere se è stato fatto ambo o più?


    se è una cavolata scusatemi per quello che ho chiesto
  • Re: Aiuto con Matrice

    Non male come idea
  • Re: Aiuto con Matrice

    StandardOil ha scritto:


    Non male come idea
    cosi arrossisco...
  • Re: Aiuto con Matrice

    Devil_Dante90 ha scritto:


    Scusatemi l'intromissione ma è per capire una cosa mia..
    Nel codice al FOR dove viene controllato il tabellone e quando trova il numero estratto lo sostituisce con 0, invece di riutilizzare altri FOR successivamente per riscorrere la matrice non si può direttamente scorrere la matrice per righe invece che per colonne e con un controllo incrementare già la variabile per vedere se è stato fatto ambo o più?


    se è una cavolata scusatemi per quello che ho chiesto
    Infatti è inutile fare un for in più, ma anche così, il gioco non è completo, gli ambi, terni ecc, si devono controllare anche sulle schede che vengono distribuite ai partecipanti.
    @ cslash89
    Anche se cancelli tutti i numeri usciti dal tabellone, devi ancora fare altro lavoro.
    Il tuo codice con qualche ottimizzazione e consiglio, ma altro si può fare.
    
    #include <iostream>
    #include <time.h>
    #include <iomanip>
    #include <conio.h>
    using namespace std;
    
    // Vettore che contiene i nomi dei risultati, il conteggio degli zeri sarà usato come indice
    const string nomi[]={"        ", "singolo ","ambo    ","terno   ","quaterna","cinquina"};
    
    int main(){
    
        int r=9, c=10, estrazione[89]={0}, contaestratti=0, contazeririga=0, n=0;
        char risp;
        int tabellone[r][c];
        //CARICO E STAMPO LA MATRICE // inutile, la riempi dopo con i numeri progressivi
    	/* for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                tabellone[i][j]=0;
            }
        }*/
    
        // riempimento con numeri progressivi
        for(int i=0; i<r; i++){
            for(int j=0; j<c; j++){
                tabellone[i][j]=++n;
            }
        }
    
        cout<<"Visualizzazione tabellone ordinato"<<endl<<endl;
        for(int i=0; i<r; i++){
            for(int j=0; j<c; j++){
                cout<<setfill('0')<<setw(2)<<tabellone[i][j]<<" "; // numero formattato con zero avanti se serve
            }
            cout<<endl;
        }
        cout<<endl<<endl;
    	//FUNZIONE PER ESTRARRE NUMERI CASUALI SENZA RIPETIZIONE(SBAGLIATA!)// e se li estrai tutti all'inizio?
        /*for(int i=0; i<1; i++){
            estrazione[i]=(rand()%90+1);
            for(int j=0; j<i; j++){
                if(estrazione[i]==estrazione[j]){
                    i--;
                    break;
                }
            }
        }*/
        srand((unsigned) time(NULL));
        int ind=0;
        estrazione[ind] = rand() % 90 + 1;
        while (ind<89){ // con il while esci solo quando tutti i numeri sono estratti
            //RIEMPIMENTO Vettore con 90 numeri casuali senza ripetizioni
            ind++;
            estrazione[ind] = rand() % 90 + 1; //(1/90)
            for (int check= 0; check<ind; check++){
                if (estrazione[check]==estrazione[ind]){ind--;break;}
            }
        }
        // verifica numeri segreti già estratti.
        cout<<"Visualizzazione sequenza casuale generata, deve essere segreta: "<<endl<<endl;
        for(int i=0; i<90; i++){
            cout<<setfill('0')<<setw(2)<<estrazione[i]<<" ";
        }
        //FINE FUNZIONE DI ESTRAZIONE
        //PARTE IL CONFRONTO: SE IL NUMERO ESTRATTO È PRESENTE NELLA MATRICE, IL NUMERO NELLA MATRICE DIVENTA 0.
        contaestratti = 0;
        do{ // codice che verrà ripetuto se si vuole una nuova estrazione
            for(int i=0; i<r; i++){
                for(int j=0; j<c; j++){
                    if(tabellone[i][j]==estrazione[contaestratti]){
                        tabellone[i][j]=0;
                        break;
                    }
                }
            }
            cout<<endl<<endl<<"Premi un tasto per estrarre...";
            getch();
    
            //STAMPO LA MATRICE AGGIORNATA e l'elenco degli estratti
            system ("cls");
            cout<<" estrazione N. "<<contaestratti+1<<endl<<" cronologia estrazioni: "<<endl<<endl;
            for(int i=0; i<=contaestratti; i++){
                cout<<setfill('0')<<setw(2)<<estrazione[i]<<"  ";
            }
            cout<<endl;
            int rig = 0;
            int contazeriDX = 0;
            int contazeriSX = 0;
            for(rig=0; rig<r; rig++){
                if (rig%3==0) cout<<endl<<endl; else cout<<endl; // spaziare le tessere
                cout<<" ";
                for(int j=0; j<c; j++){
                    cout<<setfill('0')<<setw(2)<<tabellone[rig][j]<<" ";
                    if (j==4) cout<<" "; // spaziare le tessere
                    if (tabellone[rig][j] == 0 && j<5) contazeriDX++; // già che ci sei conti gli zeri
                    if (tabellone[rig][j] == 0 && j>4) contazeriSX++; // già che ci sei conti gli zeri
                }
            cout<<"  R."<<rig+1<<" schedaSX: "<<nomi[contazeriDX]<<"   schedaDX: "<<nomi[contazeriSX];
            contazeriDX = 0;
            contazeriSX = 0;
            }
            contaestratti++;
            /*
            //QUI C'È IL PROBLEMA: SE CONTO I NUMERI 0 AD ESEMPIO DELLA RIGA 0 CONTA ANCHE GLI 0 DELLA RIGA SUCCESSIVA.
            // non serve ripetere il ciclo, per verificare gli zeri
            for(int i=0; i<c; i++){
                if(tabellone[0][i]==0){
                    contazeririga++;
                }
            }
    
            //OVVIAMENTE NON FUNZIONANDO BENE IL CONTEGGIO, MI DICE CHE AMBO ANCHE SE NELLA RIGA HO 1 SOLO 0.
            cout<<endl;
            if(contazeririga==2){
                cout<<"ambo"<<endl;
            }
            cout<<endl;
            cout<<"Numeri usciti: "<<contaestratti<<endl;
            cout<<"zeri per riga: "<<contazeririga<<endl;
            cout<<"ripetere l'estrazione?";*/
    
        }while(contaestratti<90);
        cout<<endl<<endl<<"Tabellone terminato..."<<endl<<endl;
        getch();
    
        return 0;
    }
    
  • Re: Aiuto con Matrice

    @Rubik ... ma perché subito il tuo codice senza dargli il modo di ragionare e arrivare da solo ad una soluzione? Secondo me questa tua ansia di proporre codice completo e non suggerimenti è controproducente.

    A lui non servono le ottimizzazioni altrimenti anche il tuo codice sarebbe da rifare. A lui serve imparare intanto come risolvere i singoli problemi che gli si pongono e avrebbe fatto bene a risolvere la questione del conteggio nelle varie righe da solo prima di 'ottimizzare'...

    Mi asterrò dal proporre suggerimenti in questa sezione finché arriverà puntualmente la tua pappa pronta.
  • Re: Aiuto con Matrice

    @Rubik

    Proponi altri thread su altri argomenti più avanzati. Tanto, come vedi, l'OP non ha nemmeno voglia di studiarsi le basi del ciclo for...
  • Re: Aiuto con Matrice

    @ cslash89
    Sto studiando C/C++ come te, sono uno studente e non un maestro.
    Ho notato da parte tua impegno e curiosità per cercare il sistema giusto per ottenere dei risultati, il codice che ti ho postato è il tuo, con piccole correzioni. Le correzioni e i perché sono evidenziate nei commenti. In risposta ad una tua domanda che più o meno diceva: "non è che devo scrivere tutto... ci sarà un sistema" ho aggiunto un vettore di stringhe che contiene i nomi dei risultati: ambo, terno, ecc, per mostrarti come convertire il conteggio degli zeri, in un indice da usare per selezionare le parole volute nel vettore, solo questa non è farina del tuo sacco.
    Visto che sono nuovo nel postare nei forum, ti chiedo: "ritieni che il mio approcio sia diseducativo?"
    oregon e Weierstrass, in questi due giorni ti hanno fornito varie spiegazioni...
    Sii sincero, ho sempre ritenuto che un esempio sia la giusta conclusione di una spiegazione, sbaglio?

    Tornando al programma, dovrai scrivere tutta la gestione dei giocatori, con relativa consegna di schede ed eventuale puntate in denaro virtuale.
  • Re: Aiuto con Matrice

    Rubik ha scritto:


    @ cslash89
    il mio approcio sia diseducativo?
    Il tuo approccio è sicuramente diseducativo e aumenta la confusione di chi sta imparando e non impara al tuo ritmo ma al proprio ritmo.
    dovrai scrivere tutta la gestione dei giocatori, con relativa consegna di schede ed eventuale puntate in denaro virtuale.
    Ma PERCHE' dovrà fare tutto questo? Magari il suo scopo è lavorare con il tabellone e capire alcuni concetti base di gestione delle matrici. Del resto ha problemi con i contatori quindi non direi che mettere troppa carne al fuoco lo aiuti.
Devi accedere o registrarti per scrivere nel forum
53 risposte