There are two problems you are required to solve as part of this assignment. Both require some knowledge about finite automata, and both are meant to have you learn more about FAs.
A number is said to be represented in scientific notation if it is in the form of:
number = s * (r^exp)
where number is the number in the scientific notation, s is called the significand, r is the radix (or base), and exp is the exponent. The number is said to be in normal form when the significand meets the criteria:
1 <= s < r
This rule implies that, for decimal numbers with no leading zeros, the decimal point always occurs at the right of the first significant symbol.
Ex: 23.24 is not in scientific normal form (SNF) since the base and the exponent are missing. 23.23*10^0 is not in SNF since the significand (23.24) is larger than the base 2.324*10^1 is a number in SNF: the significand (2.324) is larger than 1 and smaller than 10, and it is multiplied by the base (10) raised at some power (1).
For practical and historical reasons, numbers in scientific notation are entered in computers in a slightly different format: the base (understood to be 10) is replaced by a e or a E, and the caret sign (^) is omitted. For computer purposes, a number like 23.24 will be represented as 2.324e1 in SNF. Note that the number may have a leading sign (+ or -), and that the exponent itself can have a sign. The same number (23.24) can also be represented as +2.324e+1 where both the sign of the number and the sign of the exponent are present.
Your program will read a string from the keyboard and will decide whether the string represents a number in SNF or not. Note that you must make the decision regardless of whether the number is actually representable in the computer or not. For instance 1.414213562373095048801688724209698078569671875376948073176679737e0 would be a perfectly valid input to your program; however, you never get this many significant bits in any common computer representation.
If you like to think of programs as being something useful (beyond the learning experience), then you can imagine your program is part of a package which is used to train students in Computer Science: your program will then do part of the training which refers to number formats.
Think of simulating a security installation. The installation has a keypad and an engine (a controller) used to decide whether the user has entered the correct access key or not. To keep things simple the keypad has only two keys, one labeled with '0' and another one labeled with '1'. The security engine will unlock the lock when it finds the correct access code in the input string. For example, let's assume that the access code is 110100. If the user enters the string 010111010010101, then the lock will be unlocked as soon as the engine finds the last correct letter of the access code in the input string. The engine locks the lock again if the user continues entering from the keypad past the last digit of the access code. With the input string mentioned before, the lock will be unlocked and then locked again.
Your program will read from the keyboard without echoing the input characters. Characters other than 0 and 1 will be quietly discarded. Your engine will recognize a fixed access code. The access code will be the binary representation of the number represented by the first four digits of your Social Security Number. Input characters are processed on the fly (not on a line basis). You will find a way to indicate when the unlocking/locking occurs (by printing a message, or beeping, etc).
You need do the following part only if you are looking for extra credit (20% for this assignment) or you want to have some more fun.
Since a possible intruder does not have any idea about how long the access string is, you think this security device may be quite effective. You decide to test it. One possible way to try to break the lock is to generate a random sequence of 0s and 1s as the input string. Of course, after each 0 or 1 input you should check to see whether the lock has been unlocked or not. This would naturally increase the time it takes an intruder to break your security mechanism.
You don't need to be concerned about optimization(s). In particular you are not required to minimize the number of states in your FAs. You can do so if you want but this is not a must.
(c) 1996, Virgil Bistriceanu
Posted April 8, 1996. Last modified April 8, 1996.
For comments send email to email@example.com or at firstname.lastname@example.org