Details of homework assignments and Quiz

Contents

  • General Requirements
  • Operating System Commands
  • HW1 Make change
  • HW2 Bank account
  • HW3 Bank account with sort
  • HW4 Printer Plot
  • HW5 Pairs, concentration game
  • Quiz 1
  • HW6 Binary trees
  • HW7 Balanced binary trees
  • HW8 Namelist input and formatting
  • HW9 Read and write random disk
  • HW10 Dining philosophers
  • Quiz 2
  • Other important links
  • General Requirements

    You can discuss homework with other class members but DO NOT COPY!

    
      Use new Fortran 95 style, no "old" statement types
    
      Start each file with a set of comments:
            ! .f90
            !
            ! 
            !
            !   
    
      Use indentation in each construct
    
      Ask questions of instructor or others, do the programming yourself
    
      Ask if you can not fix a compiler error quickly
    
      Ask for help in finding bugs ( after you try to fix them )
    
      Use the Fortran 95 Handbook to look up statements
    
      Use Compact Summary of Fortran 95 to look up key words
    
    

    Operating System Commands

    
    Unix (IRIX, AIX, HPUX, Linux, etc.) commands
    
       mkdir homework       # create a subdirectory named  homework
       cd  homework         # change directory to  homework
       rm -f junk.txt       # delete file junk.txt
       mv abc.txt pqr.f90   # rename a file
       cp abc.txt pqr.f90   # copy a file
    
       emacs  make_change.f90  # pick an editor and learn it
       xemacs make_change.f90
       vi     make_change.f90
       vim    make_change.f90
    
    
       f90 -o make_change  make_change.f90       to compile and link
       make_change                               to run
       make_change > make_change.out             output to a file
       
       bank < bank.dat > bank.out                input from file, output to
    
       f90 -c module1.f90
       f90 -c module2.f90
       f90 -o main main.f90 module1.o module2.o
    
       write a floppy disk with    tar -cvf /dev/fd0  *
       read  a floppy disk with    tar -xvf /dev/fd0
       file transfer with          ftp a.b.c.d
                                   
                                   
                                   get  file.ext    or   put file.ext
                                   mget *           or   mput *
                                   ...
                                   quit
    
    
      print a file                 lpr  bank.f90
                                   lpr  bank.out
    

    HW1 Make Change

    
    Problem 1     Make change using "if" statements
    
         Write a Fortran 90 program that makes change.
         Input a number from 1 to 99 that is the number of cents US.
         Output the most of the biggest coins to equal the input number.
             1 Dollar  = 100 cents
             1 Quarter =  25 cents
             1 Dime    =  10 cents
             1 Nickel  =   5 cents
             1 Penny   =   1 cent
         Read from keyboard, write to screen
         Do not print out coin if none (zero) are needed
         Starter code can be copied from  make_change.f90
         Test on    99, 90, 76, 75, 74, 55, 41, 30, 25, 10, 5, 1
    
         Then test on bad data   -99,  -1,  0,  100,  1000    abc  7.7
    
         The output should look like this for input 41
            1 Quarter
            1 Dime
            1 Nickel
            1 Penny
    
         The output should look like this for input 76
            3 Quarter
            1 Penny
    
    
    Problem 1a     Make change using non advancing write
    
         Modify Problem 1 to use non advancing write
         Put all the results on one line, again do not print zero values
         Same test data
    
         The output should look like this for input 41
            1 Quarter   1 Dime   1 Nickel   1 Penny
    
         The output should look like this for input 76
            3 Quarter   1 Penny
    
    
    Problem 1b    Make change using input from a disk file
    
         Replace the read statement with a modified read statement
         that reads from a disk file.
         Create a file make_change.dat
         Put the test data from Problem 1 into this file, one item per line,
         the good data followed by the bad data, put 99 at the end to be sure
         your program read all the data
    
    

    HW2 Bank Account

    
    Problem 2    Bank account
    
        This will use more input/output, more arrays, internal subprograms,
        character handling and more.
    
        Write a complete Fortran 90 program that is a single file
        with a program and two contained (internal) procedures that
        compiles and executes with no errors or warnings.
    
        Write a Fortran 90 program to simulate a simple bank.
        You may use the skeleton program that is attached
        or do your own from scratch. The skeleton program may
        be copied from bank.f90,
        data from bank.dat.
        Each input line contains a simple bank activity:
    
                     JOHN DOE   OPEN     10.00   opens an account
                     JIM JONES  OPEN     37.50   opens an account
                     JOHN DOE   DEPOSIT   5.00   deposits $5
                     JIM JONES  WITHDRAW  7.50   withdraws $7.50
                     JOHN DOE   CLOSE     0.00   closes his account
                     MARY SMITH OPEN     20.00   open another account
    
         At the end of the run, print out the status of
         the open accounts. For the data above, print something like:
    
              JIM JONES     $  30.00
              MARY SMITH    $  20.00
    
         BE REASONABLE Give error message:
                       if opening an open account
                       if closing a non open account
                       if overdrawing
                       if depositing a negative amount, etc.
    
         Physically delete closed accounts to be ready for
         the next problem.
    
    
    Problem 2a   Bank account with full error checking
    
        Improve the BANK.F90 program in Problem 5 to take the full data set.
        Add some more test cases to BANK.DAT with both good and bad data.
    
        Test the program.
    
        Sample data for Problems 2,3    bank.dat  (add more tests as desired)
    
        JOHN DOE   OPEN     10.00   opens an account
        JIM JONES  OPEN     37.50   opens an account
        JOHN DOE   DEPOSIT   5.00   deposits $5
        JIM JONES  WITHDRAW  7.50   withdraws $7.50
        JOHN DOE   CLOSE     0.00   closes his account
        MARY SMITH OPEN     20.00   open another account
        AARON ADD  OPEN     99.00   should sort first
        ZEB ZZEPT  OPEN     99.00   should sort last
        BAD TRANS  FOUL      1.00   bad transaction
        NOT OPEN   CLOSE     1.00   bad, not open
        MARY SMITH OPEN     15.00   no Mary, its open
        MARY SMITH DEPOSIT  -5.00   no Mary, try again
        MARY SMITH WITHDRAW -5.00   no Mary, positive !
        JOHN DOE   DEPOSIT   5.00   not open
        JIM JONES  WITHDRAW 99.99   too much, reject
        JOHN DOE   OPEN     99.00   back again, OK
        VERY BAD   OPEN     -9.99   no Very, positive
    
    
    Problem 2b
    
         Write an external function "factorial" to compute integer
         N factorial
    
         use the   recursive function factorial(n) result(fact)   construct
         0! = 1    1! = 1   2! = 2  3! = 6   4! = 24   etc.
    
         Write a main program to test your factorial function.
         This must be in another file and must have an interface construct
    
         Test by using a do loop from 0 to 20
    
         Print out N and N! in the do loop
    
         Notice when it starts giving wrong answers!
         It may even hang in an infinite loop if you did not protect
         yourself!
    
         do not use  print *, n, factorial(n)      ! it dies in DEC F90
         use write(6,fmt="(2i30)")n, factorial(n)  ! or some variation
    
    

    HW3 Bank account with sort

    
    Problem 3  Bank account with sort
    
        Create a module and use the module in BANK.F90
    
        Take the file  test_heapsort.f90 and run it to be sure you think it works.
        This is a good quality n log n sort, better than quicksort on some
        data.  This version sorts a single array of integers.
    
        Now, create a module with subroutine HeapSort in it.  Modify HeapSort
        to simultaneously sort two arrays, an array of character strings and
        an array of real numbers.
    
        Modify the bank account program from Problem 6
        to  USE  your module to sort the account name / balances data.
     
        At the end of the run, print out the status of
        the open accounts. First unsorted, then sorted by
        calling the HeapSort subroutine in the module.
    
        Add or rearrange data so that unsorted data BANK.DAT is
        not in sorted order by account name.
    
        Remember to compile both bank.f90 and heapsort.f90 and link both
    
        f90 -o bank.f90 heapsort.f90
    
        Save the results of the final run on a file.
        bank < bank.dat > bank.out
    
    
    Problem 3a       Bank account with derived type
    
        Now change your latest version of bank.f90 to use a single array of
        fifty (50) elements, where the element is a derived type having
        an account name and balance.  See the example  prog1.f90 and 
        MODULE1.F90 for help with the derived type and module setup.
    
        The HeapSort needs to be changed again.  Remember to only sort on
        the account name.  When interchanging, only one element is used,
        closer to the original version of HeapSort.  You can start from
        the original version if you wish.
    
        The same data can be used.
    
    

    HW4 Printer plot

    
    Problem 4       Add line drawing subroutine to the printer plot
                    module.  Be sure to test it on horizontal, vertical,
                    and sloped lines.
    
    
    Problem 4a      Add another test case with your data to the
                    LUP decomposition program.
                    Add a print routine that makes all the output
                    matrices look like normal matrices.
                    This can use a named format character string
                    where you change the format based on the size
                    of the matrix.  Remember, you can use
                    read(,fmt=)  to
                    convert from integer to character string.
    
    

    HW5 Concentration game

    
    Problem 5       Concentration game for VT100
    
        Write a Fortran 90 program that simulates the game of
        "Concentration".  The screen initially looks like this:
    
                A     B     C     D     E          Turns  ddd
    
          1     X     X     X     X     X          Found   dd
    
          2     X     X     X     X     X          Won      0
    
          3     X     X     X     X     X
    
          4     X     X     X     X     X
    
         Hidden behind each  X  is a digit  0, 1, 2, 3, 4, 5, 6, 7, 8, or 9
         in some random position. There are exactly two of each digit.
         The game is played by choosing an  X  to show the digit behind.
         The player would type in, for example, 2D, then the program would
         expose the digit, replace the  X  by  the digit in the second row
         and fourth column.  Suppose the digit was a 7.  The player must
         now guess the row and column of the other 7.  If the player guesses
         correctly, both 7's remain exposed.  If the player guesses wrong,
         the wrong guess is exposed for 3 seconds, then both the 7 and the
         wrong guess are covered up with an  X.
    
         After each pair of selections, the number of Turns is incremented
         by one.  After a pair is matched, the Found count is incremented.
         When all pairs are found, Turns and Found are set to zero and
         the number of games Won is incremented. The program deals another
         random set of pairs and the player can start the next game.
         CTRL-Z, an end of file, ends the game.
    
         You are not allowed to write down where the numbers are located.
         You have to "Concentrate" and remember which numbers are in what
         locations.  Good luck!
    
    

    HW5 Quiz 1

     Quiz covers: HW1 through HW4
                  Reading assignments
                  Lectures 1 trhough 5
    

    HW6 Binary trees

    
    
    

    HW7 Balanced binary trees

    
    
    

    HW8 Namelist input and formatting

    
    
    

    HW9 Read and write random disk

    
    
    

    HW10 Dining philosophers

    
    
    

    HW5 Quiz 2

      The quiz covers:  HW1 through HW9
                        Reading assignments
                        Lecture material
    

    Last updated 4/14/06