#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
int **Make2DArray(size_t m, size_t n)
{
int **arr
= malloc(sizeof(int *) * m
); for (size_t i = 0; i < m; i++)
{
arr
[i
] = malloc(sizeof(int) * n
); }
return arr;
}
void Init2DArray(int **arr, size_t m, size_t n)
{
if (arr == NULL)
return;
for (size_t i = 0; i < m; i++)
for (size_t j = 0; j < n; j++)
arr
[i
][j
] = rand() % 201 - 100;}
void Print2DArray(int **arr, size_t m, size_t n)
{
for (size_t i
= 0; i
< m
; i
++, putchar('\n')) for (size_t j = 0; j < n; j++)
}
void PrintArray(int *arr, size_t size)
{
for (size_t i = 0; i < size; i++)
{
if (!((i + 1) % 10))
}
}
void Free2DArray(int **arr, size_t m)
{
for (size_t i = 0; i < m; i++)
}
int *GetPosIn2DArray(int **arr, size_t m, size_t n, int (*cond)(int), size_t *res_size)
{
int *res = NULL;
size_t size = 0;
for (size_t i = 0; i < m; i++)
for (size_t j = 0; j < n; j++)
if (cond(arr[i][j]))
{
size++;
int *tmp
= realloc(res
, sizeof(int) * size
); res = tmp;
res[size - 1] = arr[i][j];
}
*res_size = size;
return res;
}
int cond_pos(int a)
{
return a > 0;
}
int cond_neg(int a)
{
return a < 0;
}
int main(void)
{
const size_t m = 10;
const size_t n = 10;
int **array = Make2DArray(m, n);
Init2DArray (array, m, n);
Print2DArray(array, m, n);
size_t vec1_size;
int *vec1 = GetPosIn2DArray(array, m, n, cond_pos, &vec1_size);
PrintArray(vec1, vec1_size);
size_t vec2_size;
int *vec2 = GetPosIn2DArray(array, m, n, cond_neg, &vec2_size);
PrintArray(vec2, vec2_size);
Free2DArray (array, m);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8dGltZS5oPgoKaW50ICoqTWFrZTJEQXJyYXkoc2l6ZV90IG0sIHNpemVfdCBuKQp7CiAgICBpbnQgKiphcnIgPSBtYWxsb2Moc2l6ZW9mKGludCAqKSAqIG0pOwogICAgYXNzZXJ0KGFycik7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG07IGkrKykKICAgIHsKICAgICAgICBhcnJbaV0gPSBtYWxsb2Moc2l6ZW9mKGludCkgKiBuKTsKICAgICAgICBhc3NlcnQoYXJyW2ldKTsKICAgIH0KICAgIHJldHVybiBhcnI7Cn0KCnZvaWQgSW5pdDJEQXJyYXkoaW50ICoqYXJyLCBzaXplX3QgbSwgc2l6ZV90IG4pCnsKICAgIGlmIChhcnIgPT0gTlVMTCkKICAgICAgICByZXR1cm47CgogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBuOyBqKyspCiAgICAgICAgICAgIGFycltpXVtqXSA9IHJhbmQoKSAlIDIwMSAtIDEwMDsKfQoKdm9pZCBQcmludDJEQXJyYXkoaW50ICoqYXJyLCBzaXplX3QgbSwgc2l6ZV90IG4pCnsKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbTsgaSsrLCBwdXRjaGFyKCdcbicpKQogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICBwcmludGYoIiU2ZCIsIGFycltpXVtqXSk7CiAgICBwdXRjaGFyKCdcbicpOwp9Cgp2b2lkIFByaW50QXJyYXkoaW50ICphcnIsIHNpemVfdCBzaXplKQp7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgIHsKICAgICAgICBwcmludGYoIiU2ZCIsIGFycltpXSk7CiAgICAgICAgaWYgKCEoKGkgKyAxKSAlIDEwKSkKICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKICAgIH0KICAgIHB1dGNoYXIoJ1xuJyk7Cn0KCnZvaWQgRnJlZTJEQXJyYXkoaW50ICoqYXJyLCBzaXplX3QgbSkKewogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgZnJlZShhcnJbaV0pOwogICAgZnJlZShhcnIpOwp9CgppbnQgKkdldFBvc0luMkRBcnJheShpbnQgKiphcnIsIHNpemVfdCBtLCBzaXplX3QgbiwgaW50ICgqY29uZCkoaW50KSwgc2l6ZV90ICpyZXNfc2l6ZSkKewogICAgaW50ICpyZXMgPSBOVUxMOwogICAgc2l6ZV90IHNpemUgPSAwOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbTsgaSsrKQogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICBpZiAoY29uZChhcnJbaV1bal0pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaXplKys7CiAgICAgICAgICAgICAgICBpbnQgKnRtcCA9IHJlYWxsb2MocmVzLCBzaXplb2YoaW50KSAqIHNpemUpOwogICAgICAgICAgICAgICAgYXNzZXJ0KHRtcCk7CiAgICAgICAgICAgICAgICByZXMgPSB0bXA7CiAgICAgICAgICAgICAgICByZXNbc2l6ZSAtIDFdID0gYXJyW2ldW2pdOwogICAgICAgICAgICB9CiAgICAqcmVzX3NpemUgPSBzaXplOwogICAgcmV0dXJuIHJlczsKfQoKaW50IGNvbmRfcG9zKGludCBhKQp7CiAgICByZXR1cm4gYSA+IDA7Cn0KCmludCBjb25kX25lZyhpbnQgYSkKewogICAgcmV0dXJuIGEgPCAwOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBjb25zdCBzaXplX3QgbSA9IDEwOwogICAgY29uc3Qgc2l6ZV90IG4gPSAxMDsKCiAgICBzcmFuZCh0aW1lKE5VTEwpKTsKCiAgICBwdXRzKCJBcnJheToiKTsKICAgIGludCAqKmFycmF5ID0gTWFrZTJEQXJyYXkobSwgbik7CiAgICBJbml0MkRBcnJheSAoYXJyYXksIG0sIG4pOwogICAgUHJpbnQyREFycmF5KGFycmF5LCBtLCBuKTsKCiAgICBwdXRzKCJwb3MgdmVjOiIpOwogICAgc2l6ZV90IHZlYzFfc2l6ZTsKICAgIGludCAqdmVjMSA9IEdldFBvc0luMkRBcnJheShhcnJheSwgbSwgbiwgY29uZF9wb3MsICZ2ZWMxX3NpemUpOwogICAgUHJpbnRBcnJheSh2ZWMxLCB2ZWMxX3NpemUpOwogICAgZnJlZSh2ZWMxKTsKCiAgICBwdXRzKCJuZWcgdmVjOiIpOwogICAgc2l6ZV90IHZlYzJfc2l6ZTsKICAgIGludCAqdmVjMiA9IEdldFBvc0luMkRBcnJheShhcnJheSwgbSwgbiwgY29uZF9uZWcsICZ2ZWMyX3NpemUpOwogICAgUHJpbnRBcnJheSh2ZWMyLCB2ZWMyX3NpemUpOwogICAgZnJlZSh2ZWMyKTsKCiAgICBGcmVlMkRBcnJheSAoYXJyYXksIG0pOwogICAgcmV0dXJuIDA7Cn0K