int getcol()const {return color;};
const char* getcapt(){return caption;};
const char* gettext(){return text;};
void mousemove(int i);
void onkeypress(int i);
void setpos(int x,int y, char* capt,char* texts,int i=0);
private:
int width;
int height;
int top;
int left;
int onoff;
int color;
char *caption;
char text[20];
};
void TEdit::setpos(int x,int y, char* capt,char* texts,int i)
{
strcpy(text,texts);
left=x;
top=y;
caption=capt;
if (i) EditDrow();
}
TEdit::TEdit()
{
caption='\0';
text[0]='2';
text[1]='3';
text[2]='\0';
width=170;
height=18;
top=0;
left=0;
color=coloredit;
onoff=0;
}
void TEdit::EditDrow()
{
int i;
int x=left;
int y=top;
int xx=width;
int yy=height;
setfillstyle(1,color);
setlinestyle(0,0,0);
mouseoff();
bar(x,y,x+xx,y+yy);
setcolor(8);
line(x-1,y-1,x-1,y+yy+1);
line(x-1,y-1,x+xx+1,y-1);
setcolor(15);
line(x,y+yy+1,x+xx+1,y+yy+1);
line(x+xx+1,y,x+xx+1,y+yy+1);
moveto(6+x,6+y);
setcolor(color+10);
outtext(text);
line(x+strlen(text)*8+6,y+15,x+strlen(text)*8+10,y+15);
moveto(x,y-15);
setcolor(color+13);
outtext(caption);
if (onoff) setcolor(11);
else setcolor(colordialog);
rectangle(x-4,y-4,x+xx+4,y+yy+4);
mouseon();
}
//////////////////////////////////////////////////////////////////
// ОБЪЯВЛЕНИЕ ОБЪЕКТОВ
//////////////////////////////////////////////////////////////////
TEdit *TempEdit, edit1[FEdit1];
// char *strrez[FEdit];
int exittru=1;
void TEdit::mousemove(int i)
{
if (mousein(left,top,left+width,top+height))
{
if (!onoff)
if (getbutton(1))
{
int j;
for ( j=0;j<FEdit;j++)
if ((i!=j)&&(TempEdit[j].getonoff())) TempEdit[j].setonoff(0);
setonoff(1);
}
}
}
void TEdit::onkeypress(int i)
{
if ((onoff)&&(kbhit()))
{
char c=getch();
switch (c)
{
case 8: if (strlen(text))
{
text[strlen(text)-1]='\0';
EditDrow();
}break;
case 9: setonoff(0);
if (i==(FEdit-1)) TempEdit[0].setonoff(1);
else TempEdit[i+1].setonoff(1);break;
case 13:exittru=13;break;
case 27:exittru=27;break;
case 0:
switch (getch())
{
case 72:
setonoff(0);
if (i==0) TempEdit[FEdit-1].setonoff(1);
else TempEdit[i-1].setonoff(1);
break;//up
case 80:
setonoff(0);
if (i==(FEdit-1)) TempEdit[0].setonoff(1);
else TempEdit[i+1].setonoff(1);
break;//down
};break;
}
if (((c>=32)||(c<0))&&(strlen(text)<19))
{
int slen=strlen(text);
text[slen]=c;
text[slen+1]='\0';
EditDrow();
}
}
}
void EditInitall()
{
edit1[0].setpos(200,200,"","");
}
void EditInit()
{
TempEdit[0].setonoff(1,0);
int i;
for (i=1;i<FEdit;i++)
TempEdit[i].setonoff(0,0);
xy1=TempEdit[0].getleft()-10;
yy1=TempEdit[0].gettop()-45;
xy2=TempEdit[FEdit-1].getleft()+TempEdit[FEdit-1].getwidth()+10;
yy2=TempEdit[FEdit-1].gettop()+TempEdit[FEdit-1].getheight()-yy1+10;
size = imagesize(xy1-2, yy1-2, xy2+4, yy1+yy2+2);
arrow = malloc(size);
mouseoff();
getimage(xy1-2, yy1-2, xy2+4, yy1+yy2+2, arrow);
mouseon();
windows(xy1,yy1,xy2-xy1+2,yy2,colordialog,"",0);
windows(xy1+2,yy1+2,xy2-xy1-2,18,1,"Ввiд",1);
for ( i=0;i<FEdit;i++)
{
TempEdit[i].EditDrow();
}
}
void EditEnter(TEdit *edit1, int rrr)
{
int i;
FEdit=rrr;
TempEdit=edit1;
EditInit();
exittru=0;
while (!exittru)
{
for (i=0; i<FEdit; i++)
{
TempEdit[i].onkeypress(i);
TempEdit[i].mousemove(i);
}
}
mouseoff();
putimage(xy1-2, yy1-2,arrow,0);
mouseon();
free(arrow);
}
/////////////////////// END DIALOG ////////////////////////////////
ЛістингмодуляWIND.H
#include <graphics.h>
#include "mouse.h"
void windows(int x,int y,int xx,int yy,int color,char s[100],int p)
{
int i;
setfillstyle(1,color);
setlinestyle(0,0,0);
mouseoff();
bar(x,y,x+xx,y+yy);
if (p) setcolor(8);
else setcolor(15);
line(x-1,y-1,x-1,y+yy+1);
line(x-1,y-1,x+xx+1,y-1);
if (! p) setcolor(8);
else setcolor(15);
line(x,y+yy+1,x+xx+1,y+yy+1);
line(x+xx+1,y,x+xx+1,y+yy+1);
if (! p) moveto(5+x,5+y);
else moveto(6+x,6+y);
setcolor(color+10);
outtext(s);
mouseon();
}
ЛістингмодуляCALC.H
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
const N=6;
float x[N]={0, 20, 40, 60, 80, 100},
y[N]={-0.67, -0.254, 0.171, 0.609, 1.057, 1.517};
//float x[N]={1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7},
// y[N]={1, 0.90909, 0.83333, 0.76923, 0.71329, 0.66667, 0.625, 0.58824};
float
dy0=y[1]-y[0];
int COO=0;
float H=x[1]-x[0];
double stepin(double x1,int f)
{
if (f==0) return 1.0;
double rez=x1;
for (int i=1;i<f;i++)
rez*=x1;
// printf("\nx1=%f ^=%d rez=%f if_0=%d",x1,f,rez, rez==0);
return rez;
}
double faktorial(int k)
{
double rez=1;
for (int i=1;i<=k;i++)
rez*=i;
// printf("\n fact(%d)=%f",k,rez);
return rez;
}
double GetA(int i)
{
// if (i) return (stepin(((y[i]-y[i-1])/H),i)*(1/faktorial(i)));
if (i) return (stepin((dy0),i)/(faktorial(i)*stepin(H,i)));
else
return y[0];
}
double IntNuton1(double X1) //Интерполяц по NUTON 1
{
// return 0;
double D,S;
S=0;
int i,j;
for (i=0;i<N;i++)
{
D=GetA(i);
for (j=0;j<i;j++)
{
D*=(X1-x[j]);
}
S+=D;
// printf("\nS=%10.10f",S);
}
return S;
}
double GetB(int i)
{
if (i) return (stepin(((y[N-i]-y[N-i-1])/H),i)*(1/faktorial(i)));
else
return y[N-1];
}
double IntNuton2(double X1) //Интерполяц по NUTON 2
{
// return 0;
double D,S;
S=0;
int i,j;
for (i=0;i<N;i++)
{
D=GetB(i);
for (j=(N-1);j>=(N-i);j--)
{
D*=(X1-x[j]);
}
S+=D;
}
return S;
}
double IntLang(double X1) //Интерполяц по Лагранджу
{
// return 0;
// printf("\n%d",COO++);
double D,S;
S=0;
int i,j;
for (i=0;i<N;i++)
{
D=1;
for (j=0;j<N;j++)
{
if (i!=j) D*=(X1-x[j])/(x[i]-x[j]);
}
S+=D*y[i];
}
return S;
}
ЛістингмодуляMOUSE.H
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <process.h>
struct REGPACK reg;
//инициализирует мышу
int mouseinit()
{ reg.r_ax=0;
intr(0x33,®);
if (!reg.r_ax) {
textcolor(15+128);
gotoxy(23,10);printf("╔═════════E R R O R═════════╗");
gotoxy(23,11);printf("║ MOUSE IS NOT PRESENT! ║");
gotoxy(23,12);printf("║ Press any key ..... ║");
gotoxy(23,13);printf("╚═══════════════════════════╝");
getch();
textcolor(7);
return 1;
}
return 0;
}
//показывает курсор мыши
void mouseon()
{
reg.r_ax=1;
intr(0x33,®);
}
//прячет курсор мыши
void mouseoff()
{
reg.r_ax=2;
intr(0x33,®);
}
// возвращает координаты мыши
void getmousexy(int *x,int *y)
{
reg.r_ax=3;
intr(0x33,®);
*x=reg.r_cx;
*y=reg.r_dx;
}
//устанавливает координаты
void setmousexy(int x,int y)
{
reg.r_cx=x;
reg.r_dx=y;
reg.r_ax=4;
intr(0x33,®);
}
const left=1;
const right=2;
int getbutton(int but)
{
reg.r_ax=5;
reg.r_bx=but;
intr(0x33,®);
return (reg.r_ax)==but;
}
int mousein(int x1,int y1,int x2,int y2)
{
int x,y;
getmousexy(&x,&y);
if (x>=x1 & x<=x2 & y>=y1 & y<=y2) return 1; else return 0;
}
Додаток В
Структура дискети