Preparation of the rank list of a class of students

Program 57) Processing of Examination MARKS
Marks obtained by a batch of student in the Annual Examination are tabulated as follows:
                  Student name           Marks obtained
                  S.Laxmi                    45 67 38 55
                  V.S.Rao                    77 89 56 69
                   -                               -  -  -  -
It is require to complete the total marks obtained by each student and print teh rank lies based on teh total marks.

This program stores the student names in the array name and the marks in teh array marks. After computing the total marks obtained by all the students, the program prepares and prints the rank list. The declaration
                       int marks [STUDENT] [SUBJECTS+1] ;
defines marks as a pointer to the array's first row. We use rowptr as the pointer to the row of marks. The rowptr is initialized as follows:
                      int (*rowptr) [SUBJECTS+1] = array ;
Note that array is the formal argument whose values are replaced by the values of teh actual argument marks. The parantheses around *rowptr makes the rowptr as a pointers to an array of SUBJECTS+1 integers. Remember, the statement
                       int *rowptr [SUBJECTS=1] ;
would declare rowptr as an array of SUBJECTS=1 elements.
When we increment the rowptr (by rowptr+1), the incrementing is done in units of the size of each row of array, making rowptr point to the next row. Since rowptr points to a particular row, (*rowptr)[x] points to the xth element in the row.

                                          PROGRAM

#define STUDENTS  5
#define SUBJECTS  4
#define <string.h>

main ( )
 {
       char name [STUDENTS] [20] ;
       int marks [STUDENTS] [SUBJECTS+1] ;

       printf ("Input students name & their marks in four
                                           subjects\n") ;
       get_list (name, marks, STUDENTS, SUBJECTS) ;
       get_sum (marks, STUDENTS, SUBJECTS+1) ;
       printf ("\n") ;
       printf_list (name, marks, STUDENT, SUBJECT+1) ;
       get_rank_list (name, marks, STUDENTS,
                               SUBJECTS+1) ;
     
      printf ("\nRanked List\n\n") ;
      printf_list (name, marks, STUDENTS, SUBJECT+1) ;
 }
          /*      Input student name and marks       */
 get_list (char *string[ ],
                 int array [ ] [SUBJECTS+1], int m, int n)
 {
        int   i, j,  (*rowptr) [SUBJECTS+1]  =  array ;
        for (i = 0; i < m; i++) ;
        {
             scanf ("%s", string [i]) ;
             for (j = 0; j < SUBJECTS: J++)
                  scanf ("%d", &(* (rowptr + i)) [j]) ;
        }
 }
 /*  Compute total marks obtained by each student     */
 get_sum (int array [ ] [SUBJECTS + 1], int m, int n)
 {
         int  i, j,  (*rowptr) [SUBJECTS+1]  = ARRAY ;
         for (i = 0; i<m; i++)
         {
             (*(rowptr + i)) [n - 1] = 0 ;
             for (j = 0; j< n - 1; j++)
                  (*(rowptr + i)) [n - 1] += (*(rowptr + i)) [j] :
         }
  }
/*          Prepare rank list based on totral marks      */

  get_rank_list (char *string [ ],
                          int array [ ] [SUBJECTS + 1]
                          int m, 
                          int n)
 {
       int i, j, k, (*rowptr) [SUBJECTS+1] = array ;
       char *temp ;

       for (i = 1; i <= m-1; i++)
           for (j = 1; j <= m-i; j++)
               if (  (*(rowptr + j-1)) [n-1] < (*(rowptr + j)) [n-1])
               {
                 swap_string (string [j-1], string [j]) ;

                 for (k = 0; k < n; k++)
                 swap_ int (&(*(rowptr + j-1)) [k], &(*(rowptr+
                                                          j)) [k]) ;
                  }
 }
 /*    Print out the ranked list        */
 Print_list (char *string [ ], 
                  int array [ ] [SUBJECTS + 1],
                  int m,
                  int n)
 {
           int  i, j,  (*rowptr) [SUBJECTS+1] = array ;
           for (i = 0; i < m; i++)
           {
                 printf ("%-20s", string [i]) ;
                 for (j = 0; j < n; j++)
                      printf ("%5d",  (*(rowptr + i)) [j]) ;
                      printf ("\n") ;
           }
 }
 /*      Exchange of integer values       */
 swap_int (int *p, int *q)
 {
          int temp ;
          temp = *p ;
             *q   = *q:
             *q   =  temp ;
 /*         Exchnage of strings         *   /
 swap_string (char s1[ ], char s2 [ ])
 {
        char swaparea [256] ;
        int  i ;
        for (i = 0; i < 256; i++)
            swaparea [i]  =  '\0' ;
        i = 0 ;
        while (s1 [i]  ! = '\0'  && i < 256)
        {
                swaparea [i] = s1 [i] ;
                i++ ;
        }
        i = 0 ;
        while (s2[i]  ! = '\0'  &&  i < 256)
        {
               s1 [i] = s2 [i] ;
               s1 [++i] = '\0' ;
        }
        i = 0 ;
        while (swaparea [i]  ! = '\0')
        {
                 s2 [i] = swaparea [i] ;
                 s2 [++i] = '\0' ;
        }
  }


                                    Output         
 Input students names & their marks in four subjects
 S.Laxmi 45 67 38 55
 V.S.Rao 77 89 56 69
 A.Gupta 66 78 98 45
 R.Daniel 44 55 66 77


S.Laxmi                     45   67   38   55   205
V.S.Rao                     77   89   56   69   291  
A.Gupta                    66   78   98   45   287
S.Mani                      86   72   0     25   183
R.Daniel                   44   55   66    77   242


Ranked list
V.S.Rao                    77   89   56   69   291
A.Gupta                   66   78   98   45   287
R.Daniel                   44   55   66   77   242
S.Laxmi                   45   67   38   55   205
S.Mani                     86   72   0    25    183
    

No comments:

Post a Comment