Professional Documents
Culture Documents
Lab Assignment No: 06 Problem Statement
Lab Assignment No: 06 Problem Statement
Lab Assignment No: 06 Problem Statement
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>
using namespace std;
char M[100][4],IR[4],R[4],C;
FILE *fp1, *fp2;
int IC;
int B,E,SI,READf;
void TERMINATE();
void LOAD();
void STARTEXECUTION();
void EXECUTEPROGRAM();
void MOS(int);
void READ();
void WRITE();
void INIT()
{
int i,j;
for ( i = 0; i < 100; i++)
{
for (j = 0; j < 4; j++)
{
M[i][j] = '\0';// making all the elements of 2d array as nulle
}
}
B = 0;
E = B + 10;
READf = 0;
}
void READ(int loc)
{
int i,j,k;
char ch,arr1[20];
if (READf == 0)
{
k = loc-1;
E = loc+10;
ch = fgetc(fp1);
while (1)
{
i = 0;
while (i < 4 && ch != '\n')
{
arr1[i] = ch;
i++;
ch = fgetc(fp1);
}
arr1[i] = '\0';
if (strcmp(arr1,"$END")==0)
{
while (ch != '\0' && ch != EOF)
ch = fgetc(fp1);
break;
}
else
{
if (ch == '\n')
{
k++;
i=0;
while (i < 4)
{
M[k][i] = arr1[i];
i++;
}
k = E-1;
E = E+10;
}
else
{
k++;
i=0;
while (i < 4)
{
M[k][i] = arr1[i];
i++;
}
}
}
if (ch == '\n')
ch = fgetc(fp1);
}
READf = 1;
}
}
void WRITE()
{
int i,j,k,loc,x;
char ch2;
IR[3] = 0;
x = atoi(&IR[2]);
loc = x * 10;
i = loc;
while (i <= loc + 9)
{
for ( k = 0; k < 4; k++)
{
if (M[i][k] != '\0')
{
fputc(M[i][k], fp2);
ch2 = M[i][k];
}
else
break;
}
i++;
}
if (ch2 != '\n')
fputc('\n',fp2);
}
void MOS(int loc)
{
switch (SI)
{
case 1:
READ(loc);
SI=0;
break;
case 2:
WRITE();
SI = 0;
break;
case 3:
TERMINATE();
SI = 0;
break;
default:
break;
}
}
void EXECUTEPROGRAM()
{
int k,i,j,loc,x,y;
while (IC<B)
{
for ( k = 0; k < 4; k++)
{
IR[k] = M[IC][k];
}
x = atoi(&IR[2]);
loc = x;
if (IR[0] == 'L' && IR[1] == 'R')
{
for ( i = 0; i < 4; i++)
R[i] = '\0';
for ( j = 0; j < 4; j++)
{
if (M[loc][j] != '\0' && M[loc][j] != '\n')
{
R[j] = M[loc][j];
}
else
{
break;
}
}
}
else if (IR[0] == 'S' && IR[1] == 'R')
{
for ( j = 0; j < 4 && R[j] != '\0'; j++)
{
M[loc][j] = R[j];
}
}
else if (IR[0] == 'C' && IR[1] == 'R')
{
for ( i = 0; i < 4; i++)
{
if (R[i] == M[loc][i])
{
C = 't';
}
else
{
C = 'f';
break;
}
}
}
else if (IR[0] == 'B' && IR[1] == 'T')
{
if (C == 't')
{
IC = loc;
IC--;
}
}
else if (IR[0] == 'G' && IR[1] == 'D')
{
SI = 1;
MOS(loc);
}
else if (IR[0] == 'P' && IR[1] == 'D')
{
SI = 2;
MOS(loc);
}
else if (IR[0] == 'H')
{
SI = 3;
MOS(loc);
}
IC++;
}
}
void STARTEXECUTION()
{
IC = 0;
EXECUTEPROGRAM();
}
void LOAD()
{
int i,j,k;
char ch, temp[4];
// ch = fgetc(fp1);
int ch1 = fgetc(fp1);
INIT();//INIT function is called that is made ABOVE
do
{
i = 0;
while (i<4 && (char)ch1 != '\n')
{
temp[i] = (char)ch1;
ch = fgetc(fp1);
ch1 = ch;
i++;
}
temp[i] = '\0';
//cout<<temp;
if((strcmp(temp,"$AMJ"))==0)
{
while ((char)ch1 != '\n')
{
ch1 = getc(fp1);
}
}
else if ((strcmp(temp,"$DTA"))==0)
{
STARTEXECUTION();
}
else if ((strcmp(temp,"$DTA"))!=0)
{
i=0;
if (B == E)
{E = E+10;}
for ( k = 0; k < 4; k++)
{
M[B][k] = temp[i];
i++;
}
B++;
}
if ((char)ch1 == '\n')
ch1 = fgetc(fp1);
} while (ch1 != EOF);
}
void TERMINATE()
{
fputc('\n', fp2);
fputc('\n', fp2);
LOAD();
}
int main()
{
int i,j;
fp1 = fopen("inputMOS.txt","r");
fp2 = fopen("OUTPUTMOS.txt","w");
if (fp1 == NULL)
{
cout<<"File not found";
}
else
{
LOAD();
}
cout<<"memory: "<<endl;
for (int i = 20; i < 40; i++)
{
for(int j = 0; j < 4; j++)
cout<<M[i][j]<<" ";
cout<<endl;
}
cout<<" press any button to continue"<<endl;
getch();
return 0 ;
}
Input:
$AMJ010200210001
GD30LR36SR40LR35SR41LR34SR42LR33SR43LR32
SR44LR31SR45LR30SR46LR39SR47SR38SR49PD40
H
$DTA
AMA PANANAL A CPLANN A A MA
$END0102
$AMJ020100120003
GD20LR20GD30CR33BT07GD40PD40PD20PD30GD40
PD40H
$DTA
HOPE FOR IT
THERE IS NO HOPE
BUT STILL HOPE
$END0201
Output:
A MAN A PLAN A CANAL PANAMA