Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <math.h>
- #include <string.h>
- #include <time.h>
- #pragma pack(1)
- typedef struct
- {
- char nazwapliku[25];
- int szerokosc;
- int wysokosc;
- int maxszar;
- int **tab;
- }obraz;
- void wczytajob(obraz* o)
- {
- FILE* plik;
- int x,y,v;
- char nazwa[25];
- char standl;
- int standc;
- int linijka;
- int wysokosc;
- do {
- printf("\nPodaj nazwę pliku, który chcesz wczytać:");
- scanf("%s", nazwa);
- plik = fopen(nazwa, "r");
- if (plik == NULL)
- {
- printf("\nTaki plik nie istnieje\n");
- printf("Wpisz ponownie nazwę pliku.\n");
- }
- } while (plik == NULL);
- for (x = 0; x < 25; x++)
- {
- o->nazwapliku[x] = nazwa[x];
- }
- fscanf(plik, "%c %d", &standl, &standc);
- if (standl != 'P' || standc != 2)
- {
- printf("Plik nie ma zadeklarowanego standardu P2.\n");
- return;
- }
- x = fgetc(plik);
- if (x == '#')
- {
- while (fgetc(plik) != '\n')
- {
- }
- }
- else
- {
- fseek(plik, -1, SEEK_CUR);
- }
- fscanf(plik,"%d", &o->szerokosc);
- x = fgetc(plik);
- if (x == '#')
- {
- while (fgetc(plik) != '\n')
- {
- }
- }
- else
- {
- fseek(plik, -1, SEEK_CUR);
- }
- fscanf(plik,"%d", &o->wysokosc);
- o->tab= calloc(o->wysokosc, sizeof(int));
- if (o->tab != NULL)
- {
- for (x = 0; x < o->wysokosc; x++)
- {
- o->tab[x] = calloc(o->szerokosc, sizeof(int));
- if (o->tab[x] == 0)
- {
- exit(1);
- }
- }
- }
- else
- {
- exit(1);
- }
- x = fgetc(plik);
- if (x == '#')
- {
- while (fgetc(plik) !='\n')
- {
- }
- }
- linijka = o->szerokosc;
- wysokosc = o->wysokosc;
- x=0;
- y=0;
- x = fgetc(plik);
- if (x == '#')
- {
- while (fgetc(plik) != '\n')
- {
- }
- }
- fscanf(plik, "%d", &o->maxszar);
- for (x = 0; x <wysokosc; ++x)
- {
- for (y = 0; y < linijka; ++y)
- {
- if (fscanf(plik, "%d", &o->tab[x][y]) == 1)
- {
- fseek(plik, 1, SEEK_CUR);
- }
- else
- {
- v = fgetc(plik);
- if (v == '#')
- {
- while (fgetc(plik) != '\n')
- {
- }
- }
- }
- }
- }
- printf("\nUdało się wczytać plik.\n");
- fclose(plik);
- }
- void wypisz(obraz *o)
- {
- int x, y;
- for (x = 0; x <o->wysokosc; ++x)
- {
- for (y = 0; y < o->szerokosc; ++y)
- {
- printf("%d ", o->tab[x][y]);
- }
- printf("\n");
- }
- }
- void menu()
- {
- printf("[1] Wczytaj obraz\n");
- printf("[2] Wyświetl wczytane obrazy\n");
- printf("[3] Wybierz obraz do przetwarzania\n");
- printf("[4] Usuń obraz\n");
- }
- void SprawdzInt(int*x)
- {
- int i;
- char k;
- i = scanf("%d", x);
- while (i != 1)
- {
- k = getchar();
- printf("\nPodaj liczbe!\n");
- i = scanf("%d", x);
- }
- }
- void wyswietl(obraz* obrazki, int liczbaobrazkow)
- {
- int i = 0;
- if (liczbaobrazkow != 0)
- {
- printf("\nWczytane obrazy:\n");
- for (i = 0; i < liczbaobrazkow; i++)
- {
- printf("[%d] %s\n", i + 1, obrazki[i].nazwapliku);
- }
- }
- else
- {
- printf("\nNie wczytano żadnego obrazu\n");
- }
- }
- int wybieranie(obraz* obrazki,int liczbaobrazkow)
- {
- int wybrany;
- wyswietl(obrazki, liczbaobrazkow);
- printf("Wybierz obraz");
- do {
- scanf("%d", &wybrany);
- SprawdzInt(&wybrany);
- if (wybrany > liczbaobrazkow || wybrany < 1)
- {
- printf("\nWybierz sensowniejszą opcję");
- wybrany = liczbaobrazkow + 1;
- }
- } while (wybrany > liczbaobrazkow);
- return wybrany;
- }
- void Usun(obraz* obrazki, int* liczbaobrazkow)
- {
- int usun;
- int i;
- wyswietl(obrazki, *liczbaobrazkow);
- printf("Wybierz obraz do usuniecia");
- do {
- scanf("%d", &usun);
- SprawdzInt(&usun);
- if (usun > *liczbaobrazkow || usun < 1)
- {
- printf("\nWybierz sensowniejszą opcję");
- usun = *liczbaobrazkow + 1;
- }
- } while (usun > *liczbaobrazkow);
- usun--;
- for (i = usun; i < *liczbaobrazkow-1; i++)
- {
- obrazki[i] = obrazki[i + 1];
- }
- *liczbaobrazkow--;
- }
- int main()
- {
- obraz obrazki[100];
- int liczbaobrazkow = 0;
- int wybrany;
- int zmenu;
- setlocale( LC_ALL, "polish_poland" );
- srand(time(NULL));
- while (1)
- {
- do {
- menu();
- scanf("%d", &zmenu);
- SprawdzInt(&zmenu);
- switch (zmenu)
- {
- case 1:
- {
- wczytajob(&obrazki[liczbaobrazkow]);
- liczbaobrazkow++;
- break;
- }
- case 2:
- {
- wyswietl(obrazki,liczbaobrazkow);
- break;
- }
- case 3:
- {
- wybrany = wybieranie(obrazki,liczbaobrazkow);
- }
- case 4:
- {
- Usun(obrazki,&liczbaobrazkow);
- }
- }
- } while (0 < zmenu && zmenu < 5);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement