C/C++
Лабораторная работа на языке Си
Дано целочисленный массив размера N. Удалить из массива все нечетные числа и вывести размер полученного массива и его содержимое.
можно сделать за два прохода - сначала выясняем сколько чётных, а потом уже перебрасываем что нужно в новый массив. Неэкономно и долго, но проще
#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;
}
#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;
}
Олег Фирсов
а как-то по проще нельзя?
Похожие вопросы
- Лабораторная работа c++
- Решить задачу на языке СИ
- Написать код на языке си
- Написать программу на языке Си
- Помогите с решением задачи на языке СИ
- Помогите пожалуйста с лабораторной работы по С++
- Си!!! БЕЗ УКАЗАТЕЛЕЙ, ЯЗЫК СИ
- Упорядочить элементы массива по возрастанию на языке Си
- Создать файл ABONENT.dat, содержащий записи следующей структуры: ФИО абонента; его номер телефона. на языке си++
- Помогите с задачей на языке СИ
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);