Aiuto con Matrice

di il
53 risposte

53 Risposte - Pagina 2

  • Re: Aiuto con Matrice

    Weierstrass ha scritto:


    Ascolta, non puoi pretendere di fare cose a caso e che poi la gente ti segua.
    Al primo giro i = 0, poi dentro il for interno j = 0, 0 < 0 è falso ed esci dal for interno, i diventa 1, 1 < 1 è falso quindi esci dal for esterno e poi dal do.
    Onestamente questa funzione l'ho trovata in rete, l'ho adattata, provata, funzionava e l'ho lasciata.

    questa è la funzione da me copiata e adattata:
    
    for(i=0;i<N;i++) {
        	     a[i]=rand()%30+1;
        	     for(j=0;j<i;j++) {
           		if(a[i]==a[j]) {
                	   i--;
                	   break;
                }
             }
           }
    
  • Re: Aiuto con Matrice

    Sì ma così tu trovi una cosa a caso su internet, fai un po' di tentativi a caso sperando che funzioni, poi accadono cose che non comprendi e speri che te le risolva qualcun altro. Ma cosa ottieni? Riuscirai mai a imparare qualcosa?

    Estrazione lo inizializzi da estrazione[0] = 1 fino a estrazione[89] = 90, in ordine. Poi fai il cosiddetto "array shuffle": estrai un numero da 0 a 89, il numero n che ti esce è la posizione dell'array che dovrai scambiare (estrazione[0] lo scambi di posto con estrazione[n]); poi estrai un numero da 1 a 89, il numero n che ti esce è la posizione che dovrai scambiare (estrazione[1] lo scambi di posto con estrazione[n]); e così via.

    Prova tu
  • Re: Aiuto con Matrice

    Weierstrass ha scritto:


    Sì ma così tu trovi una cosa a caso su internet, fai un po' di tentativi a caso sperando che funzioni, poi accadono cose che non comprendi e speri che te le risolva qualcun altro. Ma cosa ottieni? Riuscirai mai a imparare qualcosa?

    Estrazione lo inizializzi da estrazione[0] = 1 fino a estrazione[89] = 90, in ordine. Poi fai il cosiddetto "array shuffle": estrai un numero da 0 a 89, il numero n che ti esce è la posizione dell'array che dovrai scambiare (estrazione[0] lo scambi di posto con estrazione[n]; poi estrai un numero da 1 a 89, il numero n che ti esce è la posizione che dovrai scambiare (estrazione[1] lo scambi di posto con estrazione[n]); e così via.

    Prova tu

    Bhè non mi ci ero soffermato perchè come detto prima funzionava, e mi sono concentrato sul nocciolo della questione che non riuscivo a sviluppare ovvero il conteggio degli elementi delle righe. Domani vedo di aggiustare la funzione delle estrazioni random non ripetute.
  • Re: Aiuto con Matrice

    Mi sa che la discussione sta andando oltre il problema del titolo. Risolvi quello che hai chiesto sulla ricerca nell'area e poi passa ad altro in nuovi thread... altrimenti diventa solo l'ennesimo discussione confusa...
  • Re: Aiuto con Matrice

    Come ti hanno consigliato, per domande nuove discussione nuova.
    Il tuo problema iniziale è stato risolto, come già ti ha confermato oregon:

    oregon ha scritto:


    Tornando all'esempio iniziale, questo codice
    
    	int MAT[R][C] = { { 1, 2, 3 },{ 2, 2, 2 },{ 2, 1, 2 } };
    	int cont = 0;
    
    	for (int r = 0; r < R; r++)
    	{
    		for (int c = 0; c < C; c++)
    			printf("%d ", MAT[r][c]);
    
    		printf("\n");
    	}
    
    
    	for (int c=0; c<C; c++) {
    		if (MAT[1][c] == 2) {
    			cont++;
    		}
    	}
    
    	printf("\n%d\n", cont);
    
    fornisce questo risultato

    1 2 3
    2 2 2
    2 1 2

    3

    Cosa non va in questo?
    Gli errori ti sono stati corretti, ora per la nuova domanda ti consiglio di mettere all'inizio il linguaggio, poi la domanda, es: "C++ generare numeri a caso senza ripetizioni"
    Se scomponi il problema gli aiuti saranno più mirati.
  • Re: Aiuto con Matrice

    Si, avete ragione, si sta andando OT perchè nel provare a capire il perchè non riuscivo a contare gli elementi della riga di una matrice, Weierstrass mi ha fatto giustamente notare che ho scritto(copiato) un pezzo di codice che a quanto pare non è giusto.(Weirestrass ti ringrazio per il suggerimento di ieri, ma non sono riuscito a produrre il codice nonostante il tuo aiuto.). Penso che aprirò una discussione dedicata.
  • Re: Aiuto con Matrice

    Sì ma questa discussione come è finita? Hai visto l'esempio? Hai risolto?
  • Re: Aiuto con Matrice

    oregon ha scritto:


    Sì ma questa discussione come è finita? Hai visto l'esempio? Hai risolto?
    Veramente non ho risolto ancora. Anche applicando l'algoritmo giusto da voi fornitomi per contare gli elementi di una riga in una matrice, ancora mi conta anche gli elementi di altre righe. Evidentemente ci sono altri nel errori nel mio codice, oltre la funzione per generare numeri casuali non ripetuti che fanno sballare il conteggio.
  • Re: Aiuto con Matrice

    Allora metti qui l'ultimo codice
  • Re: Aiuto con Matrice

    StandardOil ha scritto:


    Allora metti qui l'ultimo codice
    Il codice è lo stesso di ieri non ho fatto progressi in merito. Comunque lo riposto qui:
    
    int r=9, c=10, estrazione[90], contaestratti=0, contazeririga=0, n=0;
        char risp;
        int tabellone[r][c];
        //CARICO E STAMPO LA MATRICE
    	for(int i=0; i<r; i++){
            
               for(int j=0; j<c; j++){
                tabellone[i][j]=0;
            }
            
        }
        
        for(int i=0; i<r; i++){
            
            for(int j=0; j<c; j++){
                tabellone[i][j]=++n;
            }
            
        }
        
        
        srand((unsigned) time(NULL));
        
        for(int i=0; i<r; i++){
            
            for(int j=0; j<c; j++){
                cout<<tabellone[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl<<endl;
        do{
    	//FUNZIONE PER ESTRARRE NUMERI CASUALI SENZA RIPETIZIONE(SBAGLIATA!)
        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;
                }
            }
        }
        
        for(int i=0; i<1; i++){
            cout<<estrazione[i]<<endl;
        }
        //FINE FUNZIONE DI ESTRAZIONE
        //PARTE IL CONFRONTO: SE IL NUMERO ESTRATTO È PRESENTE NELLA MATRICE, IL NUMERO NELLA MATRICE DIVENTA 0.
        for(int i=0; i<r; i++){
            
            for(int j=0; j<c; j++){
                for(int e=0; e<1; e++){
                if(tabellone[i][j]==estrazione[e]){
                    tabellone[i][j]=0;
                    contaestratti++;
                    
                }
                }
            }
        }
        //STAMPO LA MATRICE AGGIORNATA
        for(int i=0; i<r; i++){
            cout<<endl;
            for(int j=0; j<c; j++){
                cout<<tabellone[i][j]<<" ";
            }
        }
        //QUI C'È IL PROBLEMA: SE CONTO I NUMERI 0 AD ESEMPIO DELLA RIGA 0 CONTA ANCHE GLI 0 DELLA RIGA SUCCESSIVA.
        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?";
        cin>>risp;
        }while(risp=='s');
    
        return 0;
    
  • Re: Aiuto con Matrice

    Scusa ma il codice che mostri adesso e quello che hai mostrato all'inizio sono cose diverse.

    Quindi o si parla del codice del PRIMO post e chiariamo o ci dici quale parte del codice che hai mostrato adesso non va e perché.

    Comunque, se fai un po' di debugging, comprendi facilmente dove sta il problema.
  • Re: Aiuto con Matrice

    oregon ha scritto:


    Scusa ma il codice che mostri adesso e quello che hai mostrato all'inizio sono cose diverse.

    Quindi o si parla del codice del PRIMO post e chiariamo o ci dici quale parte del codice che hai mostrato adesso non va e perché.

    Comunque, se fai un po' di debugging, comprendi facilmente dove sta il problema.
    Io sto facendo un esercizio in cui scrivo il codice per il gioco della tombola. Sono arrivato ad un punto in cui dovevo contare gli elementi di una riga in una matrice e non ci riuscivo quindi ho chiesto un aiuto in questo forum, ma all'inizio del topic piuttosto che postare tutto l'esercizio, ho creato una matrice al volo per capire dove sbagliavo nell'algoritmo. Dovevo poi adattare la soluzione all'esercizio che sto facendo, ma non funziona. Spero di aver spiegato bene la situazione.
  • Re: Aiuto con Matrice

    Il problema è determinato dal fatto che non azzeri il contatore
    [Code] //QUI C'È IL PROBLEMA: SE CONTO I NUMERI 0 AD ESEMPIO DELLA RIGA 0 CONTA ANCHE GLI 0 DELLA RIGA SUCCESSIVA. contazeririga = 0; // Questo deve essere sempre azzerato altrimenti accumuli i valori ... ecco il problema for(int i=0; i<c; i++){ if(tabellone[0][i]==0){ contazeririga++; } }
  • Re: Aiuto con Matrice

    oregon ha scritto:


    Il problema è dunque nella parte segnata da
    [Code] QUI C'È IL PROBLEMA: SE CONTO I NUMERI 0 AD ESEMPIO DELLA RIGA 0 CONTA ANCHE GLI 0 DELLA RIGA SUCCESSIVA. for(int i=0; i<c; i++){ if(tabellone[0][i]==0){ contazeririga++; } } ma a me pare corretta. Perché conti gli zeri nel tabellone?
    Esattamente. Nel tabellone ho due contatori di "zeri" uno che conta gli zeri totali, ma è superfluo mi serviva a me per vedere se tutto girava con regolarità, poi c'è il contatore "importante" che conta i numeri 0 in una riga, se una riga ha 2 zeri significa che il giocatore ha fatto Ambo, se ne ha 3 Terno ecc. Riguardo il pezzo di codice non so che dirti... gira così: cambia in 0 un numero della riga 0 e ok, il contatore va a 1, all'estrazione subito successiva, anche se cambia in 0 un numero della riga r, il contatore va lo stesso a 2, e stampa Ambo, anche se nella riga 0 ho un solo 0.
  • Re: Aiuto con Matrice

    Rileggi il mio post precedente ... modificato
Devi accedere o registrarti per scrivere nel forum
53 risposte