彭国伦Fortran95程序源码

源代码在线查看: input.f90

软件大小: 62089 K
上传用户: xinlanwj1226
关键词: Fortran 95 程序源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				! Interactive的绘图范例
				! By Perng 1997/9/20
				program Plot_Sine
				use DFLIB
				implicit none
				  logical :: result
				  integer :: input		
				  type(WindowConfig) :: wc
				  real(kind=8), external :: f1,f2,f3	! 所要绘的函数
				  ! 打开输入用的窗口
				  open(unit=5,file='user',iofocus=.true.)
				  ! -1 代表由程序自行去做决定
				  wc.numxpixels=300 ! 窗口的宽
				  wc.numypixels=300 ! 窗口的高
				  wc.numtextcols=-1 ! 每行可容纳的文字
				  wc.numtextrows=-1 ! 可以有几列文字
				  wc.numcolors=-1	! 可以使用的颜色
				  wc.title="Input Area"C ! 窗口的标题文字
				  wc.fontsize=-1	! 所使用的文字大小
				  ! 根据wc中所定义的数据来重新设定窗口大小
				  result=SetWindowConfig(wc) 
				  result=DisplayCursor($GCURSORON) ! 显现出游标
				  ! 打开绘图所要使用的窗口
				  open(unit=10,file='user',iofocus=.true.)
				  wc.numxpixels=300 ! 窗口的宽
				  wc.numypixels=300 ! 窗口的高
				  ! -1代表让程序自行去做决定
				  wc.numtextcols=-1	! 每行容量的文字
				  wc.numtextrows=-1	! 可以有几列文字
				  wc.numcolors=-1	! 使用多少颜色
				  wc.title="Plot Area"C ! 窗口的标题
				  wc.fontsize=-1
				  ! 根据wc中所定义的数据来重新设定窗口大小
				  result=SetWindowConfig(wc)
				  ! 程序自我按下菜单中Windows的Tile命令, 使两个窗口之间
				  ! 不会互相重叠
				  result=ClickMenuQQ(QWIN$TILE) 
				  input=1 ! 随便给一个合理的值, 不然不能进入下面的循环
				  ! 把输入使用的窗口设为可以被输入的状态, 5就是第一次打开
				  ! user时所用的unit值
				  result=FocusQQ(5) 
				  do while( input>0 .and. input				    write(5,*) '(1) Plot f(x)=sin(x)'
					write(5,*) '(2) Plot f(x)=cos(x)'
					write(5,*) '(3) Plot f(x)=(x+2)*(x-2)'
					write(5,*) 'Other to EXIT'
					read(5,*) input
					result=SetActiveQQ(10) ! 把绘图命令指定到绘图窗口的代码上
					! 根据input来决定要画出那一个函数
					select case(input)
					case (1)
					  call Draw_Func(f1)
					case (2)
					  call Draw_Func(f2)
					case (3)
					  call Draw_Func(f3)
					end select
				  end do
				  ! 设定主程序代码结束后,窗口会自动关闭
				  result=SetExitQQ(QWIN$EXITNOPERSIST)
				end program Plot_Sine
				
				subroutine Draw_Func(func)
				use DFLIB
				implicit none
				  integer, parameter :: lines=500	! 用多少线段来画函数曲线
				  real(kind=8), parameter :: X_Start=-5.0	! x轴最小范围
				  real(kind=8), parameter :: X_End=5.0		! x轴最大范围	
				  real(kind=8), parameter :: Y_Top=5.0		! y轴最大范围 
				  real(kind=8), parameter :: Y_Bottom=-5.0	! y轴最小范围
				  integer :: result			! 取回绘图函数运行状态
				  integer(kind=2) :: color	! 设定颜色用
				  real(kind=8) :: step		! 循环的增量
				  real(kind=8) :: x,y		! 绘图时使用,每条小线段都连接
				  real(kind=8) :: NewX,NewY	! (x,y)及(NewX,NewY)
				  real(kind=8), external :: func ! 待绘图的函数
				  type(wxycoord) :: wt		! 返回上一次的逻辑坐标位置
				  type(xycoord)  :: t		! 返回上一次的实际坐标位置
				
				  call ClearScreen($GCLEARSCREEN) ! 清除萤幕
				  ! 设定逻辑坐标范围大小	
				  result=SetWindow( .true. , X_Start, Y_Top, X_End, Y_Bottom )
				  ! 用索引值的方法来设定颜色
				  result=SetColor(2)   ! 默认的2号是应该是绿色
				  call MoveTo(10,20,t) ! 移动画笔到窗口的(10,20)
				  
				  ! 使用全彩RGB 0-255的256种色阶来设定颜色
				  color=RGBToInteger(255,0,0)		! 把控制RGB的三个值转换到color中
				  result=SetColorRGB(color)			! 利用color来设定颜色
				
				  call MoveTo_W(X_Start,0.0_8,wt)	! 画X轴
				  result=LineTo_W(X_End,0.0_8)		! 
				  call MoveTo_W(0.0_8,Y_Top,wt)		! 画Y轴
				  result=LineTo_W(0.0_8,Y_Bottom)	! 	
				  step=(X_End-X_Start)/lines		! 计算小线段间的X间距
				  ! 参数#FF0000是使用16进制的方法来表示一个整数
				  result=SetColorRGB(#FF0000)		 
				  ! 开始绘制小线段们
				  do x=X_Start,X_End-step,step
				    y=func(x)		! 线段的左端点
					NewX=x+step		
					NewY=func(NewX)	! 线段的右端点
					call MoveTo_W(x,y,wt)
					result=LineTo_W(NewX,NewY)
				  end do
				  ! 设定程序结束后,窗口会继续保留
				  result=SetExitQQ(QWIN$EXITPERSIST)
				end subroutine Draw_Func
				! 所要绘图的函数
				real(kind=8) function f1(x)
				implicit none
				  real(kind=8) :: x
				  f1=sin(x)
				  return
				end function f1
				real(kind=8) function f2(x)
				implicit none
				  real(kind=8) :: x
				  f2=cos(x)
				  return
				end function f2
				real(kind=8) function f3(x)
				implicit none
				  real(kind=8) :: x
				  f3=(x+2)*(x-2)
				  return
				end function f3			

相关资源