Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Задание
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.
|
|
|
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!