5 CONTINUE
6 CONTINUE
C КОНЕЦ СХЕМЫ ЖАРДАНА
C ЗАПIСЬ РЕЗУЛЬТ. РАСЧЕТА НА ДИСК В ФАЙЛ ВЫХ. ДАННЫХ И ЗАКРЫТИЕ ФАЙЛА
WRITE(3,352)(B(I),I=1,M)
352 FORMAT(/10X,'РЕЗУЛЬТАТЫ РАСЧЕТА:'/6(G13.6))
CLOSE(UNIT=3)
C СООБЩЕНИЕ НА ЭКРАН ДИСПЛЕЯ О ЗАВЕРШЕНИИ РАБОТЫ
WRITE(5,353) Z2
353 FORMAT(1X,'ПРОГРАММА ''JORD'' РАБОТУ ОКОНЧИЛА. РЕЗУЛЬТАТЫ РАСЧЕТА
*ЗАПИСАНЫ НА ДИСК В ФАЙЛ '/1X,A8)
STOP
END
Приложение 4
C ФАЙЛ ITER.FOR
C ПРОГРАММА 'ITER' ПРЕДН. ДЛЯ РЕШЕНИЯ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ
C УРАВНЕНИЙ AX=B МЕТОДОМ ПРОСТОЙ ИТЕРАЙИИ.
C М-ПОРЯДОК СИСТЕМЫ УРАВНЕНИЙ. А-КВАДРАТНАЯ МАТРИЦА КОЭФФИЦИЕНТОВ
C (ВО ВХОДНОМ ФАЙЛЕ ДОЛЖНА БЫТЬ РАЗМЕЩЕНА ПО СТРОЧКАМ)
C В-МАТР. ПРАВЫХ ЧАСТЕЙ. С,D-РАБОЧИЕ МАССИВЫ. XN,XN1-МАТРИЦЫ РЕШЕНИЙ
C СИСТЕМЫ, ПОЛУЧИВШИХСЯ СООТВЕТСТВЕННО НА ШАГЕ n И НА ШАГЕ n-1 ИТЕРАЦИОННОГО
C ПРОЦЕССА. EPS-ЗАДАВАЕМАЯ ОТНОСИТ. ПОГРЕШНОСТЬ ИТЕРАЦИОННОГО ПРОЦЕССА.
C К-ПРИЗНАК ВЫВОДА НА ПЕЧАТЬ ПРОМЕЖУТ. ЗНАЧ. ИТЕРАЦИОННЫХ РАШЕНИЙ (ПРИC ЗНАК ЗАДАЕТСЯ ВО ВХОД. ДАННЫХ: К=1-ВЫВОД ПРОМЕЖУТ. ЗНАЧ. РЕШЕНИЙ
C ИСПОЛНЯЕТСЯ; К=0-ВЫВОД НЕ ИСПОЛНЯЕТСЯ). N-СЧЕТЧИК НОМЕРА
C ИТЕРАЦИИ)
C ПЕРЕД ВЫПОЛНЕНИЕМ РАСЧЕТА ПО ПРОГРАММЕ 'ITE' ПОЛЬЗОВАТЕЛЬ СОЗДАЕТ НА
C ДИСКЕ ФАЙЛ ВХОДН. ДАННЫХ С ИМЕНЕМ В ВИДЕ 'AAAA.DAT', ГДЕ ВМЕСТО СИМC ВОЛОВ 'AAAA.' ВСТОВЛЯЕТ ЧЕТЫРЕ БУКВЫ ИМЯ СВОЕГО ФАЙЛА ВХОДНЫХ
C ДАННЫХ. ПОСЛЕ ПУСКА ПРОГРАММЫ ОНА ЗАПРАШИВАЕТ С ЭКРАНА
C ИМЯ ФАЙЛА, И ОНО ДОЛЖНО БЫТЬ ВВЕДЕНО ПОЛЬЗОВАТЕЛЕМ С ЭКРАНА.
C ПОСЛЕ ЗАВЕРШ. РАСЧЕТА ПРОГРАММА ЗАПИСЫВАЕТ РЕЗУЛЬТАТЫ РАСЧЕТА НА ДИСК
C В ФАЙЛ С ИМЕНЕМ 'AAAA.REZ'.
C Z1,Z2 - СИМВОЛЬНЫЕ ПЕРЕМЕННЫЕ (СООТВЕТСТВЕННО ИМЕНА ФАЙЛОВ ВХОДНЫХ
C И ИСХОДЯЩИХ ДАННЫХ)
CHARACTER Z1*8,Z2*8
C COMPLEX A,B,C,D,XN,XN1
DIMENSION A(20,20),B(20),C(20),D(20,20),XN(20),XN1(20)
C ЧТЕНИЕ ИМЕНИ ФАЙЛА ВХОДНЫХ ДАННЫХ С ЭКРАНА ДИСПЛЕЯ
WRITE(5,350)
350 FORMAT(1X,'ВВЕДИТЕ ИМЯ И РАСШИР. ВАШЕГО ФАЙЛА ВХОДНЫХ ДАННЫХ
* В ВИДЕ:'/1X,'"AAAA.DAT"( ДЛЯ ЭТОГО ЗАМЕНИТЕ СИМВОЛЫ "AAAA"
* НА ИМЯ)')
READ(5,351)Z1
351 FORMAT(A8)
C ОТКРЫТИЕ ФАЙЛА ВХОДН. ДАННЫХ, ЧТЕНИЕ ВХОДНЫХ ДАННЫХ С ДИСКА
C В ОПЕРАТИВНОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО И ЗАКРЫТИЕ ФАЙЛА
OPEN(UNIT=1,FILE=Z1,STATUS='OLD')
READ(1,*)M,K,EPS,((A(I,J),J=1,M),I=1,M),(B(I),I=1,M)
CLOSE(UNIT=1)
C ОТКРЫТИЕ ФАЙЛА ДЛЯ ВЫХОДНЫХ ДАННЫХ, ЗАПIСЬ ВХОДНЫХ ДАННЫХ
C В ВЫХОДНОЙ ФАЙЛ
Z2(1:4)=Z1(1:4)
Z2(5:8)='.REZ'
OPEN(UNIT=3,FILE=Z2,STATUS='NEW')
WRITE(3,360)M,K,EPS,((A(I,J),J=1,M),I=1,M)
360 FORMAT(10X,'ВЫХОДНОЙ Ф А Й Л П Р О Г Р А М М Ы ITER'//
*10X,'ВХОДНЫЕ ДАННЫЕ:'/'Порядок системы уравнений: М=',I2/
*'Признак вывода промежуточных результатов на экран: К=',I2/
*'Заданная относительная погрешность: EPS=',F10.8/
*'Матрица коэффициентов A(M,M) системы:'/(10F8.4))
WRITE(3,370)(B(I),I=1,M)
370 FORMAT('Матрица правых частей B(M):'/(10F8.4))
C ВЫЧИСЛЕНИЕ ЭЛЕМЕНТОВ МАССИВОВ C(M),D(M,M)
DO 5 I=1,M
DO 4 J=1,M
IF(I.EQ.J)GO TO 3
D(I,J)=-A(I,J)/A(I,I)
GO TO 4
3 D(I,J)=0.
4 CONTINUE
5 C(I)=B(I)/A(I,I)
C ЗАСЫЛКА НАЧАЛЬНОГО ПРИБЛИЖЕНИЯ В МАССИВ XN1(M)
DO 6 I=1,M
6 XN1(I)=C(I)
C ЗАСЫЛКА НАЧАЛЬНОГО ЗНАЧЕНИЯ СЧЕТЧИКА ИТЕРАЦИЙ N
N=0
N1=0
C РАСЧЕТ ОЧЕРЕДНОГО n-ОГО ПРИБЛИЖЕНИЯ В МАССИВЕ XN(M)
9 DO 7 I=1,M
W=0.
DO 10 J=1,M
10 W=W+D(I,J)*XN1(J)
W=W+C(I)
7 XN(I)=W
C ВЫЧИСЛЕНИЕ НАИБОЛЬШЕЙ АБСОЛЮТНОЙ РАССЧИТАННОЙ РАЗНИЦЫ EPSRAZ
EPSRAZ=0.
DO 8 I=1,M
W=ABS(XN(I)-XN1(I))
IF(EPSRAZ.GT.W) GO TO 8
EPSRAZ=W
EPSZAD=EPS*ABS(XN(I))
8 CONTINUE
C УВЕЛИЧЕНИЕ СЧЕТЧИКА ИТЕРАЦИЙ n НА ЕДИНИЦУ
N=N+1
C ВЫВОД ПРОМЕЖУТОЧНЫХ ЗНАЧЕНИЙ РЕШЕНИЯ НА ЭКРАН
IF(K.EQ.0)GO TO 14
WRITE(5,20)N
20 FORMAT(1X,ИТЕРАЦИЯ НОМЕР ',I3)
WRITE(5,*)(XN(I),I=1,M)
C ПЕРАСЫЛКА ЗНАЧЕНИЙ ПОСЛЕДНЕЙ ИТЕРАЦИИ С МАССИВА XN(M) В МАССИВ XN1(M)
14 DO 11 I=1,M
11 XN1(I)=XN(I)
C БЛОК КОНТРОЛЯ ОКОНЧАНИЯ ВЫЧИСЛЕНИЙ В СЛУЧАЯ ПЛОХОЙ СХОДИМОСТИ
C ИТЕРАЦИОННОГО ПРОЦЕССА
IF((N-N1).LT.50)GO TO 12
N1=N
WRITE(5,354)N,EPSZAD,EPSRAZ
354 FORMAT(1X,'ПРОГРАММА ''ITER'' СОБЛЮЛА ',I4,' ИТЕРАЦИЙ/1X,
*'EPSZAD=',F10.8,' EPSRAZ=',F10.8/1X,'ДЛЯ ПРОДОЛЖЕНИЯ РАСЧЕТА ',
*'ВВЕДИТЕ 1, В ОБРАТНОМ СЛУЧАЕ - ЛЮБОЙ ЗНАК, КРОМЕ 1')
READ(5,*)N2
IF(N2.NE.1)GO TO 30
C НАДО ЛИ ПРОДОЛЖАТЬ ИТЕРАЦЫИ ПО УСЛОВИЮ ТОЧНОСТИ
12 IF(EPSRAZ.GT.EPSZAD)GO TO 9
C ЗАПIСЬ РЕЗУЛЬТАТОВ РАСЧЕТА В ВЫХОДНОЙ ФАЙЛ И ЗАКРЫТИЕ ФАЙЛА
30 WRITE(3,352)(XN(I),I=1,M)
352 FORMAT(/10X,'РЕЗУЛЬТАТЫ РАСЧЕТА:'/(6G13.6))
CLOSE(UNIT=3)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.