Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программа на С. Массивы

SalotSar Знаток (297), закрыт 1 год назад
Создать два динамических массива(количество элементов каждого задает пользователь) и заполнить их случайными целыми числами из диапазона [-5;5]. Не используя никаких других массивов, переместить все отрицательные числа в один динамический массив, а ноли и положительные числа - в другой изменив при этом размер массивов.
Лучший ответ
Swordmage Мудрец (13014) 1 год назад
Может сначала покажешь что ты написал, потом тебе люди могут дать совет как решить, и потом сам решить сможешь
Сергей КамышевПрофи (656) 1 год назад
Так он просит написать
Swordmage Мудрец (13014) Сергей Камышев, проблема в том что он даже не пытается это решить. Какой мз
Остальные ответы
Николай Веселуха Высший разум (360666) 1 год назад
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
size_t length(const char* msg) {
size_t value;
printf("%s", msg);
scanf_s("%zu", &value);
return value;
}
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int* create(int* ptr, size_t n, int a, int b) {
size_t i = 0;
if (!n) return NULL;
if (a > b) swap(&a, &b);
ptr = (int*)malloc(n * sizeof(int));
for (; i < n; ++i) ptr[i] = RAND(a, b);
return ptr;
}
void show(int* ptr, const size_t n, int w) {
size_t i = 0;
for (; i < n; ++i) printf("%*i", w, ptr[i]);
puts("");
}
void separate(int* first, size_t* n, int* second, size_t* m) {
size_t nm = *n + *m;
size_t i;
size_t j = 0;
for (i = *n; i < nm; ++i) first[i] = second[j++];
j = 0;
for (i = 0; i < nm; ++i) if (first[i] >= 0) second[j++] = first[i];
*m = j;
for (i = 0; i < nm; ++i) if (first[i] < 0) second[j++] = first[i];
*n = nm - *m;
for (i = 0, j = *m; i < *n; ++i, ++j) first[i] = second[j];
}
int main() {
int a = -5;
int b = 5;
int w = 4;
size_t n = length("n: ");
size_t m = length("m: ");
size_t nm = n + m;
int* first = NULL;
int* second = NULL;
puts("-----------");
srand((unsigned)time(NULL));
first = create(first, nm, a, b);
show(first, n, w);
second = create(second, nm, a, b);
show(second, m, w);
puts("-----------");
separate(first, &n, second, &m);
show(first, n, w);
show(second, m, w);
// две free() красноречиво говорят о том, что в программе всего два массива
free(first);
free(second);
system("pause > nul");
}
Евгений ВысочинПросветленный (37964) 1 год назад
У меня "красноречивый" вопрос.
С точки зрения вменяемого программирования какой-нибудь кодер будет вперемежку плодить отрицательные и положительные значения в каждом массиве, или заранее определит отдельный массив?))
Николай Веселуха Высший разум (360666) Евгений Высочин, это задание – частный случай задачи на стратификацию данных с целью их дальнейшей селекции. В этом случае заранее определить количество определённых значений в выборках невозможно. Известно только их общее количество. Например, два параллельных запроса к двум независимым базам данных.
Похожие вопросы