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