C/C++

Помогите с 4 задачей на языке си

Василий М.
Василий М.
92
 #include  
#include
#include

#define RAND(min, max) (rand() % ((max) - (min)) + (min))
#define BUFFER 100
#define NPOS (size_t)-1

void fill(int* box, int a, int b) {
size_t i = 0;
do box[i] = RAND(a, b + 1); while (++i != BUFFER);
}

void show(int* box) {
size_t i = 0;
do printf("%4i", box[i]); while (++i != BUFFER);
puts("\n");
}

size_t minpos(int* box) {
size_t i = NPOS;
for (size_t j = 0; j < BUFFER; ++j) {
if (box[j] > 0) {
if (i == NPOS) i = j;
else if (box[j] < box[i]) i = j;
}
}
return i;
}

void replace(int* box, int x) {
size_t i = 0;
do if (box[i] < 0) box[i] = x; while (++i != BUFFER);
}

int main(void) {
int box[BUFFER] = { 0 };
fill(box, -9, 9);
show(box);
size_t pos = minpos(box);
if (pos == NPOS) puts("Not found!");
else {
replace(box, box[pos]);
show(box);
}
return 0;
}
Никита Чернов
Никита Чернов
73 873
Лучший ответ
 #include  
#include
#include

#define ARRAY_SIZE 50

#define abs(x) ((x < 0) ? -(x) : (x))

static void fill_array(int *arr, size_t size)
{
int i;

for (i = 0; i < size; i++) {
arr[i] = rand() % 21 - 10;
}
}

static void print_array(int *arr, size_t size)
{
int i;

for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}

putchar('\n');
}

static int find_max_abs_min(const int *arr,
size_t size)
{
int i, max = 0;

for (i = 0; i < size; i++) {
if (arr[i] < 0) {
if (max < abs(arr[i])) {
max = abs(arr[i]);
}
}
}

return max;
}

int main(void)
{
int i, abs_max;
int array[ARRAY_SIZE];

srand(time(NULL));

fill_array(array, ARRAY_SIZE);
print_array(array, ARRAY_SIZE);

abs_max = find_max_abs_min(array, ARRAY_SIZE);

for (i = 0; i < ARRAY_SIZE; i++) {
if (array[i] >= 0) {
array[i] = abs_max;
}
}

print_array(array, ARRAY_SIZE);
return 0;
}