Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.21 KB | None | 0 0
  1. //WSZELKIE PRAWA ZASTRZEŻONE !!!
  2.  
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7. #include <string.h>
  8. //-------------------------------------------------------------
  9. #define MT 30
  10. #define MA 20
  11. #define G 6 //tyle obrazow zostanie przetworzonych w f. main w f. falsyfikat
  12. //-------------------------------------------------------------
  13. typedef struct Obraz
  14. {
  15.     char tytul[MT];
  16.     char autor[MA];
  17. }Obraz;
  18. //-------------------------------------------------------------
  19. struct Wezel {
  20.     Obraz * dzielo;
  21.     struct Wezel *nast;
  22. } *glowa = NULL;
  23. //-------------------------------------------------------------
  24. //sygnatury funkcji do przygotowania
  25. void dodajObrazSort(Obraz k); //dodaj obraz do listy w sposób uporządkowany
  26. void wypisz(); //wypisz listę
  27. void wypiszObraz(Obraz k); //wypisz obraz
  28. int usunObraz(char *t, char *a); //usuń podany obraz
  29. void falsyfikat(int iles); //zmodyfikuj listę tworząc falsyfikaty obrazów
  30. int usunCoDrugi(int pocz);//usun co drugi el. w liscie, pocz wskazuje czy usuwamy od pierwszego czy od drugiego elementu
  31. void sprzatanie();//wyczyść listę
  32.  
  33.                   //-------------------------------------------------------------
  34. int main()
  35. {
  36.     Obraz o1 = { "Jan VI", "Rembrandt" }, o2 = { "Sloneczniki","van Gogh" }, o3 = { "Bitwa pod Grunwaldem","Matejko" }, o4 = { "Irysy w ogrodzie Moneta","Monet" },
  37.         o5 = { "Pejzaz z szafarzem","Poussin" }, o6 = { "Powolanie sw. Mateusza","Caravaggio" }, o7 = { "Wiosna","Botticelli" }, o8 = { "Madonna de Magnificat","Botticelli" },
  38.         o9 = { "Poddanie Bredy","Velazquez" }, o10 = { "Poklon trzech kroli","Botticelli" }, o11 = { "Wdowa i dziecko","Segall" }, o12 = { "Wyjazd Marii Medici","Rubens" },
  39.         o13 = { "Regaty","Canaletto" }, o14 = { "Ostatni niewolnik","Segall" }, o15 = { "Narodziny Wenus","Botticelli" }, o16 = { "Bitwa pod Grunwaldem","Matejko" };
  40.     //Etap 1 (dodawanie jednego elementu na koniec listy i wypisanie)
  41.     printf("\nEtap 1\n");
  42.     dodajObrazSort(o1);     dodajObrazSort(o5);     dodajObrazSort(o9);     dodajObrazSort(o13);
  43.     dodajObrazSort(o2);     dodajObrazSort(o6);     dodajObrazSort(o10);    dodajObrazSort(o14);
  44.     dodajObrazSort(o3);     dodajObrazSort(o7);     dodajObrazSort(o11);    dodajObrazSort(o15);
  45.     dodajObrazSort(o4);     dodajObrazSort(o8);     dodajObrazSort(o12);    dodajObrazSort(o16);
  46.     wypisz();
  47.     //Etap 2 (usuwanie elementu z listy)
  48.     printf("\nEtap 2\n");
  49.     usunObraz("a", "Rembrandt"); usunObraz("Sloneczniki", "van Gogh"); usunObraz("Irysy w ogrodzie Moneta", "Monet"); usunObraz("a", "a");
  50.     wypisz();
  51.     //Etap 3 (falsyfikowanie obrazow)
  52.     printf("\nEtap 3\n");
  53.     srand((unsigned)time(NULL));
  54.     falsyfikat(G);
  55.     printf("Lista po zmianie:\n");
  56.     wypisz();
  57.     //Etap 4 (usun co drugi)
  58.     printf("\n\nEtap 4\n");
  59.     usunCoDrugi(2);
  60.     printf("usunieto %d wezlow\n", usunCoDrugi(1));//usun co drugi poczawszy od drugiego el.
  61.     wypisz();
  62.     //Etap 5 (sprzatanie)
  63.     //printf("\nEtap 5\n");
  64.     //sprzatanie();
  65.     //wypisz();
  66.     //printf("\nkoniec!\n");
  67.     system("PAUSE");
  68.     //return 0;
  69. }
  70. //-------------------------------------------------------------
  71.  
  72. void dodajObrazSort(Obraz k)
  73. {
  74.     struct Wezel * w = (struct Wezel*)malloc(sizeof(struct Wezel));
  75.     struct Wezel *p = glowa;
  76.     w->dzielo = (Obraz*)malloc(sizeof(Obraz));
  77.     *(w->dzielo) = k;
  78.     w->nast = NULL;
  79.     if (glowa == NULL)
  80.     {
  81.         glowa = w;
  82.         return;
  83.     }
  84.     if (strcmp(glowa->dzielo->autor, k.autor)>0 || (strcmp(glowa->dzielo->autor, k.autor) == 0 && strcmp(glowa->dzielo->tytul, k.tytul)<0))
  85.     {
  86.         w->nast = glowa;
  87.         glowa = w;
  88.     }
  89.     while (p->nast && (strcmp(p->nast->dzielo->autor, k.autor) < 0 || (strcmp(p->nast->dzielo->autor, k.autor) == 0 && strcmp(p->nast->dzielo->tytul, k.tytul) < 0)))
  90.         p = p->nast;
  91.     if (p->nast && strcmp(p->nast->dzielo->autor, k.autor)==0 && strcmp(p->nast->dzielo->tytul, k.tytul)==0) return;
  92.     w->nast = p->nast;
  93.     p->nast = w;
  94.     return;
  95. }
  96. void wypiszObraz(Obraz k)
  97. {
  98.     printf("%30s, %30s\n", k.autor, k.tytul);
  99. }
  100. void wypisz()
  101. {
  102.     struct Wezel *w = glowa;
  103.     while (w)
  104.     {
  105.         wypiszObraz(w->dzielo[0]);
  106.         w = w->nast;
  107.     }
  108. }
  109. int usunObraz(char *t, char *a)
  110. {
  111.     struct Wezel *w = glowa, *w1;
  112.     if (strcmp(glowa->dzielo->autor, a)==0 && strcmp(glowa->dzielo->tytul, t)==0)
  113.     {
  114.         w1 = glowa;
  115.         glowa = w1->nast;
  116.         free(w1);
  117.         return 1;
  118.     }
  119.     while (w->nast)
  120.     {
  121.         if (strcmp(w->nast->dzielo->autor, a)==0 && strcmp(w->nast->dzielo->tytul, t)==0)
  122.         {
  123.             w1 = w->nast;
  124.             w->nast = w1->nast;
  125.             free(w1);
  126.             return 1;
  127.         }
  128.         w = w->nast;
  129.     }
  130.     return -1;
  131. }
  132. void falsyfikat(int iles)
  133. {
  134.     Obraz * p = (Obraz*)malloc(iles * sizeof(Obraz));
  135.     int il=0, i, j, *t = (int*)malloc(iles*sizeof(int));
  136.     struct Wezel *w = glowa;
  137.     char *au=(char*)malloc(50*sizeof(char));
  138.     while (w)
  139.     {
  140.         il=il+1;
  141.         w = w->nast;
  142.     }
  143.     for (i = 0; i < iles; ++i)
  144.     {
  145.         t[i] = rand() % il;
  146.         w = glowa;
  147.         for (j = 0; j < t[i]; ++j)
  148.             w = w->nast;
  149.         strcpy(au, "Prawie ");
  150.         strcat(au, w->dzielo->autor);
  151.         strcpy(p[i].autor, au);
  152.         strcpy(p[i].tytul, w->dzielo->tytul);
  153.     }
  154.     for (i = 0; i < iles; ++i)
  155.         dodajObrazSort(p[i]);
  156. }
  157. int usunCoDrugi(int pocz)
  158. {
  159.     struct Wezel *w;
  160.     int i = 0;
  161.     if (pocz == 1)
  162.     {
  163.         glowa = glowa->nast;
  164.         ++i;
  165.     }
  166.     w = glowa;
  167.     while (w && w->nast)
  168.     {
  169.         w->nast = w->nast->nast;
  170.         w = w->nast;
  171.         ++i;
  172.     }
  173.     return i;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement