Guest User

Untitled

a guest
Dec 17th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #define CURYEAR 2017
  5. #define CURMONTH 12
  6. #define CURDAY 18
  7. #define SIZENAME 30
  8. #define COUNTOFSUBJECTS 7
  9. #define COUNTOFSTUDENTS 10
  10.  
  11. struct DataBirth {
  12. int iDay, iMonth, iYear;
  13. };
  14.  
  15. struct Student {
  16. char cSurname[SIZENAME];
  17. char cName[SIZENAME];
  18. struct DataBirth SStudentBirthday;
  19. int iMarks[COUNTOFSUBJECTS];
  20. double AverageMark;
  21. int Age;
  22. };
  23. void ReadStudentInfo(FILE* Info, struct Student Group[]) {
  24. int i = 0, iSum = 0;
  25. double dbAverage = 0;
  26. while (!feof(Info)) {
  27. if ((fscanf(Info, "%s %s %d %d %d", &Group[i].cSurname, &Group[i].cName,
  28. &Group[i].SStudentBirthday.iDay, &Group[i].SStudentBirthday.iMonth,
  29. &Group[i].SStudentBirthday.iYear)) > 0) {
  30. for (int j = 0; j < COUNTOFSUBJECTS; j++) {
  31. fscanf(Info, "%d", &(Group[i].iMarks[j]));
  32. iSum += (Group[i].iMarks[j]);
  33. }
  34. dbAverage /= COUNTOFSUBJECTS;
  35. Group[i].AverageMark = dbAverage;
  36. i++;
  37. }
  38. }
  39. }
  40. double FindTheAverageAge(struct Student Group[]) {
  41. int iSum = 0, i;
  42. double dbAverageAge;
  43. for (i = 0; i < COUNTOFSTUDENTS; i++) {
  44. Group[i].Age = CURYEAR - Group[i].SStudentBirthday.iYear;
  45. if (((Group[i].SStudentBirthday.iMonth > CURMONTH)
  46. || (Group[i].SStudentBirthday.iMonth == CURMONTH))
  47. && (Group[i].SStudentBirthday.iDay > CURDAY)) {
  48. Group[i].Age--;
  49. }
  50. i++;
  51. }
  52. for (i = 0; i < COUNTOFSTUDENTS; i++) {
  53. iSum += Group[i].Age;
  54. }
  55. dbAverageAge = iSum / COUNTOFSTUDENTS;
  56. return dbAverageAge;
  57. }
  58. void Swap(struct Student Group[], int Pos1, int Pos2) {
  59. struct Student Temp;
  60. Temp = Group[Pos1];
  61. Group[Pos1] = Group[Pos2];
  62. Group[Pos2] = Temp;
  63. }
  64. void SortingByAverageMark(struct Student Group[]) {
  65. int j;
  66. for (int i = 1; i < COUNTOFSTUDENTS; i++)
  67. {
  68. for (j = i; j >= 0 && Group[j - 1].AverageMark > Group[j].AverageMark; j--)
  69. {
  70. Swap(Group, j - 1, j);
  71. }
  72. }
  73. }
  74. int FindTheCountOfStudentByAvrgAge(struct Student Group[], double dbAverageAge) {
  75. int i, iCount = 0;
  76. for (i = 0; i < COUNTOFSTUDENTS; i++) {
  77. if (Group[i].Age > dbAverageAge) {
  78. iCount++;
  79. }
  80. }
  81. return iCount;
  82. }
  83. void PrintStudent(FILE* Out, struct Student *SB) {
  84. fprintf(Out, "%10s %10s %2d %2d %4d", SB->cSurname, SB->cName,
  85. (SB->SStudentBirthday.iDay), (SB->SStudentBirthday.iMonth),
  86. (SB->SStudentBirthday.iYear));
  87. for (int i = 0; i < COUNTOFSUBJECTS; i++) {
  88. fprintf(Out, " %d ", (SB->iMarks[i]));
  89. }
  90. fprintf(Out, " %0.1lfn", SB->AverageMark);
  91. }
  92. void main(void) {
  93. struct Student Group[COUNTOFSTUDENTS];
  94. double dbAverageAge;
  95. int i, iCount;
  96. FILE* Info = fopen("studentinfo.txt", "r");
  97. FILE* Output = fopen("output.txt", "w");
  98. SortingByAverageMark(Group);
  99. dbAverageAge = FindTheAverageAge(Group);
  100. iCount = FindTheCountOfStudentByAvrgAge(Group, dbAverageAge);
  101. for (i = 0; i < iCount; i++) {
  102. PrintStudent(Output, Group);
  103. }
  104. fclose(Info); //!!!
  105. fclose(Output);
  106. }
Add Comment
Please, Sign In to add comment