Я пытаюсь сделать пересечение двух расписаний p1 и p2, но я получаю ошибку, так как некоторые не воспроизводятся в дочернем расписании - PullRequest
0 голосов
/ 10 июля 2019

Прошу прощения, начинающий код Я пытаюсь составить детское расписание, используя оба родительских расписания. Каждый номер в расписании означает что-то. 0 означает, что это свободный час, 23 означает, что субъект 3 и комната 2. То есть, одно место описывает предмет, десятки - номер комнаты. Таким образом, тема 1,2,3,4 должна появиться только 3 раза в расписании. 5,6 должны появиться только 2 раза. Это необходимо как в P1, так и в P2, и то же самое должно быть воспроизведено у ребенка. Номера не имеют значения на данный момент.

77 и 88 - лабораторные часы, которые происходят раз в неделю. Это также может происходить только в дневное время, как показано на p1 и p2. Мой код работает для различных предметов, но, похоже, не работает для лабораторий, поскольку они должны приходить последовательно.

Кроме того, p1 имеет более высокий приоритет при воспроизведении, то есть 60% и p2 40%. Если вы поможете мне с редактированием, которое также решит лабораторную проблему, это очень поможет.

Я пытался сначала выбрать только лаборатории, а затем делать это, но это не сработало. Я не знаю почему.

 #include<stdio.h>
 #include<math.h>
 #include<stdlib.h>
 #include<ctype.h>

 int p1[5][9]={0,26,24,0,31,0,13,0,0,0,16,23,0,0,0,77,77,77,0,0,11,0,0,0,22,0,33,34,32,15,24,0,0,88,88,88,0,0,15,21,0,0,0,0,22};
 int p2[5][9]={24,12,21,15,34,0,0,0,26,0,11,0,0,35,0,88,88,88,0,21,33,0,0,0,77,77,77,0,0,12,0,23,0,0,24,0,0,0,0,33,12,0,0,0,26};
 int    d,h;

int random_number_creator(int upper, int lower) //used to generate random numbers between lower and upper
{
   int n;
   n = rand() % (upper-lower)+ lower;
   return n;
}
int findsubject(int a)
{
 int i,j;
 for(i=0;i<5;i++)
 {
    for(j=0;j<9;j++)
    {
        if(p2[i][j]%10==a)
        {
            d=i;
            h=j;
            return 0;
        }
     }
  }
 }

 main()
 {
     int child[5][9],a,r,f,k;

     int i,j;
     for(i=0;i<5;i++)
     {
       for(j=0;j<9;j++)
       {
         child[i][j]=0;
       }
     }
     for(i=0;i<5;i++)
     {
       for(j=0;j<9;j++)
       {
         if(p1[i][j]!=0)
         {
            a=p1[i][j]%10;
            f=findsubject(a);
            r=random_number_creator(101,1);
            if(r<60&&child[i][j]==0)
            {
                if(a==7||a==8)
                {
                    for()
                }
                else
                {
                    child[i][j]=p1[i][j];
                    p1[i][j]=0;
                    p2[d][h]=0;

                }

            }
            else
            {
                child[i][j]=p2[d][h];
                p1[i][j]=0;
                p2[d][h]=0;
            }

         }
      }
  }
 for(i=0;i<5;i++)
 {

    if(i==0)
    printf("\nMon");
    if(i==1)
    printf("\nTue");
    if(i==2)
    printf("\nWed");
    if(i==3)
    printf("\nThu");
    if(i==4)
    printf("\nFri");
    for(j=0;j<9;j++)
        printf("%3d\t",child[i][j]);

    }


 }

Я хочу, чтобы у ребенка было правильное расписание, с предметами, встречающимися только столько, сколько они должны, и с лабораторными занятиями, происходящими днем.

...