Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
основы программирования-2010-qb.DOC
Скачиваний:
25
Добавлен:
11.05.2015
Размер:
432.13 Кб
Скачать

Печать t

Конец

Рис. 2.6. Блок - схема программы на обработку массивов

Пример 8. Найти сумму элементов каждой строки массива C(4,5).

Программа для примера 8 (см. рис. 2.7.):

DIM C(4,5), S(4)

DATA 2, 4, 6, 8, 10

DATA -1, -3.4, -6, 7, 9

DATA -2, -4, 6, -8, -10

DATA 1, 3, 5.1, 12, 15

FOR I = 1 TO 4

FOR J = 1 TO 5

READ C(I,J)

NEXT J, I

FOR I = 1 TO 4

S(I)=0

FOR J = 1 TO 5

S(I) = S(I)+C(I,J)

NEXT J

PRINT S(I);

NEXT I : PRINT

END

Использование файлов последовательного доступа.

Операторы OPEN, CLOSE, INPUT # и PRINT #.

Оператор OPEN позволяет открывать файлы для чтения и записи. Общий вид:

OPEN "File.name" FOR { режим } AS { номер }

File.name - имя открываемого файла

режим - способ доступа к файлу

номер - целое число 1-255, которое потом используется, чтобы определить нужный файл для записи/чтения.

Начало

Ввод С(i,j) n

i = 1

j=j+1

да

j≤5

нет

Печать s(I)

i=i+1

да

i≤4

нет

Конец

Рис. 2.7. Блок - схема циклического вычислительного процесса с применением двумерного массива

Режимы:

APPEND - последовательная запись в файл, начиная с конца файла, т.е. дополнение;

OUTPUT - перезапись в файл;

INPUT - чтение файла;

BINARY - режим ввода/вывода.

Если вы открыли файл для дополнения, то это делается следующим образом:

OPEN "FILE.TXT" APPEND AS #1

a$="your text here"

w=344,9

PRINT #1, a$

PRINT #1, w

CLOSE #1

В результате программа допишет в файл FILE.TXT две строки, в первой - значение переменной a$, во второй - значение переменной w. Рекомендуется в конце программы ставить CLOSE, тогда она автоматически закрывает все файлы. Если не закрыть файл, то у вас не будет к нему доступа, в нем ничего не изменится и т.д., команда CLOSE закрывает все файлы и проблем не возникнет.

Для чтения из файла используется оператор INPUT #:

OPEN "FILE.TXT" FOR INPUT AS #1

INPUT #1, D$

INPUT #1, R

CLOSE #1

PRINT D$

PRINT R

CLOSE

Еще одно хорошее свойство - команда FREEFILE - указывает следующий свободный номер для файлов, когда у вас открыто несколько файлов и вы думаете какой еще придумать номер - не мучайтесь, пишите:

n=FREEFILE

open "name" for append as #n

...

close #n

Пример 9. Найти все массиваC(5,5)., большие по модулю 2.

Сформируем файл “data” содержащий элементы массива с помощью оператораPRINT #:

DIM C(5,5)

open “data” for output as #1

FOR I = 1 TO 4

FOR J = 1 TO 5

INPUT X

PRINT #1,X

NEXT J, I

close #1

Для решения нашей задачи элементы массива считываем с файла “data” с помощью оператора INPUT #.

Результаты запишем в файл “rez”.

open “data” for input as #2

open “rez” for output as #3

FOR I = 1 TO 5

FOR J = 1 TO 5

INPUT #2, C(I,J)

IF ABS(C(I,J))>2 THEN PRINT #3 C(I,J)

NEXT J, I

CLOSE

END

3.Программирование с использованием подпрограмм.

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

Подпрограмма-функция.

Это подпрограмма имеет следующую структуру:

FUNCTION имя [(список параметров) STATIC]

[Операторы подпрограммы]

имя = выражение

END FUNCTION

Для обращения к функции используют указатель функции содержащую имя функции и в скобках конкретные значения ее аргументов.

Пример 10. Вычислить , где.

Сумму вычислить с точностью 0,0001.Для этого необходимо суммировать до тех пор, пока очередной член суммы не станет меньше заданной точности.

Используем подпрограмму функцию.

DECLARE FUNCTION R(X)

U=R(1/2)+R(1/3)+R(1/4)

PRINT “U=”;U

END

FUNCTION R(X)

S=0: K=1

WHILE ABS(X^K/K^2)>1E-4

S=S+X^K/K^2

K=K+1

WEND

R=S

END FUNCTION

Пример 11.Вычислить скалярное произведение векторов:

Используем подпрограмму, вычисляющую скалярное произведение векторов :

.

REM “Основная программа”

DECLARE FUNCTION SP(X(),Y(),N)

INPUT K,M

DIM A(1 TO K),B(1 TO K),C(1 TO M),D(1 TO M)

FOR I=1 TO K

INPUT A(I),B(I)

NEXT

FOR I=1 TO M

INPUT C(I),D(I)

NEXT

S1=SP(A(),B(),K)

S2=SP(C(),D(),M)

PRINT S1,S2

END

REM “Подпрограмма”

FUNCTION SP(X(),Y(),N)

S=0

FOR I=1 TO N

S=S+X(I)*Y(I)

NEXT

SP=S

END FUNCTION

Подпрограмма общего вида.

Это подпрограмма имеет следующую структуру:

SUB имя [(список параметров)] [STATIC]

Операторы подпрограммы

END SUB

Для обращения к подпрограмме общего вида служит оператор

[CALL] имя подпрограммы [(список аргументов)]

Используем подпрограмму общего вида для решения примера 10.

REM “Основная программа”

DECLARE SUB P(X,R)

CALL P(1/2,R1)

CALL P(1/2,R2)

CALL P(1/2,R3)

U=R1+R2+R3

PRINT “U=”;U

END

REM “Подпрограмма”

SUB P(X,R)

S=0: K=1

WHILE ABS(X^K/K^2)>1E-4

S=S+X^K/K^2

K=K+1

WEND

END SUB

Для решения примера 11.

REM “Основная программа”

DECLARE SUB SP(X(),Y(),N,S)

INPUT K,M

DIM A(1 TO K),B(1 TO K),C(1 TO M),D(1 TO M)

FOR I=1 TO K

INPUT A(I),B(I)

NEXT

FOR I=1 TO M

INPUT C(I),D(I)

NEXT

CALL SP(A(),B(),K, S1)

CALL SP(C(),D(),M, S2)

PRINT S1,S2

END

REM “Подпрограмма”

SUB SP(X(),Y(),N,S)

S=0

FOR I=1 TO N

S=S+X(I)*Y(I)

NEXT

END SUB