C/C++

Лабораторная работа на языке Си

Дано целочисленный массив размера N. Удалить из массива все нечетные числа и вывести размер полученного массива и его содержимое.
можно сделать за два прохода - сначала выясняем сколько чётных, а потом уже перебрасываем что нужно в новый массив. Неэкономно и долго, но проще
Максим Баулин
Максим Баулин
21 700
Лучший ответ
Максим Баулин int ln= 0; int LN= 10;
int *Q= (int *) malloc(LN*sizeof(int));
if (Q==NULL) { printf("Ошибка выделения памяти..."); exit (1); }

for (int a=0; a<LN; a++) { Q[a]= a; if(!(Q[a]%2)) ln++; }
for (int a=0; a<LN; a++) { printf("%d\t", Q[a]); }

if (!ln) { printf("Нечётных НЕТ..."); exit (0); }

printf("\n"); system("pause");

int *q= (int *) malloc(ln*sizeof(int));
if (q==NULL) { printf("Ошибка выделения памяти..."); exit (1); }

int i=0;
for (int a=0; a<LN; a++) { if (!(Q[a]%2)) {q[i]= Q[a]; i++;} }
for (int a=0; a<ln; a++) { printf("%d\t", q[a]); }

printf("\n"); system("pause");

printf("Освобождаем память ОБЯЗАТЕЛЬНО\n"); free(Q); free(q);
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
int* create(int* box, size_t n, int a, int b) {
size_t i;
srand((unsigned)time(NULL));
box = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; ++i) box[i] = RAND(a, b);
return box;
}
size_t count_even(int* box, size_t n) {
size_t m = 0;
size_t i;
for (i = 0; i < n; ++i) if (~box[i] & 1) ++m;
return m;
}
size_t length(const char* msg) {
size_t n;
printf(msg);
scanf_s("%zu", &n);
return n;
}
void show(int* box, size_t n) {
size_t i;
for (i = 0; i < n; ++i) printf("%i ", box[i]);
puts("");
}
int main(void) {
int* box = NULL;
size_t i, j;
size_t n = length("N: ");
box = create(box, n, 10, 100);
show(box, n);
size_t m = count_even(box, n);
int* tmp = (int*)malloc(m * sizeof(int));
for (j = i = 0; i < n; ++i) if (~box[i] & 1) tmp[j++] = box[i];
free(box);
n = m;
box = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; ++i) box[i] = tmp[i];
free(tmp);
show(box, n);
free(box);
system("pause > nul");
return 0;
}
D J
D J
84 163
Олег Фирсов а как-то по проще нельзя?