- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
-
Пример программы
Ниже приводится текст законченного примера расширения среды MATLAB, в котором производится удвоение переданного аргумента.
#include "mex.h"
#include <math.h>
/* Вычислительная процедура */
void timestwo(double y[], double x[])
{
y[0] = 2.0*x[0];
return;
}
/* Интерфейсная функция */
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
double *y;
double *x;
unsigned int m, n;
/* Проверяем количество аргументов. */
if (nrhs !=1) {
mexErrMsgTxt("Only one input argument allowed.");}
else if (nlhs !=1) {
mexErrMsgTxt("Only one output argument allowed.");
}
/* Входной аргумент x должен быть скаляром. */
m = mxGetM(prhs[0]);
n = mxGetN(prhs[0]);
if (!mxIsDouble(prhs[0] || mxIsComplex(prhs[0])
|| !(m ==1 && n ==1)){
mexErrMsgTxt("Input x must be a scalar.");
}
/* Создаем выходную матрицу для возврата в среду MATLAB. */
plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL);
/*Инициализир. указатели на вход. и вых.пар-тры. */
y = mxGetPr(plhs[0]);
x = mxGetPr(prhs[0]);
/* Вызываем вычислительную функцию. */
timestwo(y, x);
}
/* Конец файла.*/
-
Вызов команд среды matlab из mex-файла
Есть возможность вызывать функции, операторы, M-файлы и даже другие MEX-файлы в среде MATLAB прямо из вашего MATLAB-расширения, написанного на языке C. Для этого нужно воспользоваться функцией из библиотеки MATLAB mexCallMATLAB(). Использование ее аналогично другим mx__() и mex__() функциям.
Следующий пример создает заполненный массив, вызывает функцию mexCallMATLAB() для показа его содержимого, затем, через нее же вычисляет собственные вектора и собственные значения заданной матрицы в среде MATLAB, и, наконец в третий раз вызывает эту же функцию для показа собственных векторов.
#include "mex.h"
#include <math.h>
void mexFunction(int nlhs,mxArray *plhs[],
int nrhs,const mxArray *prhs[])
{
double pr[] = {5.2, 7.9, 1.3, 4.2};
double pi[] = {3.4, 6.5, 2.2, 9.1};
mxArray *array_ptr;
int num_out, num_in;
mxArray *output_array[2], *input_array[2];
/* Создаем заполненную матрицу размерности 2х2.*/
array_ptr = mxCreateDoubleMatrix(2, 2, mxCOMPLEX);
memcpy(mxGetPr(array_ptr), pr, 4*sizeof(double));
memcpy(mxGetPi(array_ptr), pi, 4*sizeof(double));
/* В среде MATLAB это эквивалентно disp(array). */
num_out = 0;
num_in = 1;
input_array[0] = array_ptr;
mexCallMATLAB(num_out, output_array,
num_in, input_array, "disp");
/* А это – то же самое, что [v, d] = eig(array). */
num_out = 2;
num_in = 1;
input_array[0] = array_ptr;
mexCallMATLAB(num_out, output_array,
num_in, input_array, "eig");
/* Выведем результат: disp(v). */
num_out = 0;
num_in = 1;
input_array[0] = output_array[0];
mexCallMATLAB(num_out, output_array,
num_in, input_array, "disp");
}
/* Конец файла.*/
Отметим, что функцией mexCallMATLAB() можно пользоваться вперемешку с собственными вычислениями в расширении MATLAB, так же, как и остальными функциями библиотек MATLAB.