Удалить из массива все четные элементы, у которых последняя цифра 2 - C (СИ)
Формулировка задачи:
Дан массив целых чисел из n элементов, заполненный случайным образом числами из за данного пользователем промежутка. Удалить из него все четные элементы, у которых последняя цифра 2. Отсортировать получившийся массив и вывести его на экран и в файл.
Помогите доделать сортировку и запись в файл
Сортировать я хотел нечто подобным
#include <stdio.h> #include <stdlib.h> int main(void) { srand(time(NULL)); int i,y,x1,x2; printf("Razmer mass:"); scanf("%d",&y); printf("Znacheniya OT x1 DO x2:\n"); printf("x1: "); scanf("%d",&x1); printf("x2: "); scanf("%d",&x2); int mas[y],mas2[y],arr[y]; for(i = 0; i<y;i++) { mas[i]=rand()%(x2-x1)+x1; printf("%d ", mas[i]); } printf("\n"); for(i=0;i<y;i=i+2) { mas2[i]=mas[i]; while (mas2[i]/10!=0) mas2[i]=mas[i]%10; if (mas2[i]!=2) printf("%d ", mas[i]); } printf("\n"); for(i=1;i<y;i=i+2) printf("%d ", mas[i]); return 0; }
for (int i = 0; i < y; i++) { for (int j = 0; j < y - 1; j++) { if (arr[j + 1] < arr[j]) { int z = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = z; } } }
Решение задачи: «Удалить из массива все четные элементы, у которых последняя цифра 2»
textual
Листинг программы
#include <stdio.h> int* array_remove(int* fa, int* la, int (*pcmp)(int)); void array_bsort(int* fa, int* la, int (*pcmp)(int,int)); int cmp_del(int n) { return ((n % 2) == 0) && ((n % 10) == 2); } int cmp_sort(int a, int b) { return (a < b); } int main(void){ int* p, *e; int a[] = { 22, 7, 102, 6, 2, 12, 2, 1, 202, 3, 4, 92, 5, 2, 702 }; int n = sizeof(a)/sizeof(a[0]); e = array_remove(a, a + sizeof(a)/sizeof(a[0]), &cmp_del); array_bsort(a, e, &cmp_sort); for(p = a; p != e; ++p) printf("%d ", *p); return 0; } //удаление int* array_remove(int* fa, int* la, int (*pcmp)(int)){ int* p; while((fa != la) && !(*pcmp)(*fa)) ++fa; for(p = fa; p != la; ++p){ if(!(*pcmp)(*p)) *fa++ = *p; } return fa; } //сортировка void array_bsort(int* fa, int* la, int (*pcmp)(int,int)){ int t, *p; for(; fa != la; ++fa){ for(p = la - 1; p > fa; --p){ if((*pcmp)(*p, *(p - 1))){ t = *p; *p = *(p - 1); *(p - 1) = t; } } } }
Объяснение кода листинга программы
В этом коде реализована сортировка массива методом сортировки выбором с использованием функции array_remove
, которая удаляет из массива все четные элементы, у которых последняя цифра 2.
Список действий:
- Создаются две функции:
array_remove
иarray_bsort
. - Определяется функция
cmp_del
, которая будет использоваться в качестве аргумента дляarray_remove
. Она возвращает значение 1, если число четное и его последняя цифра 2. - Определяется функция
cmp_sort
, которая будет использоваться в качестве аргумента дляarray_bsort
. Она возвращает значение 0, если a меньше b. - Создается массив
a
и инициализируется значениями. - Вычисляется размер массива
n
. - Вызывается функция
array_remove
, чтобы удалить из массива все четные элементы, у которых последняя цифра 2. В качестве аргументов передаются начало и конец массиваa
и функцияcmp_del
. - Вызывается функция
array_bsort
, чтобы отсортировать массивa
. В качестве аргументов передаются начало и конец массиваa
и функцияcmp_sort
. - Используя цикл, элементы массива выводятся на экран.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д