program aug13 implicit none interface subroutine print_2dim_array(x) integer,dimension(:,:),intent(in)::x end subroutine end interface integer,dimension(30,20)::y integer,parameter::n=30,m=20,linelen=80,maxascii = 255,acode = 97,zcode = 122 integer::i,j,eof character(linelen)::line integer,dimension(maxascii)::charcount do i = 1,n do j = 1,m y(i,j) = i + 100*j end do end do call print_2dim_array(y(:3,:5)) print* call print_2dim_array(y(13:22,1:16)) print* call print_2dim_array(y(29:32,2:3)) charcount = 0 do read(*,'(a)',iostat = eof)line if (eof /= 0) exit call countchars(charcount,line) end do call reportchars(charcount) contains subroutine countchars(charcount,line) integer,dimension(maxascii),intent(inout)::charcount character(linelen),intent(in)::line integer::i,code character::letter do i = 1,len(trim(line)) read(line(i:i),'(a1)')letter code = iachar(letter) if (code <= zcode .and. code >= acode) then charcount(code) = charcount(code) + 1 end if end do end subroutine subroutine reportchars(charcount) integer,dimension(maxascii),intent(in)::charcount integer::code do code = acode,zcode print*,achar(code)," occurs",charcount(code),"times" end do end subroutine end program subroutine print_2dim_array(a) ! input condition: every entry of a can be printed in 4 columns ! input condition: The number of columns of a does not exceed 16 integer,dimension(:,:),intent(in)::a integer,dimension(2)::u integer::i,j character(*),parameter::form = '(i4,15(:x,i4))' u = ubound(a) do i = 1,u(1) print form,(a(i,j),j=1,u(2)) end do end subroutine