Тема Занятие 10 icon

Тема Занятие 10




Скачати 71.38 Kb.
НазваТема Занятие 10
Дата03.08.2012
Розмір71.38 Kb.
ТипПрограмма
1. /4ppp/LaboratoryTask_01 .doc
2. /4ppp/Manual_Lab_01.doc
3. /4ppp/Theme_01_Lesson_01 .doc
4. /4ppp/Theme_01_Lesson_02 .doc
5. /4ppp/Theme_02_Lesson_03 .doc
6. /4ppp/Theme_02_Lesson_04 .doc
7. /4ppp/Theme_02_Lesson_05 .doc
8. /4ppp/Theme_02_Lesson_06 .doc
9. /4ppp/Theme_02_Lesson_07 .doc
10. /4ppp/Theme_03_Lesson_08 .doc
11. /4ppp/Theme_04_Lesson_09 .doc
12. /4ppp/Theme_04_Lesson_10 .doc
«Проектирование Программных Продуктов», Лабораторная работа 1, Этап 1
Net 2003 dll–библиотеки математических функций, совместимой со средой разработки C++ Builder 0
Тема Занятие 1
Тема Занятие 2
Тема Занятие 3
Тема Занятие 4
Тема Занятие 5
Тема Занятие 6
Тема Занятие 7
Тема Занятие 8
Тема Занятие 9
Тема Занятие 10



«Проектирование Программных Продуктов», Тема 4, Занятие 10

Тема 4. Занятие 10.

« Передача данных в программах с Обмен данными через параметры процедур

разноязычными процедурами »


Существует три возможности обмениваться данными между процеду­рами, реализованными на разных языках:

  • через параметры процедур;

  • через данные, объявленные в модуле;

  • посредством глобальных (в Fortran – общих) данных.

Рассмотрим каждую из них по отдельности.

Сведения о том, как передавать данные «по значению» или «по ссылке» при разных соглашениях о вызовах, приведены ниже в Таблице 7.

Таблица 7. Управление передачей данных по ссылке и по значению.

Язык, атрибут

Вид параметра

Как передать «по ссылке»

Как передать «по значению»

Fortran,

«по умолчанию»

Скаляры

По умолчанию

Использовать атри­бут VALUE

Fortran,

С или STDCALL

Скаляры

Использовать атрибут REFERENCE

По умолчанию

Fortran,

«по умолчанию»

Массивы

По умолчанию

Нельзя передать «по значению»

Fortran,

С или STDCALL

Массивы

По умолчанию

Нельзя передать «по значению»

С/С++

Скаляры

Передать адрес пара­метра

По умолчанию

С/С++

Массивы

По умолчанию

Создать структуру, компонентом кото­рой является массив

Замечания:

1. Производные типы данных, даже если они содержат массивы, являются скалярными объектами.

2. Передача строк Фортрана и его ссылок имеет особенности, которые будут рассмотрены ниже.

Методика передачи скалярных объектов через параметры процедур была рассмотрена в полном объеме в рамках предыдущих занятий, поэтому здесь мы не будем на ней останавливаться.

Передача символьных данных.

Если параметром процедуры Фортрана является строка, то «по умолчанию» вместе с ней передается скрытая длина строки. Длина содержится в целочисленном параметре типа integer(4), который передается «по значению». Применяя атрибуты, можно изменить способ передачи строк. Как это происходит, отражено ниже в Таблице 8.

Таблица 8. Влияние атрибутов на способ передачи строк через параметры процедур.

Параметр и

его атрибут

Атрибуты процедуры

Способ передачи

Строка

«По умолчанию»

Передается «по ссылке» вместе с длиной строки, которая передается «по значению».

Строка

С или STDCALL

Первый символ преобразовывается в integer(4) и передается «по значению».

Строка

С, REFERENCE или же STDCALL, REFERENCE

Передается по ссылке вместе с длиной строки, которая передается по значению.

Строка

с атрибутом Value

«По умолчанию»*

Ошибка.

Строка

с атрибутом Value

С или STDCALL

Первый символ преобразовывается в integer(4) и передается по значению.

Строка

с атрибутом Value

С, REFERENCE или же STDCALL, REFERENCE

Первый символ преобразовывается в integer(4) и передается по значению.

Строка

с атрибутом Reference

«По умолчанию»

Передается по ссылке вместе с длиной строки, которая передается по значению.

Строка

с атрибутом Reference

С или STDCALL

Передается по ссылке без длины строки.

Строка

с атрибутом Reference

С, REFERENCE или же STDCALL, REFERENCE

Передается по ссылке без длины строки.

Из приведенной таблицы следует, что, передавая строки в разноязычных процедурах, следует либо объявлять строку без атрибута и ис­пользовать задаваемое «по умолчанию» соглашение, либо объявлять строку с атрибутом REFERENCE и использовать соглашение С или STDCALL с атрибутом REFERENCE или без него. В других случаях, кроме отмеченного звездочкой, передается лишь первый символ строки.

Передавая строки из С++ в Fortran и обратно, следует помнить, что в С++ строка является одномерным массивом символов и заверша­ется null-символом. То есть из Fortran в С++ должны передаваться С++ строки. Напомним, что С++ -буквальные константы в Fortran за­вершаются символом  С, например: "It's a C-string"C .

Между строками Fortran и С++ есть еще одно отличие: нумерация индексов в строках С++ функций начинается с нуля, а в Fortran – с единицы. Так, имя первого элемента строки st из 20 символов в С++ - st[0], а в Fortran – st(1).

Объявляется эта строка так:

char st[20];

Объявление строки из 20 символов в С++

character(20) st

Объявление строки из 20 символов в Fortran

Следует помнить, что строки, как и любой массив С++, являются указателями и, следовательно, будучи параметрами С++ функции, передаются «по ссылке».

Пример. Организуем вызов С++ функции cstring, имеющей символьный параметр st, из основной программы, написанной на Fortran.








В этом примере строка ’my_text_file.txt’ передается «по ссылке» без передачи длины самой строки.

Рассмотрим еще один пример, важный с точки зрения практического использования символьных переменных в программах, написанных на разных языках. Пусть математические вычисления и файл результатов должны формироваться в подпрограмме, написанной на Fortran.

Пусть полное имя каталога (путь) – D:\APTs\MyRezults\, в котором необходимо сохранить результаты вычислений, формируется в головной программе, написанной на С++. Имя каталога будет доступно в Fortran–подпрограмме через фактический параметр path, передаваемый из основной программы в виде массива символов. Количество символов в имени каталога задается (с запасом) в основной программе и передается в подпрограмму через целочисленный параметр mm.

В подпрограмме table() к имени каталога будет добавлено имя файла table_4b.txt, после чего выполнится запись результатов вычислений в файл D:\APTs\MyRezults\table_4b.txt.





После выполнения подпрограммы table(), полное имя файла результатов будет доступно через переменную path в основной программной единице cmain14b.

Следует обратить внимание на то, как формируется полное имя файла результатов. При помощи встроенной функции index() мы определяем номер позиции в строке символов path_name, которую занимает символ char(0) – признак конца С-строки.

Величина m = index( path_name, char(0) ) – 1 дает нам количество символов в имени пути path_name. Полное имя файла результатов получим путем сцепления двух строк:

file_name = trim( path_name(:m) )//'table_4b.txt'C





Автор – ст. преп. каф. теор. механики ОНУ Царенко А.П. 3 августа 2012 г.

Схожі:

Тема Занятие 10 iconПрактическое занятие
Практическое занятие Прогнозирование последствий аварии на аэс и санитарно эпидемиологической обстановки
Тема Занятие 10 iconМодуль 1 СОДЕРЖАТЕЛЬНЫЙ модуль 1 общие вопросы травматологии и ортопедии практическое занятие №1 Тема: Введение в специальность. Особенности обследования травматологических и ортопедических больных
Теоретические вопросы для внеаудиторного самостоятельного изучения и обсуждения к практическому занятию №1 – 2 часа
Тема Занятие 10 iconДокументи
1. /интерны 2 год/ОП 2 год/профилакт занятие 1.doc
2. /интерны...

Тема Занятие 10 iconДокументи
1. /К Р Контроллинг 09.pdf
2. /Практическое...

Тема Занятие 10 iconМодуль содержательный модуль 3 практическое занятие №13 Тема: инородные тела полости hоса. Острые и хроhические риhити. Дифтерия hоса. Носовые кровотечения
Тема: инородные тела полости hоса. Острые и хроhические риhити. Дифтерия hоса. Носовые кровотечения
Тема Занятие 10 iconТестовый контроль. См занятие 4

Тема Занятие 10 iconТестовый контроль. См занятие 2

Тема Занятие 10 iconТестовый контроль. См занятие 1

Тема Занятие 10 iconТестовый контроль. См занятие 7

Тема Занятие 10 iconТестовый контроль. См занятие 8

Тема Занятие 10 iconПрактическое занятие
Группа Ф. И. О. Подпись ­­­­­­
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи