Сжать массив, удалив из него все элементы, кратные заданному числу k. - C (СИ)
Формулировка задачи:
Дан массив A[n]. Сжать массив, удалив из него все элементы, кратные заданному числу k. Освободившиеся в конце массива элементы заполнить нулями. Напишите программу желательно на Си. Заранее благодарен
Решение задачи: «Сжать массив, удалив из него все элементы, кратные заданному числу k.»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define SIZE 10 #define MULTIPLER 3 void dump(const int * arr, size_t size) { while ( size-- ) printf("%d%c", *arr++, ( size ) ? ' ' : '\n'); } int * remove_multipled(int * arr, size_t size, int multipler) { size_t left = size; int * ptr = arr; while ( left-- ) { if ( *ptr % multipler ) ++ptr; else memmove(ptr, ptr + 1, sizeof(int) * left); } memset(ptr, 0, sizeof(int) * ( size - ( ptr - arr ) )); return arr; } int main(void) { int arr1[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int arr2[SIZE] = { 3, 2, 1, 6, 4, 5, 10, 7, 8, 9 }; int arr3[SIZE] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; int arr4[SIZE] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; printf("ARRAY #1 Before:\n"); dump(arr1, SIZE); remove_multipled(arr1, SIZE, MULTIPLER); printf("After:\n"); dump(arr1, SIZE); printf("\n"); printf("ARRAY #2 Before:\n"); dump(arr2, SIZE); remove_multipled(arr2, SIZE, MULTIPLER); printf("After:\n"); dump(arr2, SIZE); printf("\n"); printf("ARRAY #3 Before:\n"); dump(arr3, SIZE); remove_multipled(arr3, SIZE, MULTIPLER); printf("After:\n"); dump(arr3, SIZE); printf("\n"); printf("ARRAY #4 Before:\n"); dump(arr4, SIZE); remove_multipled(arr4, SIZE, MULTIPLER); printf("After:\n"); dump(arr4, SIZE); printf("\n"); return 0; }
Объяснение кода листинга программы
- В функции
remove_multipled
происходит удаление всех элементов массива, кратных заданному числуmultipler
. - В функции
main
создаются 4 массива с разными значениями для проверки работы функцииremove_multipled
. - Функция
dump
используется для вывода содержимого массивов перед и после удаления элементов. - В функции
remove_multipled
происходит смещение элементов массива, начиная с первого не кратногоmultipler
элемента, на позицию следующего не кратногоmultipler
элемента. Таким образом, все элементы, кратныеmultipler
, удаляются. - В конце функции
remove_multipled
все оставшиеся элементы массива, начиная с последнего не кратногоmultipler
элемента, обнуляются для освобождения памяти. - Функция
main
вызывает функциюremove_multipled
для каждого из созданных массивов и выводит результат на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д