Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.38 KB | None | 0 0
  1. // 1. Includes
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. // 2. Prototypy, czyli zadeklarowanie funkcji
  7. void wyswietl_studentow(int studenci[64]); // 0
  8.  
  9. void dodaj_studenta(int numer_indeksu, int studenci[64]); // 1
  10.  
  11. void usun_studenta(int numer_indeksu, int studenci[64], int zaliczenia[64]); // 2
  12.  
  13. void dodaj_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot); // 3
  14.  
  15. void usun_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot); // 4
  16.  
  17. void wyswietl_przedmioty(char* przedmioty[3]); // 5
  18.  
  19. void wyswietl_zaliczenia(char* przedmioty[3], int studenci[64], int zaliczenia[64]); // 6
  20.  
  21. void pozegnaj_uzytkownika(); // 7
  22.  
  23. void wyswietl_blad(); // wyswietlenie bledu jesli wstawi sie cokolwiek innego
  24.  
  25. void wyswietl_menu();
  26.  
  27. void zainicjalizuj_zaliczenia(int zaliczenia[64]);
  28. int student;
  29. void numer_indeksu;
  30.  
  31. // 3. Funkcja glowna programu
  32. void main()
  33. {
  34. char* przedmioty[] = { "fizyka", "matematyka", "chemia" };
  35. int studenci[64] = { 0 }; // nr indeksu
  36. int zaliczenia[64]; // -1 to brak informacji o zaliczeniu, 0 to brak zaliczenia, fizyka jest warta 1, matematyka 2, zas chemia 4
  37. void zainicjalizuj_zaliczenia(zaliczenia);
  38. int wybor;
  39. int numer_indeksu;
  40.  
  41.  
  42. wyswietl_menu();
  43.  
  44. do
  45. {
  46. scanf("%d", &wybor);
  47. switch (wybor)
  48. {
  49. case 0:
  50. wyswietl_studentow(studenci);
  51. break;
  52. case 1:
  53. dodaj_studenta(numer_indeksu, studenci);
  54. break;
  55.  
  56. case 2:
  57. usun_studenta(numer_indeksu, studenci);
  58. break;
  59.  
  60. case 3:
  61. dodaj_zaliczenie(numer_indeksu, zaliczenia);
  62. break;
  63.  
  64. case 4:
  65. usun_zaliczenie(numer_indeksu, zaliczenia);
  66. break;
  67.  
  68. case 5:
  69. wyswietl_przedmioty(przedmioty);
  70. break;
  71.  
  72. case 6:
  73. wyswietl_zaliczenia(przedmioty, studenci, zaliczenia);
  74. break;
  75.  
  76. case 7:
  77. pozegnaj_uzytkownika();
  78. break;
  79.  
  80. default: // Jesli nie dopasuje wyboru to wyswietli blad
  81. wyswietl_blad();
  82. }
  83. } while (wybor != 7); // while(1) oznacza wykonuj sie zawsze w petli
  84. }
  85.  
  86. // 4. Definicje funkcji
  87. void wyswietl_studentow(int studenci[64])
  88. {
  89. int student;
  90. for (student=0; student < 64; student++ )
  91. {
  92. if (studenci[student]>0)
  93. {
  94. printf("%d\n", studenci[student]);
  95. }
  96. }
  97.  
  98. }
  99.  
  100. void dodaj_studenta(int numer_indeksu, int studenci[64])
  101. {
  102. // 1. Znajdz puste miejsce (studenci[student] == 0)
  103. // 2. Zapelnij to puste miejsce numerem indeksu
  104. // 3. Jezeli nie ma pustego miejsca, to napisz informacje, ze nie ma wiecej miejsca na studentow
  105. int student;
  106. for(student=0; student<64; student++)
  107. {
  108. if(studenci[student] == 0)
  109. {
  110. studenci[student] = numer_indeksu;
  111. break; // wychodzimy z petli, bo nie ma sensu dalej szukac miejsca, bo juz mu miejsce znalezlismy
  112. }
  113. }
  114. // jezeli nie ma wolnych miejsc, to oznacza, ze student == 64
  115. if (student == 64)
  116. {
  117. printf("Brak wolnych miejsc.\n");
  118. }
  119. }
  120.  
  121. void usun_studenta(int numer_indeksu, int studenci[64], int zaliczenia[64])
  122. {
  123. // 1. Znajdz studenta (studenci[student] == numer_indeksu)
  124. // 2. Jezeli nie ma studenta o takim indeksie, to napisz informacje, ze nie ma takiego studenta
  125. // 3. Jezeli tam jest, to przypisz tam zero ORAZ przypisz -1 do zaliczenia[student], zeby wymazac zaliczenia studenta
  126. int student;
  127. for(student=0; student<64; student++)
  128. {
  129. if(studenci[student]==numer_indeksu)
  130. {
  131. studenci[student] = 0;
  132. zaliczenia[student] = -1;
  133.  
  134. break;
  135. }
  136. }
  137. if(student == 64)
  138. {
  139. printf("Nie znaleziono studenta o takim numerze indeksu.\n");
  140. }
  141. }
  142.  
  143. void dodaj_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot)
  144. {
  145. // 1. Sprawdz, czy istnieje student o numerze indeksu numer_indeksu w tablicy studenci
  146. // 2. Jezeli nie ma studenta o takim indeksie, to blad (samo return;)
  147. // 3. Jezeli jest, to sprawdz, czy ma juz zaliczenie z tego przedmiotu - jak ma, blad
  148. // 4. Jezeli nie ma to dodaj przedmiot do zaliczenia[student]
  149.  
  150. // 1.
  151. int student;
  152. for (student = 0; student < 64; student++)
  153. {
  154. if (studenci[student] == numer_indeksu)
  155. {
  156. break; // przerywamy dzialanie petli, poniewaz wyszukiwanie zostalo juz zakonczone
  157. }
  158. }
  159. // 2.
  160. if (student == 64)
  161. {
  162. printf("Nie istnieje student o takim numerze indeksu.\n");
  163. return;
  164. }
  165.  
  166.  
  167.  
  168. // 3.
  169. if (zaliczenia[student] & przedmiot > 0) // 1 -> ...0001, 2 -> ...0010, 4 -> ...0100 /////////// 0000 & 0010 -> 0000;;;; 0110 & 1010 -> 0010;;;; 1101 & 0111 -> 0101;;;;; 2 + 4 = 6; 0010 + 0100 = 0110
  170. {
  171. // obslugujemy przypadek, gdzie przedmiot jest juz zaliczony
  172. printf("Student o numerze indeksu %d ma juz zaliczenie z tego przedmiotu.\n", numer_indeksu);
  173. }
  174. // 4.
  175. else if (zaliczenia[student] & przedmiot == 0)
  176. {
  177. // oblugujemy przypadek, gdzie przedmiot jeszcze nie jest zaliczony
  178. zaliczenia[student] = zaliczenia[student] + przedmiot;
  179. }
  180. }
  181.  
  182. void usun_zaliczenie(void numer_indeksu; int studenci[64]; int zaliczenia[64]; void przedmiot)
  183. {
  184. // 1. Sprawdz, czy istnieje student o numerze indeksu numer_indeksu w tablicy studenci
  185. // 2. Jezeli nie ma studenta o takim indeksie, to blad
  186. // 3. Jezeli tam jest, to sprawdz, czy nie ma zaliczenia z przedmiotu - jak nie ma, blad
  187. // 4. Jezeli ma, to odejmij przedmiot od zaliczenia[student]
  188.  
  189.  
  190.  
  191. for (student = 0; student < 64; student++)
  192. {
  193. if (studenci[student] == numer_indeksu)
  194. {
  195. break; // przerywamy dzialanie petli, poniewaz wyszukiwanie zostalo juz zakonczone
  196. }
  197. }
  198. // 2.
  199. if (student == 64)
  200. {
  201. printf("Nie istnieje student o takim numerze indeksu.\n");
  202. return;
  203. }
  204.  
  205. // 3.
  206. // potegi dwojki w systemie binarnym sa zapisane zerami, potem jedynka, potem zerami (opcjonalnie)
  207. // potegi dwojki zawieraja TYLKO JEDNA JEDYNKE w sobie w zapisie binarnym
  208. // musimy wybrac potegi dwojki, np. 1, 2 i 4, zeby sprawic, ze, w zapisie binarnym, jedynki nie beda na siebie wchodzic
  209. // suma tych liczb daje nam nowa liczbe, w ktorej zapisie binarnym jedynki odpowiadaja jedynkom z pozycji liczb, ktore dodawalismy
  210. // symbolem & mozemy sprawdzic, czy jakas liczba (dokladnie, potega dwojki) byla (lub nie byla) dodana do wyniku (np. zaliczenia[student]). To oznacza, ze mozemy sprawdzic, czy przedmiot odpowiadajacy tej liczbie byl dodany, czyli, czy student zaliczyl ten przedmiot
  211. if (zaliczenia[student] & przedmiot == 0) // 1 -> ...0001, 2 -> ...0010, 4 -> ...0100 /////////// 0000 & 0010 -> 0000;;;; 0110 & 1010 -> 0010;;;; 1101 & 0111 -> 0101;;;;; 2 + 4 = 6; 0010 + 0100 = 0110
  212. {
  213. // obslugujemy przypadek, gdzie przedmiot jest juz zaliczony
  214. printf("Student o numerze indeksu %d nie ma juz zaliczenia z tego przedmiotu.\n", numer_indeksu);
  215. }
  216. // 4.
  217. else if (zaliczenia[student] & przedmiot > 0)
  218. {
  219. // oblugujemy przypadek, gdzie przedmiot jeszcze nie jest zaliczony
  220. zaliczenia[student] = zaliczenia[student] - przedmiot;
  221. }
  222.  
  223. }
  224.  
  225. void wyswietl_przedmioty(char* przedmioty[3])
  226. {
  227. // Zwykly for po przedmioty (zeby wypisac stringa, stosujemy %s w printf)
  228. printf("Przedmioty:\n");
  229. int przedmiot;
  230. for(przedmiot=0; przedmiot<3; przedmiot++);
  231. {
  232. printf("%s\n", przedmioty[przedmiot]);
  233.  
  234. }
  235.  
  236.  
  237. }
  238.  
  239. void wyswietl_zaliczenia(char* przedmioty[3], int studenci[64], int zaliczenia[64])
  240. {
  241. // 1. Idz po studentach forem
  242. // 2. Jezeli studenci[student] > 0, to zgarnij zaliczone przedmioty z zaliczenia[student] i je wyswietl, np. 295431 - fizyka, chemia lub 291760 - brak zaliczen
  243. int student;
  244. for (student = 0; student < 64; student++)
  245. {
  246. if (studenci[student] > 0)
  247. {
  248. int fizyka_zaliczona = zaliczenia[student] & 1;
  249. int matematyka_zaliczona = zaliczenia[student] & 2;
  250. int chemia_zaliczona = zaliczenia[student] & 4;
  251. int numer_indeksu = studenci[student];
  252. if (fizyka_zaliczona == 0 && matematyka_zaliczona == 0 && chemia_zaliczona == 0)
  253. {
  254. printF("Student o numerze %d nie zaliczyl zadnego przedmiotu.", numer_indeksu);
  255. }
  256. else {
  257. printf("Student o numerze %d zaliczyl nastepujace przedmioty: ", numer_indeksu);
  258. if (fizyka_zaliczona > 0)
  259. {
  260. printf("fizyke ");
  261. }
  262. if (matematyka_zaliczona > 0)
  263. {
  264. printf("matematyke ");
  265. }
  266. if (chemia_zaliczona > 0)
  267. {
  268. printf("chemie ");
  269. }
  270. }
  271. printf("\n");
  272. }
  273. else // else jest pusty, wiec mozna go wykasowac, ale nie rob tego :)
  274. {
  275. // nie rob nic
  276. }
  277. }
  278. }
  279.  
  280. void pozegnaj_uzytkownika()
  281. {
  282. // 1. Ladnie pozegnaj uzytkownika :)
  283. printf("Do zobaczenia wkrotce. \n\n");
  284.  
  285. }
  286.  
  287. void wyswietl_blad()
  288. {
  289. // 1. Napisz, ze nie ma takiej opcji i popros o skorzystanie z menu
  290.  
  291.  
  292. printf("Brak takiej opcji. Skorztstaj ponownie z menu.\n\n");
  293. }
  294.  
  295. void wyswietl_menu()
  296. {
  297. // Wiesz, jak zrobic :)
  298.  
  299. printf("Menu:\n");
  300. printf("0. Wyswietl studentow\n");
  301. printf("1. Dodaj studenta\n");
  302. printf("2. Usun studenta\n");
  303. printf("3. Dodaj zaliczenie\n");
  304. printf("4. Usun zaliczenie\n");
  305. printf("5. Wyswietl przedmioty\n");
  306. printf("6. Wyswietl zaliczenia\n");
  307. printf("7. Zakoncz\n");
  308.  
  309.  
  310. }
  311.  
  312. void zainicjalizuj_zaliczenia(int zaliczenia[64])
  313. {
  314. int zaliczenie;
  315. for (zaliczenie = 0; zaliczenie < 64; ++zaliczenie)
  316. {
  317. zaliczenia[zaliczenie] = -1;
  318. }
  319. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement