.: [ïðåäûäóùàÿ | îãëàâëåíèå | ñëåäóþùàÿ] :.

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());
}
.: [ïðåäûäóùàÿ | îãëàâëåíèå | ñëåäóþùàÿ] :.