Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question// Struct.c :: Utilisation des structures #include <stdio.h> #include <malloc.h> #define nb_ci 8 /*nombre de choix possibles/* #define nb_cases 70 /* correspond environ au nombre de combinaisons de nb_ci/2 dans nb_ci */ #define lg_cases 15 /*correspond environ à 2*nb_ci*/ typedef char *chaine; typedef struct ens { char cb[nb_cases][lg_cases]; int card; }ens2; typedef ens2 *Pens; /* fonctions de calculs */ unsigned short facto(int n) { unsigned short result=1; int i; for (i=n;i>0;i--) { result=result*i; } return result; } /*################*/ unsigned short Cnp(int p,int n) //Calcule le nombde de combinaisons sans ordre si on prent P éléments parmis N avec 0<=P<=N { unsigned short somme=(facto(n)/(facto(p)*facto(n-p))); return somme; } /* Corps du programme */ Pens T[nb_ci]; int main(int argc, char* argv[]) { printf("\nDébut du Programme;"); /* Raisonnement par récurrence */ /* Conditions initiales */ T[0]=(ens2*)malloc(sizeof(ens2)); T[0]->card=Cnp(0,nb_ci); strcpy(T[0]->cb[0],""); /* Transmission */ int I,J,K,i,j,start,somme; char combinaison[lg_cases],plop[lg_cases],last_nb[3]; somme=0; for(I=1;I<=nb_ci;I++) { T[I]=(ens2*)malloc(sizeof(ens2)); T[I]->card=Cnp(I,nb_ci); printf("\n Il y à %u façons de prendre %d Elements parmis %i :",T[I]->card,I,nb_ci); somme=somme+T[I]->card; i=0; for(J=0;J<(T[I-1]->card);J++) { /* On récupère le dernier numéro de la chaine pour pouvoir partir du numero suivant (ainsi on evite 2#2 en passant à 2#3 direct) */ sprintf(plop,"%s",T[I-1]->cb[J]); start=0; sprintf(last_nb,""); for(j=0;j<(strlen(plop));j++) { if(plop[j]=='#') {sprintf(last_nb,"");} else {sprintf(last_nb,"%s%c",last_nb,plop[j]);} } start=atoi(last_nb)+1; /*printf("\n Dep:%i",start); */ for(K=start;K<=nb_ci;K++) { if(I==1) {sprintf(combinaison,"%d",K);} else {sprintf(combinaison,"%s#%d",(T[I-1]->cb[J]),K);} strcpy(T[I]->cb[i++],combinaison); printf("\n%s",combinaison); } } } printf("\n\n %d resultats trouvés !",somme); /* Libération de la mémoire pour tous les tableaux */ for(I=0;I<=nb_ci;I++) { free(T[I]); } printf("\nMémoire libérée;\nFin du programme;\n"); return 0; }