10.3 Ðåäàêòîð ìàòðèöû
Ðàññìîòðèì òåïåðü èñïîëüçîâàíèå èäåé
ðåäàêòîðà ñòðîêè â áîëåå ñëîæíîì ïðèìåðå ââîä è ðåäàêòèðîâàíèå ìàòðèöû. Äëÿ
ïðîñòîòû ðàçìåð ìàòðèöû çàôèêñèðóåì è ïóñòü îíà áóäåò êâàäðàòíîé. Îïðåäåëåíèå
SIZE çàäàåò ðàçìåð ìàòðèöû.
-
#define SIZE 5
Ââîäèì íîâûé òèï CMatrix
typedef double
CMatrix[SIZE][SIZE];
Ôóíêöèÿ ââîäà ìàòðèöû KruEditMatrix,
íà âõîäå êîîðäèíàòû ëåâîãî âåðõíåãî óãëà ìàòðèöû, â êîîðäèíàòàõ òåêñòîâîãî
ðåæèìà ðàáîòû òåðìèíàëà. Matrix - ìàòðèöà ðàçìåðîì SIZE.
-
int KruEditMatrix(int x0, int y0,CMatrix Matrix)
{
int
x=1, y=1;
int
nx=8;
int
i=0, j=0;
int
bkcolor;
int
pos=0, maxlen=8,len=0;
char
str[20]="";
int
ch;
CPrintMatrix(x0,y0,Matrix);
i=j=0;
sprintf(str,"%g",Matrix[i][j]);
len=strlen(str);
do {
gotoxy(x0+x,y0+y);
textbackground(BLUE);
cprintf("%-8s",str);
gotoxy(x0+x+pos,y0+y);
if(!(ch=getch()))
ch=getch()+CONTROL;
switch(ch)
{
case
KEY_ESC:
textbackground(BLACK);
gotoxy(x0+x,y+y0);
cprintf("%-8s",str);
return
0;
case
KEY_ENTER:
Matrix[i][j]=atof(str);
textbackground(BLACK);
gotoxy(x0+x,y0+y);
cprintf("%-8s",str);
return
1;
case
KEY_HOME: pos=0; break;
case
KEY_END: pos=len; break;
case
KEY_RIGHT: if(pos<len) pos++; break;
case
KEY_CTRL_RIGHT:
if(j<SIZE-1)
{
Matrix[i][j]=atof(str);
gotoxy(x0+x,y0+y);
textbackground(BLACK);
cprintf("%-8s",str);
j++;
x=j*10+1;
sprintf(str,"%g",Matrix[i][j]);
pos=0;
len=strlen(str);
}
break;
case
KEY_LEFT: if(pos>0) pos--; break;
case
KEY_CTRL_LEFT:
if(j>0)
{
Matrix[i][j]=atof(str);
gotoxy(x0+x,y0+y);
j--;
x=j*10+1;
textbackground(BLACK);
cprintf("%-8s",str);
sprintf(str,"%g",Matrix[i][j]);
pos=0;
len=strlen(str);
}
break;
case
KEY_DOWN:
if(i<SIZE-1)
{
Matrix[i][j]=atof(str);
gotoxy(x0+x,y0+y);
i++;
y=2*i+1;
textbackground(BLACK);
cprintf("%-8s",str);
sprintf(str,"%g",Matrix[i][j]);
pos=0;
len=strlen(str);
}
break;
case
KEY_UP:
if(i>0)
{
Matrix[i][j]=atof(str);
gotoxy(x0+x,y0+y);
i--;
y=2*i+1;
textbackground(BLACK);
cprintf("%-8s",str);
sprintf(str,"%g",Matrix[i][j]);
pos=0;
len=strlen(str);
}
break;
case
KEY_DEL:
if(pos<len)
{
memmove(&str[pos],&str[pos+1],len-pos+1);
len--;
cprintf("%s",&str[pos]);
putch(’ ’);
}
break;
case
KEY_BACKSPACE:
if(pos>0)
{
pos--;
memmove(&str[pos],&str[pos+1],len-pos+1);
len--;
gotoxy(x0+x+pos+1,y0+y);
cprintf("%s",&str[pos]);
putch(’ ’);
}
break;
default:
if(len<maxlen-1&&(isdigit(ch)||ch==’.’))
{
memmove(&str[pos+1],&str[pos],len-pos+1);
str[pos]=ch;
cprintf("%s",&str[pos++]);
len++;
}
break;
}
} while(1);
return
0;
}
void CPrintMatrix(int
x0, int y0,CMatrix Matrix)
{
for(int i=0; i<SIZE; i++)
for(int j=0; j<SIZE; j++)
{
gotoxy(x0+j*10+1,y0+i*2+1);
cprintf("%g",Matrix[i][j]);
}
}
void main()
{
CMatrix matrix;
for(int i=0; i<SIZE; i++) //çàäàåì íà÷àëüíûå çíà÷åíèÿ
for(int j=0;
j<SIZE; j++)
matrix[i][j]=0;
KruEditMatrix(5,2,matrix);
gotoxy(5,2+SIZE*2);
cprintf("Result Matrix:");
CPrintMatrix(5,2+SIZE*2+1,matrix);
while(!kbhit());
}
|