Advertisement
Guest User

Untitled

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