Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: C controllare una riga

  1. #1

    C controllare una riga

    codice:
    void controllariga()
    {
        int i,j,cont=0;
        for(i=0;i<larghezza_colonne;i++)
        {
            for(j=0; j<altezza_righe;j++)
            {
                while(j<20)
                {
                    if(mappa2[i][j])
                    cont++;
                }
            }
    
                if(cont<20)
                cont=0;
                else if(cont==20)
                mappa2[i][j]=mappa2[i-1][j];
    
    }
    }//fine controlla riga
    Ciao a tutti
    ho scritto questa funzione che mi dice se in una riga sono presenti tutti 1, il problema è che non mi funziona, qualcuno mi sa dire il perchè. lo so che sto generalizzando tantissimo, ma almeno sintatticamente è corretta la mia funzione. grazie in anticipo

  2. #2
    ah dimenticavo, nella funzione se trovo tutti 1 cancello la riga.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    cont va azzerato anche se è uguale a 20.
    Per il resto non ho capito cosa significa per te "cancellare una riga", di che tipo è la matrice, ne cosa intendi per "non funziona".Spiega meglio.

  4. #4
    ciao, praticamente se nella riga che sto controllando sono presenti tutti 1 la cancello.
    sto facendo il gioco del tetris, la matrice è una mappa 10*20 int. quando lancio la funzione il programma si blocca, togliendo il while il prog gira ma non mi riconosce la riga e non la cancella nemmeno.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Non mi è chiaro come fai a cancellare una riga da una matrice.
    La matrice è statica, come fai a cancellargli gli elementi? Forse intendevi dire azzerare gli elementi?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi solamente spostare i dati in modo che quelli della riga prescelta vengano sostituiti da quelli della riga successiva e così via...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ciao oregon, la mia intenzione è quella, ma nn capisco perche il while mi dia fastidio, se lo tolgo il prog gira se resta non gira.
    codice:
    void controllariga()
    {
        int i,j,cont=0;
        for(i=0;i<larghezza_colonne;i++)
        {
            for(j=0; j<altezza_righe;j++)
            {
               // while(j<20)
                {
                    if(mappa2[i][j])
                    cont++;
                }
            }
    
                if(cont<20)
                cont=0;
                else if(cont==20)
                mappa2[indice_mappai][indice_mappaj]=mappa2[i-1][j];
    
    }
    }//fine controlla riga

  8. #8
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Il while ,non fa quello che vorresti che facesse !

    hai il primo ciclo for ," che passa da una riga ad un altra" , il secondo for scansiona elemento per elemento la riga , se devi fare qualche modifica la devi fare all'interno
    del primo for
    il while dovrebbe provocare un ciclo infinito , mettiamo il caso j=0 condizione del while
    j<20 sempre vera non uscirebbe mai dal ciclo , che a sua volta se la condizione if sempre
    verificata , provocherebbe un continuo incremento di cont fino a quanto puo contenere

    codice:
    void controllariga()
    {
        int i,j,k,cont=0;
        for(i=0;i<larghezza_colonne;i++)
        {
            for(j=0; j<altezza_righe;j++)
            {
                    if(mappa2[i][j]==1)
                            cont++;
                        }
    
                if(cont<20)
                cont=0;
                else if(cont==20)//se cont =20 
              {
                  for(k=0; k<20;k++)//tutti gli elementi della riga sono sostituiti con 0
                           mappa2[i][k]=0;// se cancellare significa per te eliminare 
                 //devi seguire il consiglio di oregon ,ma dovrai farti una funzione e richiamarla
                 //in questo punto 
                 cont=0;    //azzera cont                          
    
              }
               }
    }//fine controlla riga
    Tecnologia

  9. #9
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    codice:
    for(j=0; j<altezza_righe;j++)
            {
                while(j<20)
                {
                    if(mappa2[i][j])
                    cont++;
                }
            }
    Quando j=0 cioè nella prima iterazione del for, entra nel while e continua a controllare che j sia minore di 20.Controllo che ha sempre successo perché nel while non cambi mai il valore di j.
    Ecco perché si blocca: il programma non esce mai da quel while.

    codice:
    if(cont<20)
         cont=0;
    else if(cont==20)//se cont =20
    Devi azzerare cont anche se non è minore di 20:

    codice:
    cont=0;
    if(cont==20)
        <cancelli la riga  :D  >

  10. #10
    ho provato a risolvere in questo modo, ma nn funziona lo stesso
    codice:
    void cancellariga()
    {
        int i,j;
           for (i=0;i<larghezza_colonne;i++)
            {
                for(j=0; j<altezza_righe;j++)
                {
    
                    mappa2[indice_mappai][indice_mappaj]=mappa2[i-1][j];
                }
            }
    }//fine cancellariga
    void controllariga()
    {
        int i,j,k,cont=0;
        for(i=0;i<larghezza_colonne;i++)
        {
            while(j<20)
                {
                    for(j=0; j<altezza_righe;j++)
                {
    
                    if(mappa2[i][j])
                    cont++;
                }
                }//fine while
    
                if(cont<20)
                    cont=0;
                else if(cont==20){
                    cont=0;
                    cancellariga();
                    }
    
    }
    }//fine controlla riga

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 © 2025 vBulletin Solutions, Inc. All rights reserved.