Exercise 5) Matrices
Write a program that shows a menu such as figure 2.1 and does the following described tasks for entered number between 1 and 6.
Write a program that shows a menu such as figure 2.1 and does the following described tasks for entered number between 1 and 6.
The instruction menu:
1. Initialize Matrices
2. Print Matrices
3. Multiply Matrices
4. Transpose of 2nd Matrix
5. Move Row and Column of 2nd Matrix
6. Quit
Please enter your requested instruction (1..6)?
Note that to do the specific task related to each menu user should press relevant number. (e.g. ‘2’ for print task or ‘4’ for transpose operation). The description of tasks is as follows:
1. Initialize: In this step, your program should get dimensions for two matrices from input and initials these matrices randomly based on the entered dimensions. Note that your program should initialize matrices with different numbers in each time of execution. The first matrix should be square matrix. A square matrix is a matrix with the same number of rows and columns. Note that user can re-initialize matrices (and of course dimensions) by using the first command during the execution
Please enter the number of rows and columns for the first square matrix? 3
Please enter the number of rows for the second matrix? 4
Please enter the number of columns for the second matrix? 6
2. Print: In this step, your program should print the content of two matrices in the screen as showed in the figure 2.3. The “Print” operation could be requested after each step to see the changes which have been made during the execution of different instructions. It means that you do not need to show the results of each operation in the screen, user has to request instruction number ‘2’ to see the actual content of matrices.
Content of the first Matrix (3*3):
1 3 5
9 7 8
98 6 51
Content of the second Matrix (4*6):
34 73 83 23 98 20
81 92 68 28 34 76
-65 78 -12 67 1 123
89 -61 67 43 17 84
3. Multiplication: In this step, your program should multiplies two matrices A and B (C=A*B).
4. Transpose: In this step, your program should calculate transpose of the second matrix. Wikipedia
defined transpose of a matrix as follows:
“In linear algebra, the transpose of a matrix A is another matrix AT created by any one of the
following equivalent actions:
reflect A over its main diagonal (which runs top-left to bottom-right) to obtain AT
write the rows of A as the columns of AT
write the columns of A as the rows of AT
visually rotate A 90 degrees clockwise, and mirror the image in a vertical line to
obtain AT
Formally, the (i,j) element of AT is the (j,i) element of A. [AT]ij = [A]ji
If A is an m × n matrix then AT is an n × m matrix.”
5. Move row and column: In this step, your program should get two numbers (m, n) and first moves
the row number m of the second matrix to the end of the matrix and then moves the column
number n of the matrix to the end of the matrix
6. Quit: In this step, the execution should be ended. Note that your program shouldn’t be finished in
other steps. It means that user can request multiple executions of different steps before requesting
the “Quit” operation.
Points:
User needs to initiate matrices at least once by requesting step ‘1’ at the beginning of an execution.
Therefore you should prevent the user for requesting other steps before step ‘1’ just once at the
beginning of an execution.
Solution-
#include<iostream>
#include<cmath>
using namespace std;
void swapcol(int a[50][50], int r, int c, int b);
void swaprow(int a[50][50], int r, int c,int b);
int swapmx(int arr[50][50],int m,int n,int a ,int b );
void arrey(int arr1[50][50],int arr2[50][50], int sizemx1, int p,int q);
int main()
{
//-------defining variables and initializing them-------------
int e,flag=0,i,j,flag1=0;
int arrey1[50][50],arrey2[50][50],arrey3[50][50],arrey4[50][50],arrey5[50][50],arrey6[50][50],arrey7[50][50],arrey8[50][50];
int k,sizemx1,p,q,r,x,y,temp=0;
int m, n,a,b,l;
char operation,redo;
//--------Printing my name on screen----------------
cout<<"Welcome to the program 2.1 written by Your Name"<<endl;
cout<<"***************************************************************"<<endl;
cout<<endl<<endl<<endl;
cout<<"The instruction menu:"<<endl<<endl<<endl;
cout<<" 1. Initialize Matrices"<<endl;
cout<<" 2. Print Matrices"<<endl;
cout<<" 3. Multiply Matrices"<<endl;
cout<<" 4. Transpose of 2nd Matrix"<<endl;
cout<<" 5. Move Row and Column of 2nd Matrix"<<endl;
cout<<" 6. Quit"<<endl<<endl;
//--here do loop is used so that the program can be used more then one time
//without exiting the run screen---------------------------
do
{
do
{
cout<<"Please enter your requested instruction (1..6)?= ";
while(!(cin>>operation)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
//cin>>operation ;
cout<<endl;
//---used switch function so thet the operater can be decided------------
switch (operation)
{
//------calculating the requested equation for inputs-------------
//-------at the same time printing the results on screen-----------
case'1':
cout<<"Enter the Size of 1st square Matrix"<<endl;
cout<<"Row & Column=";
while(!(cin>>sizemx1)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
//cin>>sizemx1;
if (sizeof(sizemx1)<4){
cout<<"unknown command"<<endl;
}
cout<<"Enter the of 2nd Matrix"<<endl;
cout<<"Row=";
while(!(cin>>p)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
//cin>>p;
cout<<"Column=";
while(!(cin>>q)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
//cin>>q;
flag=flag+1;
//cout<<"flag="<<flag<<endl;
break;
case'2': //2. Print Matrices
//cout<<"flag="<<flag<<endl;
//cout<<"flag1="<<flag1<<endl;
if(flag<1){
cout<<"flag="<<flag<<endl;
cout<<"Please perforform operation no.1 firest"<<endl;
}
if(flag>=1){
cout<<"flag="<<flag<<endl;
// arrey( arrey1,arrey2, sizemx1, p,q);
/*cout<<"Enter the elements in the 1st Array"<<endl;
for(i=0;i<sizemx1;i++)
{
for(j=0;j<sizemx1;j++)
{
cin>>arrey1[i][j];
}
}
cout<<"Enter the elements in the 2nd Array"<<endl;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
cin>>arrey2[i][j];
}
}*/
cout<<"\nDisplaying the 1st Array"<<endl;
for(i=0;i<sizemx1;i++)
{
for(j=0;j<sizemx1;j++)
{
arrey1[i][j] = 50+rand() %(100-50+1);
cout<<arrey1[i][j]<<"\t";
}
cout<<endl;
}
cout<<"\nDisplaying the 2nd Array"<<endl;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
arrey2[i][j] = 50+rand() %(100-50+1);
cout<<arrey2[i][j]<<"\t";
}
cout<<endl;
}
flag1=flag1+1;
}
arrey2[10][10]=arrey4[10][10];
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
arrey5[i][j]=arrey2[i][j];
arrey6[i][j]=arrey2[i][j];
}
}
break;
case'3': //3. Multiply Matrices
//cout<<"flag1="<<flag1<<endl;
if(flag1<1){
cout<<"Please perforform operation no.1 and no.2 firest"<<endl;
}else{
if(sizemx1!=p){
cout<<"Multiplication is not possible"<<endl;
}
if(sizemx1==p)
{
for(i=0;i<sizemx1;i++)
{
for(j=0;j<q;j++)
{
arrey3[i][j]=0;
for(k=0;k<p;k++)
{
arrey3[i][j]=arrey3[i][j]+arrey1[i][k]*arrey2[k][j];
}
}
}
cout<<"\nDisplaying the array elements after multiplication"<<endl;
for(i=0;i<sizemx1;i++)
{
for(j=0;j<q;j++)
{
cout<<arrey3[i][j]<<"\t";
}
cout<<endl;
}
}
}
break;
case'4': //4. Transpose of 2nd Matrix
if(flag1<1){
cout<<"Please perforform operation no.1 and no.2 firest"<<endl;
}
else{
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
arrey7[i][j]=arrey6[i][j];
}
}
cout<<"\nDisplaying trannspose the 2nd Matrix"<<endl;
for(i=0;i<=q-1;i++)
{
for(j=0;j<=p-1;j++)
{
temp=arrey7[j][i];
arrey7[j][i]=arrey4[i][j];
arrey4[i][j]=temp;
//cout<<i<<j;
cout<<temp<<"\t";
}
cout<<endl;
}
}
break;
case'5': //5. Move Row and Column of 2nd Matrix
if(flag1<1){
cout<<"Please perforform operation no.1 and no.2 firest"<<endl;
} else{
cout <<"enter the row number you want to swap:"<<endl;
// cin>>x>>y;
while(!(cin>>x)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
cout<<endl;
cout <<"enter the column number you want to swap:"<<endl;
while(!(cin>>y)) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
cout<<endl;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
arrey8[i][j]=arrey5[i][j];
}
}
cout<<"The original matrix is"<<endl;
cout<< endl;
for(i=0;i<p;i++)
{
for(j=0;j<q;j++)
{
cout<<arrey8[i][j]<<"\t";
}
cout<< endl;
}
swapmx(arrey8,p,q,x,y);
cout<< endl;
}
break;
case'6': // 6. Quit
cout<<"Thanks do u want to start again:";
cout<<endl<<endl;
goto label;
break;
default:
cout<<"unknown command"<<endl;
}
}
while(operation=='1'||operation=='2'||operation=='3'||operation=='4'||operation=='5'||operation=='6');
//----now once again the program will ask the user if want to continue or not
cout<<"enter y or Y to continue:";
cin>>redo;
cout<<endl<<endl;
}
while(redo=='y'||redo=='Y');
label:
system("pause");
return 0;
}
void arrey(int arr1[50][50],int arr2[50][50], int sizemx1, int p,int q)
{
cout<<"Enter the elements in the 1st Array"<<endl;
for(int i=0;i<sizemx1;i++)
{
for(int j=0;j<sizemx1;j++)
{
//cin>>arr1[i][j];
while(!(cin>>arr1[i][j])) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
}
}
cout<<"Enter the elements in the 2nd Array"<<endl;
for(int i=0;i<p;i++)
{
for(int j=0;j<q;j++)
{
//cin>>arr2[i][j];
while(!(cin>>arr2[i][j])) //Reciving vaiables from input : is it no/character ?
{
cout << "Please enter a number! Try again: ";
cin.clear ();
cin.ignore (1000, '\n'); // Skip to next newline or 1000 chars,
// whichever comes first.
}
}
}
}
void swapcol(int a[50][50], int r, int c,int b)
// r -> row, c ->col
{
int t,s;
while(b < (c-1))
{
for(int i=0; i<r; i++)
{
t = a[i][b];
a[i][b] = a[i][b+1];
a[i][b+1] = t;
}
b++;
}
}
void swaprow(int a[50][50], int r, int c,int b)
// r -> row, c ->col
{
int t;
while(b < (r-1))
{
for(int i=0; i<c; i++)
{
t = a[b][i];
a[b][i] = a[b+1][i];
a[b+1][i] = t;
}
b++;
}
/*for(int i = 0; i< c ; i++)
{
t = a[b-1][i];
a[b-1][i] = a[r-1][i];
a[r-1][i] = t;
}*/
}
int swapmx(int arr[50][50],int m,int n,int a ,int b )
{
int i, j,k,l;
//for( l = 0; l <=a-1; l ++){
/* Swap function call */
cout<<"The matrix after shifting row"<<endl;
swaprow(arr, m, n, a-1);
for( i = 0; i < m ; i ++)
{ cout<< endl;
for ( j = 0; j < n ; j ++)
cout << arr[i][j] <<"\t";
}
cout<< endl;
cout<< endl;
//}
cout<<endl<<endl;
cout<<"The matrix after shifting column"<<endl;
//for( k = 0; k <=b ; k ++){
swapcol(arr, m, n, b-1);
//cout<<"k="<<k<<endl;
/* Display Array in Matrix form */
//}
for( i = 0; i < m ; i ++)
{ cout<< endl;
for ( j = 0; j < n ; j ++)
cout << arr[i][j] <<"\t";
}
cout<< endl;
return 1;
}
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
- Write a C++ program to Make Simple calculator
- Write a C++ program to arrange 10 numbers in ascending order
- Write a C++ program to calculates the following equation for entered numbers (n, x). 1+ (nx/1!) - (n(n-1)x^2/2!)
- Write a C++ program to 1. Initialize Matrices 2. Print Matrices 3. Multiply Matrices 4. Transpose of 2nd Matrix 5. Move Row and Column of 2nd Matrix 6. Quit
- Write the C++ program for processing of the students structure
- Write a C++ program that gets two strings from input and stores them in variables such as str1 and str2
- Write a C++ program that gets one text with the maximum of 256 characters from input and converts it to standard format based on the following rules and prints the final standardized text
- C++ Mini-Project: Human Resource Management Program
- Write a C++ program to Solve Quadratic equation
- C++ program for Calculation of the surface and the volume of a cone
- C++ Program to show Fibonacci Series
- C++ Program for Decimal to Hexadecimal Conversion
- C++ program to convert decimal number into binary
- C++ PROGRAM TO CHECK WHETHER A NUMBER IS NOT A PERFECT NUMBER OR NOT
- C++ program to find prime numbers in a given range
- C++ program to find Armstrong number
- C++ program to find prime number
- C++ program to convert a string into upper-case or lower-case
- C++ program to concatenate strings
- How to Run and install the mongo c++ drivers (MongoDB) On Ubuntu Linux
- How to Install Crypto++ Library with the Eclipse IDE on UBUNTU12.10 OS.
- Build and Run Sample Code Using Log4Cpp from Source Code on Ubuntu
- C++ counting the number of lines in a text file
- How do you implement the factorial function in C++
- C++ program to find HCF n LCM of two numbers
- The most elegant way to split a string in C++
- C++ Program for Printing 1 to 1000 without loop
- PASS BY REFERENCE C++ EXAMPLE
- C++ PROGRAM TO FIND WHETHER A NUMBER IS EVEN OR ODD
- C++ code to print all odd and even numbers in given range
- C++ Program to Check Palindrome Number
- C++ code to get sum of all odd numbers in given range
- C++ program to find ASCII Code for Characters and numbers
- Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment + Running Sample program
- Write a c++ program that calculates the average of three numbers
- C++ program compute hourly pay taking overtime into account
- C++ program to print 5 rows of 10 stars
- Write a C++ program that can print a temperature conversion
- Write a C++ program to construct a pyramid of stars
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
0 comments:
Post a Comment