Programming In Java | Week 9
Programming In Java | Week 9
Course Link: https://onlinecourses.nptel.ac.in/noc23_cs74/course
Programming Assignment
1. Problem statement:
Complete the code to develop a BASIC CALCULATOR that can perform operations like Addition, Subtraction, Multiplication and Division.
Solution:
int i=0,j=0;
double output=0;
char seq[] = input.toCharArray();
for(int a=0; a<seq.length; a++){
if(seq[a]=='+'){
i= Integer.parseInt(input.substring(0,a));
j= Integer.parseInt(input.substring(a+1,seq.length));
output = (double)i+j;
}else if(seq[a]=='-'){
i= Integer.parseInt(input.substring(0,a));
j= Integer.parseInt(input.substring(a+1,seq.length));
output = (double)i-j;
}else if(seq[a]=='/'){
i= Integer.parseInt(input.substring(0,a));
j= Integer.parseInt(input.substring(a+1,seq.length));
output = (double)i/j;
}else if(seq[a]=='*'){
i= Integer.parseInt(input.substring(0,a));
j= Integer.parseInt(input.substring(a+1,seq.length));
output = (double)i*j;
}
}
System.out.print(input+" = " + Math.round(output));
2. Complete the code to develop an ADVANCED CALCULATOR that emulates all the functions of the GUI Calculator as shown in the image.
Solution:
char seq[] = input.toCharArray();
int outflag=0;
for(int i=0; i<seq.length; i++){
seq[i]=gui_map(seq[i]);
}
double operand1=0.0;
String o1="";
double operand2=0.0;
String o2="";
double output=0.0;
outerloop:
for(int i=0; i<seq.length; i++){
int r=0;
if(seq[i]=='+'||seq[i]=='-'||seq[i]=='/'||seq[i]=='X'||seq[i]=='='){
for(int j=0; j<i; j++){
o1+=Character.toString(seq[j]);
}
operand1=Double.parseDouble(o1);
for(int k=i+1; k<seq.length; k++){
if(seq[k]=='='){
outflag=1;
operand2=Double.parseDouble(o2);
if(seq[i]=='+'){
output=operand1+operand2;
}else if(seq[i]=='-'){
output=operand1-operand2;
}else if(seq[i]=='/'){
output=operand1/operand2;
}else if(seq[i]=='X'){
output=operand1*operand2;
}
break outerloop;
}else{
o2+=Character.toString(seq[k]);
}
}
}
}
if(outflag==1)
System.out.print(output);
3. Complete the code to perform a 45 degree anti clock wise rotation with respect to the center of a 5 × 5 2D Array as shown below:
INPUT:
00100
00100
11111
00100
00100
OUTPUT:
10001
01010
00100
01010
10001
Solution:
char arr[][]= new char[5][5];
// Input 2D Array using Scanner Class
for(int line=0;line<5; line++){
String input = sc.nextLine();
char seq[] = input.toCharArray();
if(seq.length==5){
for(int i=0;i<5;i++){
arr[line][i]=seq[i];
}
}else{
System.out.print("Wrong Input!");
System.exit(0);
}
}
char tra[][] = new char[5][5];
String outer[]={"00","10","20","30",
"40","41","42","43",
"44","34","24","14",
"04","03","02","01"};
String inner[]={"11","21","31","32",
"33","23","13","12"};
// 45-Degree rotation
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
// Transform outer portion
for(int k=0; k<outer.length; k++){
char indices[]=outer[k].toCharArray();
int a = Integer.parseInt(String.valueOf(indices[0]));
int b = Integer.parseInt(String.valueOf(indices[1]));
if(a==i && b==j){
if(k==15){k=1;}
else if(k==14){k=0;}
else {k+=2;}
indices=outer[k].toCharArray();
a = Integer.parseInt(String.valueOf(indices[0]));
b = Integer.parseInt(String.valueOf(indices[1]));
tra[a][b] = arr[i][j];
break;
}
}
// Transform inner portion
for(int k=0; k<inner.length; k++){
char indices[]=inner[k].toCharArray();
int a = Integer.parseInt(String.valueOf(indices[0]));
int b = Integer.parseInt(String.valueOf(indices[1]));
if(a==i && b==j){
if(k==7){k=0;}
else {k+=1;}
indices=inner[k].toCharArray();
a = Integer.parseInt(String.valueOf(indices[0]));
b = Integer.parseInt(String.valueOf(indices[1]));
tra[a][b] = arr[i][j];
break;
}
}
// Keeping center same
tra[2][2] = arr[2][2];
}
}
// Print the transformed output
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
System.out.print(tra[i][j]);
}
System.out.println();
}
4. Problem statement:
A program needs to be developed which can mirror reflect any 5 × 5 2D character array into its side-by-side reflection. Write suitable code to achieve this transformation as shown below:
INPUT: OUTPUT:
OOXOO OOXOO
OOXOO OOXOO
XXXOO OOXXX
OOOOO OOOOO
XOABC CBAOX
char original[][]= new char[5][5];
// Declaring 5x5 2D char array to store reflection
char reflection[][]= new char[5][5];
// Input 2D Array using Scanner Class
for(int line=0;line<5; line++){
String input = sc.nextLine();
char seq[] = input.toCharArray();
if(seq.length==5){
for(int i=0;i<5;i++){
original[line][i]=seq[i];
}
}
}
// Performing the reflection operation
for(int i=0; i<5;i++){
for(int j=0; j<5;j++){
reflection[i][j]=original[i][4-j];
}
}
// Output the 2D Reflection Array
for(int i=0; i<5;i++){
for(int j=0; j<5;j++){
System.out.print(reflection[i][j]);
}
System.out.println();
}
5. Write suitable code to develop a 2D Flip-Flop Array with dimension 5 × 5, which replaces all input elements with values 0 by 1 and 1 by 0. An example is shown below:
INPUT:
00001
00001
00001
00001
00001
OUTPUT:
11110
11110
11110
11110
11110
Solution:
char original[][]= new char[5][5];
// Input 2D Array using Scanner Class and check data validity
for(int line=0;line<5; line++){
String input = sc.nextLine();
char seq[] = input.toCharArray();
if(seq.length==5){
for(int i=0;i<5;i++){
if(seq[i]=='0' || seq[i]=='1'){
original[line][i]=seq[i];
if(line==4 && i==4)
flipflop(original);
}
else{
System.out.print("Only 0 and 1 supported.");
break;
}
}
}else{
System.out.print("Invalid length");
break;
}
}
}
static void flipflop(char[][] flip){
// Flip-Flop Operation
for(int i=0; i<5;i++){
for(int j=0; j<5;j++){
if(flip[i][j]=='1')
flip[i][j]='0';
else
flip[i][j]='1';
}
}
// Output the 2D FlipFlopped Array
for(int i=0; i<5;i++){
for(int j=0; j<5;j++){
System.out.print(flip[i][j]);
}
System.out.println();
}