Сформировать массив из элементов, больших второго элемента первого массива и положительных элементов второго - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сформировать массив из элементов исходных массивов, больших второго элемента первого массива и положительных элементов второго массива. Требуется сформировать новый массив по заданию. В программе реализовать: 1) генерацию случайным образом элементов исходных массивов; 2) выполнение действия в соответствии с условием задачи; 3) порядок вывода: • исходные массивы, • сформированный массив, если он был сформирован. В противном случае – соответствующее сообщение. Помогите, а то не могу сделать

Решение задачи: «Сформировать массив из элементов, больших второго элемента первого массива и положительных элементов второго»

textual
Листинг программы
#include <stdio.h>
#include <time.h>
 
#define SIZE_A 5
#define SIZE_B 8
 
#define MAX_NUMBER  100
#define MIN_NUMBER -100
 
void MakeArray(int *Array, int size);
 
int main() {
    
    srand(time(NULL));
 
    int *A = malloc(SIZE_A * sizeof(int));
    int *B = malloc(SIZE_B * sizeof(int));
    int *C = NULL;
    int *temp = NULL;
    int i, j = 0;
 
    void(*MakeArrayPtr)(int *Array, int size);
    MakeArrayPtr = MakeArray;
    
    printf("First array:\n");
    MakeArrayPtr(A, SIZE_A);
 
    printf("\nSecond array:\n");
    MakeArrayPtr(B, SIZE_B);
 
    for (i = 0; i < SIZE_A; i++) {
        if (A[i] > A[1]) {
            j++;
            temp = realloc(C, j * sizeof(int));
            if (temp != NULL) {
                C = temp;
                C[j - 1] = A[i];
            }
            else {
                free(temp);
                puts("Error (re)allocating memory");
                exit(1);
            }
        }
    }
 
    for (i = 0; i < SIZE_B; i++) {
        if (B[i] > 0) {
            j++;
            temp = realloc(C, j * sizeof(int));
            if (temp != NULL) {
                C = temp;
                C[j - 1] = B[i];
            }
            else {
                free(temp);
                puts("Error (re)allocating memory");
                exit(1);
            }
        }
    }
 
    printf("\nResult array: \n");
    for (i = 0; i < j; i++) {
        printf("[%d]:%d ", i, C[i]);
    }
    
    free(A);
    free(B);
    free(C);
    return 0;
}
 
void MakeArray(int *Array, int size) {
    for (int i = 0; i < size; i++) {
        Array[i] = rand() % (MAX_NUMBER + 1 - MIN_NUMBER) + MIN_NUMBER;
        printf("[%d]:%d ", i, Array[i]);
    }
}

Объяснение кода листинга программы

  1. Создаются две массивы, A и B, с помощью функции malloc().
  2. В функции main() инициализируется генератор случайных чисел с помощью srand(time(NULL)).
  3. В цикле заполняются массивы A и B с помощью функции MakeArray().
  4. Создается пустой массив C для хранения результата.
  5. В функции MakeArray() генерируются случайные числа в заданном диапазоне и записываются в массив Array.
  6. Если элемент массива A больше второго элемента массива A, то он копируется в массив C.
  7. Если элемент массива B больше нуля, то он копируется в массив C.
  8. Выводится массив C с помощью цикла for и функции printf().
  9. Все выделенные массивы освобождаются с помощью функции free().
  10. Возвращается значение 0, что означает успешное завершение программы.

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы