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++ - errore nel programma
Forum - C/C++ - errore nel programma - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:02
Sabato, 27/05/2017
Ripeto.. Se indenti correttamente il codice (e non l'hai ancora fatto) ti accorgi subito dove sta l'errore.

Fossi in te cercherei di capire se la do..while è aperta/chiusa correttamente.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 12:06
Sabato, 27/05/2017
Questo e' da Wikipedia.

https://www.wikiwand.com/it/Stile_d%27indentazione

Troverai una brevissima guida sui diversi stili con cui puoi identare. io ti consiglio lo stile K&R.


Testo quotato

Postato originariamente da lallo12:

in realtà sono al primo anno di programmazione1...il pezzo di ocdice che hai postato tu dovrebbe essere riscritto cosi
Codice sorgente - presumibilmente C++

  1. void pulisci(int sparato, char campo[8][7], int *x, int *y)
  2. {      
  3.         if(sparato==1)
  4.         {
  5.         campo[*x][*y]=' ';        
  6.         }
  7.       }
  8.    }




Lo noti che apri 2 parentesi e ne chiudi 3?

Con l'identazione (cioè allineare le parentesi di apertura e chiusura in questo caso) lo noteresti subito che c'è una parentesi di troppo. Quindi ti dovresti chiedere. Ma è una parentesi in più o doveva essere chiusa da qualche altra parte?



Ultima modifica effettuata da Mikelius il 27/05/2017 alle 12:10
PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 15:38
Sabato, 27/05/2017
ora parte, ma non mi piace molto graficamente, potete provarlo anche voi e darmi dei consigli ?
Codice sorgente - presumibilmente C++

  1. /* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni 8x7. LÂ’utente ha a disposizione una navicella ferma (rettangolo rosso in figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono essere colpite (rettangolo giallo, blu e verde).
  2. */
  3. /* Si vuole sviluppare un programma per la simulazione del gioco di 4 navicelle
  4.  * spaziali . La mappa da gioco risulta di forma rettangolare e di dimensioni
  5.  * 8x7. LÂ’utente ha a disposizione una navicella ferma (rettangolo rosso in
  6.  * figura). Nel campo da gioco si muovono 3 navicelle avversarie che devono
  7.  * essere colpite (rettangolo giallo, blu e verde).
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <time.h>
  12.  
  13. // prototipi
  14. void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y);
  15. void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y);
  16. void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y);
  17. int controllo(int spara, int y);
  18. void pulisci(int sparato, char campo[8][7], int *x, int *y);
  19. int main(int argc, char *argv[])
  20. {
  21.   srand((unsigned int)time(0));
  22.   int i, j, G_x, G_y, B_x, B_y, V_x, V_y, R_x, R_y, random, sparato_G,
  23.       sparato_B, sparato_V;
  24.   int K = 0;
  25.   int spara = 1;
  26.   char campo[8][7] = {
  27.       {'G', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', 'B', ' ', ' ', ' '},
  28.       {' ', ' ', ' ', ' ', ' ', ' ', 'V'}, {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  29.       {' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' '},
  30.       {' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', 'R', ' ', ' ', ' '}};
  31.   G_x = 0;
  32.   G_y = 0;
  33.   B_x = 1;
  34.   B_y = 3;
  35.   V_x = 2;
  36.   V_y = 6;
  37.   R_x = 7;
  38.   R_y = 3;
  39.   // posizionamento iniziale
  40.  
  41.   for (i = 0; i < 8; i++)
  42.   {
  43.     for (j = 0; j < 7; j++)
  44.       printf("%2c", campo[i][j]);
  45.     printf("\n");
  46.   }
  47.   K = 0; // passi
  48.   do
  49.   {
  50.     K++;
  51.     if (sparato_V != 1)
  52.     { // se la navicella non è stata colpita allora muoverla
  53.       random = rand() % 10;
  54.       muovi_verde(random, campo, &V_x, &V_y);
  55.       printf("\tRandom V:%d", random);
  56.     }
  57.     else
  58.     {
  59.       printf("la verde e' colpita\n");
  60.     }
  61.     if (sparato_B != 1)
  62.     {
  63.       random = rand() % 10;
  64.       muovi_blue(random, campo, &B_x, &B_y);
  65.       printf("\tRandom V:%d", random);
  66.     }
  67.     else
  68.     {
  69.       printf("la blue e' colpita\n");
  70.     }
  71.     if (sparato_G != 1)
  72.     {
  73.       random = rand() % 10;
  74.       muovi_gialla(random, campo, &G_x, &G_y);
  75.       printf("\tRandom V:%d", random);
  76.     }
  77.     else
  78.     {
  79.       printf("la gialla e' colpita\n");
  80.     }
  81.  
  82.     printf("\n");
  83.  
  84.     for (i = 0; i < 8; i++) // visualizza sullo schermo il campo dopo il primo
  85.                             // movimento delle navicelle
  86.     {
  87.       for (j = 0; j < 7; j++)
  88.         printf("%c", campo[i][j]);
  89.       printf("\n");
  90.       printf("\n\n");
  91.       printf("\n\t\t\t k=%d\n", K);
  92.       printf("\t V=%d%d", V_x, V_y);
  93.       if (sparato_V == 1)
  94.       {
  95.         printf("colpita");
  96.       }
  97.       printf("\n\t B=%d%d", B_x, B_y);
  98.       if (sparato_B == 1)
  99.       {
  100.         printf("colpita");
  101.       }
  102.       printf("\n\t B=%d%d", G_x, G_y);
  103.  
  104.       if (sparato_G == 1)
  105.       {
  106.         printf("colpita");
  107.       }
  108.       printf("\n\nvuoi sparare? 1=SI alro int=NO \n\n");
  109.       scanf("&d", &spara);
  110.       printf("\n");
  111.  
  112.       if (sparato_V != 1)
  113.       {
  114.         sparato_V = controllo(spara, V_y);
  115.       }
  116.       if (sparato_B != 1)
  117.       {
  118.         sparato_B = controllo(spara, B_y);
  119.       }
  120.  
  121.       if (sparato_G != 1)
  122.       {
  123.         sparato_G = controllo(spara, G_y);
  124.       }
  125.  
  126.       // questi controlli servono per controllare,in caso di sparo, se le
  127.       // navicelle sono in posizione
  128.  
  129.       pulisci(sparato_V, campo, &V_x, &V_y);
  130.       pulisci(sparato_B, campo, &B_x, &B_y);
  131.       pulisci(sparato_G, campo, &G_x, &G_y);
  132.     }
  133.   } while (((sparato_G != 1) || (sparato_B != 1) || (sparato_V != 1)) &&
  134.            (K < 100)); /*esegui il ciclo finchè tutte e tre le navicelle non
  135.                           sono state distrutte oppure il contatore passi è
  136.                           arrivato a 100*/
  137.   printf("\n\n\n Fine partita \n\n\n");
  138.   system("PAUSE");
  139.   return 0;
  140. }
  141. /* Funzioni movimento
  142. random: è  il numero random generato nel main
  143. *x, *y sono coordinate delle navicelle che cambiano con il passare dei turni
  144. */
  145. void muovi_gialla(int random, char campo[8][7], int *G_x, int *G_y)
  146. {
  147.   if ((random < 3) && (*G_y == 6))
  148.   {
  149.     campo[*G_x][*G_y] = ' ';
  150.     *G_y = 0;
  151.   }
  152.   else if (random < 3)
  153.   {
  154.     campo[*G_x][*G_y] = ' ';
  155.     *G_y = *G_y + 1;
  156.   }
  157.   campo[*G_x][*G_y] = 'G';
  158. }
  159. void muovi_verde(int random, char campo[8][7], int *V_x, int *V_y)
  160. {
  161.   campo[*V_x][*V_y] = ' ';
  162.   if (random < 4)
  163.   {
  164.     if (*V_y == 6)
  165.       *V_y = 2;
  166.     else if (*V_y == 5)
  167.       *V_y = 1;
  168.     else if (*V_y == 4)
  169.       *V_y = 0;
  170.     else
  171.       *V_y = *V_y + 3;
  172.   }
  173.   else if (random >= 4 && random <= 6)
  174.   {
  175.     if (*V_y == 0)
  176.       *V_y = 5;
  177.     else if (*V_y = 1)
  178.       *V_y = 6;
  179.     else
  180.       *V_y = *V_y + 2;
  181.   }
  182.   else if (random >= 7)
  183.   {
  184.     if (*V_y == 6)
  185.       *V_y = 0;
  186.     else
  187.       *V_y = *V_y + 1;
  188.   }
  189.   campo[*V_y][*V_y] = 'V';
  190. }
  191. void muovi_blue(int random, char campo[8][7], int *B_x, int *B_y)
  192. {
  193.   campo[*B_x][*B_y] = ' ';
  194.   if (random < 7)
  195.   {
  196.     if (*B_y == 1)
  197.       *B_y = 6;
  198.     else if (*B_y == 0)
  199.       *B_y = 5;
  200.     else
  201.       *B_y = *B_y - 2;
  202.   }
  203.   else if (random > 7)
  204.   {
  205.     if (*B_y == 0)
  206.       *B_y = 6;
  207.     else
  208.       *B_y = *B_y - 1;
  209.   }
  210.   campo[*B_x][*B_y] = 'B';
  211. }
  212. /* la function che segue controlla se una navicella e' stata colpita,
  213. controlla inoltre anche se l'utente ha inserito il valore 1(l'opzione per
  214. sparare ) o un altro intero (nel caso l'utente decidesse di non sparare)*/
  215.  
  216. int controllo(int spara, int y)
  217. {
  218.   int sparato;
  219.   if ((spara == 1) && (y == 3))
  220.   {
  221.     sparato = 1;
  222.   }
  223.   else
  224.   {
  225.     sparato = 0;
  226.   }
  227.   return sparato;
  228. }
  229. void pulisci(int sparato, char campo[8][7], int *x, int *y)
  230. {
  231.   if (sparato == 1)
  232.   {
  233.     campo[*x][*y] = ' ';
  234.   }
  235. }


Ultima modifica effettuata da lumo il 27/05/2017 alle 17:34
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 16:50
Sabato, 27/05/2017
Parte, ok.
ma funziona come vorresti?
Lascia perdere la grafica e l'ottimizzazzione per ora.
Come ho detto: la parentesi sbagliata era solo 1 degli errori presenti.
Dovresti farti uno schemino su carta e elaborare il progetto funzione per funzione, passo per passo.

Codice sorgente - presumibilmente C/C++

  1. // righe 39-48
  2.  
  3. if (sparato_V!=1){ //se la navicella non è stata colpita allora muoverla
  4.     random=rand()%10;
  5.     muovi_verde(random, campo, &V_x,&V_y);
  6.     printf("\tRandom V:%d",random);
  7.     } else {
  8.          printf("la verde e' colpita\n");
  9.     }


Qua, come e quando hai dato un valore a sparato_V?


Codice sorgente - presumibilmente C++

  1. // righe 117-130
  2. void muovi_gialla(int random, char campo[8][7], int *G_x,int *G_y)
  3. {
  4.     if((random<3)&&(*G_y==6))
  5.     {
  6.         campo[*G_x][*G_y]=' ';
  7.         *G_y=0;
  8.     }
  9.         else if(random<3)
  10.         {
  11.         campo[*G_x][*G_y]=' ';
  12.         *G_y=*G_y+1;
  13.         }
  14. campo[*G_x][*G_y]='G';
  15. }



Questa invece, che vorresti facesse?

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:35
Sabato, 27/05/2017
lallo ho indentato il tuo codice per pietà, impara come si fa altrimenti è impossibile per gli altri leggerlo, specie per il tuo professore di programmazione 1.

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 21:37
Sabato, 27/05/2017
Io non ho ancora capito come dovrebbe essere la dinamica del gioco...

Edit: anche in questo caso mi sembrava di ricordare qualcosa di simile. Non siamo su questa stessa linea?
http://www.pierotofy.it/pages/extras/forum/2/1060600-probl ...

Ultima modifica effettuata da AldoBaldo il 27/05/2017 alle 21:49


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 13:04
Domenica, 28/05/2017
Testo quotato

Postato originariamente da AldoBaldo:

Io non ho ancora capito come dovrebbe essere la dinamica del gioco...

Edit: anche in questo caso mi sembrava di ricordare qualcosa di simile. Non siamo su questa stessa linea?
http://www.pierotofy.it/pages/extras/forum/2/1060600-probl ...



Ma visto che a quello avevi dato la soluzione, qui saremmo al secondo che chiede la stessa cosa? Non so se ridere o piangere :pat:
Per ora lascio aperta la discussione ma mi aspetto più serietà, altrimenti chiudo.

Ultima modifica effettuata da lumo il 28/05/2017 alle 13:29
PM Quote
Avatar
lallo12 (Normal User)
Newbie


Messaggi: 20
Iscritto: 20/02/2017

Segnala al moderatore
Postato alle 15:22
Domenica, 28/05/2017
Ok

Ultima modifica effettuata da lallo12 il 30/05/2017 alle 11:03
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo