Олимпиадные задачи по программированию. Ч. 2. Лучшие решения. Ускова О.Ф - 33 стр.

UptoLike

#ifdef DEBUG
#define DBG(params) printf params
#else
#define DBG(params)
#endif
/* ===== Коды возврата функций ===== */
#define ERR_OK 0
#define ERR_PARAM 1
#define ERR_MEMORY 2
#define ERR_FILE 3
#define ERR_FILEFORMAT 4
#define ERR_FAILED 5
/* ===== Работа с матрицами ===== */
#define MATR_BASETYPE unsigned char
#define VECT_BASETYPE unsigned int
struct t_vect {
VECT_BASETYPE *m_ptr;
unsigned int m_size;
};
/* создание нового вектора
Выходные данные: x --- длина вектора
Выходные данные: vect --- структура, описывающая вектор */
int alloc_vect (unsigned int x, struct t_vect *vect) {
/* проверка правильности входных данных */
if (x==0) {
DBG(("Error calling 'alloc_vect': x=%u\n", x));
return ERR_PARAM;
};
/* выделение памяти */
vect->m_ptr = calloc(sizeof(VECT_BASETYPE), x);
vect->m_size = x;
/* проверка */
if ( vect->m_ptr == NULL ) {
DBG(("Error allocating memory in 'alloc_vect':
x=%u\n",x));
return ERR_MEMORY;
};
DBG(("Successful call to 'alloc_vect': x=%u,
vect=%p\n",x,vect));
return ERR_OK;
}
/* Удаление старого вектора */
void free_vect(struct t_vect *vect) {
if (vect->m_ptr == NULL) {
DBG(("Trying to free memory more than once in
'free_vect': vect=%p\n",
vect));
return;
};
free(vect->m_ptr);
vect->m_ptr=NULL;