Курс лекций по дисциплине Программирование на языке Фортран
Скачать 0.98 Mb.
|
. SCALE(X,I) – возвращает вещественное значение с параметром типа как у Х, равное Xbi, где b – основание в модели для Х, i – аргумент целого типа. SET_EXPONENT(X,I) – возвращает вещественное значение с параметром типа, как у Х, дробная часть которого равна дробной части модельного представления Х, а степенная часть равна i, т.е. Xbi-e. SPACING(X) – возвращает вещественное значение с таким же параметром типа, как у Х, равное абсолютному расстоянию между числами модели в области Х, т.е. be-p. Процедуры для работы с битами Целое число содержит S битов Wk, k=0, 1, ...,S-1 считая справа налево. Прообраз этой модели – неотрицательная величина . BIT_SIZE(I) – сообщает сколько битов требуется для битовой модели целого числа с таким же параметром типа, как у I. Результат – целая величина. BTEST(I,POS) – возвращает логическое значение .TRUE., если бит с номером POS целого аргумента I имеет значение 1 и .FALSE. в противном случае. POS – целый. IAND(I,J) – возвращает логическое И между соответствующими битами аргументов I и J согласно таблице:
Функции для умножения векторов и матриц DOT_PRODUCT(Vector_A,Vector_B) – воспринимает в качестве аргументов одномерные массивы одинакового размера. Возвращает SUM(Vector_A*Vector_B), если Vector_A относится к целому или вещественному типу, SUM(CONJG(Vector_A)*Vector_B), если Vector_A комплексного типа, и ANY(Vector_A.AND.Vector_B), если Vector_A – логического типа. MATMUL(Matr_A,Matr_B) – выполняет умножение матриц. А) Matr_A – (n,m), а Matr_B – (m,k). Тогда результат имеет форму (n,k), а значение элемента (i,j) равно SUM(Matr_A(i,:)*Matr_B(:,j)). Б) Matr_A – (m), а Matr_B – (m,k). Результат имеет форму (k), а значение элемента (j) равно SUM(Matr_A*Matr_B(:,j)). В) Matr_A – (n,m), Matr_B – (m). Результат имеет форму (n), а значение элемента (i) равно SUM(Matr_A(i,:)*Matr_B). В случае логических аргументов формы будут такими же, как и для числовых аргументов, а значения определяются приведенными выше выражениями с заменой в них «SUM» на «ANY» и «*» на «.AND.». ALL(M) – возвращает логическое значение истина, если все элементы логического массива М истинны или его размер равен нулю, иначе возвращается значение ложь. ANY(M) – возвращает логическое значение истина, если хотя бы один из элементов логического массива М является истинным, и значение ложь, когда ни один из элементов логического массива М не является истинным или размер массива равен нулю. COUNT(M) – возвращает целую величину, равную числу элементов логического массива М, имеющих значение истина. MAXVAL(A) (MINVAL(A)) – возвращает максимальное (минимальное) значение элемента целого или вещественного массива А. PRODUCT(A) – возвращает произведение элементов целого, действительного или комплексного массива. Если размер массива А ноль, то выдается значение 1. SUM(A) – возвращает сумму элементов целого, вещественного или комплексного массива. Если размер A=0, то значение равно ноль. П: SUM(A,Mask=A>0) – просуммирует положительные элементы массива А. Mask влияет только на значение функции и не оказывает влияния на вычисление аргументов, представляющих собой выражения-массивы. Справочные функции для массивов ALLOCATED(Array) – возвращает значение .TRUE., если выделяемый массив Array в данный момент выделен, и .FALSE. – иначе. LBOUND(AR[,DIM]) – если DIM отсутствует, то возвращается стандартный целый одномерный массив, содержащий нижние границы. Если аргумент DIM задан, то он должен быть целым скаляром, а результатом будет стандартный целый скаляр, содержащий нижнюю границу индекса DIM. SHAPE(Source) – возвращает стандартный целый одномерный массив, содержащий форму массива или скаляра Source. В случае скаляра результат равен нулю. SIZE(Array[,DIM]) – возвращает скалярное стандартное целое, равное размеру массива Array или, если присутствует скалярный целый аргумент DIM, размеру экстента по индексу DIM. UBOUND(Array[,DIM]) – подобна LBOUND, но возвращает верхние границы. MERGE(TS,FS,MASK) – аргумент TS может иметь любой тип, при этом FS обязан иметь такой же тип и параметры типа. Аргумент MASK должен быть логического типа. Результат равен TS, если MASK имеет истинное значение, и FS – иначе. Применяется, обычно, для случая 3-х аргументов-массивов, имеющих одну и ту же форму, когда TS и FS сливаются под управлением MASK. PACK(AR,MASK[,Vector]) – если Vector отсутствует, возвращается одномерный массив, содержащий элементы AR, соответствующие истинным элементам MASK, в порядке их следования. MASK может быть и скаляром со значением истина – тогда будут выбраны все элементы AR. Если Vector задан, то это должен быть одномерный массив того же типа и с такими же параметрами типа, как у Array. Пропущено. См. конспект2 TRANSPOSE(Matrix) – возвращает массив того же типа и с такими же параметрами типа, как у двумерного массива Matrix. Элемент (i,j) результата равен Matrix(j,i) (т.е. транспонирование матрицы двумерного массива). MAXLOC(Array[,MASK]) (MAXLOC(Array[,MASK])) – находят положение максимальных и минимальных значений в целом или вещественном массиве.
implicit none ! Запрещение неявного объявления ! Программа открытия файла и построчного считывания с него текста заданной ширины (20 позиций) integer out,scr,i integer n ! Количество строк в файле integer check ! Контроль открытия файла parameter(out=3,scr=5) character*20 id(100) ! Можно использовать оператор allocate ! для динамического задания массива размерностью n character*1 ch ! Управляющий символ character*12 fname ! Имя файла logical existent ! Переменная существования файла 9 write(scr,*)'Данные вводить из файла (Y/N)?' read(scr,'(a\)')ch if (ch.eq.'y'.or.ch.eq.'Y') then 10 write(scr,*)'Введите имя файла исходных данных (Ctrl+Break - выход)' read(scr,'(a\)')fname inquire(file=fname,exist=existent) ! Запрос о существовании файла if (.not.existent) then ! Ниже - обрезание хвостовых пробелов write(scr,*)'Файл ',fname(:len_trim(fname)),' не найден' goto 10 end if ! Считывание поля шириной 20 символов. Исходные данные считываются ! в символьном виде! check=0 ! Начальное значение open(out,file=fname,err=11,iostat=check) i=0 do while(.not.eof(out)) read(out,*) ! Фиктивное построчное считывание i=i+1 ! Подсчет количества строк в файле end do n=i write(scr,'(1x,a,i2)')'Количество строк n=',n rewind(out) ! Репозиционирование считывания read(out,'(100(a20/))') (id(i),i=1,n-1) ! Считывание в массив close(out) ! Построчный вывод считанных данных на экран write(scr,'(100(a/:))') (id(i),i=1,n) ! : - обрыв формата при окончании списка вывода 11 if(check.ne.0) write(scr,*)'Ошибка при открытии файла' else if (ch.eq.'n'.or.ch.eq.'N') then write(scr,*)'Ввод с клавиатуры...' else write(scr,*)'Неверно введен символ. Повторите ввод...' goto 9 end if read* end Для того чтобы считать значения вещественного типа, необходим массив id вещественного типа и соответствующая строка формата при считывании: read(out,'(100(g20.5/))') (id(i),i=1,n-1) ! Считывание в массив Ограничение ширины поля считывания особенно полезно при считывании значений, т.к. можно добавить необходимые примечания в файл ! File: Triang_.for ! Программа определения площади, статического момента, осевого момента инерции и ! центробежного момента инерции произвольной фигуры (составленной из ! треугольников) относительно произвольных осей implicit NONE Integer n Integer i,j Real A,Sx,Ix,Ixy Real tmp real F [ALLOCATABLE](:) ! Площади треугольника real x [ALLOCATABLE](:,:) real y [ALLOCATABLE](:,:) write(5,*)'Введите количество треугольников' Read (5,*)n allocate (F(n),x(n,6),y(n,6)) write(5,*)'Введите координаты углов треугольников (x,y)' do i=1,n write(5,'(A,i3)')' Треугольник ',i do j=1,3 write(5,'(2(A,i1,A))')' x(',j,')','y(',j,')' read(5,*) x(i,j),y(i,j) end do end do do i=1,n F(i)=0. ! Обнуление end do ! Площадь фигуры A=0. do i=1,n F(i)=F(i)+x(i,1)*y(i,2)+x(i,2)*y(i,3)+x(i,3)*y(i,1)- > x(i,1)*y(i,3)-x(i,2)*y(i,1)-x(i,3)*y(i,2) F(i)=0.5*F(i) A=A+F(i) end do write(5,*)'Площадь фигуры',abs(A) do i=1,n y(i,4)=0.5*(y(i,1)+y(i,2)) y(i,5)=0.5*(y(i,1)+y(i,3)) y(i,6)=0.5*(y(i,2)+y(i,3)) end do ! Статический момент, осевой и центробежный Sx=0. ! Тестовый пример. начало координат в левом нижнем углу Ix=0. ! прямоугольника 2х3 Ixy=0. ! Координаты: (2,0) (0,0) (0,3);(0,3) (2,3) (2,0) do i=1,n ! A=6, Ix=b*h**3/3=18, Sx=1.5*6=9 tmp=abs(F(i)/3.) Sx=Sx+tmp*(y(i,4)+y(i,5)+y(i,6)) Ix=Ix+tmp*(y(i,4)**2+y(i,5)**2+y(i,6)**2) Ixy=Ixy+tmp*(x(i,4)*y(i,4)+x(i,5)*y(i,5)+x(i,6)*y(i,6)) end do write(5,*)'Статический момент',Sx write(5,*)'Осевой момент',Ix write(5,*)'Центробежный момент',Ixy Read* End Геометрические характеристики треугольника получены методом численного интегрирования с использованием весовых коэффициентов для точек. Число точек к=6, степень полинома n=2, весовые коэффициенты: 1=2=3=0, 4=5=6=F/3. , где , , . , |