Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //WSZELKIE PRAWA ZASTRZEŻONE !!!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <string.h>
- //-------------------------------------------------------------
- #define MT 30
- #define MA 20
- #define G 6 //tyle obrazow zostanie przetworzonych w f. main w f. falsyfikat
- //-------------------------------------------------------------
- typedef struct Obraz
- {
- char tytul[MT];
- char autor[MA];
- }Obraz;
- //-------------------------------------------------------------
- struct Wezel {
- Obraz * dzielo;
- struct Wezel *nast;
- } *glowa = NULL;
- //-------------------------------------------------------------
- //sygnatury funkcji do przygotowania
- void dodajObrazSort(Obraz k); //dodaj obraz do listy w sposób uporządkowany
- void wypisz(); //wypisz listę
- void wypiszObraz(Obraz k); //wypisz obraz
- int usunObraz(char *t, char *a); //usuń podany obraz
- void falsyfikat(int iles); //zmodyfikuj listę tworząc falsyfikaty obrazów
- int usunCoDrugi(int pocz);//usun co drugi el. w liscie, pocz wskazuje czy usuwamy od pierwszego czy od drugiego elementu
- void sprzatanie();//wyczyść listę
- //-------------------------------------------------------------
- int main()
- {
- Obraz o1 = { "Jan VI", "Rembrandt" }, o2 = { "Sloneczniki","van Gogh" }, o3 = { "Bitwa pod Grunwaldem","Matejko" }, o4 = { "Irysy w ogrodzie Moneta","Monet" },
- o5 = { "Pejzaz z szafarzem","Poussin" }, o6 = { "Powolanie sw. Mateusza","Caravaggio" }, o7 = { "Wiosna","Botticelli" }, o8 = { "Madonna de Magnificat","Botticelli" },
- o9 = { "Poddanie Bredy","Velazquez" }, o10 = { "Poklon trzech kroli","Botticelli" }, o11 = { "Wdowa i dziecko","Segall" }, o12 = { "Wyjazd Marii Medici","Rubens" },
- o13 = { "Regaty","Canaletto" }, o14 = { "Ostatni niewolnik","Segall" }, o15 = { "Narodziny Wenus","Botticelli" }, o16 = { "Bitwa pod Grunwaldem","Matejko" };
- //Etap 1 (dodawanie jednego elementu na koniec listy i wypisanie)
- printf("\nEtap 1\n");
- dodajObrazSort(o1); dodajObrazSort(o5); dodajObrazSort(o9); dodajObrazSort(o13);
- dodajObrazSort(o2); dodajObrazSort(o6); dodajObrazSort(o10); dodajObrazSort(o14);
- dodajObrazSort(o3); dodajObrazSort(o7); dodajObrazSort(o11); dodajObrazSort(o15);
- dodajObrazSort(o4); dodajObrazSort(o8); dodajObrazSort(o12); dodajObrazSort(o16);
- wypisz();
- //Etap 2 (usuwanie elementu z listy)
- printf("\nEtap 2\n");
- usunObraz("a", "Rembrandt"); usunObraz("Sloneczniki", "van Gogh"); usunObraz("Irysy w ogrodzie Moneta", "Monet"); usunObraz("a", "a");
- wypisz();
- //Etap 3 (falsyfikowanie obrazow)
- printf("\nEtap 3\n");
- srand((unsigned)time(NULL));
- falsyfikat(G);
- printf("Lista po zmianie:\n");
- wypisz();
- //Etap 4 (usun co drugi)
- printf("\n\nEtap 4\n");
- usunCoDrugi(2);
- printf("usunieto %d wezlow\n", usunCoDrugi(1));//usun co drugi poczawszy od drugiego el.
- wypisz();
- //Etap 5 (sprzatanie)
- //printf("\nEtap 5\n");
- //sprzatanie();
- //wypisz();
- //printf("\nkoniec!\n");
- system("PAUSE");
- //return 0;
- }
- //-------------------------------------------------------------
- void dodajObrazSort(Obraz k)
- {
- struct Wezel * w = (struct Wezel*)malloc(sizeof(struct Wezel));
- struct Wezel *p = glowa;
- w->dzielo = (Obraz*)malloc(sizeof(Obraz));
- *(w->dzielo) = k;
- w->nast = NULL;
- if (glowa == NULL)
- {
- glowa = w;
- return;
- }
- if (strcmp(glowa->dzielo->autor, k.autor)>0 || (strcmp(glowa->dzielo->autor, k.autor) == 0 && strcmp(glowa->dzielo->tytul, k.tytul)<0))
- {
- w->nast = glowa;
- glowa = w;
- }
- 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)))
- p = p->nast;
- if (p->nast && strcmp(p->nast->dzielo->autor, k.autor)==0 && strcmp(p->nast->dzielo->tytul, k.tytul)==0) return;
- w->nast = p->nast;
- p->nast = w;
- return;
- }
- void wypiszObraz(Obraz k)
- {
- printf("%30s, %30s\n", k.autor, k.tytul);
- }
- void wypisz()
- {
- struct Wezel *w = glowa;
- while (w)
- {
- wypiszObraz(w->dzielo[0]);
- w = w->nast;
- }
- }
- int usunObraz(char *t, char *a)
- {
- struct Wezel *w = glowa, *w1;
- if (strcmp(glowa->dzielo->autor, a)==0 && strcmp(glowa->dzielo->tytul, t)==0)
- {
- w1 = glowa;
- glowa = w1->nast;
- free(w1);
- return 1;
- }
- while (w->nast)
- {
- if (strcmp(w->nast->dzielo->autor, a)==0 && strcmp(w->nast->dzielo->tytul, t)==0)
- {
- w1 = w->nast;
- w->nast = w1->nast;
- free(w1);
- return 1;
- }
- w = w->nast;
- }
- return -1;
- }
- void falsyfikat(int iles)
- {
- Obraz * p = (Obraz*)malloc(iles * sizeof(Obraz));
- int il=0, i, j, *t = (int*)malloc(iles*sizeof(int));
- struct Wezel *w = glowa;
- char *au=(char*)malloc(50*sizeof(char));
- while (w)
- {
- il=il+1;
- w = w->nast;
- }
- for (i = 0; i < iles; ++i)
- {
- t[i] = rand() % il;
- w = glowa;
- for (j = 0; j < t[i]; ++j)
- w = w->nast;
- strcpy(au, "Prawie ");
- strcat(au, w->dzielo->autor);
- strcpy(p[i].autor, au);
- strcpy(p[i].tytul, w->dzielo->tytul);
- }
- for (i = 0; i < iles; ++i)
- dodajObrazSort(p[i]);
- }
- int usunCoDrugi(int pocz)
- {
- struct Wezel *w;
- int i = 0;
- if (pocz == 1)
- {
- glowa = glowa->nast;
- ++i;
- }
- w = glowa;
- while (w && w->nast)
- {
- w->nast = w->nast->nast;
- w = w->nast;
- ++i;
- }
- return i;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement