adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
}
И с х о д н ы й ф а й л Турбо Си: FACTRL.C
void factorial_0(int top, double *result) /* Вычисляет
факториал */
{
double x;
int i;
if (top<1) {
*result = 0.0;
return;
}
*result = 1.0;
x = 2.0;
while (top-- >1)
{
*result = *result*x;
x++;
}
}
/* Конец функции factorial_0 */
Компиляция CSUM1.C и FACTRL.C в .OBJ
-----------------------------------------------------------------
Как и в первом примере, вы должны откомпилировать два модуля
на Турбо Си в объектный модуль (.OBJ ) перед компоновкой их с
другими модулями и с главной программой Турбо Пролога. Вы можете
выбрать и сохранить опции для компиляции средствами главного меню
Турбо Си, а затем выбрать команду Compile (компилировать) для
каждого из .С исходных файлов. Или вы можете указать опцию для
компиляции обоих исходных файлов .С в командной строке, как в
стандартном Си, используя для этого команду tcc. В обоих вариан-
тах вы должны указать по крайней мере следующие опции компиляции:
Options/Compiler/Model/Large (-ml) (большая модель памяти)
Options/Compiler/Optimization/Jump Optimizanion...On (-O)
(оптимизация)
Options/Compiler/Code Generation/Generate Underbars...Off (-u-)
(генерация нижнего подчеркивания отключена)
Options/Compiler/Optimization/Use Register Variables...Off (-r-)
(использование регистровых переменных запрещено)
- 203,204 -
И с х о д н ы й ф а й л Турбо Пролога: FACTSUM.PRO
-----------------------------------------------------------------
FACTSUM.PRO - главная программа на Турбо Прологе, которая
создает два окна: одно для отображения выходных данных модулей
Турбо Си, другое для отображения выходных данных программы, напи-
санной на Турбо Прологе. Ниже приводится работа модулей и прог-
раммы в диалоге:
1. Турбо Пролог программа FACTSUM.PRO приглашает пользовате-
ля ввести целое Int, которое она передаст модулю FACTRL.C .
2. Функция факториал (factorial) Турбо Си в FACTRL.C возвра-
щает Result, который является факториалом Int, в FACTSUM.PRO.
3. FACTSUM.PRO записывает Result в окно и снова приглашает
пользователя ввести число (на этот раз - действительное).
4. FACTSOM.PRO передает введеное во второй раз число (Real),
и ранее вычисленный факториал (Result) в модуль CSUM1.C.
5. Функция суммирования (sum), в CSUM1.C, складывает Real и
Result и возвращает результат Sum в FACTSUM.PRO.
6. FACTSUM.PRO записывает Sum в окно и программа завершает
свою работу.
Ниже представлена программа на Турбо Прологе FACTSUM.PRO:
/*
Описание модулей на Турбо Си должно находиться за определениями
доменов и баз данных Турбо Пролога (если таковые имеются). Все
глобальные модули вызываются из Турбо Пролога как глобальные пре-
дикаты, за которыми при их описании должны следовать шаблон аргу-
ментов и спецификация языка.
*/
global predicates
sum(real,real,real) - (i,i,o) language c
factorial(integer,real) - (i,o) language c
/*
Это очень простой пример, поскольку использует только внешние
правила (модули Турбо Си), поэтому требуется наличие только раз-
дела goal . Тем не менее, в других прикладных программах может
быть также необходим раздел clause. */
- 205,206 -
goal
makewindow(1,49,31,
"Окно взаимодействия Турбо Пролога с программами Турбо Си",
0,0,15,80),
makewindow(2,47,3,
"Окно Турбо Пролога для Турбо Пролог программы",
15,0,10,80),
/* Приглашение пользователя к первому вводу */
write("Введите целое число; Турбо Си вычислит факториал."),
readint(Int), nl,
shiftwindow(1), /* Переадресация окна вывода в окно Турбо
Си */
/* Вызов модуля Турбо Си factrl и вычисление факториала */
factorial(Int, Result),
shiftwindow(2), /* Переадресация окна вывода в окно Турбо
Пролога */
/* Приглашение пользователя ко второму вводу */
write("Введите действительное число для сложения с
факториалом"),
readreal(Real),nl,
shiftwindow(1), /* Переадресация окна вывода в окно Турбо
Си */
/* Вызов модуля Турбо Си сsum1 и вычисление суммы */
sum(Result,Real,Sum),
shiftwindow(2), /* Переадресация вывода в окно Турбо
Пролога */
/* Запись результата первого вычисления в окно */
write("Значение факториала числа ",Int," равно ",Result),nl,
/* Запись результата второго вычисления в окно */
write("Результат ", Result, " + ",Real," = ",Sum),nl.
- 207,208 -
Компиляция FACTSUM.PRO в FACTSUM.OBJ
-----------------------------------------------------------------
Также как и в первом примере вы должны откомпилировать файл
с исходным текстом на Турбо Прологе в обьектный файл (.OBJ) перед
компоновкой его с другими модулями. Перед тем как выполнить ком-
пиляцию, выберите из главного меню Турбо Пролога Оptions/Obj.
Компоновка СSUM1.OBJ, FACTRL.OBJ и FACTSUM.OBJ
-----------------------------------------------------------------
В команде на компоновку, используемой в этом примере,
- объектными модулями Турбо Пролога являются модули INIT.OBJ
и FACTSUM.OBJ;
- объектными модулями Турбо Си являются модули CSUM1.OBJ и
FACTRL.OBJ;
- именами выходных файлов являются FACTSUM.SYM (таблица
идентификаторов) и SUM.EXE (выполняемый файл);
- необходимыми библиотеками являются PROLOG.LIB, EMU.LIB,
MATHL.LIB и CL.LIB.
Приведенная ниже команда компонует модули:
tlink init factsum factrl csum1 factsum.sym,sum,,prolog
+emu+mathl+cl
Замечание: команда должна быть набрана в одной строке.
- 209,210 -
Пример 3: Шаблоны аргументов и распределение памяти.
-----------------------------------------------------------------
Следующая программа представляет код по созданию на Турбо
Прологе функтора (functor) и списка (list) в Турбо Си, а также
возвращению этих новых структур в Турбо Пролог. Этот пример также
демонстрирует возможное распределение памяти в глобальном стеке
Турбо Пролога. Списки представляют собой рекурсивные структуры из
|
adfun.ru
|
|
|
|