I need help creating a Palindrome Checker
Question Description
The Task
In this project, you will be writing a program that receives a string of characters via the UART, checks if this
string is a palindrome, and then uses a print function to print either “Yes” or “No”. A palindrome sequence of
characters (typically a word or phrase) that is the same both forwards and backwards. For this project, strings
will be terminated using a period (‘.’). You may assume that a string will contain at least one character in
addition to a period. You will not need to handle empty strings or strings with only a period. Your program
should be able to handle multiple strings sent one after another or concatenated together. For example, the
string: “abba. data.” should print “Yes” followed by “No” on the next line. Spaces should be ignored when
checking for a palindrome and the palindrome should not be case sensitive. For example, “A nut for a jar of
Tuna.” would be considered a palindrome
Print Function
A skeleton PLP project file is available to download on Blackboard. The PLP project includes a second ASM file
titled, project3_print.asm. This ASM file contains the print function used in this project. PLPTool concatenates all
ASM files within a PLP project into a single location in memory (unless additional .org statements have been
added to specify different location for code). No changes to project3_print.asm should be made.
When called, depending on the value in register $a0, the following string will be displayed on the simulated UART device’s output. If $a0 contains a zero then “No” will be displayed and if $a0 contains a non-zero value (e.g. one) then “Yes” will be displayed. The print function is called using the following instruction:
call project3_print
To use the print function, your PLP program needs to initialize the stack pointer ($sp) before performing the
function call (or any other operations involving the stack pointer). For this reason, the skeleton project file
includes an initialization that sets the stack pointer to 0x10fffffc (the last address of RAM).
Palindrome Checking Strategies
There are two strategies I would recommend for saving your string in in memory and checking to see if it is a
palindrome. The first would be to use only an array and keep a pointer (a register containing a memory address)
for both the first element in the array (commonly referred to as a head pointer) and last element in the array
(commonly referred to as a tail pointer). As you add elements to your array, update your tail pointer so that it
moves to the new last element in the array. When you have reached the end of your string (a period has been
received), you can perform your palindrome check comparing the characters your head and tail pointers point to
and, if they point to the same character, move them both inwards towards the center of your array. If the
pointers cross and all the characters were the same, your string was a palindrome. The second strategy would
be to use an array, treated as a queue, and the stack. You can traverse the array from the start (the first
character saved) to the end (the last character saved) while simultaneously popping characters off the stack. The
queue will give you the string forwards and the stack will give you the string backwards
For both techniques I described above, keep in mind they are simpler if you perform some conditioning to the characters you receive before saving them. For example you don’t need to save spaces in your data structure(s) since they can be ignored and the comparisons are simpler if, when first receiving character, you convert them all to the same case (either all upper or all lower) before storing them. That way you won’t need to write logic that indicates things like “A” == “a” and “A” == “a”
Unformatted Attachment Preview
This question has not been answered.
Create a free account to get help with this and any other question!
Brown University
1271 Tutors
California Institute of Technology
2131 Tutors
Carnegie Mellon University
982 Tutors
Columbia University
1256 Tutors
Dartmouth University
2113 Tutors
Emory University
2279 Tutors
Harvard University
599 Tutors
Massachusetts Institute of Technology
2319 Tutors
New York University
1645 Tutors
Notre Dam University
1911 Tutors
Oklahoma University
2122 Tutors
Pennsylvania State University
932 Tutors
Princeton University
1211 Tutors
Stanford University
983 Tutors
University of California
1282 Tutors
Oxford University
123 Tutors
Yale University
2325 Tutors