Удалить из массива все элементы, значение которых в этом массиве повторяются, оставив по одному - C (СИ)
Формулировка задачи:
Нужна помощь в написание кода программы: http://5.firepic.org/5/images/2013-10/22/wzca19sj8smg.png
Язык С.
Решение задачи: «Удалить из массива все элементы, значение которых в этом массиве повторяются, оставив по одному»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> void squeeze(int * array, size_t * count) { int * pHead, * pTail; for ( pHead = array; ( *count - ( pHead - array ) ) > 1; ++pHead ) { for ( pTail = array + *count - 1; pTail > pHead; --pTail ) { if ( *pTail == *pHead ) { *count -= 1; memmove(pTail, pTail + 1, sizeof(int) * ( *count - ( pTail - array ) )); } } } } void dump(const int * array, size_t count) { while ( count-- ) printf("%d%c", *array++, ( count ) ? ' ' : '\n'); } int main(void) { int randoms[20], same[5] = { 1, 1, 1, 1, 1 }, different[5] = { 1, 2, 3, 4, 5 }; size_t count; srand(time(NULL)); for ( count = 0; count < 20; ++count ) randoms[count] = rand() % 10; printf("Random elements\nBefore: "); dump(randoms, count); squeeze(randoms, &count); printf("After: "); dump(randoms, count); count = 5; printf("\nAll the same\nBefore: "); dump(same, count); squeeze(same, &count); printf("After: "); dump(same, count); count = 5; printf("\nAll the different\nBefore: "); dump(different, count); squeeze(different, &count); printf("After: "); dump(different, count); return 0; }
Объяснение кода листинга программы
- В функции
squeeze
происходит удаление повторяющихся элементов из массива. - Переменная
pHead
инициализируется как указатель на первый элемент массива. - Переменная
pTail
инициализируется как указатель на последний элемент массива. - В цикле
for
перебираются все элементы массива, начиная сpHead
, до тех пор, пока количество элементов в массиве больше 1. - В каждой итерации внутреннего цикла
for
, проверяется, является ли текущий элемент массива (*pTail
) равным элементу, на который указываетpHead
. - Если элементы равны, то значение переменной
count
уменьшается на 1, а память, выделенная под элементы, начиная сpTail
и до конца массива, освобождается с помощью функцииmemmove
. - В функции
dump
происходит вывод элементов массива на экран. - В функции
main
создаются массивыrandoms
,same
иdifferent
и заполняются случайными значениями. - Вызывается функция
squeeze
для удаления повторяющихся элементов из массиваrandoms
. - Выводится на экран массив
randoms
до и после удаления повторяющихся элементов. - Вызывается функция
squeeze
для удаления повторяющихся элементов из массиваsame
. - Выводится на экран массив
same
до и после удаления повторяющихся элементов. - Вызывается функция
squeeze
для удаления повторяющихся элементов из массиваdifferent
. - Выводится на экран массив
different
до и после удаления повторяющихся элементов. - В конце программы возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д