1 / 25

CS 415: Programming Languages

CS 415: Programming Languages. Fortran Aaron Bloomfield Fall 2005. The IBM 704. Standard Fortran joke. “GOD is REAL (unless declared INTEGER)." . Fortran I program control. IF (arithmetic expression) N1, N2, N3 DO N1 variable = first_value, last_value. Punch cards.

dallon
Télécharger la présentation

CS 415: Programming Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS 415: Programming Languages Fortran Aaron Bloomfield Fall 2005

  2. The IBM 704

  3. Standard Fortran joke • “GOD is REAL (unless declared INTEGER)."

  4. Fortran I program control • IF (arithmetic expression) N1, N2, N3 • DO N1 variable = first_value, last_value

  5. Punch cards

  6. Fortran history reference • http://www.ibiblio.org/pub/languages/fortran/ch1-1.html

  7. Installing Fortran on Windows • We’ll use Fortran 77 for this course • The compiler has “some” Fortran 90 features • Install Cygwin: http://www.cygwin.com/ • It’s a Unix-like shell for Windows • In particular, when you install it: • Install the gcc-g77 package in the Devel section • We may use Ocaml – if so, then you will need to install the ocaml package (also in Devel) • This can be done later, too • Install a good editor • I like Emacs: http://www.gnu.org/software/emacs/emacs.html • Quite a learning curve, but the best editor out there • Binaries at http://ftp.gnu.org/pub/gnu/emacs/windows/ • You can also install and use it as part of Cygwin • Tutorials can be found online

  8. Compiling a Fortran program • Edit the program using your favorite editor • All program code must start on the 7th column! • In Cygwin, change to that directory • The c drive is at /cygdrive/c, etc. • Enter the command: • g77 –ff90 file.f • Then run the file: • ./a.exe

  9. Hello world in Fortran PROGRAM HelloWorld PRINT *,'Hello world!' END PROGRAM HelloWorld Column 1 Column 7

  10. Fortran syntax • Lines can only be 72 characters long • Comments start with a ! • First 6 columns must be spaces • Unless it’s a comment • No semi-colons after each line • A newline is a statement terminator

  11. Variable declaration • The types are real, integer, etc. • real :: x, y, z • integer :: a, b, c • character :: g • Always put ‘implicit none’ at the beginning • Right after the ‘program’ line • Prevents implicit variable declaration

  12. Input and output • Output statement: • print *, "(", tri1x, ", ", tri1y, ")“ • Input statement: • read *, tri3x • There are ways to do nicely formatted output • We aren’t going over them

  13. Operators • Boolean operators: .and., .or., .not., etc. • Basically the name of the operation in periods • Boolean values are .true. and .false. • Relational operators: <, >, <=, >=, ==, /=

  14. Built-in functions • sqrt() • log() • sin() • cos() • exp() • etc.

  15. If statements • Forms are (exp is a Boolean expression): if (exp ) then ... endif if ( exp ) then ... else ... endif if ( exp ) then ... else if ( exp ) then ... else if ( exp ) then ... endif

  16. Form is: select case ( expr ) case ( value ) ... case ( value ) ... case ( value ) ... case default ... end case Where value can be: A single value (300:) A range of values (200:400) Case default is not required Case statement

  17. Form is: do i = 1, 10 ... end do do i = 1, 10, 2 ... end do The first loops from 1 to 10 The second loops from 1 to 10, but odd numbers only Looping

  18. Loop control • Exit • Exits the loop, not the program • Cycle • Similar to next or continue in other languages • Starts the next iteration of the loop

  19. ! This program allows the user to input the number of degrees in an angle ! and then computes the cosine, sine, and tangent. It continues until the ! user inputs "n" or "N". PROGRAM angle IMPLICIT none ! Type variables. REAL :: cosine, sine, tangent, degrees REAL :: pi = 3.141592 CHARACTER :: choice DO ! Enter and read the number of degrees in the angle. PRINT *, "Enter the number of degrees in the angle." READ *, degrees ! Convert number of degrees in angle to radians. degrees = degrees*(pi/180) ! Use intrinsic functions to compute values. cosine=cos(degrees) sine=sin(degrees) tangent=tan(degrees) ! Print results. PRINT *, "cosine=", cosine, " sine=", sine, " tangent=", tangent ! Give user chance to exit program. PRINT * PRINT *, "Would you like to do this again?" PRINT *,"(Press n to exit - any other key to continue.)" READ *, choice ! Exit loop if the value in choice is N or n. IF (choice == "N" .or. choice == "n") EXIT END DO STOP END PROGRAM angle Demo program • Computes the sin, cos, tan, etc.

  20. ! This program averages a series of numbers input ! from the keyboard. PROGRAM average IMPLICIT none ! Type variables. REAL :: data, sum, avg INTEGER num, i ! Prompt for and enter number of numbers to average. PRINT *,"Enter the number of numbers to average." READ *,num sum = 0.0 ! Loop goes from 1 to number of values to average. DO i = 1, num ! Prompt for and enter a number. PRINT *,"Enter a value for the number" READ *,data ! Add number to total. sum = sum + data END DO ! Calculate average. avg = sum/real(num) ! Print results. PRINT *,"The average = ",avg STOP END Demo program • Computes the average

  21. ! This program uses a function to find the average of three numbers. PROGRAM func_ave ! Type variables in main program (a, b, and c are local variables). REAL :: a,b,c,average ! Prompt for and get numbers to be averaged. PRINT *,"Enter the three numbers to be averaged." READ *, a,b,c ! Invoke function average PRINT *,"The three numbers to be averaged are ",a,b,c PRINT *,"The average of the three numbers is ", average(a,b,c) STOP END PROGRAM func_ave ! Function average REAL FUNCTION average(x,y,z) ! Type variables in function (x, y, and z are local varialbes). REAL :: x,y,z ! Function name contains the average the function calculates and returns. average = (x + y + z)/3.0 RETURN END FUNCTION average Demo program • Computes the average via a defined function

  22. Fortran gotchas • All variables must be declared at the beginning • Remember line limit of 72 characters! • Consider: • The 8th variable is named ‘ei’ • There is no 9th variable declared • No continuation lines in Fortran 77 • == is comparison for if's • Can’t seem to be able to change the values of parameters in functions integer :: first, second, third, fourth, fifth, sixth, seventh, eighth, ninth Column 72!

  23. John Backus • Chemistry major at UVA (entered 1943) • Flunked out after second semester • Joined IBM as programmer in 1950 • Developed Fortran, first commercially successful programming language and compiler

  24. IBM 704 Fortran manual, 1956

  25. Fortran issues… • Fortran language was described using English • Imprecise • Verbose, lots to read • Ad hoc DO 10 I=1.10 Assigns 1.10 to the variable DO10I Early Fortrans didn’t care about spaces! DO 10 I=1,10 Loops for I = 1 to 10 (Often incorrectly blamed for loss of Mariner-I)

More Related