我正在尝试使用FORTRAN创建pascal三角形。我做了算法。用C编译并成功但由于某种原因我在FORTRAN中得不到相同的期望结果。任何人都可以帮我解决这个问题吗?
C(工作)中的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int c, i, j, k,n;
scanf("%d",&n);
for(i=0; i < n; i++) {
c = 1;
for(j=1; j <= (n-1-i); j++) printf(" ");
for(k=0; k <= i; k++) {
printf("%2d", c);
c = c * (i-k)/(k+1);
}
printf("\n");
}
return 0;
}
FORTRAN中的代码(不工作,需要帮助):
program pascal
implicit none
integer i,j,k,p,n
read(*,*)n
i=0
do while(i.lt.n)
p=1
do j=1,n-1-i
write(*,5)
5 format(1x)
enddo
do k = 0,i
write(*,1)p
1 format(i2)
p = p*(i-k)/(k+1)
enddo
i=i+1
write(*,2)
2 format(/)
enddo
endprogram
答案 0 :(得分:1)
以下是一些可以处理n
的更大值的改进:
program pascal
implicit none
integer i,j,k,p,n
write (*, '("input n: ")', advance="no")
read(*,*) n
do i=0,n-1
p=1
do j=1,n-1-i
write(*,'(3X)', advance="no")
enddo
do k = 0,i
write(*,'(I6)', advance="no") p
p = p*(i-k)/(k+1)
enddo
write(*, '(/)')
enddo
endprogram
此程序的格式化IO对我来说似乎很简单。如果你想找出为n
的特定值输出的最大整数并输出那个案例中最紧凑的三角形,那就更复杂了......
答案 1 :(得分:0)
你可以试试这个。请注意,如果输入数字n&gt; 9,它不起作用(对于n> 5,它不那么漂亮)。
program pascal
implicit none
integer :: i, j, n, c
read(*, *) n
do i = 0, n - 1
c = 1
do j = 0, n - i
write(*, "(' ')", advance="no")
end do
do j = 0, i
write(*, "(I2)", advance="no") c
c = (c * (i - j)) / (j + 1)
end do
write(*, *)
end do
end program
在你的程序中,几乎所有内容都是正确的,除非你打印:如果你不添加可选的advance="no"
,Fortran总会添加一个新行。
关于样式,将格式放在单独的行中并不是很有用,并且.lt.
可以在Fortran 90中替换为<
。此外,您的缩进不正确内环。