Computer Science Matrix Assignment

User Generated

Traryvn12

Computer Science

Description

THERE ARE TWO FILES ATTACHED, ONE IS A PDF WITH THE INSTRUCTIONS TO THE ASSIGNMENT AND THE OTHER ARE THE TEMPLATES REQUIRED TO SUCCESSFULY COMPLTE THE ASSIGNMENT. PLEASE LOOK INTO THEM.

Synopsis

We want to implement two functions which are part of a program meant to operate on a
two dimensional integer matrix. Other programmers will work on the GUI while we have
been tasked to develop the functions. In order to help us test the functions before they are
used by the other programmers, we write a main which will use our two functions on
some pre-defined data in order to make sure they operate as expected by the

requirements.
Our first function will test whether a given matrix is in order or not while the other will
sort it. We will have other functions in our project but they will be there to help us
structure the testing of the two above-mentioned functions. The main will simply invoke
the test functions so we display the results when we run our program.
We’re getting one tiny step nearer to how testing is actually done “in the real world”.

templates-v9_0.zip 

instructions-v8_0.pdf 

Unformatted Attachment Preview

PA201 – Enter the Matrix Synopsis We want to implement two functions which are part of a program meant to operate on a two dimensional integer matrix. Other programmers will work on the GUI while we have been tasked to develop the functions. In order to help us test the functions before they are used by the other programmers, we write a main which will use our two functions on some pre-defined data in order to make sure they operate as expected by the requirements. Our first function will test whether a given matrix is in order or not while the other will sort it. We will have other functions in our project but they will be there to help us structure the testing of the two above-mentioned functions. The main will simply invoke the test functions so we display the results when we run our program. We’re getting one tiny step nearer to how testing is actually done “in the real world”. Files you will be working with You will be provided with several files to get you started working on this assignment. - You must not alter the file names, remove or add files to the project - You must only modify the ones marked below with a yes in “Modify it?” - You must not insert any comments or code in the tests.c file which, when read by another student, would give them any insights about the solutions you implemented in tools.c. Important Academic Honesty Note; The role of tests.c is to allow you to test your program to verify it adheres to requirements. Your instructor might allow you to exchange this file, and this file only, with other students. Therefore, you must uphold academic honesty standards by not inserting any information, besides the tests, which would divulge your design or implementation of the solutions to another student. Failure to do so will earn you a FF for the offering. Here are the files; File name Modify it? Role tools.c Yes Implementation of your solution to the assignment tests.c Yes Implementation of your test functions tools.h No Header file for tools.c main.c No Implementation of the main function starting your tests testlib.h No Definition of the TEST function you must use in your tests testlib.c No Implementation of the above Task #1 – Implementing and testing your isMatrixSorted Some reading before you start Before to start working on implementing anything, you’ll have to read the entire source and make sure you understand what it is doing so that you are able to add to it without breaking everything. Pay specific attention to the way we implemented some test functions in tests.c. These will make use of your isMatrixSorted implementation to make sure it is behaving as expected from the requirements. In addition, spend some time reading the requirements in this document and adding your own test functions in tests.c to reflect the tests you think your program ought to pass to meet these requirements. To give you an idea of what tests look like, you will find examples in tests.c. In addition, think about the following; - Right off the bat, you want isMatrixSorted to return false when you pass to it an unsorted matrix. This will actually succeed without you implementing anything since the default implementation of isMatrixSorted returns false all the time. - Then, you want isMatrixSorted to return true when you pass an already sorted matrix. This one is also a very important test but it will fail with the default implementation. No worries, this gives you a goal to meet as you start working on your solution - Even though we are not yet working on matrixSort, you might want to throw in some tests about it too – knowing they will mostly fail until you actually get started. How does one test matrixSort you ask? Well, use isMatrixSorted and assume for now it will work one day ☺ - Here is an example;  Provide matrixSort with an already sorted matrix  Use isMatrixSorted afterward to make sure it’s still sorted – i.e. your implementation of matrixSort didn’t mess up the matrix - Here is another example;  Provide matrixSort with a non-sorted matrix  Use isMatrixSorted afterward to make sure it is now sorted Implementing your solution Next step is implementing the isMatrixSorted function in the tools.c file so that it detects whether a matrix passed as parameter is already sorted or not and returns an appropriate value. Refer to the comments in the code for the specific details. To give you an example, a two dimensional 3x5 matrix is sorted when its elements are ordered as follows; 3 5 9 20 20 42 50 55 99 142 200 209 500 900 999 Testing your solution Now is time to add more tests based on what you learned when you actually started implementing the solution and what you learned when you had to fend off your first bugs. Revise the tests you previously implemented in tests.c. Bit of refactoring Do not attempt the rest of this assignment until your first function is working on a good quality suite of tests. See the PDF document explaining how to design a good “test harness” which was uploaded as part of this week’s module. Now that things are working, what about refactoring / simplifying your program and tests? - Refactoring means rewriting some parts to improve them without adding any new features or altering the way your program behaves. - Improving sometimes means making your program run faster. In this offering we are not really going for top performance due to the simplicity of the tasks we tackle but this doesn’t mean there are no other forms or improvement we are not after;  Simplify your solution; if you are able to do the same job in 3 lines than you are doing now with 3 nested loops, do it.  Make your program easier to understand; fix your indentation, add comments for all variables / parameters / functions or even every non-trivial step, rename variables / parameters / functions so they better reflect their role... Every time you improve something, no matter how small, make sure you recompile, relink, re-run your project against the tests you have. This is to make sure you did not just break something which was working before. Never move to the next refactoring until you have passed what is referred to as your regression testing. Task #2 – Implementing and Testing matrixSort When we are going to test your 2nd function, matrixSort, we are going to rely on isMatrixSorted. This means you should not attack this part of the practice assignment before to be fairly sure your isMatrixSorted function works. Some reading before you start Read the requirements and the comments in the program itself to make sure you understand what’s expected of this function. Then, add more tests focused on ensuring it works. This should be relatively easy and maybe you won’t be able to think about too many more tests to add to those you used to validate isMatrixSorted. Implementing your solution The matrixSort function will take a two dimensional integer matrix which might or might not be already ordered and order it in a manner which isMatrixSorted will recognize as ordered. There are different algorithms you might implement. Most students like to use the “bubble sort” from the textbook and adapt it to a two dimensional matrix. I personally think it’s a bit too much work. Others go with the following logic; we need to look at each element of the matrix in order, one after the other. For each such element, I use loops to go other all the elements between it and the end of the matrix. Each time, I compare the two elements and swap them if they are out of order. This result is me looking for the smallest element and putting it first in the matrix, then looking for the next smallest one and putting it second in the matrix. For a one dimensional array, the algorithm would look something like; // my array name is data which has indexes between 0 and N-1 int i,j; for(i=0 ; i < N-1; i++){ for(j=i+1; j < N ; j++){ if( data[i] > data[j]) SWAP THEM } } The hard part is to adapt this to a two dimensional matrix. Feel free to explore. Testing your solution Again, you might have learned a bit more about the problem by trying to implement it or found some bugs which you may detect with a test; E.g. I had a bug when only the first and last elements were not in order; I was pretty much off by one in one of my loops. I’m now adding a test to make sure I detect this specific bug from now on. Revise your tests. Bit of refactoring When your program is working on task #2, take time to improve its implementation. Do not try to improve things like indentation before it works but do not move to the next tasks until you’ve improved it. PA201 – Enter the Matrix Synopsis We want to implement two functions which are part of a program meant to operate on a two dimensional integer matrix. Other programmers will work on the GUI while we have been tasked to develop the functions. In order to help us test the functions before they are used by the other programmers, we write a main which will use our two functions on some pre-defined data in order to make sure they operate as expected by the requirements. Our first function will test whether a given matrix is in order or not while the other will sort it. We will have other functions in our project but they will be there to help us structure the testing of the two above-mentioned functions. The main will simply invoke the test functions so we display the results when we run our program. We’re getting one tiny step nearer to how testing is actually done “in the real world”. Files you will be working with You will be provided with several files to get you started working on this assignment. - You must not alter the file names, remove or add files to the project - You must only modify the ones marked below with a yes in “Modify it?” - You must not insert any comments or code in the tests.c file which, when read by another student, would give them any insights about the solutions you implemented in tools.c. Important Academic Honesty Note; The role of tests.c is to allow you to test your program to verify it adheres to requirements. Your instructor might allow you to exchange this file, and this file only, with other students. Therefore, you must uphold academic honesty standards by not inserting any information, besides the tests, which would divulge your design or implementation of the solutions to another student. Failure to do so will earn you a FF for the offering. Here are the files; File name Modify it? Role tools.c Yes Implementation of your solution to the assignment tests.c Yes Implementation of your test functions tools.h No Header file for tools.c main.c No Implementation of the main function starting your tests testlib.h No Definition of the TEST function you must use in your tests testlib.c No Implementation of the above Task #1 – Implementing and testing your isMatrixSorted Some reading before you start Before to start working on implementing anything, you’ll have to read the entire source and make sure you understand what it is doing so that you are able to add to it without breaking everything. Pay specific attention to the way we implemented some test functions in tests.c. These will make use of your isMatrixSorted implementation to make sure it is behaving as expected from the requirements. In addition, spend some time reading the requirements in this document and adding your own test functions in tests.c to reflect the tests you think your program ought to pass to meet these requirements. To give you an idea of what tests look like, you will find examples in tests.c. In addition, think about the following; - Right off the bat, you want isMatrixSorted to return false when you pass to it an unsorted matrix. This will actually succeed without you implementing anything since the default implementation of isMatrixSorted returns false all the time. - Then, you want isMatrixSorted to return true when you pass an already sorted matrix. This one is also a very important test but it will fail with the default implementation. No worries, this gives you a goal to meet as you start working on your solution - Even though we are not yet working on matrixSort, you might want to throw in some tests about it too – knowing they will mostly fail until you actually get started. How does one test matrixSort you ask? Well, use isMatrixSorted and assume for now it will work one day ☺ - Here is an example;  Provide matrixSort with an already sorted matrix  Use isMatrixSorted afterward to make sure it’s still sorted – i.e. your implementation of matrixSort didn’t mess up the matrix - Here is another example;  Provide matrixSort with a non-sorted matrix  Use isMatrixSorted afterward to make sure it is now sorted Implementing your solution Next step is implementing the isMatrixSorted function in the tools.c file so that it detects whether a matrix passed as parameter is already sorted or not and returns an appropriate value. Refer to the comments in the code for the specific details. To give you an example, a two dimensional 3x5 matrix is sorted when its elements are ordered as follows; 3 5 9 20 20 42 50 55 99 142 200 209 500 900 999 Testing your solution Now is time to add more tests based on what you learned when you actually started implementing the solution and what you learned when you had to fend off your first bugs. Revise the tests you previously implemented in tests.c. Bit of refactoring Do not attempt the rest of this assignment until your first function is working on a good quality suite of tests. See the PDF document explaining how to design a good “test harness” which was uploaded as part of this week’s module. Now that things are working, what about refactoring / simplifying your program and tests? - Refactoring means rewriting some parts to improve them without adding any new features or altering the way your program behaves. - Improving sometimes means making your program run faster. In this offering we are not really going for top performance due to the simplicity of the tasks we tackle but this doesn’t mean there are no other forms or improvement we are not after;  Simplify your solution; if you are able to do the same job in 3 lines than you are doing now with 3 nested loops, do it.  Make your program easier to understand; fix your indentation, add comments for all variables / parameters / functions or even every non-trivial step, rename variables / parameters / functions so they better reflect their role... Every time you improve something, no matter how small, make sure you recompile, relink, re-run your project against the tests you have. This is to make sure you did not just break something which was working before. Never move to the next refactoring until you have passed what is referred to as your regression testing. Task #2 – Implementing and Testing matrixSort When we are going to test your 2nd function, matrixSort, we are going to rely on isMatrixSorted. This means you should not attack this part of the practice assignment before to be fairly sure your isMatrixSorted function works. Some reading before you start Read the requirements and the comments in the program itself to make sure you understand what’s expected of this function. Then, add more tests focused on ensuring it works. This should be relatively easy and maybe you won’t be able to think about too many more tests to add to those you used to validate isMatrixSorted. Implementing your solution The matrixSort function will take a two dimensional integer matrix which might or might not be already ordered and order it in a manner which isMatrixSorted will recognize as ordered. There are different algorithms you might implement. Most students like to use the “bubble sort” from the textbook and adapt it to a two dimensional matrix. I personally think it’s a bit too much work. Others go with the following logic; we need to look at each element of the matrix in order, one after the other. For each such element, I use loops to go other all the elements between it and the end of the matrix. Each time, I compare the two elements and swap them if they are out of order. This result is me looking for the smallest element and putting it first in the matrix, then looking for the next smallest one and putting it second in the matrix. For a one dimensional array, the algorithm would look something like; // my array name is data which has indexes between 0 and N-1 int i,j; for(i=0 ; i < N-1; i++){ for(j=i+1; j < N ; j++){ if( data[i] > data[j]) SWAP THEM } } The hard part is to adapt this to a two dimensional matrix. Feel free to explore. Testing your solution Again, you might have learned a bit more about the problem by trying to implement it or found some bugs which you may detect with a test; E.g. I had a bug when only the first and last elements were not in order; I was pretty much off by one in one of my loops. I’m now adding a test to make sure I detect this specific bug from now on. Revise your tests. Bit of refactoring When your program is working on task #2, take time to improve its implementation. Do not try to improve things like indentation before it works but do not move to the next tasks until you’ve improved it.
Purchase answer to see full attachment
User generated content is uploaded by users for the purposes of learning and should be used following Studypool's honor code & terms of service.

Explanation & Answer


Anonymous
Excellent resource! Really helped me get the gist of things.

Studypool
4.7
Trustpilot
4.5
Sitejabber
4.4

Similar Content

Related Tags