Пиши Дома Нужные Работы

Обратная связь

Механизмы присоединения данных

Задание

1. Реализовать два проекта, которые содержат:

a) ввод данных из файла In.txt на диске и форматный вывод их в результирующий файл Out.txt;

b) вызовы процедур с различными данными для отладки;

c) если возможно, проверку результатов работы процедур обращением к стандартным подпрограммам или функциям;

d) форматный вывод в файл Out.txt результатов работы каждой процедуры с пояснениями выводимых величин (использовать формулировки из индивидуального задания).

2. В проекте Container – механизм присоединения объектов носителя.

3. В проекте ProModule – механизм присоединения объектов модуля.

Содержание отчета.

1. Название работы и номер варианта индивидуального задания.

2. Фамилия, имя, отчество и номер группы студента.

3. Текст варианта индивидуального задания.

4. Постановка задачи, методы вычислений.

5. Описание механизмов обмена данными.

6. Графическая интерпретация (если требуется), выполненная вручную или пакетом Agrapher.

7. Блок-схемы главной программы и подпрограмм.

8. Распечатки текстов всех программных единиц.

9. Распечатки файлов результатов Out.txt.

При подготовке к защите ответить на контрольные вопросы.

Комментарии к заданию

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

2. В проекте Container расчетная процедура – это внутренняя процедура, присоединяющая объекты носителя, которым является внешняя программа.

3. В проекте ProModule расчетная процедура – это модульная процедура, присоединяющая объекты используемого модуля.

4. Расчетныепроцедуры в виде внутренней и модульной процедурыне являются самостоятельными программными единицами.

5. Вызов внутренней или модульной процедуры не требуют
Interface.



Пример

В подпрограмме: ввести одномерный массив из файла in.txt; найти и вывести в файл out.txt номер и значение максимального по модулю элемента массива.

В главной программе: применить подпрограмму к нескольким массивам, предварительно вводя длину каждого массива из файла in.txt.

Применить механизмы присоединения объектов носителя и модуля.

Проект Container

Главная программа Container – единственная самостоятельная программная единица.В программу Container вложена внутренняя подпрограмма Subroutine OneArray. Программа Container является носителем данныхдля подпрограммы OneArray. В ней лишь одна глобальная переменная dArr, указывающая длину массива. Эту переменную заимствует подпрограмма OneArray.

Переменные ARR, NumARR локальны в подпрограмме OneArray. Динамический массив ARR локализован в подпрограмме OneArray. Его переменная длина dARR определена до входа в подпрограмму. Команды allocateиdeallocate не нужны – динамический массив размещается автоматически при входе в подпрограмму и освобождается при выходе.


Программа

Program Container ! внешняя программа

Implicit none

Integer dARR ! длина автоматического массива ARR

Open(1,File='In.txt') ! файл исходных данных

Open(2,File='Out.txt')! результирующий файл
Read(1,*)dARR;Call OneArray('B') ! ввод dARR - длины массива 'B'
Read(1,*)dARR; Call OneArray('C') ! ввод dARR - длины массива 'C'

Contains

Subroutine OneArray(ArrName) ! внутренняя подпрограмма

Implicit none

character,intent(in)::ArrName !однобуквенное “имя массива”

Real,dimension(1:dARR)::ARR ! локальный динамический массив

Integer::NumARR ! локальный номер max по модулю

Read(1,*)ARR; Write(2,2)ArrName,ARR ! ввод/вывод массива ARR

NumARR=sum(maxloc(Abs(ARR)))

Write(2,3) ARR(NumARR), NumARR, ArrName

2 format(/' Массив ', a/ ( 6F8.1) )

3 format(' max по модулю элемент ', F8.1, &

' его номер', i3,' в массиве ', a)

End Subroutine OneArray ! конец внутренней подпрограммы

End Program Container

Результаты работы программы Container

Массив В

1.0 -4.0 6.0 20.0 45.0 -71.0

4.0 -17.0 .0 .0 .0 11.0

max по модулю элемент -71.0 его номер 6 в массиве B

Массив С

-122.0 .0 45.0 71.0 4.0 -17.0

.0 .0 .0 11.0

max по модулю элемент -122.0 его номер 1 в массиве C

Проект ProModule – использование общедоступных объектов модуля.

В этом проекте две самостоятельные программные единицы – модуль Mo и головная программа ForModule, которые:

1. могут быть отдельными текстами и компилироваться порознь, но модуль должен компилироваться раньше главной программы;

2. могут быть единым текстом, но модуль должен располагаться перед главной программой.

Модуль Mo содержит модульную процедуру ProArray, которая размещена внутри модуля. Процедура ProArrayбез аргументов. Интерфейс модульной процедуры считается явным и его описывать не надо.

Все объекты, кроме массива ARR, размещены в модуле. Главной программе forModule, использующей модуль, доступны объекты ArrN, dARR (public) Локальная (private) переменная модуля NumARR доступна в модульной процедуре ProArray и недоступна в программе forModule.

Массив ARR локализован в процедуре ProArray, аналогичный динамический массив используется в предыдущем примере.

Программа

Module Mo ! ФИО Лаб 7 № группы, № варианта

Implicit none

Integer,public::ArrN,dARR !порядковый № массива, длина массива

Integer,private::NumARR !локальная: № max по модулю элемента,

Contains! модульная процедура

Subroutine ProArray

Implicit none

Real,dimension(1:dARR)::ARR ! динамический автоматич. массив

Read(1,*)ARR; Write(2,2)ArrN,ARR ! ввод и вывод массива ARR

2 format(/’ Массив №’, i5/ ( 6F8.1) )

NumARR=sum(maxloc(Abs(ARR)))

Write(2,3) ARR(NumARR), NumARR, ArrN

3 format(’ max по модулю элемент ’,F8.1, &

’ его номер’, i3, ’ в массиве №’,i5)

End Subroutine proArray

End Module Mo

Program forModule

use Mo ! использует Mo, доступны: ArrN, dARR , процедура proArray

Open(1,file='in.txt'); Open(2,file='Out.txt')!файлы:данные,результат

do ArrN=1,10000 ! читаем до 10000 массивов

Read(1,*, end=10) dARR; Call ProArray

Enddo

10 Write(2,*) ’ Все данные прочитаны’

End Program forModule

Результаты работы программы forModule

Массив № 1

1.0 -4.0 6.0 20.0 45.0 -71.0

4.0 -17.0 .0 .0 .0 11.0

max по модулю элемент -71.0 его номер 6 в массиве № 1

Массив № 2

22.0 .0 45.0 71.0 4.0 -17.0

.0 .0 .0 11.0

max по модулю элемент 71.0 его номер 4 в массиве № 2

Все данные прочитаны

Контрольные вопросы к защите работы

1. Назовите четыре вида программных единиц в Фортране.

2. Назовите три вида программ.

3. Назовите два вида процедур.

4. Что называется подпрограммой?

5. Что такое внешняя и внутренняя программа?

6. Какие виды программных единиц могут быть только внешними? Какие виды программ могут быть внутренними?

7. Могут ли объекты внешней программы быть невидимыми во внутренней программе?

8. Чем модуль отличается от программ?

9. Каков механизм присоединения данных носителя? Примеры.

10. Опишите механизм присоединения объектов модуля, примеры.

11. Какие объекты модуля не видимы в программе, использующей его?

12. Когда интерфейс обязателен, когда желателен, когда не нужен?

13. Нужен ли оператор interfaceдля модульной программы?

14. Когда возникает коллизия имен при использовании модуля?

Пример контрольного задания

Вычисление количества повторений цикла оформить как:

1. внешнюю функцию function;

2. внешнюю подпрограмму subroutine;

3. внутреннюю процедуру – функцию или подпрограмму;

4. модульную процедуру – функцию или подпрограмму.

Варианты индивидуальных заданий

Варианты индивидуальных заданий см. в 2.6.

Элементы языка программирования Фортран

Текст программы на Фортране

Программу на Фортране оформляют в виде простого (plain) текста:

- символ «!» открывает комментарий – до конца строки;

- упрощают чтение текста программы пустые строки и пробелы (вне имен и ключевых слов);

- каждая программа, каждый простой оператор, каждый составной оператор, каждый блок пишут с новой строки, при необходимости делая перенос на следующую строку (символ переноса «&»);

- компиляторы поддерживают две формы записи текстов программ:

*.f90, *.f03 – современная свободная форма для новых текстов,

*.for -устаревшая фиксированная форма (преемственность с Ф77).


Таблица 15.

Пример оформления текста программы на Фортране

Program FreeForm ! тема: Площадь круга Program -Начало программы
2 ! ФИО №группы №варианта №работы строка-комментарий
Real R;integer i ! комментарий Два простых оператора в строке
4 Do i=1,10 ! цикл по 10 радиусам Do - Начало конструкции
Write(*,*)’ R=?’; Read(*,*) R началоблока
Write(*,*)’R =’, R, & ! & - перенос с переносом по &
’ S =’, 3.14* R**2 строка-продолжение
Enddo End+Do = конец конструкцииDo
End Program FreeForm End+Program= конец программы

Привязка операторов и блоков к строкам традиционно осуществляется одним из двух символов конца строки – клавиша <Enter> и «;» :

- используя символ «;», в одной видимой строке (строка 3, строка 5) компонуют простые операторы;

- <Enter> предшествует программной единице (строки 1-9), ее телу (строки 2-8), конструкции (строки 4-8) и блоку do(строки 5-7);

- специальных символов окончания оператора и блока в Фортране нет.

В языках Си и Паскаль все делается не так – операторы не привязаны к строкам, а каждый оператор или блок должен заканчиваться спецсимволом «;», что затрудняет чтение сложной программы. Те, кто приходят из Си и Паскаль, испытывают облегчение и быстро привыкают к оформлению текста на Фортране.

Программу из Табл.15 можно заметно упростить, если описать R не как скалярReal R, а как векторReal,dimension(1:10):: R. В этом случае совсем не понадобится цикл по элементам массива R, так как Фортран умеет то, чего нет в других языках – выполнять действия с массивами:

Program R10 ! тема: Площади 10 кругов

Real,dimension(1:10):: R

Write(*,*)’ R=?’; Read(*,*) R! ввести 10 радиусов

Write(*,*)’ R =’,R; Write(*,*)’ S =’,3.14*R**2

End Program R10

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.