Created
October 5, 2013 00:38
-
-
Save ernado/6835066 to your computer and use it in GitHub Desktop.
Ruslan
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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