Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-08-2009, 13:04   #1
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
[C++] gioco Tria

Ciao a tutti !! Ho un problemino con questo semplice programma
Gioco della tria : si ha una tabella 3 x 3 e si vince se si ha tre pedine in fila ( per riga, per colonna o in diagonale.

Codice:
#include<Math.h>
#include<iostream.h>
#include<stdio.h>
#include <fstream.h>
#include <string.h>
#include <cstdlib> 

void inizializza( int tab [3][3] );
void scrivi( int tab [3][3]);
void mossa1( int tab[3][3]);
void mossa2( int tab [3][3]);
bool controllaDUEinfila(  int tab[3][3]  );
bool pieno ( int tab [3][3]);
bool finitor ( int tab [3][3]);
bool finitoc ( int tab [3][3]);
bool finitod ( int tab [3][3]);
bool finito( int tab [3][3] );


// programma -  variabili globali:
int casella [3][3];
int ri1, co1; // mossa giocatore
int ri2, co2; // mossa computer
int chi; // variabile posizionata nei test, dice  chi vince


//random 

int random() {        
     int x =  rand()%3 ;
     return x;
  
     
  } 

// inizializza
    void inizializza( int tab [3][3] ) {

    for(int ri = 0; ri < 3; ri++)
     for(int co = 0; co <  3; co++)
          tab[ri][co] = 0;
} 

// scrivi
    void scrivi( int tab [3][3] ){
    cout<<"------------------tabella"<<endl;
    for(int i = 0; i < 3; i++) { // tab.length
       for(int j = 0; j < 3; j++)  // tab[i].length
          {    cout<<" "<<tab[i][j];    }
        cout<<"\n";
     } // for i
     cout<<"-----------------------\n"<<endl;
} 

// mossa1
    void mossa1( int tab[3][3] ){
    // mossa del giocatore, inserita da tastiera
    bool mossaOk;
    do{ //   ripeti
      scrivi(tab);   //scrive tabella
        cout<<("inserisci prima indice riga: ");
        cin>>ri1;
        cout<<("inserisci ora indice colonna: ");
        cin>>co1 ; 
        mossaOk=true;
        if( ri1<0 ||  ri1>2 || co1<0 || co1>2 )
            { cout<<("err in mossa");
              mossaOk=false;
            }
        if ( tab[ri1][co1] != 0 )
           { cout<<("casella occupata\n\n");
              mossaOk=false;
         }
     } while( ! mossaOk );
     // ora mossa ok, memorizza questa mossa:
     tab[ri1][co1]=1; 

} 

// mossa computer
    void mossa2( int tab [3][3] ){

  if ( controllaDUEinfila(tab)) { // due pedine utente in fila 
    if( tab[0][0]==tab[1][1]&& tab[1][1] ==1 && tab[2][2] ==0 ) {
           ri2=2; co2=2;  tab[ri2][co2]=2;
           }//ifd
           
    else if(tab[1][1]==tab[2][2]&& tab[1][1] ==1 && tab[0][0] ==0 ) {
            ri2=0; co2=0; tab[ri2][co2]=2;  }
    else if( tab[0][2]==tab[1][1]&& tab[1][1] ==1 && tab[2][0] ==0) {
           ri2=2; co2=0; tab[ri2][co2]=2; }
   else if(tab[1][1]==tab[2][0]&& tab[1][1] ==1 && tab[0][2] ==0) {
            ri2=0; co2=2; tab[ri2][co2]=2; }
 
            
          } //if controlla        
                   
   if ( controllaDUEinfila(tab)) {  } //  due pedine PC in fila 
       
  do {  
    
         ri2= random();
         co2=random(); 
    } while ( ( tab[ri2][co2]!= 0 ) );

    tab[ri2][co2]=2; // memorizza la scelta computer

} 


 
// finito riga
    bool finitor ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int r = 0; r < 3; r++) {
      fin1 = tab[r][0]==tab[r][1];
      fin2 = tab[r][1]==tab[r][2];

      if( fin1 && fin2 &&  ( tab[r][1] !=0)) {
         chi = tab[r][1];
         return true; // riga piena
         } // if
     } // for
    return false;
} 

// pieno
    bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;

}

// finito colonna
    bool finitoc ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int c = 0; c < 3; c++) {
      fin1 = tab[0][c]==tab[1][c];
      fin2 = tab[1][c]==tab[2][c];
      if( fin1 && fin2 &&  ( tab[1][c] !=0)) {
         chi = tab[1][c];
         return true; // colonna piena
         } // if
     } // for
  
    return fin;
} 

// finito diagonale 
    bool finitod ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
      fin1 = tab[0][0]==tab[1][1];
      fin2 = tab[1][1]==tab[2][2];
      if( fin1 && fin2 &&  ( tab[1][1] !=0) ) {
          chi = tab[1][1];
          return true; // diagonale piena
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0) ) {
      chi = tab[1][1];
          return true; 
          } //if2
   return fin ; 
} 

// CONTROLLO PERICOLO DI TRIA
bool    controllaDUEinfila(  int tab[3][3]  ) {

    if( (tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])&& ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
    else  return false ;

}

// finito
    bool finito( int tab [3][3]  ){
     bool fi, fip,fir,fic,fid;

     fip = pieno( tab );
     fir = finitor( tab );
     fic = finitoc( tab );
     fid = finitod( tab );
     fi = fip || fir || fic || fid;
     return fi;
} 

//main del programma 
int  main(  ) {
   // crea una matrice  di numeri interi  3 x 3;
   inizializza( casella );
   scrivi( casella );
   do {
    
     mossa1(casella);
     // aspetta mossa del giocatore
     if(finito(casella)) break;

     // fai mossa calcolatore cioe' scegli a caso
     // una casella libera:
   mossa2( casella);

   } while( ! finito( casella)  );
   scrivi( casella );
   if( chi == 0 )    cout<<(" pieno, pari \n");
   else if( chi == 1 )   cout<<(" HAI VINTO !! \n");
   else    cout<<(" HO VINTO IO  !! \n");
   getchar();
   getchar(); 
   return 0;
}
Il problema sta in bool controllaDUEinfila( int tab[3][3] );
e successivamente nella mossa del pc ; Per adesso ho cercato di far controllare solo la diagonale, mi spiego: se la io ( utente ) ho due pedine nella diagonale il pc deve occupare la casella ( se non e già occupata ) cosi da impedirmi di fare tria.
Sarà sicuramente un problema stupide però non riesco a venirne a capo


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 23:13   #2
Barbalbero
Registered User
 
Iscritto dal: Aug 2006
Messaggi: 305
e il problema quale sarebbe?

Procedere in questo modo porta ad avere un programma anelastico, e non "intelligente".
se stai cercando un algoritmo per risolvere il gioco del tris, ti conviene dare un'occhiata alla teoria dei giochi, un ramo dell'intelligenza artificiale.

Ultima modifica di Barbalbero : 04-08-2009 alle 23:16.
Barbalbero è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2009, 23:42   #3
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Quote:
Originariamente inviato da Barbalbero Guarda i messaggi
e il problema quale sarebbe?

Procedere in questo modo porta ad avere un programma anelastico, e non "intelligente".
se stai cercando un algoritmo per risolvere il gioco del tris, ti conviene dare un'occhiata alla teoria dei giochi, un ramo dell'intelligenza artificiale.
Lo so ... però "questo "codice mi han dato e questo devo modificare


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 00:08   #4
xblitz
Senior Member
 
L'Avatar di xblitz
 
Iscritto dal: Mar 2007
Messaggi: 384
Ora arrivo io e dico l'eresia di turno ... e se provassi a considerare il problema al rovescio? overo in base a dove hai posizionato il pezzo controlli se su quella riga o quella colonna e casomai le diagonali vi è la possibilità di fare il tris, se si il pc la intercetta... se per caso questi tre controlli risultano falsi gli fai mettere il pezzo in maniera randomica...

P.S. no non ho mai toccato l'argomento teoria dei giochi .
xblitz è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2009, 07:53   #5
Fioravante Patrone
Junior Member
 
L'Avatar di Fioravante Patrone
 
Iscritto dal: Jun 2009
Messaggi: 2
OT su TdG

Quote:
Originariamente inviato da Barbalbero Guarda i messaggi
se stai cercando un algoritmo per risolvere il gioco del tris, ti conviene dare un'occhiata alla teoria dei giochi, un ramo dell'intelligenza artificiale.
Che possa convenire dare un'occhiata alla TdG convengo. D'altronde, anche senza l'uso formale dell'induzione a ritroso è facile selezionare una strategia vincente. Ma mi pare che non sia questo il problema di chi si sta sbattendo col programma.

Volevo osservare che è riduttivo ritenere la TdG un ramo dell'intelligenza artificiale. Ci sono delle interessanti intersezioni fra TdG e intelligenza artificiale, ma la TdG è anche altro, molto altro: principalmente fornisce un modello chiave per la teoria economica, e in genere per le scienze sociali, ma ci sono anche i giochi evolutivi, e interessanti applicazioni in filosofia, etica e logica. Per non parlare dei "giochi topologici".

Ultima modifica di Fioravante Patrone : 05-08-2009 alle 08:12.
Fioravante Patrone è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 12:06   #6
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Quote:
Originariamente inviato da xblitz Guarda i messaggi
Ora arrivo io e dico l'eresia di turno ... e se provassi a considerare il problema al rovescio? overo in base a dove hai posizionato il pezzo controlli se su quella riga o quella colonna e casomai le diagonali vi è la possibilità di fare il tris, se si il pc la intercetta... se per caso questi tre controlli risultano falsi gli fai mettere il pezzo in maniera randomica...

P.S. no non ho mai toccato l'argomento teoria dei giochi .
E quello che volevo fare io ! Mi spiego bool controllaDUEinfila( int tab[3][3] )
mi controlla se ci sono due pedine in fila ( indifferentemente se pedina del pc e pedina del giocatore ) !!
E nella void mossa2( int tab [3][3] ){ // ovvero mossa del pc mettevo due if
uno mi controllava se cerano due pedine giocatero in fila ( se vero ) metteva la pedina in modo da bloccare il tris !
il secondo if mi controllava se cerano 2 pedine del pc in fila ( se vero ) metteva la pedina in modo da far tris.

Il problema e che non so dove sto sbagliando ? sarà un problema di codice ... magari una sciocchezza ...

Se qualche anima pia me lo controlla e mi segnala l'errore o errori gli sarei molto grato


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 12:55   #7
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da tom03 Guarda i messaggi
E quello che volevo fare io ! Mi spiego bool controllaDUEinfila( int tab[3][3] )
mi controlla se ci sono due pedine in fila ( indifferentemente se pedina del pc e pedina del giocatore ) !!
E nella void mossa2( int tab [3][3] ){ // ovvero mossa del pc mettevo due if
uno mi controllava se cerano due pedine giocatero in fila ( se vero ) metteva la pedina in modo da bloccare il tris !
il secondo if mi controllava se cerano 2 pedine del pc in fila ( se vero ) metteva la pedina in modo da far tris.

Il problema e che non so dove sto sbagliando ? sarà un problema di codice ... magari una sciocchezza ...

Se qualche anima pia me lo controlla e mi segnala l'errore o errori gli sarei molto grato


CiauZ
Scusami ma tu parli di errore ma non specifichi gli effetti di questo errore.
Dov'è che il tuo programma fallisce?




Per tutto il resto, c'è Backtracking
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 13:44   #8
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Quote:
Originariamente inviato da malocchio Guarda i messaggi
Scusami ma tu parli di errore ma non specifichi gli effetti di questo errore.
Dov'è che il tuo programma fallisce?




Per tutto il resto, c'è Backtracking
Mi ero dimenticato di specificare tnx. Allora il mio programma non riesce a controllare se due pedine sono in fila ovvero se metto due pedine in fila il pc non mi blocca la combinazione per fare tria. Mette rempre a random.


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 15:55   #9
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Quote:
Originariamente inviato da tom03 Guarda i messaggi
Mi ero dimenticato di specificare tnx. Allora il mio programma non riesce a controllare se due pedine sono in fila ovvero se metto due pedine in fila il pc non mi blocca la combinazione per fare tria. Mette sempre a random.


CiauZ
Ma 'pedine in fila' vuol dire solo in diagonale (cioè quello per cui è scritto il codice) oppure vuoi dire che non funziona per file non in diagonale e quindi vuoi aggiungere questo tipo di controllo?
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 16:16   #10
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Quote:
Originariamente inviato da malocchio Guarda i messaggi
Ma 'pedine in fila' vuol dire solo in diagonale (cioè quello per cui è scritto il codice) oppure vuoi dire che non funziona per file non in diagonale e quindi vuoi aggiungere questo tipo di controllo?
Per semplicità ho scritto solo la diagonale ! Poi aggiungerò anche per riche e per colonne !! Cmq no, non funziona per diagonale

Ho fatto una piccola modifica alla random !!


Codice:
int random() {  
    srand(time(0)) ; 
 int x =  rand()%3 ;
     return x;
  
     
  }
CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 17:04   #11
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Codice:
bool    controllaDUEinfila(  int tab[3][3]  ) {

    if( (tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])&& ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
    else  return false ;

}
Sicuro di quell'AND in rosso?

Inoltre io metterei un paio di parentesi in più, non ricordandomi la precedenza degli operatori booleani
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2009, 21:36   #12
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Quote:
Originariamente inviato da malocchio Guarda i messaggi
Codice:
CUT
}
Sicuro di quell'AND in rosso?

Inoltre io metterei un paio di parentesi in più, non ricordandomi la precedenza degli operatori booleani
Grazie, ho visto anch'io .

Ci ho smanettato un po e sembra che funzioni ...

Codice:
 
void inizializza( int tab [3][3] );
void scrivi( int tab [3][3]);
void mossa1( int tab[3][3]);
void mossa2( int tab [3][3]);
bool controllaDUEinfila( int tab[3][3]  );
bool pieno ( int tab [3][3]);
bool finitor ( int tab [3][3]);
bool finitoc ( int tab [3][3]);
bool finitod ( int tab [3][3]);
bool finito( int tab [3][3] );
bool controllaDUEinfila1( int tab[3][3]);


// programma -  variabili globali:
int casella [3][3];
int ri1, co1; // mossa giocatore
int ri2, co2; // mossa computer
int chi; // variabile posizionata nei test, dice  chi vince




//random 

int random() {  
    srand(time(0)) ; 
 int x =  rand()%3 ;
     return x;
  
     
  } 

// inizializza
    void inizializza( int tab [3][3] ) {

    for(int ri = 0; ri < 3; ri++)
     for(int co = 0; co <  3; co++)
          tab[ri][co] = 0;
} 

// scrivi
    void scrivi( int tab [3][3] ){
    cout<<"------------------tabella"<<endl;
    for(int i = 0; i < 3; i++) { // tab.length
       for(int j = 0; j < 3; j++)  // tab[i].length
          {    cout<<" "<<tab[i][j];    }
        cout<<"\n";
     } // for i
     cout<<"-----------------------\n"<<endl;
} 

// mossa1
    void mossa1( int tab[3][3] ){
    // mossa del giocatore, inserita da tastiera
    bool mossaOk;
    do{ //   ripeti
      scrivi(tab);   //scrive tabella
        cout<<("inserisci prima indice riga: ");
        cin>>ri1;
        cout<<("inserisci ora indice colonna: ");
        cin>>co1 ; 
        mossaOk=true;
        if( ri1<0 ||  ri1>2 || co1<0 || co1>2 )
            { cout<<("err in mossa");
              mossaOk=false;
            }
        if ( tab[ri1][co1] != 0 )
           { cout<<("casella occupata\n\n");
              mossaOk=false;
         }
     } while( ! mossaOk );
     // ora mossa ok, memorizza questa mossa:
     tab[ri1][co1]=1; 

} 

// mossa2
    void mossa2( int tab [3][3] ){

  if ( controllaDUEinfila(tab)==true) {
       
if ( (tab[0][0]==tab[0][1] && tab[0][1] ==1) && tab[0][2] ==0  ){ 
      ri2=0;  co2=2; 
           }//ifr1a
     else    if ( (tab[1][0]==tab[1][1] && tab[1][1] ==1) && tab[1][2] ==0  ){ 
      ri2=1;  co2=2; 
           }//ifr1b
      else  if ( (tab[2][0]==tab[2][1] && tab[2][1] ==1) && tab[2][2] ==0  ){ 
      ri2=2;  co2=2; 
           }//ifr1c
  else  if ( (tab[0][1]==tab[0][2] && tab[0][1] ==1) && tab[0][2] ==0  ) { 
         ri2=0; co2=0;  
           }//ifr2a
 else if ( (tab[1][1]==tab[1][2] && tab[1][1] ==1) && tab[1][2] ==0  ) { 
         ri2=1; co2=0;  
           }//ifr2b  
      else   if ( (tab[2][1]==tab[2][2] && tab[2][1] ==1) && tab[2][2] ==0  ) { 
         ri2=2; co2=0;  
           }//ifr2c   
 else   if ( (tab[0][0]==tab[1][0]&& tab[1][0] ==1) && tab[2][0] ==0) {
           ri2=2; co2=0; 
           }//ifc1a
      else   if ( (tab[0][1]==tab[1][1]&& tab[1][1] ==1) && tab[2][1] ==0) {
           ri2=2; co2=1; 
           }//ifc1b
   else   if ( (tab[0][2]==tab[1][2]&& tab[1][2] ==1) && tab[2][2] ==0) {
           ri2=2; co2=2; 
           }//ifc1c
  else  if ( (tab[1][0]==tab[2][0]&& tab[1][0] ==1) && tab[0][0] ==0) {
           ri2=0; co2=0; 
           } //ifc2a
 else if ( (tab[1][1]==tab[2][1]&& tab[1][1] ==1) && tab[0][1] ==0) {
           ri2=0; co2=1; 
           } //ifc2b
 else if ( (tab[1][2]==tab[2][2]&& tab[1][2] ==1) && tab[0][2] ==0) {
           ri2=0; co2=2; 
           } //ifc2c
 else if( (tab[0][0]==tab[1][1]&& tab[1][1] ==1) && tab[2][2] ==0 ) {
           ri2=2; co2=2;  
          }//ifd1       
 else if((tab[1][1]==tab[2][2]&& tab[1][1] ==1) && tab[0][0] ==0 ) {
            ri2=0; co2=0;   }//ifd2
 else if( (tab[0][2]==tab[1][1]&& tab[1][1] ==1) && tab[2][0] ==0) {
           ri2=2; co2=0; }//ifd3
 else if((tab[1][1]==tab[2][0]&& tab[1][1] ==1) && tab[0][2] ==0) {
            ri2=0; co2=2;  }//ifd4
  
             } //if controlla     
 
 
 if ( controllaDUEinfila1(tab)==true) {  //controlla mie pedine   
 
if ( (tab[0][0]==tab[0][1] && tab[0][1] ==2) && tab[0][2] ==0  ){ 
      ri2=0;  co2=2; 
           }//ifr1a
     else    if ( (tab[1][0]==tab[1][1] && tab[1][1] ==2) && tab[1][2] ==0  ){ 
      ri2=1;  co2=2; 
           }//ifr1b
    else    if ( (tab[2][0]==tab[2][1] && tab[2][1] ==2) && tab[2][2] ==0  ){ 
      ri2=2;  co2=2; 
           }//ifr1c
  else  if ( (tab[0][1]==tab[0][2] && tab[0][1] ==2) && tab[0][2] ==0  ) { 
         ri2=0; co2=0;  
           }//ifr2a
       else    if ( (tab[1][1]==tab[1][2] && tab[1][1] ==2) && tab[1][2] ==0  ) { 
         ri2=1; co2=0;  
           }//ifr2b  
      else     if ( (tab[2][1]==tab[2][2] && tab[2][1] ==2) && tab[2][2] ==0  ) { 
         ri2=2; co2=0;  
           }//ifr2c   
            
  else  if ( (tab[0][0]==tab[1][0]&& tab[1][0] ==2) && tab[2][0] ==0) {
           ri2=2; co2=0; 
           }//ifc1a
      else    if ( (tab[0][1]==tab[1][1]&& tab[1][1] ==2) && tab[2][1] ==0) {
           ri2=2; co2=1; 
           }//ifc1b
    else  if ( (tab[0][2]==tab[1][2]&& tab[1][2] ==2) && tab[2][2] ==0) {
           ri2=2; co2=2; 
           }//ifc1c
   else if ( (tab[1][0]==tab[2][0]&& tab[1][0] ==2) && tab[0][0] ==0) {
           ri2=0; co2=0; 
           } //ifc2a
else if ( (tab[1][1]==tab[2][1]&& tab[1][1] ==2) && tab[0][1] ==0) {
           ri2=0; co2=1; 
           } //ifc2b
   else  if ( (tab[1][2]==tab[2][2]&& tab[1][2] ==2) && tab[0][2] ==0) {
           ri2=0; co2=2; 
           } //ifc2c
   else   if( (tab[0][0]==tab[1][1]&& tab[1][1] ==2) && tab[2][2] ==0 ) {
           ri2=2; co2=2;  
          }//ifd1       
  else if(tab[1][1]==tab[2][2]&& tab[1][1] ==2 && tab[0][0] ==0 ) {
            ri2=0; co2=0;   }//ifd2
  else if( tab[0][2]==tab[1][1]&& tab[1][1] ==2 && tab[2][0] ==0) {
           ri2=2; co2=0; }//ifd3
  else if(tab[1][1]==tab[2][0]&& tab[1][1] ==2 && tab[0][2] ==0) {
            ri2=0; co2=2;  }//ifd4     
}

   while ( ( tab[ri2][co2]!= 0 ) ) {  
         ri2= random();
         co2=random(); 
    }  

   tab[ri2][co2]=2; // memorizza la scelta computer



}
 
// finito riga
    bool finitor ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int r = 0; r < 3; r++) {
      fin1 = tab[r][0]==tab[r][1];
      fin2 = tab[r][1]==tab[r][2];

      if( fin1 && fin2 &&  ( tab[r][1] !=0)) {
         chi = tab[r][1];
         return true; // riga piena
         } // if
     } // for
    return false;
} 

// pieno
    bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;

}

// finito colonna
    bool finitoc ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
    for(int c = 0; c < 3; c++) {
      fin1 = tab[0][c]==tab[1][c];
      fin2 = tab[1][c]==tab[2][c];
      if( fin1 && fin2 &&  ( tab[1][c] !=0)) {
         chi = tab[1][c];
         return true; // colonna piena
         } // if
     } // for
  
    return fin;
} 

// finito diagonale 
    bool finitod ( int tab [3][3] ){
    bool fin1,fin2,fin=false;
      fin1 = tab[0][0]==tab[1][1];
      fin2 = tab[1][1]==tab[2][2];
      if( fin1 && fin2 &&  ( tab[1][1] !=0) ) {
          chi = tab[1][1];
          return true; // diagonale piena
      } // if
      if ( ( tab[0][2]==tab[1][1] ) && ( tab[1][1]==tab[2][0] ) && ( tab[1][1] !=0) ) {
      chi = tab[1][1];
          return true; 
          } //if2
   return fin ; 
} 

// CONTROLLO PERICOLO DI TRIA
bool    controllaDUEinfila(  int tab[3][3]  ) {
    
      if( ((tab[0][0]==tab[0][1]) || (tab[0][1]==tab[0][2])) && ( tab[0][1] !=0 ) ) {
         return true; // riga 
         } // if
      if(((tab[1][0]==tab[1][1]) || (tab[1][1]==tab[1][2])) && ( tab[1][1] !=0 ) ) {
         return true; // riga 
         } // if
   if(((tab[2][0]==tab[2][1]) || (tab[2][1]==tab[2][2])) && ( tab[2][1] !=0 ) ) {
         return true; // riga 
         } // if
      if( ((tab[0][0]==tab[1][0]) || (tab[1][0]==tab[2][0])) && ( tab[1][0] !=0  ) ) {
             return true; //colonna
         } // if
    
     if( ((tab[0][1]==tab[1][1]) || (tab[1][1]==tab[2][1])) && ( tab[1][1] !=0  ) ) {
               return true; //colonna
         } // if
  
     if( ((tab[0][2]==tab[1][2]) || (tab[1][2]==tab[2][2])) && ( tab[1][2] !=0  ) ) {
      
         return true; //colonna
         } // if
  if( ((tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])) && ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
    if ( (( tab[0][2]==tab[1][1] ) || ( tab[1][1]==tab[2][0] )) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
           
   else return false ;

}

bool    controllaDUEinfila1(  int tab[3][3]  ) {
    
      if( ((tab[0][0]==tab[0][1]) || (tab[0][1]==tab[0][2])) && ( tab[0][1] !=0 ) ) {
         return true; // riga 
         } // if
     if(((tab[1][0]==tab[1][1]) || (tab[1][1]==tab[1][2])) && ( tab[1][1] !=0 ) ) {
         return true; // riga 
         } // if
    if(((tab[2][0]==tab[2][1]) || (tab[2][1]==tab[2][2])) && ( tab[2][1] !=0 ) ) {
         return true; // riga 
         } // if
     if( ((tab[0][0]==tab[1][0]) || (tab[1][0]==tab[2][0])) && ( tab[1][0] !=0  ) ) {
             return true; //colonna
         } // if
    
    if( ((tab[0][1]==tab[1][1]) || (tab[1][1]==tab[2][1])) && ( tab[1][1] !=0  ) ) {
               return true; //colonna
         } // if
  
    if( ((tab[0][2]==tab[1][2]) || (tab[1][2]==tab[2][2])) && ( tab[1][2] !=0  ) ) {
      
         return true; //colonna
         } // if
   if( ((tab[0][0]==tab[1][1]) || (tab[1][1]==tab[2][2])) && ( tab[1][1] !=0  )) {
      
          return true; // diagonale 1
      } // if
      if ( (( tab[0][2]==tab[1][1] ) || ( tab[1][1]==tab[2][0] )) && ( tab[1][1] !=0  ) ) {
      
          return true; 
          } //// diagonale 2
           
   else return false ;

}

// finito
    bool finito( int tab [3][3]  ){
     bool fi, fip,fir,fic,fid;

     fip = pieno( tab );
     fir = finitor( tab );
     fic = finitoc( tab );
     fid = finitod( tab );
     fi = fip || fir || fic || fid;
     return fi;
} 

//main del programma 
int  main(  ) {
   // crea una matrice  di numeri interi  3 x 3;
   inizializza( casella );
   scrivi( casella );
   do {
    
     mossa1(casella);
     // aspetta mossa del giocatore
     if(finito(casella)) break;

     // fai mossa calcolatore cioe' scegli a caso
     // una casella libera:
   mossa2( casella);

   } while( ! finito( casella)  );
   scrivi( casella );
   if( chi == 0 )    cout<<(" pieno, pari \n");
   else if( chi == 1 )   cout<<(" HAI VINTO !! \n");
   else    cout<<(" HO VINTO IO  !! \n");
   getchar();
   getchar(); 
   return 0;
}
Ho una domanda per tabella piena io ho fatto cosi :

Codice:
bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;

}
Cioe ho messo un numero a caso... la tab[3][3] e piena quando e maggiore di ???


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 12-08-2009, 18:41   #13
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
up


[/code]

Ho una domanda per tabella piena io ho fatto cosi :

Codice:
bool pieno ( int tab [3][3] ){
  if ( tab[3][3]>14 ){      return true;
        }
        return  false;

}
Cioe ho messo un numero a caso... la tab[3][3] e piena quando e maggiore di ???


CiauZ
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
Old 13-08-2009, 20:57   #14
tom03
Senior Member
 
L'Avatar di tom03
 
Iscritto dal: Jul 2003
Città: Trieste/Trst
Messaggi: 960
Fatto da solo era una sciocchezza

Codice:
   
bool pieno ( int tab [3][3] ){
      for(int r = 0; r < 3; r++) {    
  if ( tab[r][1] ==0 ){      return false;
        }
   else if ( tab[r][2] ==0  ){      return false;
        }
     else   if ( tab[r][3] ==0  ){      return false;
        }    }
        return  true;

}

Bye
__________________
Se ti viene voglia di lavorare, siediti vedrai che ti passa
tom03 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
SpaceX risponde alla NASA sul lander lun...
Bitcoin compie 17 anni: il Whitepaper ch...
Attenzione agli HDD Western Digital Blue...
MacBook Air M4 a un super prezzo su Amaz...
Dal 12 novembre stretta sui siti porno: ...
Recensione Synology DS725+: tornano i di...
Car of the Year 2026, rivelate le 7 fina...
Il mouse diventa indossabile: Prolo Ring...
Animal Crossing: New Horizons torna in v...
Task Manager impazzito su Windows 11: in...
NZXT: il PC in abbonamento finisce in tr...
Halo 2 e 3: remake in arrivo, multiplaye...
Robot Phone e un nuovo ecosistema AI: HO...
Amazon sorprende tutti: extra 15% di sco...
HONOR 400 Lite 5G a 209,90€: smartphone ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v