Skip to content

Instantly share code, notes, and snippets.

@ernado
Created October 5, 2013 00:38
Show Gist options
  • Save ernado/6835066 to your computer and use it in GitHub Desktop.
Save ernado/6835066 to your computer and use it in GitHub Desktop.
Ruslan
#include <stdio.h> /* prsize_tf, scanf, NULL */
#include <stdlib.h> /* malloc, free, rand */
#include <limits.h> /* INT_MAX */
#include <time.h> /* time */
#define ERROR -1
#define MAX_AL 8
#define MIN_AL 4
#define MAX_VL 20
#define MIN_VL 3
#define MAX_VALUE 100
#define MIN_VALUE 1
size_t** truncate(size_t** input, size_t n) {
size_t min = INT_MAX; // максимальная длина вектора
size_t j = 0; // индекс текущего вектора
size_t** out = (size_t**)malloc(sizeof(size_t*)*n); // выходной массив
// ищем минимальную длину
for (size_t i = 0; i < n; i++) {
j = 0;
while (1)
{
if (input[i][j] == (size_t)NULL)
{
if (j < min) min = j;
break;
}
j++;
}
}
// обрезаем слишком длинные вектора
for (size_t i = 0; i < n; i++) {
j = 0;
// новый вектор
out[i] = (size_t*)malloc(sizeof(size_t)*(min+1));
// копируем старый вектор в новый
for (j = 0; j < min; j++) {
out[i][j] = input[i][j];
}
// конец вектора
out [i][min] = (size_t)NULL;
}
return out;
}
// функция вывода массива векторов
void print(size_t** input, size_t n) {
for (size_t i = 0; i < n; i++)
{
size_t j = 0;
while(1) {
if(input[i][j] == (size_t)NULL) {
break;
}
else {
printf("%3d ", input[i][j]);
}
j++;
}
printf("\n");
}
}
int main() {
srand(time(NULL));
size_t array_length = rand() % MAX_AL + MIN_AL;
size_t** in_array = (size_t**)malloc(sizeof(size_t*)*array_length);
for (size_t i = 0; i < array_length; i++) {
size_t vector_length = rand() % MAX_VL + MIN_VL;
in_array[i] = (size_t*)malloc(sizeof(size_t)*(vector_length+1));
for (size_t j = 0; j < vector_length; j++) {
in_array[i][j] = rand() % MAX_VALUE + MIN_VALUE;
}
in_array[i][vector_length] = (size_t)NULL;
}
print(in_array, array_length);
size_t **out_array = truncate(in_array, array_length);
printf("\n->\n\n");
print(out_array, array_length);
free(in_array); free(out_array);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment