Add something here ...
~kc4zvw:
Here are some links to online docs:
Sample run to example1.f90 ...
$ ./example1
Hello World!
Count Var x sin(x) cos(x) tan(x)
1 0.020 0.020 1.000 0.020
2 0.040 0.040 0.999 0.040
3 0.060 0.060 0.998 0.060
4 0.080 0.080 0.997 0.080
5 0.100 0.100 0.995 0.100
6 0.120 0.120 0.993 0.121
7 0.140 0.140 0.990 0.141
8 0.160 0.159 0.987 0.161
9 0.180 0.179 0.984 0.182
10 0.200 0.199 0.980 0.203
11 0.220 0.218 0.976 0.224
12 0.240 0.238 0.971 0.245
13 0.260 0.257 0.966 0.266
14 0.280 0.276 0.961 0.288
15 0.300 0.296 0.955 0.309
16 0.320 0.315 0.949 0.331
17 0.340 0.333 0.943 0.354
18 0.360 0.352 0.936 0.376
19 0.380 0.371 0.929 0.399
20 0.400 0.389 0.921 0.423
Date: 20230820 Time: 054558.357 Zone: -0400
Program was started on Sun Aug 20 05:45:58 2023
Finished.
Source code to example1.f90 ...
!
! program: demo a hello world example
!
! $Id: example_1.f95,v 0.3 2023/08/20 09:51:04 kc4zvw Exp kc4zvw $
!
! vim: nowrap: tabstop=3:
program greetings
implicit none
character(len=10):: time
character(len=20):: str, blank0
character(len=30) :: date_str
character(len=5):: zone
character(len=8):: date
integer(8) :: j
integer, dimension(8):: values
integer:: i, step = 1, total = 20
real:: x, sin_x, cos_x, tan_x
str = trim("Hello World!")
blank0 = trim(" ")
print *, blank0
print 100, str
print *
print 200, "Count", "Var x", "sin(x)", "cos(x)", "tan(x)"
do i = 1, total, step
x = float(i) / 50.0
sin_x = sin(x)
cos_x = cos(x)
tan_x = tan(x)
print 300, i, x, sin_x, cos_x, tan_x
enddo
! using keyword arguments
call date_and_time(date, time, zone, values)
print *
print 400, date, time, zone
! Do something, print a formatted date
j = time8()
call ctime(j, date_str)
print *
print 600, date_str
print *
print 700
100 format(A20)
200 format(A10,A12,A12,A12,A12)
300 format(I10,4F12.3)
400 format('Date: ',A,2X,'Time: ',A,2X,'Zone: ',A)
500 format(8I5)
600 format('Program was started on ', A)
700 format('Finished.')
end program greetings
!
! %%%%% End of File %%%%%
Add something here ...
Sample run to heapsort.f90 ...
A program to heapsort an array of real numbers.
Unsorted array:
0.358408 0.599746 0.329966 0.207517 0.703741
0.582223 0.985021 0.626306 0.911676 0.233120
0.227876 0.379826 0.954987 0.942881 0.339799
0.000142 0.918284 0.683852 0.382026 0.134266
0.665749 0.622566 0.116516 0.745471 0.884241
0.530282 0.004936 0.357033 0.142322 0.601230
0.307378 0.602164 0.596452 0.788840 0.712550
0.068321 0.394793 0.144145 0.904997 0.551590
0.086836 0.598405 0.819727 0.836621 0.379922
0.772235 0.556733 0.153416 0.664931 0.540930
Sorted array:
0.000142 0.004936 0.068321 0.086836 0.116516
0.134266 0.142322 0.144145 0.153416 0.207517
0.227876 0.233120 0.307378 0.329966 0.339799
0.357033 0.358408 0.379826 0.379922 0.382026
0.394793 0.530282 0.540930 0.551590 0.556733
0.582223 0.596452 0.598405 0.599746 0.601230
0.602164 0.622566 0.626306 0.664931 0.665749
0.683852 0.703741 0.712550 0.745471 0.772235
0.788840 0.819727 0.836621 0.884241 0.904997
0.911676 0.918284 0.942881 0.954987 0.985021
End of program.
Source code to heapsort.f90
C *************************************************************************
C ***
C *** Author: David Billsbrough
C *** Created: Monday, August 21, 2023 at 12:18:44 PM (EDT)
C *** License: GNU General Public License -- version 2
C *** Version: $Revision: $
C *** Warranty: None
C *** Purpose: An example of the heapsort algorithm in FORTRAN-90
C ***
C *************************************************************************
! $Id: heapsort.f90,v 0.3 2023/03/10 14:15:38 kc4zvw Exp kc4zvw $
program Heapsort_Demo
implicit none
integer, parameter:: num = 50
real:: array(num)
character(len = 60):: title_str, footer
character(len = 30):: header1, header2
call random_seed
call random_number(array)
title_str = trim("A program to heapsort an array of real numbers.")
header1 = trim("Unsorted array:")
header2 = trim("Sorted array:")
footer = trim("End of program.")
print *
print 100, title_str
print *
print 200, header1
call display_numbers(array)
call heapsort(array)
print 200, header2
call display_numbers(array)
print 100, footer
100 format(A60)
200 format(A30/)
contains
subroutine heapsort(a)
real, intent(in out):: a(0:)
integer:: start, n, bottom
real:: temp
n = size(a)
do start = (n - 2) / 2, 0, -1
call siftdown(a, start, n);
end do
do bottom = n - 1, 1, -1
temp = a(0)
a(0) = a(bottom)
a(bottom) = temp;
call siftdown(a, 0, bottom)
end do
end subroutine heapsort
subroutine siftdown(a, start, bottom)
real, intent(in out):: a(0:)
integer, intent(in):: start, bottom
integer:: child, root
real:: temp
root = start
do while (root * 2 + 1 < bottom)
child = root * 2 + 1
if (child + 1 < bottom) then
if (a(child) < a(child + 1)) child = child + 1
end if
if (a(root) < a(child)) then
temp = a(child)
a(child) = a(root)
a(root) = temp
root = child
else
return
end if
end do
end subroutine siftdown
subroutine display_numbers(a)
real, intent(in out) :: a(0:)
integer :: start, n
n = size(a)
do start = 0, n - 1, 1
write(*, 100, advance='no') a(start)
if (mod(start, 5) == 4) write(*,*)
end do
write(*,*)
100 format(' ', F12.6)
end subroutine display_numbers
end program Heapsort_Demo
! ***** End of File *****
Add something here ...