Advertisement
enkov

Задача със структура (с функции) 22.02.2019

Feb 22nd, 2019
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. /*  С ФУНКЦИИ
  2. В един университет се прави малка програма за работа със студенти.
  3. Всеки студент се описва с име, факултетен номер, курс (число от 1 до 4)
  4. и (средно-аритметичен) успех.
  5. Изведете информация за:
  6. 1. всички студенти;
  7. 2. студенти, които имат успех под 3.50 от 2-ри курс;
  8. 3. студентите с максимален и минимален успех от 3-ти курс;
  9. 4. за всеки курс средните успехи.
  10. */
  11.  
  12. // Вариант с функции
  13.  
  14. #include "stdafx.h"
  15. #include <iostream>
  16. #include <string>
  17. using namespace std;
  18.  
  19. // Със структура е по-удобно и по-лесно
  20. // глобална дефиниция
  21. struct Student {
  22.     string Name;
  23.     string FacNo;
  24.     int Course;
  25.     float Uspeh;
  26. };
  27.  
  28. void EnterStudent(Student& student)
  29. {
  30.     cout << " Name: ";
  31.     cin.get();  // skip the buffer
  32.     getline(cin, student.Name);
  33.     cout << " Fac number: ";
  34.     getline(cin, student.FacNo);
  35.     cout << " Course: ";
  36.     cin >> student.Course;
  37.     cout << " Uspeh: ";
  38.     cin >> student.Uspeh;
  39. }
  40.  
  41. void EnterStudents(Student Students[], const int size)
  42. {
  43.     for (int i = 0; i < size; i++)
  44.     {
  45.         cout << "Enter information for student " << i << endl;
  46.         EnterStudent(Students[i]);
  47.     }
  48. }
  49.  
  50. void PrintStudent(Student aStudent, int NumberBy)
  51. {
  52.     cout << "Student " << NumberBy << ":"
  53.         << " Name: " << aStudent.Name
  54.         << " Fac number: " << aStudent.FacNo
  55.         << " Course: " << aStudent.Course
  56.         << " Uspeh: " << aStudent.Uspeh << endl;
  57. }
  58.  
  59. void PrintAllStudents(Student Students[], const int size)
  60. {
  61.     cout << "1. Information for all students: " << endl;
  62.     for (int i = 0; i < size; i++)
  63.     {
  64.         PrintStudent(Students[i], i);
  65.     }
  66. }
  67.  
  68. float MinimalGradeFromCourse(Student Students[], const int size, int aCourse)
  69. {
  70.     float minUspeh = 0;
  71.     for (int i = 0; i < size; i++)
  72.     {
  73.         if (Students[i].Course == aCourse)
  74.         {
  75.             // ако е 1-вия от този курс - запомняме
  76.             if (minUspeh == 0)
  77.                 minUspeh = Students[i].Uspeh;
  78.             // проверяваме
  79.             if (Students[i].Uspeh < minUspeh)
  80.                 minUspeh = Students[i].Uspeh;
  81.         }
  82.     }
  83.     return minUspeh;
  84. }
  85.  
  86.  
  87. float MaximallGradeFromCourse(Student Students[], const int size, int aCourse)
  88. {
  89.     float maxUspeh = 0;
  90.     for (int i = 0; i < size; i++)
  91.     {
  92.         if (Students[i].Course == aCourse)
  93.         {
  94.             // ако е 1-вия от този курс - запомняме
  95.             if (maxUspeh == 0)
  96.                 maxUspeh = Students[i].Uspeh;
  97.             // проверяваме
  98.             if (Students[i].Uspeh > maxUspeh)
  99.                 maxUspeh = Students[i].Uspeh;
  100.         }
  101.     }
  102.     return maxUspeh;
  103. }
  104.  
  105. float AverageGradeFromCourse(Student Students[], const int size, int aCourse)
  106. {
  107.     float sum = 0;
  108.     int count = 0;
  109.     for (int i = 0; i < size; i++)
  110.         if (Students[i].Course == aCourse)
  111.         {
  112.             count++;
  113.             sum += Students[i].Uspeh;
  114.         }
  115.     if (count == 0)
  116.         return 0;
  117.     else
  118.         return sum / count;
  119. }
  120.  
  121. void PrintAverageGradeFromCourse(float Average, int aCourse)
  122. {
  123.     if (Average > 0)
  124.         cout << " Course " << aCourse << ": " << Average << endl;
  125.     else
  126.         cout << " Course " << aCourse << ": has no students " << endl;
  127. }
  128.  
  129. int main()
  130. {
  131.     const int n = 50;
  132.  
  133.     Student Students[n];
  134.  
  135.     int x;  // работим с х студента
  136.  
  137.     do {
  138.         cout << "Broi studenti (5..50): ";
  139.         cin >> x;
  140.     } while (x < 5 || x > 50); // приемаме само между 5 и 50
  141.  
  142.  
  143.     EnterStudents(Students, x);
  144.  
  145.     // 1. всички студенти
  146.     PrintAllStudents(Students, x);
  147.  
  148.     // 2. студенти, които имат успех под 3.50 от 2 - ри курс;
  149.     cout << "2. Students with grade less than 3.50 from 2-nd course: " << endl;
  150.     for (int i = 0; i < x; i++)
  151.     {
  152.         if (Students[i].Uspeh < 3.50 && Students[i].Course == 2)
  153.             PrintStudent(Students[i], i);
  154.     }
  155.  
  156.     // 3. студентите с максимален и минимален успех от 3 - ти курс;
  157.     cout << "3.1. Students with minimal grade from 3-rd course: " << endl;
  158.     float max3, min3;
  159.     min3 = MinimalGradeFromCourse(Students, x, 3);
  160.     max3 = MaximallGradeFromCourse(Students, x, 3);
  161.     for (int i = 0; i < x; i++)
  162.     {
  163.         if (Students[i].Uspeh == min3 && Students[i].Course == 3)
  164.             PrintStudent(Students[i], i);
  165.     }
  166.     cout << "3.2. Students with maximal grade from 3-rd course: " << endl;
  167.     for (int i = 0; i < x; i++)
  168.     {
  169.         if (Students[i].Uspeh == max3 && Students[i].Course == 3)
  170.             PrintStudent(Students[i], i);
  171.     }
  172.  
  173.     // 4. за всеки курс средните успехи
  174.     cout << "4. Average grades for course: " << endl;
  175.     for (int course = 1; course <= 4; course++)
  176.         PrintAverageGradeFromCourse(AverageGradeFromCourse(Students, x, course), course);
  177.  
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement