Advertisement
maxim_shlyahtin

count_if

Apr 17th, 2023
761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int count_if(void* base, size_t num, size_t size, int (*pred)(const void*)) {
  5.     int count = 0;
  6.     for (size_t i = 0; i < num; i++) {
  7.         if (pred(base + i*size)) {
  8.             count++;
  9.         }
  10.     }
  11.     return count;
  12. }
  13.  
  14. int is_even(const void* p) {
  15.     if (*(int*)p % 2 == 0) {
  16.         return 1;
  17.     }
  18.     return 0;
  19. }
  20.  
  21. int is_even_double(const void* p) {
  22.     double d = *(double*)p;
  23.     int integer_part = (int)d;
  24.     double fractional_part = d - integer_part;
  25.     if (fractional_part < 1e-6 && integer_part % 2 == 0) {
  26.         return 1;
  27.     }
  28.     return 0;
  29. }
  30.  
  31. int main() {
  32.     int size;
  33.     scanf("%d", &size);
  34.     void* arr = malloc(20*size);
  35.     if (arr == NULL) {
  36.         printf("Error: Memory allocation failed\n");
  37.         return 1;
  38.     }
  39.     for (int i = 0; i < 5; i++) {
  40.         if (size == 4) {
  41.             scanf("%d", (int*)arr + i);
  42.         } else if (size == 8) {
  43.             scanf("%lf", (double*)arr + i);
  44.         }
  45.     }
  46.     int count;
  47.     if (size == 4) {
  48.         count = count_if(arr, 5, size, is_even);
  49.     } else if (size == 8) {
  50.         count = count_if(arr, 5, size, is_even_double);
  51.     }
  52.     printf("Number of even elements: %d\n", count);
  53.     free(arr);
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement