Description
Objectives
-
Getting string input
-
Designing and implementing a counted loop
-
Designing and implementing a post-test loop
-
Keeping track of a previous value
-
Implementing data validation
Problem Definition
Write a program to calculate Fibonacci numbers.
Display the program title and programmer’s name. Then prompt the user for their name and greet them (by name).
Prompt the user to enter the number of Fibonacci terms to be displayed. Advise the user to enter an integer in the range [1 .. 46].
Calculate and display all of the Fibonacci numbers up to and including the nth term. The results should be displayed 4 terms per line with at least 5 spaces between terms.
Display a parting message that includes the user’s name, and terminate the program.
Requirements
-
The programmer’s name and the user’s name must appear in the output.
-
The loop that implements data validation must be implemented as a post-test loop.
-
The loop that calculates the Fibonacci terms must be implemented using the MASM loop instruction.
-
Numeric user input must be aquired using the ReadInt Irvine procedure (as a signed integer).
-
The main procedure must be modularized into at least the following sections (procedures are not required in this program):
displayInstructions
getUserInfo
displayFibs
goodbye
-
Note that each of the above sections (introduction, displayInstructions, getUserInfo, etc) needs to have a header block explaining its purpose.
-
Recursive solutions are not acceptable for this assignment. This one is about iteration.
-
The upper limit must be defined and used as a constant.
-
The usual requirements regarding documentation, readability, user-friendliness, etc., apply.
Notes
-
It is not necessary to store the Fibonacci numbers in an array. The terms may be displayed as they are generated.
-
The second-order Fibonacci sequence is defined as:
-
-
The first two terms are both 1.
-
-
-
All other terms are calculated as the sum of the two previous terms.
-
-
The reason for restricting n to [1 .. 46] is that the 47th Fibonacci number is too big for DWORD data type.
Example Program Operation
Fibonacci Numbers
Programmed by Leonardo Pisano
What’s your name? Paul
Hello, Paul
Enter the number of Fibonacci terms to be displayed.
Provide the number as an integer in the range [1 .. 46].
How many Fibonacci terms do you want? 50
Out of range. Enter a number in [1 .. 46]
How many Fibonacci terms do you want? -6
Out of range. Enter a number in [1 .. |
46] |
|||
How many Fibonacci terms do you want? |
14 |
|||
1 |
1 |
2 |
3 |
|
5 |
8 |
13 |
21 |
|
34 |
55 |
89 |
144 |
|
233 |
377 |
Results certified by Leonardo Pisano.
Goodbye, Paul.
Extra Credit Option (original definition must be fulfilled)
(1 pt) Display the numbers in aligned columns.
Remember, in order to ensure you receive credit for any extra credit work, you must add one print statement to your program output PER EXTRA CREDIT which describes the extra credit you chose to work on. You will not receive extra credit points unless you do this. The statement must be formatted as follows…
–Program Intro–
**EC: DESCRIPTION
–Program prompts, etc–
Please refer back to the documentation for Program 1 to see a sample of the extra credit format.
Program 2 Rubric
Criteria |
Ratings |
|||
Files Correctly Submitted |
1 pts |
0 pts |
||
Submitted file is correct assignment and is an individual .asm file. |
||||
Full Marks |
No Marks |
|||
Program Assembles & Links |
2 pts |
0 pts |
Submitted program assembles and links without need for clarifying work for TA and/or |
||
Full Marks |
No Marks |
|
messages to the student. |
||
This assumes the program is actually an attempt at the assignment. Non-attempts which |
||
compile/link earn no points. |
||
Documentation – Identification Block – Header |
1 pts |
0 pts |
Name, Date, Program number, etc as per syllabus are included in Identification Block |
||
Full Marks |
No Marks |
|
Documentation – Identification Block – Program Description |
2 pts |
0 pts |
Description of functionality and purpose of program is included in identification block. |
||
Full Marks |
No Marks |
|
Documentation – Section Comments |
4 pts |
0 pts |
Code section headers describe functionality and implementation of program flow. Should |
||
Full Marks |
No Marks |
|
mirror the style guide image. |
||
Pts
-
pts
2 pts
-
pts
2 pts
4 pts
|
Criteria |
Ratings |
||
Documentation – In-line Comments |
1 pts |
0 pts |
||
In-line comments contribute to understanding of program flow (from section comments) but |
||||
Full Marks |
No Marks |
|||
are not line-by-line descriptions of moving memory to registers. |
||||
Verification – Program Executes |
5 pts |
0 pts |
||
Program executes and makes some attempt at the assigned functionality. |
||||
Full Marks |
No Marks |
|||
Completeness – Displays Programmer Name |
1 pts |
0 pts |
||
Program prints out the programmer’s name. |
||||
Full Marks |
No Marks |
|||
Completeness – Gets / Uses User’s name |
2 pts |
0 pts |
||
Receives input with ReadString. Saves input in a null-terminated BYTE array. Greets user |
||||
Full Marks |
No Marks |
|||
(e.g. “Hello, Username”) |
||||
Completeness – Displays Introduction |
1 pts |
0 pts |
||
Displays program introduction. Program introduction should describe functionality of |
||||
Full Marks |
No Marks |
|||
program. |
||||
Completeness – Prompt for Input |
2 pts |
0 pts |
||
Prompts user to enter data, specifying bounds of acceptable inputs. |
||||
Full Marks |
No Marks |
|||
Pts
1 pts
-
pts
1 pts
2 pts
-
pts
2 pts
Criteria |
Ratings |
Pts |
||||||
Completeness – Gets data from user |
1 pts |
0 pts |
||||||
Utilizes ReadInt to receive user input. Saves values in appropriately-named identifiers for |
||||||||
Full Marks |
No Marks |
1 pts |
||||||
validation. |
||||||||
Completeness – Validates User Data |
3 pts |
2 pts |
0 pts |
|||||
Validates that user-entered values are within the advertised limits. Negative values are |
||||||||
Full |
Partial validation |
No |
||||||
rejected. |
Marks |
Validates only one end or |
Marks |
3 pts |
||||
neglects to check edge cases. |
No |
|||||||
validation |
||||||||
Completeness – Displays Results |
2 pts |
0 pts |
||||||
2 pts |
||||||||
Full Marks |
No Marks |
|||||||
Completeness – Displays Closing Message |
1 pts |
0 pts |
||||||
1 pts |
||||||||
Full Marks |
No Marks |
|||||||
Correctness – Number of Terms |
2 pts |
1 pts |
0 pts |
|||||
Correct number of terms are displayed. |
||||||||
Full |
Incorrect for small numbers |
No |
||||||
Marks |
Correct number of terms for |
Marks |
2 pts |
|||||
values greater than 3, but fails for |
||||||||
one or more of the following |
||||||||
values (1, 2, 3) |
||||||||
Correctness – Calculations are Correct |
2 pts |
0 pts |
||||||
2 pts |
||||||||
Full Marks |
No Marks |
|||||||
|
Criteria |
Ratings |
||
Correctness – Numbers displayed 4 per line |
2 pts |
0 pts |
||
Numbers are displayed 4 per line on sufficiently large console window width. There should |
||||
Full Marks |
No Marks |
|||
be at least 5 spaces between each term. No points granted for implementations that |
||||
require console window be a specific size to work. |
||||
Correctness – Partial lines displayed correctly |
1 pts |
0 pts |
||
Full Marks |
No Marks |
|||
Requirements – Solution is non-recursive |
1 pts |
0 pts |
||
Full Marks |
No Marks |
|||
Upper limit is defined and used as a constant |
1 pts |
0 pts |
||
Full Marks |
No Marks |
|||
Requirements |
– Well-Modularized |
4 pts |
0 pts |
|
Program is divided into logical sections, separated by Section Comment blocks. |
||||
Full Marks |
No Marks |
|||
Requirements – Counted loop implemented with LOOP instruction |
2 pts |
0 pts |
||
Full Marks |
No Marks |
|||
Requirements – Data validation loop is post-test loop |
2 pts |
0 pts |
||
Full Marks |
No Marks |
|||
Pts
2 pts
-
pts
-
pts
-
pts
4 pts
-
pts
-
pts
|
Criteria |
Ratings |
Pts |
||||
Coding Style – Appropriately named identifiers |
2 pts |
1 pts |
0 pts |
||||
Identifiers named so that a person reading the code can intuit the purpose of a variable, |
|||||||
Full |
Partial |
No |
|||||
constant, or label just by reading its name. |
Marks |
Some identifiers are named well, |
Marks |
2 pts |
|||
with others having no relevance to |
|||||||
their functionality. |
|||||||
Coding Style – Readabilty |
2 pts |
1 pts |
0 pts |
||||
Program uses readable white-space, indentation, and spacing as per the Indentation Style |
|||||||
Full |
Marginally Readable |
No |
|||||
Guide. Logical sections are separated by white space. |
Marks |
Program is marginally readable |
Marks |
2 pts |
|||
but lacks proper alignment and |
|||||||
white space. |
|||||||
(1pt) Extra Credit for columns |
0 pts |
0 pts |
|||||
Fibonacci numbers are displayed in aligned columns. |
0 pts |
||||||
Full Marks |
No Marks |
||||||
Late |
Penalty |
0 pts |
0 pts |
||||
Remove points here for late assignments. (Enter negative point value, 15% of ‘earned’ |
Full Marks |
No Marks |
0 pts |
||||
points per day late) |
|||||||
Total Points: 50