Advertisement
Crackbone

SP-Vjezbe3

Oct 25th, 2019
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.72 KB | None | 0 0
  1. /*2.Definirati strukturu osoba (ime, prezime, godina rođenja) i napisati program koji:
  2. a)dinamički dodaje novi element na početak liste,
  3. b)ispisuje listu,
  4. c)dinamički dodaje novi element na kraj liste,
  5. d)pronalazi element u listi (po prezimenu),
  6. e)briše određeni element iz liste,
  7. U zadatku se ne smiju koristiti globalne varijable.*/
  8.  
  9. /*3. Prethodnom zadatku dodati funkcije:
  10. a) dinamički dodaje novi element iza određenog elementa,
  11. b) dinamički dodaje novi element ispred određenog elementa,
  12. c) sortira listu po prezimenima osoba,
  13. d) upisuje listu u datoteku,
  14. e) čita listu iz datoteke.*/
  15.  
  16.  
  17. #define _CRT_SECURE_NO_WARNINGS
  18. #define MAX_NAME 40
  19.  
  20. #include<stdio.h>
  21. #include<string.h>
  22. #include<stdlib.h>
  23. //Struktura
  24. struct osoba;
  25. typedef struct osoba* Posoba;
  26. struct osoba
  27. {
  28.     char ime[MAX_NAME];
  29.     char prezime[MAX_NAME];
  30.     int godina_rodjenja;
  31.     Posoba Next;
  32.  
  33. };
  34.  
  35. //Funkcije
  36.  
  37. int unos(Posoba);
  38. int ispis_liste(Posoba);
  39. int izbornik();
  40. int unos_na_kraj(Posoba);
  41. Posoba trazi_prezime_prethodni(Posoba);
  42. Posoba trazi_prezime(Posoba);
  43. int brisi_prezime(Posoba);
  44. int dodaj_iza(Posoba);
  45. int dodaj_ispred(Posoba);
  46.  
  47. int main()
  48. {
  49.     struct osoba Head;
  50.     int x = 0, y = 0;
  51.     Posoba p1 = NULL;
  52.  
  53.     Head.Next = NULL;
  54.  
  55.     while (x != 6)
  56.     {
  57.         x = izbornik();
  58.         if (1 == x)
  59.         {
  60.             y = unos(&Head);
  61.             if (y != 1) {
  62.                 printf("Greska tokom unosa!\n");
  63.                 y = 0;
  64.             }
  65.         }
  66.         else if (2 == x)
  67.         {
  68.             y = ispis_liste(Head.Next);
  69.             if (y != 1) {
  70.                 printf("Greska kod ispisa liste\n");
  71.                 y = 0;
  72.             }
  73.         }
  74.  
  75.         else if (3 == x)
  76.         {
  77.             y = unos_na_kraj(&Head);
  78.             if (y != 1) {
  79.                 printf("Greska kod unosa na kraj liste\n");
  80.                 y = 0;
  81.             }
  82.         }
  83.         else if (4 == x)
  84.         {
  85.             p1 = trazi_prezime(Head.Next);
  86.             if (p1 != NULL)
  87.                 printf("Trazena osoba je: %s %s %d \n", p1->ime, p1->prezime, p1->godina_rodjenja);
  88.             else
  89.                 printf("Trazena osoba nije pronadjena\n");
  90.  
  91.         }
  92.         else if (5 == x)
  93.         {
  94.             y = brisi_prezime(&Head);
  95.             if (y != 1)
  96.             {
  97.                 printf("Greska tokom brisanja\n");
  98.                 y = 0;
  99.             }
  100.         }
  101.         else if (7 == x)
  102.         {
  103.             y = dodaj_iza(&Head);
  104.             if (y != 1)
  105.             {
  106.                 printf("Greska tokom dodavanja iza\n");
  107.                 y = 0;
  108.             }
  109.         }
  110.         else if (8 == x)
  111.         {
  112.             y = dodaj_ispred(&Head);
  113.             if (y != 1)
  114.             {
  115.                 printf("Greska tokom dodavanja ispred\n");
  116.                 y = 0;
  117.             }
  118.         }
  119.     }
  120.  
  121.  
  122.  
  123.     getchar();
  124.     getchar();
  125.     return 0;
  126. }
  127.  
  128.  
  129. //Unos elementa liste
  130. int unos(Posoba P)
  131. {
  132.     Posoba q;
  133.     q = (Posoba)malloc(sizeof(struct osoba));
  134.     if (NULL == q)
  135.     {
  136.         printf("Greska prilikom alokacije memorije");
  137.         return -1;
  138.     }
  139.     else
  140.     {
  141.         printf("Unesite ime prezime i godinu rodjenja osobe\n");
  142.         scanf(" %s %s %d", q->ime, q->prezime, &q->godina_rodjenja);
  143.  
  144.         q->Next = P->Next;
  145.         P->Next = q;
  146.         return 1;
  147.     }
  148.  
  149. }
  150. //Ispis liste od poslanog clana
  151. int ispis_liste(Posoba P)
  152. {
  153.     printf("Ispis Liste:\n");
  154.     if (NULL == P)
  155.     {
  156.  
  157.         printf("Prazna lista");
  158.         return -1;
  159.     }
  160.     else
  161.     {
  162.         while (P != NULL)
  163.         {
  164.  
  165.             printf("Ime: %s   Prezime: %s   Godina Rodjenja %d \n", P->ime, P->prezime, P->godina_rodjenja);
  166.             P = P->Next;
  167.  
  168.         }
  169.         return 1;
  170.  
  171.     }
  172. }
  173.  
  174.  
  175. //Funkcija izborinka
  176. int izbornik()
  177. {
  178.     printf("\n Izbornik:\n");
  179.     char c = '0';
  180.     printf("Dodavanje novog clana na pocetak: 1\n");
  181.     printf("Ispis liste:                      2\n");
  182.     printf("Dodavanje na kraj liste:          3\n");
  183.     printf("Pronalazi element liste(prezime)  4\n");
  184.     printf("Briše element liste               5\n");
  185.     printf("Exit                              6\n");
  186.     printf("Dodavanje iza elementa            7\n");
  187.     printf("Dodavanje ispred elementa         8\n");
  188.     scanf(" %c", &c);
  189.     switch (c)
  190.     {
  191.     case '1':
  192.         return 1;
  193.         break;
  194.     case '2':
  195.         return 2;
  196.         break;
  197.     case '3':
  198.         return 3;
  199.         break;
  200.     case '4':
  201.         return 4;
  202.         break;
  203.     case '5':
  204.         return 5;
  205.         break;
  206.     case '6':
  207.         return 6;
  208.         break;
  209.     case '7':
  210.         return 7;
  211.         break;
  212.     case '8':
  213.         return 8;
  214.         break;
  215.     default:
  216.         printf("Nepodrzan odabir\n");
  217.         return -1;
  218.  
  219.     }
  220.  
  221. }
  222.  
  223. //Unos Na Kraj liste
  224. int unos_na_kraj(Posoba P)
  225. {
  226.     while (P->Next != NULL)
  227.     {
  228.         P = P->Next;
  229.     }
  230.     unos(P);
  231.     return 1;
  232. }
  233.  
  234.  
  235. //Trazenje prezimena prethodnog
  236. Posoba trazi_prezime_prethodni(Posoba P)
  237. {
  238.     char prezime[MAX_NAME];
  239.     printf("\nUpisite trazeno prezime\n");
  240.     scanf(" %s", prezime, MAX_NAME);
  241.     while ((P->Next != NULL) && (strcmp(P->Next->prezime, prezime) != 0))
  242.     {
  243.         P = P->Next;
  244.  
  245.     }
  246.     if (NULL == P->Next)
  247.         P = NULL;
  248.     else return P;
  249. }
  250.  
  251.  
  252. //Trazenje prezimena
  253. Posoba trazi_prezime(Posoba P)
  254. {
  255.     Posoba temp = NULL;
  256.     temp = trazi_prezime_prethodni(P);
  257.     if (NULL == temp)
  258.         return temp;
  259.     else
  260.     {
  261.         temp = temp->Next;
  262.         return temp;
  263.     }
  264. }
  265.  
  266. //Brisanje pleba po prezimenu
  267.  
  268. int brisi_prezime(Posoba P)
  269. {
  270.     Posoba temp_njega = NULL;
  271.     Posoba temp_prethodnika = NULL;
  272.     char prezime[MAX_NAME];
  273.  
  274.     printf("Unesite prezime osobe koju zelite izbrisati:\n");
  275.     temp_prethodnika = trazi_prezime_prethodni(P->Next);
  276.     temp_njega = temp_prethodnika->Next;
  277.  
  278.     temp_prethodnika->Next = temp_njega->Next;
  279.     free(temp_njega);
  280.  
  281.  
  282.     return 1;
  283. }
  284.  
  285. //Dodavanje iza elementa
  286.  
  287. int dodaj_iza(Posoba P)
  288. {
  289.     Posoba temp=NULL;
  290.     printf("Dodavanje iza odredjenog elementa\n");
  291.     temp = trazi_prezime(P->Next);
  292.         if (NULL == temp)
  293.         {
  294.             printf("Greska\n");
  295.             return -1;
  296.         }
  297.         else {
  298.             unos(temp);
  299.         }
  300.     return 1;
  301. }
  302.  
  303.  
  304.  
  305. //Dodavanje ispred elementa
  306. int dodaj_ispred(Posoba P)
  307. {
  308.     Posoba temp = NULL;
  309.     printf("Dodavanje ispred odredjenog elementa\n");
  310.     temp = trazi_prezime_prethodni(P->Next);
  311.     if (NULL == temp)
  312.     {
  313.         printf("Greska\n");
  314.         return -1;
  315.  
  316.     }
  317.     else {
  318.         unos(temp);
  319.     }
  320.  
  321. }
  322.  
  323. //Sortiranje liste
  324.  
  325. int sortiraj_osobe(Posoba P)
  326. {
  327.     Posoba temp2 = NULL;
  328.     Posoba temp1 = NULL;
  329.     Posoba zadnji = NULL;
  330.  
  331.     while (P->Next != NULL)
  332.     {
  333.  
  334.     }
  335.  
  336.  
  337.     return 1;
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement