Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Autor: Dawid Mocek, Oktawian Cirko
- W Solution -> properties -> configuration properteis -> c/c++ ->preprocessor -> preporcessor definitions trzeba dodać: _CRT_SECURE_NO_WARNINGS dla trybu Release jak i Debug
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <Windows.h>
- #include <time.h>
- /*
- http://gamedev.stackexchange.com/questions/26759/best-way-to-get-elapsed-time-in-miliseconds-in-windows
- */
- long long milliseconds_now()
- {
- static LARGE_INTEGER s_frequency;
- BOOL s_use_qpc = QueryPerformanceFrequency(&s_frequency);
- if (s_use_qpc) {
- LARGE_INTEGER now;
- QueryPerformanceCounter(&now);
- return (1000LL * now.QuadPart) / s_frequency.QuadPart;
- }
- else {
- return GetTickCount();
- }
- }
- /*
- Funkcja zwraca wskaźnik na handlera - jeśli nie otworzy pliku program się zamknie
- */
- FILE * OtworzPlik(const char *nazwa)
- {
- FILE *fh = fopen(nazwa, "w");
- if (fh == NULL)
- {
- printf("Nie mozna otworzyc pliku: %s - pewnie brak uprawnien lub AVG ;) \n", nazwa);
- exit(1);
- }
- return fh;
- }
- /*
- Funkcja zapisuje tablice tab do max k-elementów do pliku fh
- */
- void ZapiszTablice(FILE *fh, int tab[], int k)
- {
- int j;
- for (j = 1; j <= k; j++) fprintf(fh, "%d", tab[j]);
- fprintf(fh, "\n");
- }
- /*
- Funkcja zamyka handler pliku
- */
- void ZamknijPlik(FILE *fh)
- {
- fclose(fh);
- fh = NULL;
- }
- /*
- Funkcja wypisuje na stdout tablice do max k-elementów
- */
- void Wypisz(int tab[], int k)
- {
- int j;
- for (j = 1; j <= k; j++) printf("%d", tab[j]);
- printf("\n");
- }
- /*
- Funkcja wczytuje dane z linii komend
- */
- char * WczytajArg(const int cnt, const char **args, int *k, int *max) // i tu
- {
- if (cnt != 4)
- {
- printf("Uzycie(taka sama kolejnosc!): program.exe D:\\nazwa_pliku.txt k n\n");
- printf("\tnp: program.exe D:\\nazwa_pliku.txt 4 6\n");
- exit(1);
- }
- char * plik = (char *)malloc(strlen(args[1]) + 1);
- memset(plik, 0, strlen(args[1]) + 1);
- memcpy(plik, args[1], strlen(args[1]));
- if (!plik)
- {
- free(plik);
- printf("Nie mozna zaalkowac pamieci dla %s", args[1]);
- exit(1);
- }
- *k = atoi(args[2]); // oo tu
- *max = atoi(args[3]);
- if (*k <= 0 || *max <= 0)
- {
- printf("Error: max > k || k <= 0 || max <=0 \n");
- exit(1);
- }
- return plik;
- }
- /*
- Funkcja alokuje tablice
- */
- int * AllocZbior(const int size)
- {
- int *t = (int*)malloc(sizeof(int)* size);
- if (!t)
- {
- free(t);
- printf("Nie mozna zaalokwoac pamieci dla zbioru o liczbie elmentow: %d", size);
- exit(1);
- }
- return t;
- }
- int main(int argc, char **argv)
- {
- unsigned long int total = 0;
- int i, p;
- int k;
- int max;
- int n;
- // Wczytujemy dane
- char *nazwa_pliku = WczytajArg(argc, argv, &k, &max);
- // Alokumjemy zbior
- int *A = AllocZbior(max);
- // Otwieramy plik
- FILE *fh = OtworzPlik(nazwa_pliku);
- // Czas start
- long long start = milliseconds_now();
- // Wpisujemy dane do zbioru
- for (i = 1; i <= k; i++)
- A[i] = i;
- n = max;
- p = k;
- while (p >= 1)
- {
- // Wypisujemy tablice
- // Wypisz(A, k);
- // Zapisujemy tablice do pliku
- ZapiszTablice(fh, A, k);
- /// jescze to trzeba opisac - manual z labek
- if (n == A[k]) --p; else p = k;
- if (p >= 1)
- for (i = k; i >= p; --i, ++total)
- A[i] = A[p] + i - p + 1;
- ++total;
- }
- // Czas koniec
- long long elapsed = milliseconds_now() - start;
- printf("Czas: %lld milisekund, dla k = %d, n = %d.\nLiczba iteracji wszystkich petlach: %ld", elapsed, k, max, total);
- // Zamykamy plik
- ZamknijPlik(fh);
- // Zwalniamy pamiec
- free(nazwa_pliku);
- free(A);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement