
- •1 Алгоритмы арифметики
- •1.1 Проблемы целочисленной арифметики
- •1.2 Проблемы плавающего формата
- •1.3 Пользовательская арифметика
- •1.4 Алгоритмические проблемы
- •1.5 Функция Аккермана
- •1.6 Некоторые примеры решения сложных вычислительных задач
- •2 Обработка матриц
- •2.1 Динамическое распределение для матрицы целых чисел
- •2.2 Обработка матриц строк символов
- •2.3 Механизм матрицы как контейнера
- •3 Обработка строка символов
- •3.1 Способы представления строк символов
- •3.2 Алгоритмы обработки
- •4 Обработка линейных списков
- •4.2 Линейный двухсвязный список для хранения строк символов
- •4.3 Понятие контейнера
- •4.4 Специальные списки: cтек, очередь, дек
- •4.5 Достоинства и недостатки списков
- •5 Ввод и редактирования текстовых объектов
- •Введение
- •5.1 Редактор строки
- •5.2 Редактор матрицы
- •6 Файлы, библиотеки, базы данных
- •6.1 Общие сведения о файловой системе
- •6.2 Файловая библиотека stdio.h
- •6.3 Текстовые файлы
- •6.4 Двоичные файлы
- •6.5 Библиотеки
- •6.6 Базы данных
- •6.6.1 Общие сведения о базах данных
- •6.6.2 Библиотека файловых функций io.h
- •6.6.3 Физическая организация файла данных
- •6.6.4 Основные функции для работы с файлом данных
- •6.6.5 Индексные файлы
- •7 Деревья, древовидные списки
- •7.1 Основные понятия и определения
- •7.2 Представление деревьев
- •7.2.1 Представление дерева в виде древовидного списка
- •7.2.2 Механизм конструирования деревьев на основе строки формата
- •7.3 Использование кода Дьюи в древовидных списках
- •8 Деревья И/ИЛИ
- •8.1 Основные понятия
- •8.2 Алгоритм подсчета вариантов
- •8.3 Алгоритм нумерации вариантов
- •8.4 Программная реализация
- •9 Трансляторы, интерпретаторы, ассемблеры, виртуальные машины, дизассемблеры и отладчики
- •9.1 Основные определения
- •9.2 Метод рекурсивного спуска
- •9.3 Реализация интерпретатора арифметических выражений
- •9.3.2 Использование стека для выполнения арифметических операций
- •9.3.3 Вспомогательные функции
- •9.3.4 Реализация метода рекурсивного спуска
- •9.4 Интерпретатор простого языка программирования
- •9.4.1 Описание простого алгоритмического языка
- •9.4.2 Реализация интерпретатора
- •9.5 Компилятор усеченного языка программирования Си
- •9.6 Виртуальные машины
- •9.6.1 Основные понятия
- •9.6.2 Простая виртуальная машина
- •9.6.3 Реализация простой виртуальной машины
- •9.7 Система — виртуальная машина + транслятор
- •9.7.1 Эволюция программных систем
- •9.7.2 Описание языка
- •9.7.3 Стековая виртуальная машина
- •9.7.4 Транслятор для стековой виртуальной машины
- •Литература
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++) //присвоение значений указателем контейнера на точки