#include "PointersLibs.h" #define MAXSIZE 256 #define MAT_SIZE 6 struct study_hours { string teacher; unsigned short subject; int total_students; }; unsigned int TeachesCountMaxHoursStraightInDay(struct study_hours *ptr_mat_day, unsigned short rows, unsigned short cols) { unsigned short max = ZERO; unsigned short counter = ONE; struct study_hours *ptr_temp = ptr_mat_day + cols; rows--; while (rows--) { if (!StringCompare(&((*ptr_mat_day).teacher), &((*ptr_temp).teacher))) { max = (counter > max) ? counter : max; counter = ZERO; } counter++; ptr_mat_day += cols; ptr_temp += cols; } return (max); } struct study_hours * TeachesMaxHoursStraightInDay(struct study_hours *ptr_mat_day, unsigned short rows, unsigned short cols) { unsigned short counter = ONE, max = ZERO; struct study_hours *ptr_temp = ptr_mat_day + cols; struct study_hours *ptr_max_teacher = ptr_mat_day; rows--; while (rows--) { if (!StringCompare(&((*ptr_mat_day).teacher), &((*ptr_temp).teacher))) { max = (counter > max) ? counter : max; counter = ZERO; } counter++; ptr_mat_day += cols; ptr_temp += cols; } return (ptr_max_teacher); } // Ex1 struct study_hours * WhoTeachesMoreThanFourHoursStraight(struct study_hours *ptr_mat, unsigned short rows, unsigned short cols) { unsigned short day = cols; while (TeachesCountMaxHoursStraightInDay(ptr_mat++, rows, cols) < FIVE && day--); return (TeachesMaxHoursStraightInDay(--ptr_mat, rows, cols)); } unsigned short TeacherCountOfHoursInDay(struct study_hours *ptr_mat, unsigned short rows, unsigned short cols, string teacher) { unsigned short counter = ZERO; rows--; while (rows--) { counter += StringCompare(&((*ptr_mat).teacher), teacher); ptr_mat += cols; } return (counter); } // Ex2 unsigned short TeacherCountOfHoursInWeek(struct study_hours *ptr_mat, unsigned short rows, unsigned short cols, string teacher) { unsigned short counter = ZERO; unsigned short day = cols; while (day--) { counter += TeacherCountOfHoursInDay(ptr_mat++, rows, cols, teacher); } return counter; } int CountStudentsInSubjectOnDay(struct study_hours *ptr_mat, unsigned short rows, unsigned short cols, unsigned short subject) { int counter = ZERO; rows--; while (rows--) { counter += ((*ptr_mat).subject == subject) ? (*ptr_mat).total_students : ZERO; ptr_mat += cols; } return (counter); } // Ex3 int CountStudentsInSubjectOnWeek(struct study_hours *ptr_mat, unsigned short rows, unsigned short cols, unsigned short subject) { int total_students = ZERO; unsigned short days = cols; while (days--) { total_students += CountStudentsInSubjectOnDay(ptr_mat, rows, cols, subject); } return (total_students); } void main(void) { string vec_subjects[MAXSIZE]; }