Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Progetto pedine in C
Forum - C/C++ - Progetto pedine in C - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
luibo (Normal User)
Newbie


Messaggi: 12
Iscritto: 18/02/2016

Segnala al moderatore
Postato alle 12:42
Venerdì, 19/02/2016
Testo quotato

Postato originariamente da Template:

Attento: nel main, usi x1, y1, x2 e y2 come indici senza averli inizializzati (perchè l'inizializzazione l'hai messa nella funzione cammino)!
Inoltre, nella funzione passo_casuale, effettui tutti gli incrementi senza premettere l'opportuno operatore: tu scrivi y1++, ma avendo passato il parametro by reference dovresti scrivere (*y1)++ ;)

Detto questo, è normale che ti escano passi uguali, visto che il tuo programma viene eseguito dal calcolatore in pochissimo tempo e dunque ad ogni ripetizione passa ad srand() un valore di tempo sostanzialmente uguale a quello passatogli prima.
Una semplice soluzione a scopo didattico sarebbe quella di passare alla funzione cammino anche l'indice del for, e ri-scrivere la riga 59 così:

Codice sorgente - presumibilmente Plain Text

  1. srand((((int)time(NULL)) / 314) + i * 27183);



(Notare che i due numeri che ho scelto sono assolutamente arbitrari: io ho preso multipli di pi-greco e del valore di Nepero, ma tu puoi usare quelli che vuoi :k: )

E inoltre potresti riscrivere le due righe 71-72 così:

Codice sorgente - presumibilmente Plain Text

  1. pass1 = (rand() + *x1) % 4;
  2.         pass2 = (rand() + 314 * (*x2)) % 4;




Non è una soluzione perfetta (avrai ancora delle ripetizioni, ineluttabilmente), ma almeno ti garantirà dei risultati un po' più interessanti :D


Detto questo, per la gestione grafica della scacchiera ti basta, in sede di determinazione del prossimo passo, nell'ordine:

- Svuotare la casella dove prima si trovava la pedina
- Determinare la sua nuova posizione
- Inserire il suo segnaposto (un trattino, se ben ricordo) nella nuova posizione

Non è difficile: sono tre-quattro righe di codice implementabili nella funzione passo_casuale ;)



Ho seguito i tuoi suggerimenti sulla sistemazione delle srand(), e effettivamente qualcosa è cambiato ma rimane sempre strano: ora le 10 esecuzioni restituiscono diversi numeri totali di passi eseguiti, ma quando eseguo nuovamente l'intero algoritmo i risultati sono identici a prima (praticamente le 10 esecuzioni restituiscono sempre gli stessi numeri di passi totali, sempre nello stesso ordine); poi, il numero di passi totali prima che le due pedine si incontrino è sempre un numero basso, tra l'1 e il 10, anche questo mi pare un po' improbabile dato che le due pedina si muovono su una scacchiera di 30 caselle x 30, tecnicamente ce ne vorrebbero di passi prima di farle incontrare.. Infine scusami se posso sembrare un po' tardo, ma questo "aggiornamento" delle posizioni delle pedine non riesco proprio a implementarlo :d

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 13:46
Venerdì, 19/02/2016
Purtroppo, dei risultati veramente casuali non li avrai mai (almeno, non ponendo come seme della randomizzazione qualcosa di legato all'orario)... per quanto riguarda il numero di passi, il problema principale è un errore nel tuo codice che non avevo visto prima (*), ma considera che molto dipende anche da dove hai posto le due pedine: le hai infatti sistemate in due caselle che sfruttando il comportamento del tuo programma rispetto ai movimenti "oltre i bordi" sono reciprocamente facili da raggiungere, quindi è molto probabile che qualche ripetizione riporti un numero di passi molto basso.


(*) Il while nella funzione cammino ha una condizione che non va bene: ponendo (x1 != x2 && y1 != y2) sostanzialmente il ciclo si ferma non appena le due pedine sono sulla stessa riga o sulla stessa colonna, anche se magari su due caselle diverse. La condizione che serve a te è, a parole, "finchè non è vero contemporaneamente che x1 = x2 e y1 = y2", la quale in codice C si traduce in

Codice sorgente - presumibilmente Plain Text

  1. while(!(x1 == x2 && y1 == y2))



O, applicando il teorema di De Morgan:

Codice sorgente - presumibilmente Plain Text

  1. while(x1 != x2 || y1 != y2)





Andiamo ora all'aggiornamento della posizione delle pedine: onestamente, che tu non riesca ad implementarlo non ci credo, perchè è veramente semplice... più probabile piuttosto che tu non abbia capito la mia proposta (che ho in effetti esposto un po' maccheronicamente) :rofl:
Quello che ti proponevo io è di sostituire alle righe

Codice sorgente - presumibilmente Plain Text

  1. (*y1) = 0;
  2. p1 = scacchiera[*x1][*y1];




Ed affini, le righe:

Codice sorgente - presumibilmente Plain Text

  1. scacchiera[*x1][*y1] = ' ';
  2. (*y1) = 0;
  3. scacchiera[*x1][*y1] = '_';
  4. p1 = scacchiera[*x1][*y1];



Così da spostare opportunamente il "segnaposto" ;)
Nel tuo programma non è essenziale, perchè di fatto tu quella matrice non la stampi mai... ma, nel caso ti venisse voglia di stamparla, questo sarebbe un metodo semplice per aggiornarla ;)

Ultima modifica effettuata da Template il 19/02/2016 alle 13:47
PM Quote
Avatar
luibo (Normal User)
Newbie


Messaggi: 12
Iscritto: 18/02/2016

Segnala al moderatore
Postato alle 14:21
Venerdì, 19/02/2016
Testo quotato

Postato originariamente da Template:

Purtroppo, dei risultati veramente casuali non li avrai mai (almeno, non ponendo come seme della randomizzazione qualcosa di legato all'orario)... per quanto riguarda il numero di passi, il problema principale è un errore nel tuo codice che non avevo visto prima (*), ma considera che molto dipende anche da dove hai posto le due pedine: le hai infatti sistemate in due caselle che sfruttando il comportamento del tuo programma rispetto ai movimenti "oltre i bordi" sono reciprocamente facili da raggiungere, quindi è molto probabile che qualche ripetizione riporti un numero di passi molto basso.


(*) Il while nella funzione cammino ha una condizione che non va bene: ponendo (x1 != x2 && y1 != y2) sostanzialmente il ciclo si ferma non appena le due pedine sono sulla stessa riga o sulla stessa colonna, anche se magari su due caselle diverse. La condizione che serve a te è, a parole, "finchè non è vero contemporaneamente che x1 = x2 e y1 = y2", la quale in codice C si traduce in

Codice sorgente - presumibilmente Plain Text

  1. while(!(x1 == x2 && y1 == y2))



O, applicando il teorema di De Morgan:

Codice sorgente - presumibilmente Plain Text

  1. while(x1 != x2 || y1 != y2)





Andiamo ora all'aggiornamento della posizione delle pedine: onestamente, che tu non riesca ad implementarlo non ci credo, perchè è veramente semplice... più probabile piuttosto che tu non abbia capito la mia proposta (che ho in effetti esposto un po' maccheronicamente) :rofl:
Quello che ti proponevo io è di sostituire alle righe

Codice sorgente - presumibilmente Plain Text

  1. (*y1) = 0;
  2. p1 = scacchiera[*x1][*y1];




Ed affini, le righe:

Codice sorgente - presumibilmente Plain Text

  1. scacchiera[*x1][*y1] = ' ';
  2. (*y1) = 0;
  3. scacchiera[*x1][*y1] = '_';
  4. p1 = scacchiera[*x1][*y1];



Così da spostare opportunamente il "segnaposto" ;)
Nel tuo programma non è essenziale, perchè di fatto tu quella matrice non la stampi mai... ma, nel caso ti venisse voglia di stamparla, questo sarebbe un metodo semplice per aggiornarla ;)



Non so come ho fatto a non rendermi conto dell'errore del while.. sono pessimo! Non giudicarmi per questo :-|
Dopo averlo corretto i risultati sono decisamente più adeguati allo scopo dell'algoritmo, ora non mi resta che rendere più efficienti le funzioni di randomizzazione (perché come hai detto tu se il seed è in base all'orario per ottenere risultati diversi devo eseguire il programma ogni tot minuti) e magari ottimizzare un po', alleggerendo un po' il codice. Riguardo l'aggiornamento delle posizioni, effettivamente non avevo capito molto bene.. mea culpa! Dopo il tuo ultimo post ho afferrato il concetto per bene. Detto questo, ti ringrazio tanto perché mi hai dato un enorme aiuto e te ne sono infinitamente grato! :hail:
Se per caso avessi qualche altro suggerimento per ottimizzare, sarò felice di ascoltarti (tranquillo non ti sto chiedendo nient altro, hai già fatto tanto :k: )

PM Quote
Avatar
torn24 (Normal User)
Pro


Messaggi: 156
Iscritto: 04/01/2008

Segnala al moderatore
Postato alle 14:43
Venerdì, 19/02/2016
Vorrei postare la mia versione dell'esercizio, non so se sia etico, possa sembrare scortese, o addirittura è fuori dal regolamento del forum, solo stamani, leggendo il problema alle sette del mattino, ho pasticciato col codice per vedere il problema e capire come funzionasse, quindi mi dispiace che si stato tempo perso.

Se la cosa sembra scortese, basta accennarlo e provvederò a eliminare il codice da questo messaggio.


Come ho interpretato io le richieste della traccia, mi soffermo sul punto TENTARE di eseguire una mossa, perché lo preso come essenziale.

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <windows.h>
  5.  /* Per visuallizzare la scacchiera impostare le dimensione della finestra
  6.     del prompt a 200 x 200 e massimizzatela */
  7.  
  8.  
  9.      
  10. int passo_casuale(char [][30],int*,int*,int*,int*);
  11.  
  12. void stampa_scacchiera(char scacchiera[][30]);
  13.  
  14. void inizializza_scacchiera(char scacchiera[][30]);
  15.  
  16. int main()
  17. {
  18.     int i,x1=0,y1=0,x2=29,y2=29,cammino_totale=0;
  19.     int contatore=0;
  20.     srand(time(NULL));    
  21.     char scacchiera[30][30]=
  22.                       {{'X','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  23.                        {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  24.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  25.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  26.                        {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  27.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  28.                        {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  29.                        {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  30.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  31.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  32.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  33.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  34.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  35.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  36.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  37.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  38.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  39.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  40.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  41.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  42.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  43.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  44.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  45.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  46.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  47.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  48.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  49.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  50.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
  51.                            {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','Y'}};
  52.  
  53.   /* DA test possono servire 2000 interazioni perchè casualmente le due pedine si trovino sulla stessa casella*/
  54.  
  55.     while( contatore<10){
  56.         cammino_totale=passo_casuale(scacchiera,&x1,&y1,&x2,&y2);
  57.         printf("Cammino terminato\nNumero di passi eseguiti: %d\n",cammino_totale);
  58.  
  59.         //Stampo i valori delle posizioni, al termine delle mosse, altrimenti sarebbe del tutto inutile
  60.         // usare puntatori e passare le varibili per indirizzo, ma si potrebbero usare semplici variabili locali
  61.         printf(" posizione pedina uno %d - %d posizione pedina due %d - %d \n",x1,y1,x2,y2);
  62.         puts("_______________________________________________________");
  63.         contatore++;
  64.         x1=0;y1=0;x2=29;y2=29; // riposiziono la scacchiera in condizioni iniziali
  65.         inizializza_scacchiera(scacchiera);  
  66.     }          
  67.        
  68.  
  69.    
  70.     getchar();
  71. }
  72.  
  73.  
  74.  
  75.  
  76. int passo_casuale(char scacchiera[][30],int *x1,int *y1,int *x2,int *y2)
  77. {
  78.      /* Funzione da modificare radicalmente, non esegue il corretto svolgimento delle richeste della traccia */
  79.     int p=0; //numero casuale
  80.     int ciclo=1;
  81.     int passi=0;
  82.     char selettore_pedina=0;
  83.     char Tentativo_mossa_finale=1;
  84.     while(Tentativo_mossa_finale){// Ripete mosse, fino a condizione inposta dalla traccia
  85.    
  86.         /* Implementata la visualizzazione della scacchiera
  87.            non è richiesta nella traccia.
  88.            L'esecuzione della stampa scacchiera, rallenta
  89.            l'esecuzione del codice, rendendo il tempo di esecuzione
  90.            estremamente lungo, si parla di molte ore.
  91.            Bello però provare l'effetto grafico per qualche minuto */
  92.         //stampa_scacchiera(scacchiera);
  93.         ciclo=1;  
  94.        
  95.         selettore_pedina=selettore_pedina^1;
  96.         if(selettore_pedina){// Se ha valore uno pedina X
  97.    
  98.    
  99.             while(ciclo){//ripete fino a quanto non si genera una mossa valida
  100.    
  101.                 p=rand()%4;
  102.                 switch(p){
  103.        
  104.                     case 0:// spostamento pedina destra
  105.                         if( (*y1)+1<=29 && scacchiera[*x1][(*y1)+1]!='Y' ){
  106.                             scacchiera[*x1][(*y1)+1]= 'X';
  107.                             scacchiera[*x1][*y1]= '-';
  108.                             (*y1)++;
  109.                             ciclo=0;
  110.                             passi++;  
  111.                         }
  112.                         else{
  113.                              if(scacchiera[*x1][(*y1)+1]=='Y'){
  114.                                  Tentativo_mossa_finale=0;
  115.                                  ciclo=0;
  116.                              }      
  117.                         }      
  118.                         break;
  119.        
  120.                     case 1:// spostamento pedina sinistra
  121.                         if( (*y1)-1>=0 && scacchiera[*x1][(*y1)-1]!='Y' ){
  122.                             scacchiera[*x1][(*y1)-1]= 'X';
  123.                             scacchiera[*x1][*y1]= '-';
  124.                             (*y1)--;
  125.                             ciclo=0;
  126.                             passi++;
  127.                         }
  128.                         else{
  129.                              if(scacchiera[*x1][(*y1)-1]=='Y'){
  130.                                  Tentativo_mossa_finale=0;
  131.                                  ciclo=0;
  132.                              }      
  133.                         }    
  134.                         break;
  135.                     case 2:// spostamento pedina alto
  136.                         if( (*x1)-1>=0 && scacchiera[(*x1)-1][*y1]!='Y'){
  137.                             scacchiera[(*x1)-1][*y1]= 'X';
  138.                             scacchiera[*x1][*y1]= '-';
  139.                             (*x1)--;
  140.                             ciclo=0;
  141.                             passi++;  
  142.                         }
  143.                         else{
  144.                              if(scacchiera[(*x1)-1][*y1]=='Y'){
  145.                                  Tentativo_mossa_finale=0;
  146.                                  ciclo=0;
  147.                              }      
  148.                         }    
  149.                         break;
  150.                     case 3:// spostamento pedina basso
  151.                         if( (*x1)+1<=29 && scacchiera[(*x1)+1][*y1]!='Y'){
  152.                              scacchiera[(*x1)+1][*y1]= 'X';
  153.                              scacchiera[*x1][*y1]='-';
  154.                              (*x1)++;
  155.                              ciclo=0;
  156.                              passi++;  
  157.                         }
  158.                         else{
  159.                              if(scacchiera[(*x1)+1][*y1]=='Y'){
  160.                                  Tentativo_mossa_finale=0;
  161.                                  ciclo=0;
  162.                              }      
  163.                         }  
  164.                         break;
  165.                 }  //end switch  
  166.    
  167.             }   //end while
  168.         }// end if
  169.         else if(selettore_pedina==0){// Se ha valore uno pedina Y
  170.    
  171.    
  172.             while(ciclo){//ripete fino a quanto non si genera una mossa valida
  173.    
  174.                 p=rand()%4;
  175.                 switch(p){
  176.        
  177.                     case 0:// spostamento pedina destra
  178.                         if( (*y2)+1<=29 && scacchiera[*x2][(*y2)+1]!='X'){
  179.                             scacchiera[*x2][(*y2)+1]= 'Y';
  180.                             scacchiera[*x2][*y2]= '-';
  181.                             (*y2)++;
  182.                             ciclo=0;
  183.                             passi++;
  184.                         }
  185.                         else{
  186.                              if(scacchiera[*x2][(*y2)+1]=='X'){
  187.                                  Tentativo_mossa_finale=0;
  188.                                  ciclo=0;
  189.                              }      
  190.                         }  
  191.                            
  192.                         break;
  193.        
  194.                     case 1:// spostamento pedina sinistra
  195.                         if( (*y2)-1>=0 && scacchiera[*x2][(*y2)-1]!='X'){
  196.                             scacchiera[*x2][(*y2)-1]= 'Y';
  197.                             scacchiera[*x2][*y2]= '-';
  198.                             (*y2)--;
  199.                             ciclo=0;
  200.                             passi++;  
  201.                         }
  202.                         else{
  203.                              if(scacchiera[*x2][(*y2)-1]=='X'){
  204.                                  Tentativo_mossa_finale=0;
  205.                                  ciclo=0;
  206.                              }      
  207.                         }  
  208.                        
  209.                         break;
  210.                     case 2:// spostamento pedina alto
  211.                         if( (*x2)-1>=0 && scacchiera[(*x2)-1][*y2]!='X'){
  212.                             scacchiera[(*x2)-1][*y2]= 'Y';
  213.                             scacchiera[*x2][*y2]= '-';
  214.                             (*x2)--;
  215.                             ciclo=0;
  216.                             passi++;  
  217.                         }
  218.                         else{
  219.                              if(scacchiera[(*x2)-1][*y2]=='X'){
  220.                                  Tentativo_mossa_finale=0;
  221.                                  ciclo=0;
  222.                              }      
  223.                         }  
  224.                         break;
  225.                     case 3:// spostamento pedina basso
  226.                         if( (*x2)+1<=29 && scacchiera[(*x2)+1][*y2]!='X'){
  227.                             scacchiera[(*x2)+1][*y2]= 'Y';
  228.                             scacchiera[*x2][*y2]='-';
  229.                             (*x2)++;
  230.                             ciclo=0;
  231.                             passi++;
  232.                         }
  233.                         else{
  234.                              if(scacchiera[(*x2)+1][*y2]=='X'){
  235.                                  Tentativo_mossa_finale=0;
  236.                                  ciclo=0;
  237.                              }      
  238.                         }  
  239.                         break;
  240.                 } // end switch  
  241.    
  242.             } //end while  
  243.         }// end else if
  244.    
  245.     }// end while
  246.      
  247.     return passi;
  248. }// end function
  249.  
  250.  
  251. void stampa_scacchiera(char scacchiera[][30]){
  252.    
  253.     int i=0, j=0;
  254.     for(i=0;i<30;i++){
  255.         for(j=0;j<30;j++){
  256.            
  257.             printf(" %c ",scacchiera[i][j]);
  258.            
  259.         }    
  260.         printf("\n");
  261.        
  262.     }    
  263.     sleep(200);
  264.     system("CLS");
  265.    
  266. }  
  267.  
  268.  
  269.  
  270. void inizializza_scacchiera(char scacchiera[][30]){
  271.    
  272.      int i=0, j=0;
  273.     for(i=0;i<30;i++){
  274.         for(j=0;j<30;j++){
  275.            
  276.             scacchiera[i][j]='-';
  277.            
  278.         }    
  279.        
  280.        
  281.     }
  282.     scacchiera[0][0] ='X';
  283.     scacchiera[29][29]='Y';    
  284. }


Ultima modifica effettuata da torn24 il 19/02/2016 alle 14:45
PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 14:55
Venerdì, 19/02/2016
Mi fa piacere che tu non intenda fermarti solo perchè "il programma fa il suo lavoro": è un atteggiamento che, secondo me, nel tempo può portare a capire veramente come si programma bene :k:

Detto questo, per prima cosa - visto che lo chiedi - fossi in te toglierei quell'orribile definizione della matrice, sostituendola con la molto più ordinata versione:

Codice sorgente - presumibilmente C/C++

  1. char scacchiera[30][30];
  2.         for (i = 0; i < 30; i++)
  3.                 for (j = 0; j < 30; j++)       
  4.                         scacchiera[i][j] = ' ';
  5.         scacchiera[0][0] = '_';
  6.         scacchiera[29][29] = '-';



Inoltre, se proprio vuoi continuare a utilizzare il tempo del sistema come seme per srand(), ne effettuerei un casting esplicito al tipo int, che per correttezza ci starebbe proprio (e che, se ci fai caso, silenziosamente ti ho già "proposto" nel codice di un post precedente) ;)


Per il resto, non è che ci sia molto da dire: in termini di correttezza, il codice va bene, e di fatto il suo lavoro lo fa in maniera abbastanza pulita... per curiosità, sei autodidatta?
Chiedo perchè l'attenzione alla leggibilità del codice ed una sua scrittura in generale così pulita (se eccettuiamo i pochi errori che ti ho segnalato - che in generale possono capitare - il codice in sè era già buono in partenza) sono caratteri che quasi mai ho ritrovato negli autodidatti :D

PM Quote
Avatar
luibo (Normal User)
Newbie


Messaggi: 12
Iscritto: 18/02/2016

Segnala al moderatore
Postato alle 15:04
Venerdì, 19/02/2016
Testo quotato

Postato originariamente da Template:


Per il resto, non è che ci sia molto da dire: in termini di correttezza, il codice va bene, e di fatto il suo lavoro lo fa in maniera abbastanza pulita... per curiosità, sei autodidatta?
Chiedo perchè l'attenzione alla leggibilità del codice ed una sua scrittura in generale così pulita (se eccettuiamo i pochi errori che ti ho segnalato - che in generale possono capitare - il codice in sè era già buono in partenza) sono caratteri che quasi mai ho ritrovato negli autodidatti :D



Ti ringrazio, ricevere belle parole da un esperto fa sempre piacere ;)
Comunque no, non sono autodidatta, sto seguendo un corso universitario di scienze informatiche, sono al primo anno e per ora sono solo un modesto aspirante programmatore

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 177
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 15:08
Venerdì, 19/02/2016
"Esperto", suvvia... diciamo più che altro un "cugino un po' più grande": sono al secondo anno di ingegneria informatica (anche se in effetti quando sono entrato all'università programmavo già da 5-6 anni :D).

Comunque, complimenti anche al tuo professore: non tutti si premurano di insegnare all'allievo l'importanza di un codice pulito ed efficace ;)

Ultima modifica effettuata da Template il 19/02/2016 alle 15:09
PM Quote
Avatar
luibo (Normal User)
Newbie


Messaggi: 12
Iscritto: 18/02/2016

Segnala al moderatore
Postato alle 15:11
Venerdì, 19/02/2016
Testo quotato

Postato originariamente da torn24:

Vorrei postare la mia versione dell'esercizio, non so se sia etico, possa sembrare scortese, o addirittura è fuori dal regolamento del forum, solo stamani, leggendo il problema alle sette del mattino, ho pasticciato col codice per vedere il problema e capire come funzionasse, quindi mi dispiace che si stato tempo perso.

Se la cosa sembra scortese, basta accennarlo e provvederò a eliminare il codice da questo messaggio.


Come ho interpretato io le richieste della traccia, mi soffermo sul punto TENTARE di eseguire una mossa, perché lo preso come essenziale.




Grazie per aver postato anche la tua versione, alla fine ho ovviato diversamente ma un confronto fa sempre bene. Comunque a occhio la tua function passo_casuale non fa un lavoro poi così diverso dalla mia, solo che tu usi uno switch che magari esteticamente rende anche meglio e io invece utilizzo solo degli if annidati, ma fondamentalmente è quello.. se mi sto sbagliando probabilmente dipende anche da interpretazioni leggermente diverse che abbiamo dato alla traccia

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo