Правила установления соответствия между формальными и фактическими аргументами при обращении к подпрограммам


 

Соблюдение следующих правил является обязательным при использовании подпрограмм FUNCTION и SUB­ROUTINE.

1. Необходимо, чтобы количество, тип и порядок сле­дования фактических аргументов в указателе функции или в операторе CALL соответствовали количеству, типу и порядку следования формальных аргументов, ука­занных в операторе FUNCTION или SUBROUTINE. Например, к подпрограмме

 

SUBROUTINE SUM (А, В, К, N)

В = А**К

N = N + K

 

можно обратиться с помощью следующего оператора

CALL SUM (С, REZ, 5, L)

2. Между формальными и фактическими аргументами должно быть установлено следующее соответствие (Табл. №12):

Таблица №12

Формальный аргумент Фактический аргумент
Переменная Константа Переменная Элемент массива Выражение
Массив Массив Элемент массива
Имя внешней подпрограммы Имя внешней подпрограммы

 

 

3. Если формальный аргумент является массивом, то соответствующий фактический аргумент должен быть либо массивом, либо элементом массива. В этом случае массивы в вызывающей и вызываемой программах должны быть объявлены таким образом, чтобы размер массива или части массива, используемого в качестве фактического аргумента, был не меньше размера масси­ва, используемого в качестве формального аргумента. Количество и величины измерений фактического и фор­мального массивов могут не совпадать. Пример.

DIMENSION A (10) … CALL Sl (A) … SUBROUTINE S1 (В) DIMENSION B (5) …
Вызывающая программа Подпрограмма

В этом случае между элементами массивов А и В ус­танавливается соответствие, начиная с первых элементов:

А (1) А (2) А (3) А (4) А (5) А (6) А (7) А (8) ...

В (1) В (2) В (3) В (4) В (5)

Если обращение к подпрограмме S1 осуществляется с помощью оператора

CALL S1 (A (3))

то соответствие будет следующим:

А (1) А (2) А (3) А (4) А (5) А (6) А (7) А (8) ...

В (1) В (2) В (3) В (4) В (5)

 

Пример.

Вызывающая программа Подпрограмма
DIMENSION A (7) … CALL S2 (A) … SUBROUTINE S2 (В) DIMENSION B (3,2) …

 

В этом случае между элементами массивов А и В устанавливается следующее соответствие:

А (1) А (2) А (3) А (4) А (5) А (6) А (7)

В (1,1) В (2,1) В (3,1) В (1,2) В (2,2) В (3,2)

Необходимо помнить, что элементы двухмерного мас­сива хранятся в памяти ЭВМ по столбцам.

 

4. Формальный аргумент — массив может быть опи­сан в подпрограмме

оператором DIMENSION с макси­мальными значениями всех измерений, заданными целы­ми переменными, например

SUBROUTINE S3 (X, N, М)

DIMENSION X (N, M)

В этом случае значения переменных N и М должны быть определены в подпрограмме как формальные аргументы. Они также не должны превышать максимальных зна­чений измерений массива — фактического аргумента. Об­ращение к подпрограмме S3 может быть таким:

DIMENSION A (4, 2)

CALL S3 (А, 4, 2)

…Формальные аргументы N и М получат значения 4 и 2, и между элементами массивов A (4, 2) и X (4, 2) будет полное соответствие, так как количество и величины их измерений совпадают.

При обращении к подпрограмме S3 оператором



CALL S3 (А, 2, 2)

элементам формального массива X (2, 2) ставятся в соот­ветствие элементы фактического массива А (4, 2) следую­щим образом:

А (1,1) А (2,1) А (3,1) А (4,1) А (1,2) А (2,2) ... Х (1,1) X(2,1) Х (1,2) Х (2,2)

 

5. Константа, выражение и имя подпрограммы могут быть использованы в

качестве фактического аргумента только в том случае, если в подпрограмме соответствую­щему формальному аргументу не присваивается значе­ние.

6.3 Примеры выполнения задания к лабораторной работе № 6

Пример1. Составить программу вычисления значения функции при задан­ных значениях а, Ь и с , где х1, х2 — корни уравнения ах2 + bx – 1,5 = 0;

у1 и y2 — корни уравнения 2у2 – у + с = 0. Вычисление корней выполнять в подпрограмме SUBROUTINE. Если корни мнимые, то считать их равными нулю.

Организуем подпрограмму с именем QUADR, предна­значенную для вычисления корней t1 и t2 квадратного уравнения at2 + bt + с = 0. Список формальных аргу­ментов должен содержать пять аргументов: a, b и c, являющихся исходными данными для работы подпрограм­мы, t1 и t2, обозначающих результаты ее выполнения. Формулы для вычисления действительных корней уравне­ния:

 

; .

 

При составлении подпрограммы положим, что значение коэффициента a нулю.

В основной программе необходимо дважды обратить­ся к подпрограмме QUADR, записав соответствующие значения фактических аргументов.

Программа решения задачи имеет вид:

 

подпрограмма основная программа

 

 

 

Задания на тему: составление подпрограмм типа SUBR0UTINE.

Составить тексты программ иблок-схемы к заданиям 1), 2), 3).

(смотри на стр. 65 возможные варианты решений)

 

1) Билеты, на городском транспорте имеют номера от 000 000 до 999 999. Билет считается «счастливым», если сумма первых трех цифр его номера равна сумме трех последних цифр. Найти количество всех «счастливых» билетов (смотри на стр. 60 программу с именем LUCK).

 

2) Вычислить К членов последовательности, общий член которой

 

 

* Раздел – SUBROUTINE,

* Вычислить К членов последовательности, общий член которой

* A(N)=A(N-1)/N , A(1)=B . Дописать головную программуVUZAIK, из которой

* происходит вызов подпрограммы AIK.

 

SUBROUTINE AIK (A,B,K)

DIMENSION A(K)

A(1)=B

DO 5 L=2,K

D=L

A(L)=A(L-1)/D

5 CONTINUE

RETURN

END

 

3) Расположить элементы одномерного массива в порядке их возрастания. Дописать головную программу мas_rost, из которой происходит вызов подпрограммы rost(A,N).

       
 
* Раздел SUBROUTINE * расположение элементов массива * в порядке их возрастания   SUBROUTINE ROST(A,N) DIMENSION A(N) J=N-1 DO 9 K=1,J AM=A(K) NOM=K L=K+1 DO 8 M=L,N IF(AM-A(M)) 8,8,7  
   
*продолжение subroutine rost   7 AM=A(M) NOM=M 8 CONTINUE A(NOM)=A(K) A(K)=AM 9 CONTINUE RETURN END  
 

 


6.5 Задания к лабораторным работам №5 и №6(Составить тексты программ иблок-схемы).

1. Составить программу вычисления значения функ­ции

g = log2 (x) (logb (x + y) + logb+1 (x - у))

при заданных значениях b, x и у. Для вычисления лога­рифма по произвольному основанию использовать опера­тор-функцию (logat = ln t / ln a).

 

2. Составить программу вычисления значения функ­ции

для заданных значений х и t. Вычисление многочлена ax2 + bx + c организовать в виде оператора-функции.

 

3. Составить программу вычисления среднего ариф­метического положительных элементов массивов A (50) и C (80), используя подпрограмму FUNCTION. Если в массиве нет положительных элементов, то их среднее арифметическое считать нулем.

 

4. Составить программу вычисления суммы положи­тельных и отрицательных элементов массивов X (40) и Y (50) с использованием подпрограммы SUBROUTINE.

 

5. Составить программу вычисления значения функ­ции

где amin и bmin — минимальные элементы массивов A (50) и B (20) соответственно. Вычисление минимального эле­мента массива оформить в виде подпрог-

раммы FUNC­TION с именем MIN.

 

6. Составить программу вычисления значения функ­ции

,

 

где nx, mx, lx — соответственно количество отрицатель­ных, положительных и нулевых элементов массива X (20); ny, my, ly — соответствующие характеристики массива Y (30). Для вычисления характеристик масси­вов использовать подпрограмму SUBROUTINE.

 

7. Составить подпрограмму записи элементов пря­моугольной матрицы в одномерный массив в порядке следования строк. Используя подпрограмму, сформиро­вать соответствующие одномерные массивы для матриц A (5,2) и Y (3,3).

 

8. Составить подпрограмму вычисления координат минимального элемента квадратной матрицы. Используя подпрограмму, заменить эти элементы нулями в матрицах А (5,5) и М(3,3).

9. Составить программу вычисления значения функ­ции

где ai и bi - элементы массивов A(20) и B(40) соот­ветственно. Вычисление суммы заданного количества эле­ментов массива оформить в виде подпрограммы FUNCTION.

Контрольные вопросы к пройденному материалу

 

1. В какой последовательности выполняются операторы программы?

2. Какие действия ЭВМ определены операторами: а) присваивания; б) ввода/вывода.

3. Какую информацию задает предложение FORMAT ?

4. По блок-схеме программы объяснить алгоритм решения задачи.

5. Объяснить различие числовых данных целого и вещественного типов.

6. Как определить тип констант и переменных?

7. Перечислить основные правила задания арифметических выражений.

8. Что определяют спецификации I , Е ,F , Х , литерал? Что определяет список специ

фикаций предложения FORMAT ?

9. Объясните взаимодействие оператора вывода с предложением FORMAT.

10. В каком порядке выполняются операторы программы?

11. Объяснить действия безусловного и условного операторов перехода?

12. Объяснять алгоритмы и программы примеров.

13. Объяснить алгоритм и программу, разработанную в соответствии с индивиду

альным вариантом задания.

14. Правила записи переменных с индексами.

 

15. Правила описания массивов с индексами в памяти ЭВМ.

16. Структура и действие оператора цикла.

17. Правила программирования с использованием оператора цикла.

18. Основные способы ввода-вывода массивов.

19. Объяснить примеры, приведенные в разд.4.

20. Перечислить требования к формальным параметрам операторов-функций.

21. Могут ли в состав выражения операторов-функций входить переменные, отлич

ные от формальных параметров?

22. В какой части программы должны размещаться операторы-функции?

23. Перечислить основные отличия подпрограммы-функции от операторов-функций.

24. Как оформляется подпрограмма-функция?

25. Перечислить требования, которым должны удовлетворять фактические парамет

ры при обращении к функции.

26. Правила обращения к функциям, описанным операторами.

27. Правила обращения к подпрограммам-функциям.

28. Как оформляется подпрограмма общего вида?

29. Как производится обращение к подпрограммам общего вида?

30. Каким образом результаты, полученные в подпрограмме,могут передаваться в

основную программу?

31. Как определяются допустимые типы фактических параметров при обращении к

подпрограмме?

32. В чем состоит модульная структура программы, целью ее использования ?

 

 

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА

1. Г.Г. Калиш Основы вычислительной техники. – Москва “Высшая школа”. 2000. с 269

2. Дж. Ашкрофт, Р. Элдридж, Р. Полон, Г. Уилсон Программирование на Фортране 77. – Москва “Радио и связь”. 1990. с. 265

3. О.В. Бартеньев Современный Фортран. – 2-е изд., испр. - М.: “Диалог - МИФИ”, 1998г.- 397с.

4. О.В. Бартеньев Фортран для студентов. М.: “Диалог - МИФИ”, 1999г. 397 с.

5. В.Е. Краскевич, К.Х. Зеленский, В.И. Гречко Численные методы в инженерных исследованиях. – Киев, «Вища школа». 1986. с. 261

6. А.И. Плис. Н.А. Сливина Лабораторный практикум по высшей математике. – Москва “Высшая школа” 1983. с 192

7. Вычислительная техника в инженерных и экономических рас­четах / Под ред. А.В.Петрова. - М.: Высшая школа, 1984. - 320 с.

8. Сапрыкина Л.Т., Фомина А.А. Методические указания к выполнению лабораторных работ «Программирование на ЭВМ и численные методы». – Николаев: НКИ, 1985. – 72с.

9. Ю.В. Петропавлов, Ю.Г. Тендитный Избранные вопросы вычислительной математики. Херсон, филиал УГМТУ, 1999.

Примечание 1:Варианты возможных решений заданий 5.6 и 6.4.

 

 
 


раздел 6.4 ; задание 1)

* Раздел – SUBROUTINE,

* Пример использования

* вложенных циклов.

 

PROGRAM LUCK

NC=0

DO 2 I=1,10

DO 2 J=1,10

DO 2 K=1,10

DO 2 L=1,10

DO 2 M=1,10

DO 2 N=1,10

IF(I+J+K-L-M-N) 2,1,1

1 NC=NC+1

2 CONTINUE

PRINT 3, NC

3 FORMAT ( ' ЧИСЛО СЧАСТЛИВЫХ

*БИЛЕТОВ РАВНО ', I 6)

END

           
 
 
   
раздел 6.4 ; задание 2) PROGRAM VUZAIK, DIMENSION S(50) READ *, N, B CALL AIK(S,B,N) PRINT*, (S(I),I=1,N) END  
 
раздел 6.4 ; задание 3)   PROGRAM MAS_ROST DIMENSION A(20) PRINT*,'ВВЕСТИ N' READ (5,*)N PRINT*,'ВВЕСТИ ЭЛ. МАС.' READ(5,*) (A(I),I=1,N) CALL ROST (A,N) PRINT 1, (A(I),I=1,N) 1 FORMAT (5X,2F8.2) END
 

 

 


 

 

       
   
 
 

 


раздел 5.6 ; задание 2)

       
 
FUNCTION FELIX (A, B, C, D, R) * C, D Концы отрезка, R-точность вычисления EPS X1 = C X2 = D F1 = X1*A**X1-B 7 FELIX = X1 1 IF(X2-X1-R) 13, 2, 2 2 X=(X1+X2)*0.5 F=X*A**X-B  
   
*продолжение function felix IF (F1*F) 3, 4, 5 3 X2=X GO TO 1 4 FELIX=X GO TO 13 5 X1=X GO TO 7 13 RETURN END
 

 

 


С 0 Д Е Р Ж А Н И Е

Введение…………………………………………............………………..…….…….......3

1. Операционная система (ОС)…………..………..………….…………..………...…...3

1.1 Семейство операционных систем Windows ….……………………………….….....3

1.2 “Мышь”……………….………………………………………………………………..4

1.3 Магнитные носители ……..….………………………………………………….……4

 

РАЗДЕЛ I.Контрольная работа (части I II). Лабораторная работа №1………….......5

1.1. Общие сведения о языке Фортран. Этапы обработки программ…...………......5

1.1.2 Основные символы и ключевые слова……………………………………….…...5

1.1.3 Осповные элементы ФОРТРАНа………………………………………………….6

1.1.4 Типы данных в ФОРТРАНе ……………………………………………………....6

1.1.5 Арифметические выражения и операции……………………………………...….7

1.1.6 Операции над вещественными и целыми величинами…………………..….......8

1.1.7 Возведение в вещественную степень ( )……………………………..8

1.1.8 Возведение в отрицательную степень………………………………………..…....8

1.1.9 Корень квадратный……………………………………………………………..…...9

1.1.9.1 Таблицы с примерами записей выражений на Фортране…(1,2,3)……….........9

1.1.9.2Операции отношения…………………………………………………………...10

1.1.9.3 Логические значения…………………………………………………………….10

1.1.10 Тригонометрические функции…………………………………………………..11

1.1.11 Обратные тригонометрические функции……………………………………...12

1.1.12 Арифметический оператор присваивания………………………………………12

1.2 Запись программ на Фортране………………………………………………….…...12

1.2.1 Обработка программ на компьютере…………………………………………......14

1.2.2 Оператор бесформатного ввода READ…………………………………………...15

1.2.3 Операторы вывода……………………………………………….………………....15

1.2.4 Отчет по лабораторной работе….............................................….……….............17

1.2.5 Оператор PARAMETER…………………………………………………………....17

1.2.6 БЛОК – СХЕМЫ ……....……………………………………………………….........18

1.2.7 Алгоритм выполнение практической работы…………………………….……...19

1.2.8 Консоль-проект ………………………………………………………………........20

1.3 Задания к контрольной работе (часть 1)………………………………………....21

1.3.1 Оператор FORMAT………………………………………………………………...24

1.3.2 Задания к контрольной работе (часть 2) ………………………………………...27

1.3.3 Пример выполнения контрольной работы (часть1, 2) ………………………..…24

1.3.4 Задания к лабораторной работе № 1…………………………………………......28

1.3.5 Пример выполнения лабораторной работы № 1……………………………….....31

1.3.6 Метки операторов………………………………………………………………...…32

1.3.7 Форматный ввод………………………………………………………………….....32

 

РАЗДЕЛ II.Лабораторная работа № 2..……………..…………………………….....33

2.1. Алгоритмы……………………………..….………………………………….…….....33

2.2 Рассмотрим пример составления схем алгоритмов…………..…..…………..…....34

2.3 Операторы передачи управления……………….……………………………..…......35

2.4 Вычисляемый оператор перехода…………..……….………………………….…....35

2.5 Условный арифметический оператор IF……..………………………………..….....35

2.6 Логический условный оператор IF …………………………………………….......36

2.7 Пример выполнения задания в работе № 2 …………………………………........37

2.8 Задания к лабораторной работе № 2…………………………………………….….38

 

РАЗДЕЛ III.Лабораторная работа № 3 ………………………………………........40

3.1 Циклический алгоритм …………………………………………………………......40

3.2 Вспомогательные операторы управления…………………………...………….....42

3.3 Оператор паузы …………………………………………………………………......43

3.4 Массивы………………………………………………………………………….......43

3.5 Оператор DIMENSION……………………………………………………….…......44

3.6 Индексные выражения……………….………………………………………….…..44

3.7 Ввод – вывод одномерных массивов………………………….……………………44

3.8 Оператор цикла DO……………………………………………………………….…46

3.9 Задания к лабораторной работе № 3………………………………………………..47

3.10 Пример выполнения задания к лабораторной работе № 3……………………....47

 

РАЗДЕЛ IV. Лабораторная работа № 4 …………………………………………......48

4.1Дополнение к оператору цикла DO……………………………………………......48

4.2 Двумерные массивы……………………………………………………………...…49

4.2.1 Ввод/вывод элементов матрицы………………………………………………....49

4.3 Вложенные циклы…………………………………………………………………..50

4.4 Задания к лабораторной работе № 4…………………………………………..…..51

4.5 Пример выполнения задания к лабораторной работе № 4…………………....…51

 

РАЗДЕЛ V. Лабораторная работа № 5………………………………..………........52

5.1 Программные единицы………………………………………………………….....52

5.2 Оператор FUNCTION………………………………………………………….…...53

5.3 Другие операторы, входящие в подпрограммную – функцию……………….....54

5.4 Обращение к подпрограмме – функции……………………………………….....54

5.5 Примеры решения заданий к лабораторной работе № 5 .............….……….......56

5.6 Задания на тему: составление подпрограмм типа FUNCTION ……………......57

РАЗДЕЛ VI.Лабораторная работа № 6……………………………..…………..…..58

6.1 Подпрограммы типа SUBR0UTINE………………………………..………....…...58

6.2 соответствия между формальными и фактическими аргументами..……......….59

6.3 Примеры выполнения задания к лабораторной работе № 6………..….…..........61

6.4 Задания на тему: составление подпрограмм типа SUBR0UTINE……..….........61

6.5 Задания к лабораторным работам №5 и №6…………………………..…..…..…62

Контрольные вопросы к пройденному материалу…………………………..…........63

Литература………………………………………………………………………...........64

Примечание 1 (возможные решения)…….……………………………………..........65

Содержание……………………………………………………………………….........66

Примечание 2 (для заметок)…………………………………………………….........67

 

Для заметок:

   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь