Advertisement
Guest User

p5_array

a guest
Jan 24th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <limits.h>
  6.  
  7. struct event_t {
  8. int type; // Ereignis -Typ
  9. double time; // Aktuelle Zeit
  10. long serial; // laufende Ereignisnummer , wird beim Einfuegen generiert 5 };
  11. };
  12. typedef struct event_t event_t;// Ereignismenge fuer funktionen
  13. event_t *ereignismenge[100];
  14.  
  15. void bubblesort(); // c99 blabla...
  16. long serial = 1; // da initialisierung ja mit null gefuellt wird
  17. // int start = 1; // da initialisierung ja mit null gefuellt wird
  18.  
  19.  
  20. double myrand() { // P3 +1 oder nicht?
  21. return (double)rand() / ((double)RAND_MAX);
  22. }
  23.  
  24. void event_initialize() //
  25. {
  26. // ersten hundert eintraege sind schon in der liste bestehend?
  27. for (int i = 0; i < 100; i++)
  28. {
  29. ereignismenge[i] = NULL;
  30. }
  31.  
  32. }
  33. void bubblesort(){
  34. for(int j = 1; j < 100; j++) {
  35. for (int i = 0; i < (j - 1); i++) {
  36. if((ereignismenge[i] != NULL)){
  37. if (ereignismenge[i]->time > ereignismenge[i + 1]->time) {
  38. struct event_t *temp; // temp damit das erste ereignis nicht ueberschrieben wird
  39. temp = ereignismenge[i];
  40. ereignismenge[i] = ereignismenge[i + 1];
  41. ereignismenge[i + 1] = temp;
  42. }
  43. }
  44. }
  45. }
  46. }
  47.  
  48. long event_store(int type, double time) {
  49.  
  50. struct event_t *event = (struct event_t *)calloc(1, sizeof(struct event_t));
  51. event->type = type;
  52. event->time = time;
  53. for(int i=0; i < 100; i++){
  54. // erzeuge eintraege
  55. if (ereignismenge[i] == NULL) {
  56.  
  57. event->serial = serial;
  58. ereignismenge[i] = event;
  59. serial++;
  60.  
  61. }
  62. }
  63. bubblesort();
  64.  
  65. }
  66.  
  67. long event_retrieve(int *type, double *time) {
  68. for (long i = 0; i < 100; i++) {
  69. // Attribute werden uebergeben
  70. if (ereignismenge[i]!=NULL) {
  71. // long seriennummer = ereignismenge[i]->serial;
  72. *type = ereignismenge[i]->type;
  73. *time = ereignismenge[i]->time;
  74. free(ereignismenge[i]);
  75. ereignismenge[i] = NULL;
  76. /*if (start == 1) {
  77. // printf("Type: %3d \tTime: %f\n", *type, *time);
  78. }*/
  79. return serial;
  80. }
  81. }
  82. }
  83.  
  84. int main() {
  85.  
  86. srand(time(NULL));
  87. long id;
  88. int type;
  89. double time;
  90. int n = 100;// Ereignisliste fuellen
  91. clock_t start, ende;
  92. event_initialize();
  93.  
  94. start = clock();
  95. for (int i = 0; i < n; i++) {
  96. event_store(rand() % 100, myrand() * 10); // Zufallstyp (1..100)
  97. for (int j = 0; j<100; j++) {
  98. printf("innere schleife %d %g %ld\n", ereignismenge[j]->type, ereignismenge[j]->time, ereignismenge[j]->serial);
  99. }
  100. }
  101. // PraktikumsPDF Zeile 14 n=100000 // n neu definieren ???
  102.  
  103. n = n + 99800; // viele Ereignisse generieren
  104.  
  105. for (int i = 0; i < n; i++) {
  106. id = event_retrieve(&type, &time); // Ereignis abrufen
  107.  
  108. printf("ID: %10ld TYPE: %3d TIME: %g\n", id, type, time); // Kontrollausgabe
  109.  
  110. event_store(rand() % 100, myrand() * 10); // weiteres Ereignis
  111. }
  112. ende = clock();
  113. printf("Zeit sec. = %f\n", (float)(ende - start) / CLOCKS_PER_SEC);
  114.  
  115. return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement