Advertisement
SashkoKlincharov

[Java][НП] - Лабораториски вежби

Aug 27th, 2021
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.08 KB | None | 0 0
  1.  
  2.  
  3. Да се напише класата Student во која што ќе се чуваат информации за:
  4.  
  5. индекс на студент ФИНКИ (стринг составен од шест бројки)
  6. листа на поени добиени на лабораториски вежби по некој предмет ФИНКИ. По предметот се изведуваат максимум 10 лабораториски вежби.
  7.  
  8. За класата да се напише конструктор Student(String index, List<Integer> points).
  9.  
  10. Да се напише класа LabExercises во која што се чува колекција од студенти. За класата да се напишат следните методи:
  11.  
  12. public void addStudent (Student student) - метод за додавање на нов студент во колекцијата
  13. public void printByAveragePoints (boolean ascending, int n) - метод којшто ќе ги печати првите n студентите сортирани според сумарните поени, а доколку се исти сумарните поени, според индексот, во растечки редослед доколку ascending е true, a во спротивно во опаѓачки.
  14. сумарните поени се пресметуваат како збирот на поените поделен со 10.
  15. public List<Student> failedStudents () - метод којшто враќа листа од студенти кои не добиле потпис (имаат повеќе од 2 отсуства), сортирани прво според индексот, а потоа според сумарните поени.
  16. public Map<Integer,Double> getStatisticsByYear() - метод којшто враќа мапа од просекот од сумарните поени на студентите според година на студирање. Да се игнорираат студентите кои не добиле потпис.
  17.  
  18.  
  19.  
  20.  
  21. import java.util.*;
  22. import java.util.stream.Collectors;
  23.  
  24. class Student {
  25. private String index;
  26. private List<Integer> points_lab;
  27.  
  28. public Student(String index, List<Integer> points_lab) {
  29. this.index = index;
  30. this.points_lab = points_lab;
  31. }
  32.  
  33. public List<Integer> getPoints_lab() {
  34. return points_lab;
  35. }
  36.  
  37. public String getIndex() {
  38. return index;
  39. }
  40.  
  41. public boolean getsSignature(){
  42. return this.points_lab.size()>=8;
  43. }
  44.  
  45.  
  46. public double getSummedPoints(){
  47. return (points_lab.stream()
  48. .mapToDouble(value -> value)
  49. .sum())/10.0;
  50. }
  51.  
  52. @Override
  53. public String toString() {
  54. return String.format("%s %s %.2f",
  55. index,
  56. (getsSignature())?"YES":"NO",
  57. getSummedPoints());
  58. }
  59.  
  60. public Integer getYearStudy() {
  61. return (20-Integer.parseInt(index.substring(0,2)));
  62. }
  63. }
  64.  
  65. class LabExercises {
  66. private List<Student> students;
  67.  
  68. public LabExercises() {
  69. students = new ArrayList<>();
  70. }
  71.  
  72. public void addStudent(Student student){
  73. students.add(student);
  74. }
  75. public void printByAveragePoints(boolean ascending, int n){
  76. if(ascending){
  77. students
  78. .stream()
  79. .sorted(Comparator.comparing(Student::getSummedPoints)
  80. .thenComparing(Student::getIndex))
  81. .limit(n)
  82. .forEach(System.out::println);
  83. }else {
  84. students
  85. .stream()
  86. .sorted(Comparator.comparing(Student::getSummedPoints)
  87. .thenComparing(Student::getIndex)
  88. .reversed())
  89. .limit(n)
  90. .forEach(System.out::println);
  91. }
  92. }
  93.  
  94. public List<Student> failedStudents(){
  95. return students
  96. .stream()
  97. .filter(each -> !each.getsSignature())
  98. .sorted(Comparator
  99. .comparing(Student::getIndex)
  100. .thenComparing(Student::getSummedPoints))
  101. .collect(Collectors.toList());
  102. }
  103.  
  104. public Map<Integer,Double> getStatisticsByYear(){
  105. return students
  106. .stream()
  107. .filter(Student::getsSignature)
  108. .collect(Collectors.groupingBy(
  109. Student::getYearStudy,
  110. Collectors.averagingDouble(Student::getSummedPoints)
  111. ));
  112. }
  113. }
  114.  
  115.  
  116. public class LabExercisesTest {
  117.  
  118. public static void main(String[] args) {
  119. Scanner sc = new Scanner(System.in);
  120. LabExercises labExercises = new LabExercises();
  121. while (sc.hasNextLine()) {
  122. String input = sc.nextLine();
  123. String[] parts = input.split("\\s+");
  124. String index = parts[0];
  125. List<Integer> points = Arrays.stream(parts).skip(1)
  126. .mapToInt(Integer::parseInt)
  127. .boxed()
  128. .collect(Collectors.toList());
  129.  
  130. labExercises.addStudent(new Student(index, points));
  131. }
  132.  
  133. System.out.println("===printByAveragePoints (ascending)===");
  134. labExercises.printByAveragePoints(true, 100);
  135. System.out.println("===printByAveragePoints (descending)===");
  136. labExercises.printByAveragePoints(false, 100);
  137. System.out.println("===failed students===");
  138. labExercises.failedStudents().forEach(System.out::println);
  139. System.out.println("===statistics by year");
  140. labExercises.getStatisticsByYear().entrySet().stream()
  141. .map(entry -> String.format("%d : %.2f", entry.getKey(), entry.getValue()))
  142. .forEach(System.out::println);
  143.  
  144. }
  145. }
  146.  
  147.  
  148.  
  149.  
  150. Sample input
  151.  
  152. 152040 0 1 2 3 0 5 4 10
  153. 173071 10 0 0 3 0 5 3 10
  154. 181502 10 10 10 10 10 8 10 10 10 10
  155. 181507 10 10 10 10 10 10 10 10 9 10
  156. 181508 5 6 5 5 6 5 5 5 6
  157. 181509 3 8 6 3 0 0 4 5 1
  158. 181510 3 3 8 9 6 1 9 8 8
  159. 181513 2 10 10 8 9 10 10 7 2 8
  160. 181515 3 10 10 3 9 9 5 10 6 8
  161. 181517 3 2 5 2 0 2 1 1 1
  162. 181519 3 9 6 8 9 1 5 6 8
  163. 181521 2 10 8 0
  164. 181522 10 2 6 2 2 1 3 1
  165. 181523 8 10 10 8 10 10 10 10 10
  166. 181524 3 8 8 3 8 10 0 10 3 5
  167. 181526 2 2 2 2 1 3 2 1
  168. 181527 3 2 7 3 6 1 9 1
  169. 181530 2 6 4 7 1 5 0 5
  170. 181534 8 9 8 4 8 9 5 10 4
  171. 181536 10 10 8 7 8 10 5 10 7 10
  172. 181538 9 9 8 9 9 8 8 8 7 10
  173. 181540 2 4 1 4 4 1 1 1 1
  174. 181542 10 6 7 8 8 9 6 0
  175. 181545 0 8 0 8 10 6 10 3 5
  176. 181546 1 3 4 2 5 5 3 1 1
  177. 181547 6 2 2 4 2 2 5 4 2 1
  178. 181550 3 3 3 1 0 3 1 0
  179. 181552 6 2 0 2 2 3 1 1 1
  180. 181554 7 0 1 1 0 1 1
  181. 181555 10 3 4 2 2 2 3 3 2
  182. 181561 10 10 5 3 2 8 10 5 1
  183. 181563 10
  184. 181564 0 1 1 1 0 1 0 1
  185. 181567 0 1 1 0 2 1 1 8
  186. 181568 10 2 4 2 2 1 2 1
  187. 181569
  188. 181572 1 1 0 0 1 0
  189. 181574 6 2 5 2 0 2 2 3 1
  190. 181578 10 10 9 5 10 10 10 10 10
  191. 181580 10 10 10 10 10 10 9 10 9 9
  192. 181581 10 8 8 6 6 8 10 10 6
  193. 135042
  194. 161265 3 0 0 2 0
  195. 171221 10 5 7 10
  196. 171512 6 6
  197. 171527 10 1 1 1 0 2 1 1
  198. 171553 10 10 5 7 10 0 7 5 5
  199. 181501 10 10 10 9 10 10 10 10 10 10
  200. 181503 10 10 8 7 9 7 5 6 6 6
  201. 181504 10 10 10 10 9 9 9 10 9 10
  202. 181505 10 10 10 10 9 10 10 10 10 10
  203. 181506 10 4 5 8 9 2 5 5 8
  204. 181511 9 10 10 10 10 10 10 10 10 10
  205. 181512 9 10 10 10 10 10 10 10 10 10
  206. 181514 3 4 0 5 0 1 1 1
  207. 181516 3 1 0
  208. 181518 7 10 9 6 7 7 2 9 7 9
  209. 181520 7 9 7 7 6 10 5 8
  210. 181525 5 0 1 4 3 0 1 1
  211. 181529 3 10 9 6 9 10 10 10
  212. 181531 10 5 3 5 0 4 4 1
  213. 181533 6 5 6 5 5 4 1 6 5 6
  214. 181535 0 3 0 2 4 1
  215. 181537 3 0 5 7 4 5
  216.  
  217. Sample output
  218.  
  219. ===printByAveragePoints (ascending)===
  220. 135042 NO 0.00
  221. 181569 NO 0.00
  222. 181572 NO 0.30
  223. 181516 NO 0.40
  224. 161265 NO 0.50
  225. 181564 YES 0.50
  226. 181535 NO 1.00
  227. 181563 NO 1.00
  228. 181554 NO 1.10
  229. 171512 NO 1.20
  230. 181550 YES 1.40
  231. 181567 YES 1.40
  232. 181514 YES 1.50
  233. 181525 YES 1.50
  234. 181526 YES 1.50
  235. 171527 YES 1.70
  236. 181517 YES 1.70
  237. 181552 YES 1.80
  238. 181540 YES 1.90
  239. 181521 NO 2.00
  240. 181574 YES 2.30
  241. 181537 NO 2.40
  242. 181568 YES 2.40
  243. 152040 YES 2.50
  244. 181546 YES 2.50
  245. 181522 YES 2.70
  246. 181509 YES 3.00
  247. 181530 YES 3.00
  248. 181547 YES 3.00
  249. 173071 YES 3.10
  250. 181555 YES 3.10
  251. 171221 NO 3.20
  252. 181527 YES 3.20
  253. 181531 YES 3.20
  254. 181508 YES 4.80
  255. 181533 YES 4.90
  256. 181545 YES 5.00
  257. 181542 YES 5.40
  258. 181561 YES 5.40
  259. 181510 YES 5.50
  260. 181519 YES 5.50
  261. 181506 YES 5.60
  262. 181524 YES 5.80
  263. 171553 YES 5.90
  264. 181520 YES 5.90
  265. 181534 YES 6.50
  266. 181529 YES 6.70
  267. 181581 YES 7.20
  268. 181515 YES 7.30
  269. 181518 YES 7.30
  270. 181503 YES 7.40
  271. 181513 YES 7.60
  272. 181578 YES 8.40
  273. 181536 YES 8.50
  274. 181538 YES 8.50
  275. 181523 YES 8.60
  276. 181504 YES 9.60
  277. 181580 YES 9.70
  278. 181502 YES 9.80
  279. 181501 YES 9.90
  280. 181505 YES 9.90
  281. 181507 YES 9.90
  282. 181511 YES 9.90
  283. 181512 YES 9.90
  284. ===printByAveragePoints (descending)===
  285. 181512 YES 9.90
  286. 181511 YES 9.90
  287. 181507 YES 9.90
  288. 181505 YES 9.90
  289. 181501 YES 9.90
  290. 181502 YES 9.80
  291. 181580 YES 9.70
  292. 181504 YES 9.60
  293. 181523 YES 8.60
  294. 181538 YES 8.50
  295. 181536 YES 8.50
  296. 181578 YES 8.40
  297. 181513 YES 7.60
  298. 181503 YES 7.40
  299. 181518 YES 7.30
  300. 181515 YES 7.30
  301. 181581 YES 7.20
  302. 181529 YES 6.70
  303. 181534 YES 6.50
  304. 181520 YES 5.90
  305. 171553 YES 5.90
  306. 181524 YES 5.80
  307. 181506 YES 5.60
  308. 181519 YES 5.50
  309. 181510 YES 5.50
  310. 181561 YES 5.40
  311. 181542 YES 5.40
  312. 181545 YES 5.00
  313. 181533 YES 4.90
  314. 181508 YES 4.80
  315. 181531 YES 3.20
  316. 181527 YES 3.20
  317. 171221 NO 3.20
  318. 181555 YES 3.10
  319. 173071 YES 3.10
  320. 181547 YES 3.00
  321. 181530 YES 3.00
  322. 181509 YES 3.00
  323. 181522 YES 2.70
  324. 181546 YES 2.50
  325. 152040 YES 2.50
  326. 181568 YES 2.40
  327. 181537 NO 2.40
  328. 181574 YES 2.30
  329. 181521 NO 2.00
  330. 181540 YES 1.90
  331. 181552 YES 1.80
  332. 181517 YES 1.70
  333. 171527 YES 1.70
  334. 181526 YES 1.50
  335. 181525 YES 1.50
  336. 181514 YES 1.50
  337. 181567 YES 1.40
  338. 181550 YES 1.40
  339. 171512 NO 1.20
  340. 181554 NO 1.10
  341. 181563 NO 1.00
  342. 181535 NO 1.00
  343. 181564 YES 0.50
  344. 161265 NO 0.50
  345. 181516 NO 0.40
  346. 181572 NO 0.30
  347. 181569 NO 0.00
  348. 135042 NO 0.00
  349. ===failed students===
  350. 135042 NO 0.00
  351. 161265 NO 0.50
  352. 171221 NO 3.20
  353. 171512 NO 1.20
  354. 181516 NO 0.40
  355. 181521 NO 2.00
  356. 181535 NO 1.00
  357. 181537 NO 2.40
  358. 181554 NO 1.10
  359. 181563 NO 1.00
  360. 181569 NO 0.00
  361. 181572 NO 0.30
  362. ===statistics by year
  363. 2 : 5.38
  364. 3 : 3.57
  365. 5 : 2.50
  366.  
  367.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement