Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. /*
  2. Compile: make merge_arrays
  3. Run: ./merge_arrays
  4. make merge_arrays && ./merge_arrays
  5. */
  6.  
  7. #include "base.h"
  8. //HIHIHIHIHIHIHIHI
  9.  
  10. //template begin
  11.  
  12. struct Bike{
  13. int wheel_size; // 20 - 30 inch
  14. int gear_count; // 1-27 gears
  15. float price; //0.0 Euro - ...
  16. };
  17.  
  18. typedef struct Bike Bike;
  19.  
  20. int compare(Bike* bike1, Bike* bike2);
  21.  
  22. double calculate_coolness(Bike* bike);
  23.  
  24. //prints a bike and it's coolness.
  25. void print_bike(Bike* bike){
  26. printf("Coolness: %5.1lf of bike with %2d' wheels and %2d gears for %8.2f Euro\n", calculate_coolness(bike), bike->wheel_size, bike->gear_count, bike->price);
  27. }
  28.  
  29. // Initializes a bike with randowm values.
  30. void init_rnd_bike(Bike* bike){
  31. bike->gear_count = i_rnd(27) + 1;
  32. (*bike).wheel_size = i_rnd(10) + 20;
  33. bike->price = (float)d_rnd(2000.0);
  34. }
  35. // Initializes a given bike array.
  36. void init_sorted_bike_array(Bike* bikes, int length){
  37. for(int i = 0; i < length; i++){
  38. init_rnd_bike(bikes + i);
  39. //print_bike(bikes + i);
  40. }
  41.  
  42. bool unsorted = true;
  43. while(unsorted){
  44. unsorted = false;
  45. int i = 0;
  46. while( i < length - 1){
  47. if(compare(bikes + i , bikes + i + 1) > 0) {
  48. Bike temp = *(bikes + i);
  49. bikes[i] = bikes[i + 1];
  50. bikes[i + 1] = temp;
  51. unsorted = true;
  52. }
  53. i++;
  54. }
  55. }
  56. }
  57.  
  58. bool check_merged_array(Bike* bikes, int length){
  59. for(int i = 0; i < length - 1 ; i++){
  60. if(compare(bikes + i , bikes + i + 1) > 0 ){
  61. return false;
  62. }
  63. }
  64. return true;
  65. }
  66.  
  67. //template end
  68.  
  69. //Calculates and returns the coolness of a given Bike.
  70. double calculate_coolness(Bike* bike){
  71. double price_factor = 1.0;
  72. double wheel_factor = 1.0;
  73. double gear_factor = 1.0;
  74.  
  75. // todo: implement
  76. price_factor = (-2.75)*pow(10.0, -6)*pow((bike->price-1000),2)+3;
  77. gear_factor = (1/7)*bike->gear_count+0.5;
  78. if(bike->wheel_size >= 24 || bike->wheel_size <= 27){
  79. wheel_factor = 1.9;
  80. }
  81. else {
  82. wheel_factor = 0.9;
  83. }
  84.  
  85. // end: implement
  86. return price_factor * gear_factor * wheel_factor;
  87. }
  88. // Compares two bikes. Returns -1 if bike1 is "cooler" than bike2, 1 if bike2 is "cooler" than bike1, else 0
  89. int compare(Bike* bike1, Bike* bike2){
  90. // todo: implement
  91. double coolness_bike1 = calculate_coolness(bike1);
  92. double coolness_bike2 = calculate_coolness(bike2);
  93.  
  94. if(coolness_bike1 < coolness_bike2) {
  95. return -1;
  96. }
  97. else if (coolness_bike1 > coolness_bike2) {
  98. return 1;
  99. }
  100.  
  101. return 0; //todo
  102. }
  103.  
  104.  
  105. // Merge sorted arrays bikes1 and bikes2, such that the result is sorted array bout.
  106. void merge_arrays(Bike* bikes1, int n1, Bike* bikes2, int n2, Bike* bout) {
  107. int counterb1 = 0;
  108. int counterb2 = 0;
  109. for(int i = 0;i != n1+n2; i++){
  110.  
  111. if(counterb1 == n1) {
  112. int j = i;
  113. for(;j != n1+n2; j++){
  114. bout[j] = bikes2[counterb2];
  115. counterb2++;
  116. }
  117. break;
  118. }
  119.  
  120. if(counterb2 == n1) {
  121. int j = i;
  122. for(;j != n1+n2; j++){
  123. bout[j] = bikes1[counterb1];
  124. counterb1++;
  125. }
  126. break;
  127. }
  128.  
  129. else if (compare(&bikes1[counterb1],&bikes2[counterb2]) == -1){
  130. bout[i] = bikes2[counterb2];
  131. counterb2++;
  132. }
  133. else if (compare(&bikes1[counterb1],&bikes2[counterb2]) == 1){
  134. bout[i] = bikes1[counterb1];
  135. counterb1++;
  136. }
  137. else {
  138. bout[i] = bikes1[counterb1];
  139. counterb1++;
  140. }
  141. }
  142. }
  143.  
  144. // Test array merging.
  145. void merge_arrays_test(void) {
  146.  
  147. // Declaration of arrays
  148. int n1 = 10;
  149. Bike bikes1[n1];
  150. int n2 = 12;
  151. Bike bikes2[n2];
  152. Bike bikes_merged[n1 + n2];
  153.  
  154. // Initializiation
  155. init_sorted_bike_array(bikes1, n1);
  156. init_sorted_bike_array(bikes2, n2);
  157. printf("Bikes1: \n");
  158. for(int i = 0; i < n1; i++){
  159. print_bike(bikes1 + i);
  160. }
  161. printf("Bikes2: \n");
  162. for(int i = 0; i < n2; i++){
  163. print_bike(bikes2 + i);
  164. }
  165. printf("Bikes initialized. \n");
  166.  
  167.  
  168. printf("merge...\n");
  169.  
  170.  
  171. // Merging
  172. merge_arrays(bikes1, n1, bikes2, n2, bikes_merged);
  173.  
  174.  
  175. /* uncomment for testing merge_array
  176. // Output
  177. for(int i = 0; i < n1 + n2; i++){
  178. print_bike(bikes_merged + i);
  179. }
  180.  
  181. // Testing
  182. test_equal_b(check_merged_array(bikes_merged, n1 + n2), true);
  183. */
  184. }
  185.  
  186.  
  187. int main(void) {
  188. merge_arrays_test();
  189. return 0;
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement