Gioco del 15

di il
6 risposte

Gioco del 15

Mi stavo preparando con esercizi base di C per un compito che si terrà in classe fra qualche settimana (vado in 2) e costruendo l'algoritmo per il gioco del 15 mi sono reso conto che qualcosa non andava anche perché appena compilato il programma sembra dare subito la conclusione con la vittoria; di seguito metto il codice in C base:

#include <stdio.h>
#include <stdlib.h>
int** NumSwap(int tabella[4][4], int r, int c)
{
int** matnew;
matnew=(int**)malloc(4*sizeof(int*));
for(int i=0;i<4;i++)
{
 matnew[i]=(int*)malloc(4*sizeof(int));
}
if(tabella[r-1][c]!=0&&tabella[r][c-1]!=0&&tabella[r+1][c]!=0&&tabella[r][c+1]!=0)
{
 printf("ERRORE!!! Sembra che tu non possa muovere questa casella, riprova.");
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
  {
   matnew[i][j]=tabella[i][j];
  }
 }
 for(int i=0;i<4;i++)
 {
  free(tabella[i]);
 }
 return matnew;
}

 if(tabella[r-1][c]==0)
 {
  tabella[r-1][c]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r+1][c]==0)
 {
  tabella[r+1][c]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r][c-1]==0)
 {
  tabella[r][c-1]=tabella[r][c];
  tabella[r][c]=0;
 }
 if(tabella[r][c+1]==0)
 {
  tabella[r][c+1]=tabella[r][c];
  tabella[r][c]=0;
 }
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
  {
   matnew[i][j]=tabella[i][j];
  }
 }
 for(int i=0;i<4;i++)
 {
  free(tabella[i]);
 }
 free(tabella);
 return matnew;
 
}

main()
{
int tabella[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,0,15}};
int** tabnew;
int r,c,conto=1;
do{
 for(int i=0;i<4;i++)
 {
  printf("\n");
  for(int j=0;j<4;j++)
  {
   if(tabella[i][j]!=0)
    printf(" %d",tabella[i][j]);
   else
    printf(" _");
  }
 }
 printf("\n");
 printf("inserisci la riga del numero che decidi di muovere: ");
 scanf("%d",&r);
 printf("inserisci la colonna del numero che decidi di muovere: ");
 scanf("%d",&c);
 
 tabnew=(int**)malloc(4*sizeof(int*));
 for(int i=0;i<4;i++)
 {
  tabnew[i]=(int*)malloc(4*sizeof(int));
 }
 **tabnew=(tabella,r,c);
 
 for(int i=0;i<4;i++)
 {
  printf("\n");
  for(int j=0;j<4;j++)
  {
   if(tabella[i][j]!=0)
    printf(" %d",tabella[i][j]);
   else
    printf(" _");
  }
 }
 
 


}while(tabella[3][3]==0);
printf("\n");
printf("Complimenti, hai vinto al gioco del 15!!");

}

6 Risposte

  • Re: Gioco del 15

    Prima di tutto correggi il post e includi il codice formattandolo come da regolamento.

    Poi spiega meglio che succede.

    E anche cosa vuol dire per te questa riga

     **tabnew = (tabella, r, c);

    che in realtà non ha molto senso?

  • Re: Gioco del 15

    Mi sembra codice un po' alla rinfusa. Se vuoi ho una versione  svolta per i miei alunni e soprattutto commentata per capire bene come procedere nel suddividere codice e funzioni. Ti suggerisco la lettura attenta prima della copiatura

    ****

  • Re: Gioco del 15

    In questo forum non è consentito fornire soluzioni pronte agli esercizi scolastici.

    A parte che è diseducativo (e tu insegni …) e poi non è sempre utile in quanto si possono adottare soluzioni e metodi mai impiegati nella propria classe.

    A parte il fatto che, anche qui, attendiamo risposta da un po' di tempo. Molto probabilmente non gli interessa più.

  • Re: Gioco del 15

    11/05/2023 - oregon ha scritto:


    In questo forum non è consentito fornire soluzioni pronte agli esercizi scolastici.

    A parte che è diseducativo (e tu insegni …) e poi non è sempre utile in quanto si possono adottare soluzioni e metodi mai impiegati nella propria classe.

    A parte il fatto che, anche qui, attendiamo risposta da un po' di tempo. Molto probabilmente non gli interessa più.

    Mi sono permesso di dare “una” soluzione, che fosse commentata. Non è la soluzione al “suo” problema, anche perché non è neanche circostanziato come la si vuole la soluzione stessa. Il codice che propongo è in C++, la sua versione in C. Rimane l'intento, didattico del mostrare come ragionare in piccoli sottoproblemi. Se poi copia codice senza capire che addirittura non è il modo di scrivere del suo docente, sarebbe davvero da polletti.

  • Re: Gioco del 15

    Ti ho rriferito solo la regola del forum a cui ci siamo sempre attenuti.

    Si discute degli errori commessi dagli studenti ma non si fornisce codice pronto di nessun tipo e sono convinto sia didatticamente più proficuo in quanto esclude i furbetti. E scusami, comunque tu non hai riportato qui del codice ma hai fatto solo un riferimento al tuo sito.

  • Re: Gioco del 15

    X alfredo.centinaro: lasciare in più posts link al proprio sito per me è spam… inoltre devo perder tempo a rimuoverli

Devi accedere o registrarti per scrivere nel forum
6 risposte