Part 1
Q01:
Given a 1D array of int "intA" initialized to 10 values: 100, 200, ... 1000, a second un initialized array intB:
1. Write a program to copy intA to intB in reverse order
2. Must use looping techniques
3. Must print both arrays
Q02:
Given a 2D array of chars chA initialized to
A B C D
E F G H
I J K L
M N O P
Q R S T
1. Write a code block to print the content of chA as it is shown above.
2. Write a code block to print the transpose of chA.
Transpose example:
If m = 1 2 3 → mT = 1 4
4 5 6 2 5
3 6
3. Write a code block to compute the individual summation per each column, per each row and the overall summation of chA.
4. Must use looping techniques
Part 2
Q01:
Write a program to do the following:
1) Declare three uninitialized array of ints, intA1, intA2, intA3, all of length of 16.
2) A function that prints an int array in one line.
3) A function that randomly generates an int array. (hint: check random32 in Irvinelib help)
4) A function that copies an int array from another.
5) A function that reverses an int array.
6) A function computes the summation of an int array.
7) A function that computes an element-wise addition of two int arrays.
8) A function that computes an element-wise subtraction of two int arrays.
9) A function that computes element-wise abs of an int array.
10) Test each function from main, print appropriate array after each test.
Part 3
Q01: menu, while, if, for, etc.
Write a program to do the following:
1) A function that prompts the user to enter a string of a predefined max length, reads the string and stores it in a byte array.
2) Define a second byte array to store the frequencies of each character in the input string.
3) A Function that computes and saves the frequencies in item 2 above.
4) A Function to print the character and its frequency in two columns format.
5) A Function to allow the user to replace a passed character with another in the input string.
6) A Function that counts/prints how many words in the input string.
7) Make the above tasks menu options and keep prompting the user to select an option to be performed until he/she chooses to quit.
Part 4
Q01:
1. Study the algorithm of the selection sort, given below.
2. Write a function to randomly generate a char array.
3. Implement selectionSort algorithm and test it with the array in (2).
4. Test three cases: random array, sorted array and array in reverse order.
Input: A[], Size
Output: A[] : A[i] < A[i+1], i*[0,Size-1].
Assumptions: 1) IdxofMin, is a function that returns index of smallest element in A[]. You need to write the idxofMin function.
3) Swap(x,y) is a function that swaps the values of the passed arguments. You need to write the swap function.
2) A[] is in no particular order.
Algorithm: SelectionSort
FOR i=1 TO Size-1
k = idxofMin(A, i+1, Size-1)
Swap(A[i], A[k])
ROF
Part 5
Q01;
Copy part 2 and do the following:
1. Add a menu listing all the tasks to be done by the program.
2. Add a while loop structure
3. Add a switch structure based on the technique "Table-driven selection". Review CH06.58 (I am attaching at the end of this part)
4. Test all options.
"Table-driven selection". Review CH06.58
Step 1: create a table containing lookup values and procedure offsets:
.data
CaseTable BYTE 'A' ; lookup value
DWORD Process_A ; address of procedure
EntrySize = ($ - CaseTable)
BYTE 'B'
DWORD Process_B
BYTE 'C'
DWORD Process_C
BYTE 'D'
DWORD Process_D
NumberOfEntries = ($ - CaseTable) / EntrySize
Table of Procedure Offsets:
Step 2: Use a loop to search the table. When a match is found, call the procedure offset stored in the current table entry:
movebx,OFFSETCaseTable ; point EBX to the table
movecx,NumberOfEntries ; loop counter
L1: cmp al,[ebx] ; match found?
jne L2 ; no: continue
call NEAR PTR [ebx + 1] ; yes: call the procedure
; +1: address after the byte
jmp Default ; and exit the loop
L2: add ebx,EntrySize ; point to next entry
loop L1 ; repeat until ECX = 0
Default: ; could have a default-case handler
PART 6
Write a program for integer multiplication and division operations following these guidelines:
1. Menu-based program:
a. Enter two integers (positive or negative)
b. Multiply (could be MUL or IMUL) --> two functions
c. Divide (could be DVI or IDIV) --> two functions
d. Save current answer
e. Retrieve answer (at any given time, not necessarily right after the operation)
2. The user is allowed to enter signed and unsigned integers
3. Your program should check on the sign of the inputs and select between signed/unsigned operations accordingly.
4. Implement each menu-option in a separate function
5. For all operations, assume the larger operand is always 32-bit and set up your other operands accordingly.
6. Test your code with all possible combinations of: positive/negative numbers and multiplication and division operations.
Part 7
Q01:
1) Copy part 2
2) Recode all functions utilizing the Stack Frame method
3) Show at least one example of each of the following:
a. USES
b. LOCAL. subespnBytes
c. ENTER/LEAVE
d. PROTO/INVOKE
4) Test each function from main, print appropriate array after each test.