provod(x1,y1,x2,y2);
cursor_on();
kn=0;
break;
case 16:
cursor_off();
for(i=59;i<108;i++)
for(j=296;j<330;j++)
putpixel(i,j,7);
tranzistor(65,312,89,312,161);
line(95,304,95,299);
line(95,320,95,325);
setfillstyle(1,4);
floodfill(89,312,15);
floodfill(70,304,15);
floodfill(83,310,15);
floodfill(83,314,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
cursor_off();
for(i=0;i<=6;i++)
for(j=0;j<=6;j++)
a[i][j]=getpixel(x1-3+j,y1-3+i);
setcolor(8);
circle(x1,y1,3);
setfillstyle(1,14);
floodfill(x1,y1,8);
setcolor(15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x2=ms.hor_pos;
y2=ms.ver_pos;
break;
}
}
cursor_off();
setfillstyle(1,7);
floodfill(89,312,15);
floodfill(70,304,15);
floodfill(83,310,15);
floodfill(83,314,15);
for(i=0;i<=6;i++)
for(j=0;j<=6;j++)
putpixel(x1-3+j,y1-3+i,a[i][j]);
if(x1>108&&x1<630&&x2>108&&x2<630)
if(y1>50&&y1<435&&y2>50&&y2<435)
// вызов функции, рисующей транзистор
tranzistor(x1,y1,x2,y2,kn_add);
cursor_on();
kn_add=0;
kn=0;
break;
case 17:
cursor_off();
setfillstyle(1,4);
floodfill(25,340,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
cursor_off();
setfillstyle(1,7);
floodfill(45,340,15);
if(x1>108&&x1<630&&y1>50&&y1<435)
outtextxy(x1-3,y1-3,"+");
cursor_on();
kn=0;
break;
case 18:
cursor_off();
setfillstyle(1,4);
floodfill(75,340,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
cursor_off();
setfillstyle(1,7);
floodfill(85,340,15);
if(x1>108&&x1<630&&y1>50&&y1<435)
outtextxy(x1-3,y1-3,"-");
cursor_on();
kn=0;
break;
case 19:
cursor_off();
setfillstyle(1,4);
floodfill(10,370,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
cursor_off();
if(x1>108&&x1<630&&y1>50&&y1<435){
outtextxy(x1-3,y1-3,"|");//устан-ка указ-ля
char text[20]="",ch;
i=0;
while((ch=getch())!=13){
text[i++]=ch;//ввод текста
outtextxy(x1+2,y1-3,text);
}
setcolor(7);
outtextxy(x1-3,y1-3,"|");
}
setcolor(15);
setfillstyle(1,7);
floodfill(10,370,15);
cursor_on();
kn=0;
break;
case 20:
cursor_off();
setfillstyle(1,4);
floodfill(62,370,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
if(x1>108&&x1<630&&y1>50&&y1<435){
cursor_off();
setcolor(8);//обозначение узла
circle(x1,y1,2);
setfillstyle(1,15);
floodfill(x1,y1,8);
setcolor(15);
circle(x1,y1,2);
cursor_on();
}
cursor_off();
setfillstyle(1,7);
floodfill(62,370,15);
cursor_on();
kn=0;
break;
case 21:
cursor_off();
setfillstyle(1,4);
floodfill(115,440,15);
floodfill(126,452,15);
floodfill(151,451,15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x1=ms.hor_pos;
y1=ms.ver_pos;
break;
}
}
cursor_off();
for(i=0;i<=6;i++)
for(j=0;j<=6;j++)
a[i][j]=getpixel(x1-3+j,y1-3+i);
setcolor(8);
circle(x1,y1,3);
setfillstyle(1,14);
floodfill(x1,y1,8);
setcolor(15);
cursor_on();
while(1){
if((ms_release(&ms,0)==1)||(ms_release(&ms,1)==1)){
x2=ms.hor_pos;
y2=ms.ver_pos;
break;
}
}
cursor_off();
for(i=0;i<=6;i++)
for(j=0;j<=6;j++)
putpixel(x1-3+j,y1-3+i,a[i][j]);
if(x1>108&&x1<630&&x2>108&&x2<630)
if(y1>50&&y1<435&&y2>50&&y2<435)
// вызов функции коррекции
correct(x1,y1,x2,y2);
setfillstyle(1,7);
floodfill(115,440,15);
floodfill(126,452,15);
floodfill(151,451,15);
cursor_on();
kn=0;
break;
case 22:
cursor_off();
setfillstyle(1,4);
floodfill(180,440,15);
char file1[20]="",ch1;
FILE *f1;//указатель на файл
for(i=377;i<=629;i++)
for(j=436;j<=469;j++)
putpixel(i,j,7);//очистка командной строки
outtextxy(380,440,"input name:");
i=0;
while((ch1=getch())!=13){
file1[i++]=ch1;//отобр-е вводимой строки на экран
outtextxy(380,453,file1);
}
for(i=377;i<=629;i++)
for(j=436;j<=469;j++)
putpixel(i,j,7); //очистка командной строки
if((f1=fopen(file1,"wt"))==NULL)
outtextxy(450,450,"error");
else{
fseek(f1,0,SEEK_SET);//запись в файл
for(i=109;i<=629;i++)
for(j=51;j<=434;j++){
if(getpixel(i,j)==15)
fputc(‘1’,f1);
else
fputc(‘0’,f1);
}
}
fclose(f1);//закрытие файла
setfillstyle(1,7);
floodfill(180,440,15);
cursor_on();
kn=0;
break;
case 23:
cursor_off();
setfillstyle(1,4);
floodfill(245,440,15);
floodfill(263,452,15);
floodfill(271,452,15);
char file2[20]="",ch2;
FILE *f2;
for(i=377;i<=629;i++)
for(j=436;j<=469;j++)
putpixel(i,j,7);
outtextxy(380,440,"input name:");
i=0;
while((ch2=getch())!=13){
file2[i++]=ch2;
outtextxy(380,453,file2);
}
for(i=377;i<=629;i++)
for(j=436;j<=469;j++)
putpixel(i,j,7);
if((f2=fopen(file2,"rt"))==NULL)
outtextxy(450,450,"error");
else{
fseek(f2,+1,SEEK_SET);
for(i=109;i<=629;i++)
for(j=51;j<=434;j++){
if(fgetc(f2)==’1′)//открытие файла
putpixel(i,j,15);
else
putpixel(i,j,7);
}
}
fclose(f2);
setfillstyle(1,7);
floodfill(245,440,15);
floodfill(263,452,15);
floodfill(271,452,15);
cursor_on();
kn=0;
break;
case 24:
cursor_off();
setfillstyle(1,4);
floodfill(372,440,15);
floodfill(328,452,15);
printgraph(109,51,629,434);//распечатка файла
setfillstyle(1,7); //(указ-ся лев. верхн. и
//прав. нижн. угол обл. экр.)
floodfill(372,440,15);
floodfill(328,452,15);
cursor_on();
kn=0;
break;
case 25:
flag=0;//признак конца программы
cursor_off();
break;
}//от switch
} while(flag!=0); //от do
closegraph();
}//от main
/* Определение функций, конструирующих выбранные элементы */
//Функция, определяющая первоначальный угол наклона к оси ох
int pozition(int x1,int y1,int x2,int y2){
int rezult=0;//результат: 1-горизонтальное положение,
//2-вертикальное положение, 3-под углом 45 градусов к
//оси ox, 4-под углом 135 градусов к оси ox.
float fi;//угол
if(x2==x1)
fi=3.14/2.0;
else
if(y2==y1)
fi=0;
else
if(((x2>x1)&&(y2<y1))||((x2<x1)&&(y2>y1)))
fi=atan2(abs(y2-y1),abs(x2-x1));
else
if(((x2>x1)&&(y2>y1))||((x2<x1)&&(y2<y1)))
fi=3.14-atan2(abs(y2-y1),abs(x2-x1));
if((fi>=0&&(fi<=(3.14/9.0)))||(fi>=(8.0*3.14/9)&&fi<=3.14))
rezult=1;
if(fi>=(7.0*3.14/18.0)&&fi<=(11.0*3.14/18.0))
rezult=2;
if((fi>(3.14/9.0)&&fi<(7.0*3.14/18.0)))
rezult=3;
if((fi>(11.0*3.14/18.0)&&fi<(8.0*3.14/9)))
rezult=4;
return(rezult);
//возвращается номер диапозона: 1-от 0 до 20 и от 160 до 180
//2-от 70 до 110 градусов, 3-от 20 до 70 и 4-от 110 до 160 гр.
}
//Функция, рисующая резистор
void rezistor(int x1,int y1,int x2,int y2){
int x3,y3;//координаты середины элемента
//выбор номера диапозона
switch(pozition(x1,y1,x2,y2)){
case 1:
if(x2>x1){
x3=x1+(x2-x1)/2;
y2=y1;
line(x1,y1,x3-11,y1);
line(x3+11,y2,x2,y2);
line(x3-11,y1-5,x3-11,y1+5);
line(x3+11,y2-5,x3+11,y2+5);
line(x3-11,y1-5,x3+11,y2-5);
line(x3-11,y1+5,x3+11,y2+5);
}
if(x2<x1){
x3=x2+(x1-x2)/2;
y2=y1;
line(x2,y2,x3-11,y2);
line(x3+11,y1,x1,y2);
line(x3-11,y2-5,x3-11,y1+5);
line(x3+11,y1-5,x3+11,y2+5);
line(x3-11,y2-5,x3+11,y2-5);
line(x3-11,y2+5,x3+11,y2+5);
}
break;
case 2:
if(y1<y2){
y3=y1+(y2-y1)/2;
x2=x1;
line(x1,y1,x1,y3-11);
line(x2,y3+11,x2,y2);
line(x1-5,y3-11,x1+5,y3-11);
line(x2-5,y3+11,x2+5,y3+11);
line(x1-5,y3-11,x2-5,y3+11);
line(x1+5,y3-11,x2+5,y3+11);
}
if(y1>y2){
y3=y2+(y1-y2)/2;
x2=x1;
line(x1,y1,x1,y3+11);
line(x2,y3-11,x2,y2);
line(x1-5,y3+11,x1+5,y3+11);
line(x1-5,y3-11,x1+5,y3-11);
line(x1-5,y3-11,x1-5,y3+11);
line(x1+5,y3-11,x1+5,y3+11);
}
break;
case 3:
if(x2>x1){
y2=y1-(x2-x1);
x3=x1+(x2-x1)/2;
y3=y1+(y2-y1)/2;
line(x1,y1,x3-8,y3+8);
line(x3+8,y3-8,x2,y2);
line(x3-12,y3+4,x3-4,y3+12);
line(x3+4,y3-12,x3+12,y3-4);
line(x3-12,y3+4,x3+4,y3-12);
line(x3-4,y3+12,x3+12,y3-4);
}
if(x2<x1){
y2=y1+(x1-x2);
x3=x2+(x1-x2)/2;
y3=y1+(y2-y1)/2;
line(x1,y1,x3+8,y3-8);
line(x3-8,y3+8,x2,y2);
line(x3-12,y3+4,x3-4,y3+12);
line(x3+4,y3-12,x3+12,y3-4);
line(x3-12,y3+4,x3+4,y3-12);
line(x3-4,y3+12,x3+12,y3-4);
}
break;
case 4:
if(x2>x1){
y2=y1+(x2-x1);
x3=x1+(x2-x1)/2;
y3=y1+(y2-y1)/2;
line(x1,y1,x3-8,y3-8);
line(x3+8,y3+8,x2,y2);
line(x3-4,y3-12,x3-12,y3-4);
line(x3+12,y3+4,x3+4,y3+12);
line(x3-12,y3-4,x3+4,y3+12);
line(x3-4,y3-12,x3+12,y3+4);
}
if(x2<x1){
y2=y1-(x1-x2);
x3=x2+(x1-x2)/2;
y3=y2+(y1-y2)/2;
line(x1,y1,x3+8,y3+8);
line(x3-8,y3-8,x2,y2);
line(x3+4,y3+12,x3+12,y3+4);
line(x3-12,y3-4,x3-4,y3-12);
line(x3+4,y3+12,x3-12,y3-4);
line(x3+12,y3+4,x3-4,y3-12);
}
break;
}
}