Aiuto con Matrice

di il
53 risposte

Aiuto con Matrice

Salve a tutti, chiedo un aiuto con una matrice: se ho una matrice MAT[R][C], come faccio a contare gli elementi di una singola riga (o colonna)?
Eserpio: MAT[R][C]={{1, 2, 3}, {2, 2, 2}, {2, 1, 2}}; come faccio a contare la quantità di numeri 2 ad esempio nella seconda riga? Ovviamente con un array sarebbe una banalità, come immagino lo sia anche per una matrice ma non mi esce proprio.. ho provato con:

for(int i=0; i<R; i++){
	for(int j=0; j<C; j++){
		if(MAT[1][J]==2){
			cont++;
		}
	}
}


Così facendo in questo singolo esempio ottengo il risultato che voglio, ma se provo con una matrice più grande, non so il perchè, a volte conta giusto, a volte no, nel senso che a volte(non so in base a cosa) conta anche elementi di un'altra riga.

53 Risposte

  • Re: Aiuto con Matrice

    A parte J maiuscolo che penso sia un refuso, se vuoi una sola riga devi avere un unico for, altrimenti vai a ciclare su R*C elementi qualunque cosa tu faccia...
  • Re: Aiuto con Matrice

    Ho provato così, ma ancora non funziona correttamente:
    
    for(int i=0; i<r; i++){
         if(MAT[1][i]==2){
             cont++;
       }
    }
    
    Ugualmente conta anche righe...
  • Re: Aiuto con Matrice

    Se l'hai dichiarata così:
    
    MAT[R][C]
    
    Nel for devi fare i<C.
  • Re: Aiuto con Matrice

    Alexv ha scritto:


    Se l'hai dichiarata così:
    
    MAT[R][C]
    
    Nel for devi fare i<C.
    Ci ho già provato ma il risultato non cambia.
  • Re: Aiuto con Matrice

    E allora hai sbagliato a monte, no?
  • Re: Aiuto con Matrice

    Weierstrass ha scritto:


    E allora hai sbagliato a monte, no?
    E dove avrei potuto sbagliare?
    In pratica sto scrivendo il gioco della tombola: ho creato una matrice 9 X 10( 9 righe e 10 colonne), l'ho caricata con i numeri da 1 a 90 e ho scritto una funzione per l'estrazione randomica da 1 a 90: estraggo un numero se è presente nella matrice, lo sostituisco con uno 0. Ora qui l'impiccio, devo contare gli zeri per ogni riga in modo che se una riga ha raggiunto due zeri ho fatto Ambo, tre zeri Terno ecc. Ma quando conto gli zeri non mi esce..
  • Re: Aiuto con Matrice

    Non capisco perche non si legge il numero nove nel messaggio precedente..
  • Re: Aiuto con Matrice

    cslash89 ha scritto:


    Weierstrass ha scritto:


    E allora hai sbagliato a monte, no?
    E dove avrei potuto sbagliare?
    Mica siamo telepati.
    Posta il codice di un programma di esempio completo. Solo con la matrice però
  • Re: Aiuto con Matrice

    
    int r=9, c=10, estrazione[90], contaestratti=0, contazeririga=0, n=0;
        char risp;
        int tabellone[r][c];
    	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
        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
        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++;
                    
                }
                }
            }
        }
        
        for(int i=0; i<r; i++){
            cout<<endl;
            for(int j=0; j<c; j++){
                cout<<tabellone[i][j]<<" ";
            }
        }
        
        for(int i=0; i<c; i++){
            if(tabellone[0][i]==0){
                contazeririga++;
            }
        }
        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;
    
    Ecco fatto ho postato direttamente tutto il pezzo di codice che ho sviluppato tanto sono ancora all'inizio.
  • Re: Aiuto con Matrice

    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?
  • Re: Aiuto con Matrice

    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?
    In questo esempio funziona, ma se applico l'algoritmo al codice che ho postato sopra, non funziona sempre bene.
  • Re: Aiuto con Matrice

    cslash89 ha scritto:


    
        do{
    	//FUNZIONE PER ESTRARRE NUMERI CASUALI SENZA RIPETIZIONE
        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;
                }
            }
        }
    
    Ecco fatto ho postato direttamente tutto il pezzo di codice che ho sviluppato tanto sono ancora all'inizio.
    Che sta succedendo qui? Tutto questo casino solo per inizializzare estrazione[0]?

    Togli tutte queste cose inutili se vuoi una mano
  • Re: Aiuto con Matrice

    Weierstrass ha scritto:


    cslash89 ha scritto:


    
        do{
    	//FUNZIONE PER ESTRARRE NUMERI CASUALI SENZA RIPETIZIONE
        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;
                }
            }
        }
    
    Ecco fatto ho postato direttamente tutto il pezzo di codice che ho sviluppato tanto sono ancora all'inizio.
    Che sta succedendo qui? Tutto questo casino solo per inizializzare estrazione[0]?

    Togli tutte queste cose inutili se vuoi una mano
    Questa funzione genera numeri casuali senza ripetizione, perchè non va bene? come dovrei cambiarla?
  • Re: Aiuto con Matrice

    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.
Devi accedere o registrarti per scrivere nel forum
53 risposte