fork(7) download
  1. #include <limits.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7.  
  8.  
  9. /* Zdefiniuj typ strukturalny zawierający 3 pola (int, char, double ). Następnie zaimplementuj funkcje do obsługi zdefiniowanego typu:
  10. losowanie – funkcja, kasowanie – funkcja, sortowanie – funkcja, zliczanie znaków – funkcja.
  11. W funkcji main() programu wywołaj następująco sekwencję funkcji (oznaczenia czas start, czas stop oznaczają początek i koniec pomiaru czasu wykonania wraz z wyświetleniem czasu wykonania) */
  12.  
  13. struct DATA {
  14. int liczba_int;
  15. char znak;
  16. double liczba_double;
  17. };
  18.  
  19. /*funkcja losowania znaków*/ char Losuj_char() {
  20. char znak = rand() % 255;
  21. return(znak);
  22. }
  23.  
  24. /*funkcja losowania liczb*/ int Losuj_int() {
  25. int no = rand() /*% INT_MAX*/;
  26. return (no);
  27. }
  28.  
  29.  
  30. struct DATA** Losuj_dane(int N) {
  31. printf("Losuj_dane: %d \n", N);
  32. /*dynamiczna tablice wskaznikow na struktury typu DATA */
  33. struct DATA **ptr_tab;
  34.  
  35. /*rezerwowanie miejsca na tablicę wskaźników*/
  36. ptr_tab = (struct DATA**)malloc(N*sizeof(struct DATA*));
  37. if(!ptr_tab) exit(1);
  38. /*rezerwowanie pod każdy wskaźnik pamięci na DATA*/
  39. for (int i = 0; i<N; i++) {
  40. ptr_tab[i] = (struct DATA*) malloc(sizeof(struct DATA));
  41. if(!ptr_tab[i]) exit(2);
  42. ptr_tab[i]->liczba_int = Losuj_int();
  43. ptr_tab[i]->znak = Losuj_char();
  44. ptr_tab[i]->liczba_double = 0;
  45. }
  46. return(ptr_tab);
  47.  
  48. }
  49.  
  50. void Kasuj_dane(struct DATA** ptr_tab, int N) {
  51. printf("Kasuj_dane: %d \n", N);
  52.  
  53. for (int i = 0; i<N; i++){
  54. free(ptr_tab[i]);
  55. }
  56. free(ptr_tab);
  57. }
  58.  
  59.  
  60. void Sortuj_dane(struct DATA** ptr_tablica, int N) {
  61. printf("Sortuj_dane: %d \n", N);
  62. do
  63. {
  64. for (int i = 1; i<N; i++)
  65. {
  66. if (ptr_tablica[i-1]->liczba_int > ptr_tablica[i]->liczba_int)
  67. {
  68. struct DATA *wsk = ptr_tablica[i];
  69. ptr_tablica[i] = ptr_tablica[i-1];
  70. ptr_tablica[i-1] = wsk;
  71. }
  72. }
  73. N--;
  74. } while (N>1);
  75. }
  76.  
  77. void Zliczanie_znakow(struct DATA** ptr_tablica, int N, char znak){
  78.  
  79. printf("Zliczanie_znakow: %d \n", N);
  80. int licznik_znakow = 0;
  81. for (int i = 0; i<N; i++)
  82. {
  83. //do {
  84.  
  85. if(ptr_tablica[i]->znak == znak) licznik_znakow++;
  86.  
  87. //} while (ptr_tablica[i]->znak == znak);
  88.  
  89. //printf("Znak: %c \n", znak);
  90. //
  91. }
  92. printf("liczba wystapien znaku: %d\n", licznik_znakow);
  93. }
  94.  
  95. void LOSOWANIE(int N, char szukaj_znak) {
  96.  
  97. printf("LOSOWANIE: %d \n", N);
  98. clock_t start, stop;
  99. double time;
  100.  
  101. struct DATA** ptr_tablica;
  102.  
  103. start = clock(); /*start programu*/
  104.  
  105. ptr_tablica = Losuj_dane(N);
  106. Sortuj_dane(ptr_tablica, N);
  107. Zliczanie_znakow(ptr_tablica, N, szukaj_znak);
  108.  
  109. stop = clock();
  110. time = (stop - start) / CLOCKS_PER_SEC;
  111.  
  112. Kasuj_dane(ptr_tablica, N);
  113.  
  114. //stop = clock();
  115. //time = (stop - start) / CLOCKS_PER_SEC;
  116.  
  117. if(time>=0)
  118. printf("Losowanie: %d \n", N);
  119. //printf("Czas wykonania: %0.50f", time);
  120. //getchar();
  121. }
  122.  
  123. int main()
  124. {
  125. LOSOWANIE(1000, 'A');
  126. LOSOWANIE(10000, 'B');
  127. LOSOWANIE(100000, 'C');
  128.  
  129. //system("pause");
  130. //getchar();
  131. //getchar();
  132.  
  133. return 0;
  134. }
Time limit exceeded #stdin #stdout 5s 5020KB
stdin
Standard input is empty
stdout
Standard output is empty