Advertisement
Petro_zzz

lesson322_25

Oct 25th, 2023
897
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int count_any_fun = 5;
  6.  
  7. void any_fun() {
  8.     static int count_any_fun = 0;
  9.     // global
  10.     ::count_any_fun++;
  11.     cout << "count: " << ::count_any_fun << endl;
  12.  
  13.     // local-static
  14.     count_any_fun++;
  15.     cout << "count: " << count_any_fun << endl;
  16. }
  17.  
  18. void task_static() {
  19.     any_fun();
  20.     any_fun();
  21.     any_fun();
  22. }
  23.  
  24. template<class T>
  25. void show_arr(int size, T* arr) {
  26.     for (int k = 0; k < size; k++)
  27.         cout << arr[k] << " ";
  28.     cout << endl;
  29. }
  30.  
  31. template<class T>
  32. int get_size(T* arr) {
  33.     if (arr)
  34.         return _msize(arr) / sizeof(arr[0]);
  35.     return 0;
  36. }
  37.  
  38. void task_dynamic_array() {
  39.     int psa[]{ 1,2,3 };
  40.     int* pda = new int[] {1,2,3};
  41.     cout << "static : "  << psa << endl;
  42.     cout << "dynamic: " << pda << endl;
  43.     cout << "fun    : " << any_fun << endl;
  44.     cout << "global : " << &count_any_fun << endl;
  45.    
  46.     show_arr(get_size(pda), pda);
  47.     show_arr(size(psa), psa);
  48.  
  49.     delete[] pda;
  50. }
  51.  
  52. /// <summary>
  53. /// Copy to res all odd nums from array arr.
  54. /// </summary>
  55. /// <param name="size">Size</param>
  56. /// <param name="arr">Input array</param>
  57. /// <param name="res">Output array</param>
  58. int* odd_nums(int size, int* arr) {
  59.     int n = 0;
  60.     for (int k = 0; k < size; k++) {
  61.         if (arr[k] % 2 == 0) {
  62.             n++;
  63.         }
  64.     }
  65.     int* res = new int[n];
  66.     n = 0;
  67.     for (int k = 0; k < size; k++) {
  68.         if (arr[k] % 2 == 0) {
  69.             res[n] = arr[k];
  70.             n++;
  71.         }
  72.     }
  73.     return res;
  74. }
  75.  
  76. // In: {2,3,5,6,8,2,3,5,7,8,9}
  77. // {2,6,8,2,8}
  78. void test_odd_nums() {
  79.     int arr[]{ 2, 3, 5, 6, 8, 2, 3, 5, 7, 8, 9 };
  80.     int k = NULL;
  81.     int* res = odd_nums(size(arr), arr);
  82.     int out[]{ 2,6,8,2,8 };
  83.    
  84.     if (size(out) != get_size(res)) {
  85.         cout << "BAD: size";
  86.         return;
  87.     }
  88.    
  89.     for (int k = 0; k < size(out); k++) {
  90.         if (out[k] != res[k]) {
  91.             cout << "BAD: value";
  92.             return;
  93.         }
  94.     }
  95.     cout << "OK";
  96.     if(res)
  97.         delete[] res;
  98. }
  99.  
  100. int get_rand(int a, int b) {
  101.     return rand() % (b - a + 1) + a;
  102. }
  103.  
  104. void gen_arr(int size, int* arr) {
  105.     for (int k = 0; k < size; k++) {
  106.         arr[k] = get_rand(0, 10);
  107.     }
  108. }
  109.  
  110. void task_odd_nums() {
  111.     test_odd_nums();
  112.  
  113.     cout << endl;
  114.     int arr[100];
  115.     srand(time(NULL));
  116.     gen_arr(size(arr), arr);
  117.     cout << "arr: ";
  118.     show_arr(size(arr), arr);
  119.  
  120.     int* pres = odd_nums(size(arr), arr);
  121.     cout << endl << "res: ";
  122.     show_arr(get_size(pres), pres);
  123.     cout << "size: " << get_size(pres) << endl;
  124.     delete[] pres;
  125. }
  126.  
  127. int main(){
  128.     //task_dynamic_array();
  129.     task_odd_nums();
  130.     return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement