Удалить из массива все четные элементы, у которых последняя цифра 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. - Используя цикл, элементы массива выводятся на экран.
- Программа завершается.