gpt4 book ai didi

printing - 如何限制 Fortran 中每行要打印的字符数?

转载 作者:行者123 更新时间:2023-12-02 00:50:07 26 4
gpt4 key购买 nike

这是我用 Fortran 编译的程序。它为偶数和奇数计算两个不同的公式,并在结果为 1 时停止。例如,如果我选择 N = 50,我会在同一行中显示所有值。我希望每行最多打印 40 个字符(包括数字和逗号)。我还需要存储最后的数字 (4,2,1),但我不知道如何存储。

这就是我编译程序时得到的结果。

50, 25, 76, 38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1,

这就是我想要的(每行 40 个字符):

50, 25, 76, 38, 19, 58, 29, 88, 44, 22,

11, 34, 17, 52, 26, 13, 40, 20, 10, 5,

16, 8, 4, 2, 1,

program numbers
implicit none

integer(kind=4) :: i, n

print*,'Enter the N value'

read*, n

do while (n.ne.1)
if (mod(n,2) .eq.0) then
n = n/2
write(6,'(i0,a)',advance='no') n,','
else if (mod(n,2) .ne.0) then
n = (3*n)+1
write(6,'(i0,a)',advance='no') n,','
else
cycle
end if
end do

end program numbers

最佳答案

您可以告诉编译器在给定数量的字符后换行,但这也会在中号处换行。如果你想避免这种情况,你可以只计算字符数。也许最简单的方法是写入字符串并使用 len_trim 计算出它的长度。为了保留最后三个数字,您可以使用一个长度为 3 的数组,并将一个数字放入当前迭代模 3 的索引中。

可能是这样的:

program numbers
implicit none

integer :: i, n
integer :: rowlen
integer :: last(0:2)
character(len=40) :: numstring = ''

print*,'Enter the N value'

read*, n

last(0) = n
write(numstring, '(i0)') n
rowlen = len_trim(numstring)
write(*,'(a)', advance='no') trim(numstring)

do i=1,3*n
if (mod(n,2) == 0) then
n = n/2
else
n = (3*n)+1
end if

write(numstring, '(a,i0)') ', ', n
rowlen = rowlen+len_trim(numstring)
if (rowlen > 39) then
write(*,'(a)') ','
write(numstring, '(i0)') n
rowlen = len_trim(numstring)
end if
write(*,'(a)', advance='no') trim(numstring)

last(mod(i,3)) = n

if (n == 1) EXIT
end do

write(*,*) ''
if (i > 2) then
write(*,*) 'Last three numbers:', last(mod(i-2,3)), &
& last(mod(i-1,3)), &
& last(mod(i,3))
end if

end program numbers

关于printing - 如何限制 Fortran 中每行要打印的字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com