Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по программированию на языке программирования Си..pdf
Скачиваний:
20
Добавлен:
05.02.2023
Размер:
1.39 Mб
Скачать

23

Тестовый пример использования матрицы строк символов

void TestStringMatrix(){

 

int i, j, k;

 

MATR mas;

 

char *p1="apple",

 

*p2="pear",

 

*p3="cucumber",

 

*p4="tomato";

 

mas=GetMem(2,2);

//динамическое выделение памяти под

матрицу(2,2)

 

mas[0][0]=CreateStr(p1); //присвоение строк элементам матрицы mas[0][1]=CreateStr(p2);

mas[1][0]=CreateStr(p3);

mas[1][1]=CreateStr(p4);

for(i=0; i<2; i++)

//использование матрицы

for(j=0; j<2; j++){

 

for(k=0; k<4; k++)

 

printf("%c",mas[i][j]);

 

printf("\n");

 

}

 

FreeMem(mas,2,2);

//освобождение памяти занимаемой матрицей

getch();

 

}

 

2.3 Механизм матрицы как контейнера

#define MatrixContainer void ***

void ***AllocMatrixContainer(int m, int n){

void ***mas;

 

int i,j;

 

mas=(void ***)malloc(sizeof(mas)*m);

//выделение памяти под вектор

строк

 

if(mas==NULL) ErrorMem();

 

for(i=0; i<m; i++)

//выделение памяти вектора

указателей

 

{

 

mas[i]=(void **)malloc(sizeof(*mas)*n); if(mas[i]==NULL) ErrorMem();

}

 

24

for(i=0; i<m; i++)

//начальная инициализация матрицы

указателей

 

for(j=0; j<n; j++)

 

mas[i][j]=NULL;

 

return mas;

 

}

 

void DeleteMatrix(MatrixContainer matrix,int m, int n,void(*DeleteElem)(void* elem)){

int i,j;

for(i=0; i<2; i++) for(j=0; j<3; j++)

DeleteElem(matrix[i][j]); //удалить все элементы for(i=0; i<2; i++) free(matrix[i]); //удалить строки free(matrix); //удалить массив указателей

}

Пример использования. Необходимо хранить матрицу точек, задан­ ных координатами.

Описание точки дано ниже. typedef struct Point_ {

int x; int y;

} MPoint;

Функция создания структуры MPoint

MPoint *CreatePoint(int x, int y){

MPoint *point=(MPoint *)malloc(sizeof(MPoint)); point­>x=x;

point­>y=y;

}

Ниже представлен пример функции использования матрицы­контей­ нера хранящего множество точек.

void TestContainer(){

MatrixContainer m=AllocMatrixContainer(2,3); //распределение паями под контейнер

int i,j;

for(i=0; i<2; i++) //присвоение значений указателем контейнера на точки