FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C] Allocations dynamiques et tableau

 




xstephx Vmods : Trouffman, 1 utilisateur anonyme et 6 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Allocations dynamiques et tableau

n°974
C4H8O3
Posté le 17-01-2004 à 11:13:06  profilanswer
 

Bonjour
 
je suis entrain de faire un morpion en c ^^ (bah oui faut bien passer le temps)
 
le probleme dans cette fonction c'est que la taille du tableau Res est inconnu...
 
au début j'avais fait çà car je mettais limité à 20 (çà savoir pkoi)
 

Code :
  1. int Res[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};


 
 
Maintenant je veux que Res ai la taille 2*n+2 et on a dit "allocations dynamiques" j'ai essayé et g po reussi et çà m'enerve... les alloc ^^
 

Code :
  1. int joueur_gagnant(int vecteur_morpion[][taille], int n)
  2. {
  3.  int *Res[10];
  4.    Res=(int (*)[10][10]) malloc(n * sizeof(int)*10*10);
  5. for (int i=0;i<n;i++)
  6.    {
  7.     for (int j=0;j<n;j++)
  8.       {
  9.        Res[n+j] += vecteur_morpion [i][j];
  10.          Res[i] += vecteur_morpion [i][j];
  11.       }
  12.    }
  13. for (int i=0;i<n;i++)
  14.    {
  15.     Res[2*n] += vecteur_morpion [i] [i];
  16.       Res[2*n+1] += vecteur_morpion [n-1-i] [i];
  17.    }
  18.    for(int i=0;i<((2*n)+2);i++)
  19.    {
  20.     if (Res[i]==n || Res[i]==(n*-1))return Res[i]/n;
  21.    }
  22.    return 0;
  23.    free(Res);
  24. }



---------------
Aqua Paris
mood
Google
Posté le 17-01-2004 à 11:13:06  profilanswer
 

n°975
C4H8O3
Posté le 17-01-2004 à 11:13:36  profilanswer
 

Le programme complet
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include<alloc.h>
  6. #define taille 10
  7. void main (void)
  8. {   // Déclarations des variables locales et des fonctions
  9.    int vecteur_morpion[taille][taille];
  10.    int xi,xj,temp;
  11.    int vecteur_resultat[2];
  12.    int sortie;
  13. void affiche(int vecteur_morpion[][taille], int n);
  14. void coup_gagnant(int vecteur_morpion[][taille],int vecteur_resultat[2],int n);
  15. int joueur_gagnant(int vecteur_morpion[][taille], int n);
  16. int c_est_fini(int vecteur_morpion[][taille],int n);
  17. void matrice_zero(int vecteur_morpion[][taille]);
  18. int coup_permis (int i, int j, int vecteur_morpion[][taille], int n  );
  19. // Fin des déclarations
  20. randomize();
  21.      matrice_zero(vecteur_morpion);
  22. do
  23. {
  24.      affiche(vecteur_morpion,taille); printf("\n" );
  25.      for (int i=0;i<taille;i++)
  26.      {
  27.          printf("\n" );
  28.        for (int j=0;j<taille;j++)
  29.          {
  30.          printf ("%2d",coup_permis (i,j,vecteur_morpion,taille));
  31.          }
  32.      }
  33.      if (joueur_gagnant(vecteur_morpion,taille)==1)
  34.    {
  35.     printf("perdu" );
  36.    goto sortir;
  37.    }
  38.    if (c_est_fini(vecteur_morpion,taille)==1)
  39.    {
  40.     printf("fin" );
  41.       goto sortir;
  42.    }
  43.      printf("\n" );
  44.      do
  45.      {
  46.      sortie=0;
  47.       printf ("selectionner des coordonnées de jeux\n" );
  48.       scanf ("%d   %d",&xi,&xj);
  49.       if (xi>taille || xi<1 || xj>taille || xj<1)
  50.       {
  51.        printf("mauvaises coordonnées\n" );
  52.       }
  53.       else
  54.       {
  55.        if (coup_permis(xi-1,xj-1,vecteur_morpion,taille))
  56.          {
  57.           printf("jouer une autre case\n" ) ;
  58.          }
  59.          else
  60.          {
  61.          sortie=1;
  62.          }
  63.       }
  64.    }while (sortie==0);
  65.    vecteur_morpion[xi-1][xj-1]=-1;
  66.    if (joueur_gagnant(vecteur_morpion,taille)==-1)
  67.    {
  68.     printf("bravo" );
  69.       goto sortir;
  70.    }
  71.    if (c_est_fini(vecteur_morpion,taille)==1)
  72.    {
  73.     printf("fin" );
  74.       goto sortir;
  75.    }
  76.    coup_gagnant(vecteur_morpion,vecteur_resultat,taille);
  77. } while(1);
  78. sortir :
  79. affiche(vecteur_morpion,taille); printf("\n" );
  80.      for (int i=0;i<taille;i++)
  81.      {
  82.          printf("\n" );
  83.        for (int j=0;j<taille;j++)
  84.          {
  85.          printf ("%2d",coup_permis (i,j,vecteur_morpion,taille));
  86.          }
  87.      }
  88.      getche();
  89. } // fin du main
  90.   void matrice_zero(int vecteur_morpion[][taille])
  91.    {   int i,j;
  92.     for (i=0;i<taille;i++)
  93.        { for (j=0;j<taille;j++)
  94.           {
  95.          (vecteur_morpion[i][j]=0);
  96.             }}}
  97. // Fonction : Affiche la matrice du scorpion
  98. void affiche(int vecteur_morpion[][taille], int n)
  99. {
  100.     int i,j ;
  101.       for (i=0;i<n;i++)
  102.         { printf("\n" );
  103.          for (j=0;j<n;j++)
  104.           {
  105.          printf("%2d ",vecteur_morpion[i][j]);
  106.             }
  107.        }
  108. } // Fin de la fonction  : Affiche la matrice du scorpion
  109. int coup_permis (int i, int j, int vecteur_morpion[][taille], int n  )
  110. {
  111.  if ( vecteur_morpion[i][j] == 0 ) return 0 ;
  112.       else return 1 ;
  113. }
  114. int joueur_gagnant(int vecteur_morpion[][taille], int n)
  115. {
  116.  int *Res[10];
  117.    Res=(int (*)[10][10]) malloc(n * sizeof(int)*10*10);
  118. for (int i=0;i<n;i++)
  119.    {
  120.     for (int j=0;j<n;j++)
  121.       {
  122.        Res[n+j] += vecteur_morpion [i][j];
  123.          Res[i] += vecteur_morpion [i][j];
  124.       }
  125.    }
  126. for (int i=0;i<n;i++)
  127.    {
  128.     Res[2*n] += vecteur_morpion [i] [i];
  129.       Res[2*n+1] += vecteur_morpion [n-1-i] [i];
  130.    }
  131.    for(int i=0;i<((2*n)+2);i++)
  132.    {
  133.     if (Res[i]==n || Res[i]==(n*-1))return Res[i]/n;
  134.    }
  135.    return 0;
  136.    free(Res);
  137. }
  138. int c_est_fini(int vecteur_morpion[][taille],int n)
  139. {
  140. int fin=1;
  141. for (int i=0;i<n;i++)
  142.    {
  143.     for (int j=0;j<n;j++)
  144.       {
  145.   if (vecteur_morpion[i][j]==0) fin=0;
  146.       }
  147.    }
  148.    return fin  ;
  149. }
  150. void coup_gagnant(int vecteur_morpion[][taille],int vecteur_resultat[2],int n)
  151. {
  152.    int hazard=random(n*n)+1;
  153.    for (int i=0;i<taille;i++)
  154.    {
  155.     for (int j=0;j<n;j++)
  156.       {
  157.   if (coup_permis(i,j,vecteur_morpion,n)==0)
  158.          {
  159.              vecteur_morpion[i][j]=1;
  160.              if (joueur_gagnant(vecteur_morpion,n)==1) goto sortie_fonction;
  161.              vecteur_morpion[i][j]=0;
  162.          }
  163.       }
  164.    }
  165.    do
  166.    {
  167.     for (int i=0;i<taille;i++)
  168.     {
  169.      for (int j=0;j<taille;j++)
  170.        {
  171.            if (coup_permis(i,j,vecteur_morpion,taille)==0)
  172.             {
  173.             hazard--;
  174.             if (hazard==0) vecteur_morpion[i][j]=1;
  175.             }
  176.        }
  177.     }
  178.    }while (hazard>0);
  179.   sortie_fonction:
  180. }


---------------
Aqua Paris
n°977
Deadog
Dain Bramaged
Posté le 17-01-2004 à 14:18:17  profilanswer
 

c4h8o3 a écrit :

Bonjour
 
je suis entrain de faire un morpion en c ^^ (bah oui faut bien passer le temps)
 
le probleme dans cette fonction c'est que la taille du tableau Res est inconnu...
 
au début j'avais fait çà car je mettais limité à 20 (çà savoir pkoi)
 

Code :
  1. int Res[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};


 
 
Maintenant je veux que Res ai la taille 2*n+2 et on a dit "allocations dynamiques" j'ai essayé et g po reussi et çà m'enerve... les alloc ^^
 

Code :
  1. int joueur_gagnant(int vecteur_morpion[][taille], int n)
  2. {
  3.  int *Res=NULL;
  4.    if((Res = (int *) calloc(2n + 2, sizeof(int))) == NULL) { TRAITEMANT_ERREUR }   
  5. for (int i=0;i<n;i++)
  6.    {
  7.     for (int j=0;j<n;j++)
  8.       {
  9.        Res[n+j] += vecteur_morpion [i][j];
  10.          Res[i] += vecteur_morpion [i][j];
  11.       }
  12.    }
  13. for (int i=0;i<n;i++)
  14.    {
  15.     Res[2*n] += vecteur_morpion [i] [i];
  16.       Res[2*n+1] += vecteur_morpion [n-1-i] [i];
  17.    }
  18.    for(int i=0;i<((2*n)+2);i++)
  19.    {
  20.     if (Res[i]==n || Res[i]==(n*-1))return Res[i]/n;
  21.    }
  22.    return 0;
  23.    free(Res);
  24. }


 


 
 
inspire toi aussi de alloca, ki libère la mémoire automatiquement des ke tu sors de la fonction


Message édité par Deadog le 17-01-2004 à 14:19:36
n°978
Deadog
Dain Bramaged
Posté le 17-01-2004 à 14:22:50  profilanswer
 

j'ajouterai ke l'utilisation de goto et de label est à proscrire

n°979
nicodache
marmotte en chocolat concept ©
Posté le 17-01-2004 à 14:24:35  profilanswer
 

ha oué tootafai :)


---------------
modérateur inside [:nicodache] plankaivoo [:nicodache] - ici powered - Je roule en micra 1l 55cv et je t'emmerde :o
n°980
C4H8O3
Posté le 17-01-2004 à 16:56:26  profilanswer
 

deadog a écrit :

j'ajouterai ke l'utilisation de goto et de label est à proscrire


 
je vais virer les goto et label et je v voir pour alloca


---------------
Aqua Paris
n°1027
MaNTA2003
Posté le 23-01-2004 à 11:11:51  profilanswer
 

Le C++ est un peu plus souple pour les alloc dynamique de mémoire.
 

Code :
  1. int n;
  2. cout << "Entrez la taille :" << endl;
  3. cin >> n;
  4. // si l'alloc. foire on ferme la baraque.
  5. if ((int *Res = new int[n])==NULL) return;
  6. // Ton code ici.
  7. // Et à la fin libération de mémoire :
  8. delete [] Res;


Message édité par MaNTA2003 le 23-01-2004 à 11:13:13
mood
Google
Posté le 23-01-2004 à 11:11:51  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C] Allocations dynamiques et tableau

 

Hit Parade