MeShootIn

лаба_для_макса_1

Oct 24th, 2019
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdarg.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. // функция создания массива размера N с переменным числом аргументов
  7. int * create_array(int N, ...){
  8.     va_list ptr; // улучшенный указатель, нужен для получения значений (после int N), переданных в функцию
  9.     int * arr = (int *) malloc(N * sizeof(int));
  10.    
  11.     // если нельзя выделить память (оперативка переполнена)
  12.     if(arr == NULL){
  13.         return NULL;
  14.     }
  15.    
  16.     va_start(ptr, N);
  17.     for(int i = 0; i < N; i++){
  18.         arr[i] = va_arg(ptr, int);
  19.     }
  20.     va_end(ptr);
  21.    
  22.     return arr;
  23. }
  24.  
  25. // удаление из массива arr элементов, стоящих на чётных местах (при нумерации с 1), т. е. 2, 4, 6, ...
  26. void del(int * arr, int N){
  27.     int * arr2 = (int *) malloc((N / 2) * sizeof(int));
  28.    
  29.     for(int i = 1; i < N; i += 2){
  30.         arr2[i / 2] = arr[i];
  31.     }
  32.    
  33.     free(arr);
  34.     arr = (int *) malloc((N / 2) * sizeof(int));
  35.    
  36.     for(int i = 0; i < N / 2; i++){
  37.         arr[i] = arr2[i];
  38.     }
  39. }
  40.  
  41. // рекурсивная печать массива
  42. void print_array(int * arr, int N){
  43.     if(N == 0){
  44.         printf("\n");
  45.         return;
  46.     }
  47.    
  48.     printf("%d ", * arr);
  49.     print_array(arr + 1, N - 1);
  50. }
  51.  
  52. int main(){
  53.     int N = 6;
  54.     int * arr = create_array(N, 1, 2, 3, 4, 5, 6);
  55.    
  56.     print_array(arr, N);
  57.     del(arr, N);
  58.     print_array(arr, N / 2);
  59.    
  60.     getch();
  61.     return 0;
  62. }
Add Comment
Please, Sign In to add comment