Group_A4_First_Prese..

Download Report

Transcript Group_A4_First_Prese..

SFTW241
Group A4
Presentation of Grouping
Process
Idea of the Grouping Process
(I)
• Create the student records.
• Randomly select four students from the global
student file.
• Assign these four students into four different groups
and those students will become the member of their
corresponding group.
• For each group, recall back the last selection of group
member, and according to his/her first choice, pick up
the desired member from the remaining student
records.
Idea of the Grouping Process
(II)
• Check whether the desired student has already been
chosen or not.
– If he/she has not been chosen, insert his/her student file into
the group.
– Otherwise, choose another student according to the lower
choices of previous student record and perform the same
process again.
– If the selection of students from the remaining choices have
already been grouped, the only case is to randomly select a
student from the remaining student records and assign
his/her student file into the corresponding group.
– Remember that the previous student record is required to
push back into the group. ( Since it has recalled from the
group )
Idea of the Grouping Process
(III)
• When a student has been assigned to a group,
the right for selecting another student shifts
to the adjacent group. That means the group
has to queue until the remaining groups have
chosen their own members.
• This grouping process will be terminated until
there are no more remaining student record
in the student file.
Pseudo code of Grouping Process
• Students
First, we need build up a data type for each Student and it is used for creating
the global student file.
Struct
{
longint Student_ID;
char Student_Name[30];
longint First, Second, Third;
int Choose = 0;
} student_type ;
Implementation of grouping process
(Pseudo Code) I
int main()
{
Stack S[4] ; /* Here the stack will have the structure of Student type */
/* And this represent we have build up 4 stacks. */
Student_type Students[Stundent_Size];
int remain = Stundent_Size , lcv = 1 ; longint result;
S[1] = CreateStack_and_MakeEmpty();
S[2] = CreateStack_and_MakeEmpty();
S[3] = CreateStack_and_MakeEmpty();
S[4] = CreateStack_and_MakeEmpty();
Input_Student_Record( Students );
Implementation of grouping process
(Pseudo Code) II
/* This function is used to randomly select four person from the global
student list and put these four person into four different stacks.*/
for ( i starts from 1 to 4 )
{
result = Randomize();
Student[result].Choose = 1;
Push( S[I] , Student[result] ) ;
remain-- ; /* This is used to denote the remaining number of
students.*/
}
Implementation of grouping process
(Pseudo Code) III
while( remain )
{
FindNext(Pop( S[lcv] ) , S[ lcv ] , Students , Stundent_Size ) ;
}
remain -- ;
if ( lcv == 4 )
lcv = 1 ; /*Reset the next input into the 1st stack.*/
else
lcv ++ ;
return 0 ;
} //end of program
The function FindNext (I)
void FindNext( student_type Temp_Src ,Stack Src_Stack ,Student_type
Students[] , int Size)
{
longint tmp ;
Push( Src_Stack , Temp_Src ) ;
/*
* because Temp_Src had been Popped before the function call
* we need to Push it back to the Stack.
*/
The function FindNext (II)
}
/*
* tmp = Temp_Src.First ;
* Check the student with this student ID is still available or not
* if available then Skip the remain process
* else{
*
tmp = Temp_Src.Second ;
*
If available then Skip the remain process
*
else{
*
tmp = Temp_Src.Third ;
*
If available then Skip the remain process
*
else { do{
*
tmp = Randomize();
*
}while (Student[tmp].Choose = 1)
*
}
*
}
*
}
* Student[tmp].Choose = 1;
* Push(Src_Stack , Student[tmp]. ) ;
*/