我正在尝试在Fortran中生成两个1-D数组的交叉.
目的是使用此交集作为掩码,maxloc以便我可以将最多的几个元素从一个数组拉到另一个数组(类似于在最大堆中重复删除根的行为).
目前我只是在将索引中maxloc的值插入第二个数组后,将找到的索引处的值设置为零,但我希望Fortran有一个聪明的与掩码相关的方法.(在最大检索过程中保留原始数组也很好)
fortran 95上此程序的输出显示星号而不是数字.另外,我无法按照预期的方式打印实验#; 实验1,实验2,实验3等.相反,它打印如下; 实验1,实验1,实验1.
关于如何解决这个问题的任何想法?以下是我的整个计划.
谢谢你的时间.
PROGRAM numbersgen
IMPLICIT NONE
!Variable declaration
INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
INTEGER, DIMENSION(:),ALLOCATABLE::temparray
INTEGER:: numrolls, numexps
INTEGER:: i=0, j=0
REAL:: avg=0, sdv=0, variance=0, sum=0
INTEGER:: k, min, pos, temp
.............
------
REAL, INTENT(IN):: sum
REAL, INTENT(IN):: avg, variance, sdv
PRINT*, " "
PRINT*, "Sum: ",sum
PRINT '(1X,A,F5.3)', "Average: ",avg
PRINT '(1X,A,F5.3)', "Variance: ",variance
PRINT '(1X,A,F5.3)', "Standard Deviation: ",sdv
END SUBROUTINE
END PROGRAM
Run Code Online (Sandbox Code Playgroud) 这个fortran代码应该从txt文件中的简单矩阵表中复制数据,然后根据每行和每列的先前等级计算等级和平均值.出于某种原因,我无法获得等级或平均值打印出来,它们显示为空白或0或星标.该程序在从txt文件打印矩阵表后运行时崩溃,它表示错误是访问冲突 - 所以根本没有多大帮助.到目前为止,我的代码是:
program calculate1
real,dimension(:,:),allocatable :: a
character(200)::line
print *,'How many rows are there?'
read *,n !amount of rows
print *,'How many columns are there?'
read *,m !amount of columns
allocate (a(n+1,m+1))
open(1, file='in1.txt')
call print_out (a,n+1,m+1)
Close(1);
contains
subroutine print_out(b,n,m)
real,dimension(:,:):: b
character(200)::line(n)
character(1)::g
write(*,'(10x)',advance='no')
do j=2,m-1
write(*,100,advance='no'),'hw',j-1
enddo
100 format(a2,i2,3x)
print '(a6,a6)','exam ','grade '
do i=1,n-1 !makes rows from data
read(1,'(a)') line(i) !read from in1.txt
write(*,'(a)') line(i) !write to screen
enddo
do i=1,n !makes (m+1)th column
b(i,m+1)= …Run Code Online (Sandbox Code Playgroud) 我有一个fortran指针,指的是一些分配的内存.我想"哈希"它,以便我得到一个引用该内存的唯一数字.在C中,我将指针位置转换为整数.
我在Fortran 90中编写了一个程序,它从文本文件中读取数百个输入,并对它们执行许多不同的顺序操作.
我不想继续将这些数百个值传递给每个子程序(有很多!).有没有办法可以将我从此文件中读取的数据保存到任何子程序都可以访问的全局变量中?我想,不知何故,我可以将这些值保存到每个子程序可以调用的模块中,但我不确定如何这样做.
我正在尝试读取一个使用逗号作为分隔符的数据文件,如下所示
IPE 80,764,80.14,8.49
IPE 100,1030,171,15.92
Run Code Online (Sandbox Code Playgroud)
但是,如果我阅读使用
READ(1,*) var1, var2, var3, var4
Run Code Online (Sandbox Code Playgroud)
它将IPE和80读作不同的数据.换句话说,它将逗号和空格都计为分隔符,但我不希望这样.我怎么能告诉我的程序"嘿,空格不能只用逗号分隔!" ?
我有一个矩阵说REAL*8 MATRIX(100,100),我想从主对角线或上三角形创建一个指针。怎么做?
目的是以干净的“命名”方式轻松访问这些元素。
考虑以下短程序(Fortran95):
write(*,*) shape(2)
end
Run Code Online (Sandbox Code Playgroud)
我尝试使用 Fortran 编译器 (gfortran 4.8.2) 和 Absoft Pro Fortran 13.0.0 (mac) 运行它,我得到以下结果:
local $./a.out
local $
Run Code Online (Sandbox Code Playgroud)
更新:还尝试了 gfortran 4.4.7(具有相同结果的 linux。
以下是gfortran 中形状的文档说:
Run Code Online (Sandbox Code Playgroud)RESULT = SHAPE(SOURCE [, KIND])参数:
SOURCE 应为任何类型的数组或标量。如果 SOURCE 是一个指针,它必须被关联并且必须分配可分配的数组。返回值:
秩为 1 的 INTEGER 数组,其元素数与 SOURCE 的维数相同。结果数组的元素对应于 SOURCE 沿各自维度的扩展。如果 SOURCE 是标量,则结果是大小为零的排名一的数组。如果 KIND 不存在,则返回值具有默认整数种类,否则为指定种类。
换句话说,我只看到一个换行符而不是结果。它不应该告诉我形状是 1 吗?
如问题中所述:Fortran(90及更高版本)中的complex * 16自变量是否具有等效的DEXP?
program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter
Run Code Online (Sandbox Code Playgroud)
这是我的fortran代码的一部分.Num非常大,所以我试图将它设置为kind = 7,但由于某种原因它仍然抛出错误217 - 整数(Kind = 3)常量超出范围,对于声明num的行,即使我已经声明了num应该是善良的7.我已经有一段时间了,并且无法理解为什么它不会起作用.非常感谢帮助.我的IDE是柏拉图,带有silverfrost编译器,如果它是相关的.