vendredi 30 juillet 2021

how to generate no-repetetive numbers in c langage?

I want to do the distribution of high school classes on teachers of a subject in a random way, my only condition is not to exceed 21 hours of work for each teacher. For this I have declared a structure TAB which contains each class (filliere) as well as its number of hours. another structure TAB1 contains the classes as well as an integer 0 or 1 which allows to know if I have assigned this class to a teacher or not yet.

my program compiles and runs but it doesn't print anything.

I want to generate randomly different numbers from 0 to 18. for example if the function rand() gives the number 15, I want to be sure sure that the next number shouldnt be 15,and so on, instead of TAB1 structure.

#include <string.h>
#include <stdio.h>
#include <time.h>

typedef struct nombreheure
{
    char *classe;
    int nombreheure;
}nombreheure;

typedef struct nombreclasses
{
    char *classe;
    int affecte;
}nombreclasses;

int main ()
{
    nombreheure TAB[19];
    TAB[0].classe="TCLF1";
    TAB[1].classe="TCLF2";
    TAB[2].classe="TCSF1";
    TAB[3].classe="TCSF2";
    TAB[4].classe="TCSF3";
    TAB[5].classe="TCSF4";
    TAB[6].classe="1LSHF1";
    TAB[7].classe="1LSHF2";
    TAB[8].classe="1LSHF3";
    TAB[9].classe="1SEF1";
    TAB[10].classe="1SEF2";
    TAB[11].classe="1SEF3";
    TAB[12].classe="2BACSP1";
    TAB[13].classe="2BACSP2";
    TAB[14].classe="2BACL1";
    TAB[15].classe="2BACL2";
    TAB[16].classe="2BACSVT1";
    TAB[17].classe="2BACSVT2";
    TAB[18].classe="TCSF5";
    TAB[0].nombreheure=5;
    TAB[1].nombreheure=5;
    TAB[2].nombreheure=2;
    TAB[3].nombreheure=2;
    TAB[4].nombreheure=2;
    TAB[5].nombreheure=2;
    TAB[6].nombreheure=5;
    TAB[7].nombreheure=5;
    TAB[8].nombreheure=5;
    TAB[9].nombreheure=2;
    TAB[10].nombreheure=2;
    TAB[11].nombreheure=2;
    TAB[12].nombreheure=5;
    TAB[13].nombreheure=5;
    TAB[14].nombreheure=2;
    TAB[15].nombreheure=2;
    TAB[16].nombreheure=2;
    TAB[17].nombreheure=2;
    TAB[18].nombreheure=2;

    nombreclasses TAB1[19];
    TAB1[0].classe="TCLF1";
    TAB1[1].classe="TCLF2";
    TAB1[2].classe="TCSF1";
    TAB1[3].classe="TCSF2";
    TAB1[4].classe="TCSF3";
    TAB1[5].classe="TCSF4";
    TAB1[6].classe="1LSHF1";
    TAB1[7].classe="1LSHF2";
    TAB1[8].classe="1LSHF3";
    TAB1[9].classe="1SEF1";
    TAB1[10].classe="1SEF2";
    TAB1[11].classe="1SEF3";
    TAB1[12].classe="2BACSP1";
    TAB1[13].classe="2BACSP2";
    TAB1[14].classe="2BACL1";
    TAB1[15].classe="2BACL2";
    TAB1[16].classe="2BACSVT1";
    TAB1[17].classe="2BACSVT2";
    TAB1[18].classe="TCSF5";
    TAB1[0].affecte=0;
    TAB1[1].affecte=0;
    TAB1[2].affecte=0;
    TAB1[3].affecte=0;
    TAB1[4].affecte=0;
    TAB1[5].affecte=0;
    TAB1[6].affecte=0;
    TAB1[7].affecte=0;
    TAB1[8].affecte=0;
    TAB1[9].affecte=0;
    TAB1[10].affecte=0;
    TAB1[11].affecte=0;
    TAB1[12].affecte=0;
    TAB1[13].affecte=0;
    TAB1[14].affecte=0;
    TAB1[15].affecte=0;
    TAB1[16].affecte=0;
    TAB1[17].affecte=0;
    TAB1[18].affecte=0;
    int heuremax=21;
    int n=0;
    char *classe; 
    srand(time(NULL));
    do
    {
        int val= rand()%19;
        if (TAB1[val].affecte=0) 
        { 
            TAB1[val].affecte=1;
            classe=TAB[val].classe;
            n=n+TAB[val].nombreheure;
            printf("\n la classe est %s , et le nombre totol d'heures est %d \n ",classe,n);
        }
    } while(n<21);
    
}



Aucun commentaire:

Enregistrer un commentaire