- •Міністерство аграрної політики та продовольства україни житомирський агротехнічний коледж
- •1.Лабораторна робота №1
- •Хід виконання роботи
- •2.Лабораторна робота №2
- •Хід виконання роботи
- •3.Лабораторна робота №3
- •Хід роботи:
- •Хід виконання роботи
- •4.Лабораторна робота №4
- •5.Лабораторна робота №5
- •6.Лабораторна робота №1
- •7.Лабораторна робота №2
- •Хід роботи:
- •8.Лабораторна робота №3.1
- •Хід роботи:
- •9.Лабораторна робота №3.2
- •Хід роботи:
- •1.Лабораторна робота №3.3
- •Хід роботи:
Хід виконання роботи
Підключив до програми бібліотечні файли math.h i string.h.
Написав функцію відображення підказок.
Написав функцію малювання крапок і функцію аналізу пунктів меню.
Написав функцію малювання лінії.
Написав функцію для малювання прямокутників.
Висновок: Навчився створювати графічні елементи в програмному середовищі.
4.Лабораторна робота №4
Тема:Графічний редактор
Мета:Доповнити редактор функціями копіювання, стирання,переміщення, збереження області екрана.
Хід роботи:
Доповнюємо програму функціями :
Інтерфейс користувача :
Приклад працездатності:
Висновок: Я доповнив програму функціями копіювання, переміщення, стирання. Удосконалив навички роботи з кодом програми та з інтерфейсом програми.
5.Лабораторна робота №5
Тема: Зберігання і читання зображень!ExecFile(`lr5.exe',`',1)
Мета заняття: Навчитися зберігати та читати зображення.
Хід роботи:
1.Написав функції Збереження та ввода імені файла:
void save(){
char pro[4];
int xf,yf,cf,zap=273,i=0;
double q=0;
fillbar(500,460,640,475,1);
inputfname(1);
mouse(0);
F=fopen(fname,"wb");
if (F==NULL){
help("Nemozhu zapysaty");
fillbar(zap-2,1,540,19,1);
if (cf!=15) fprintf(F, "%3d %3d %2d |",xf,yf,cf);
}
if (yf%10==0){
fillbar(zap+i,5,zap+i+3,16,12);
obmen(zap+i,5,zap+i+3,16);
i+=5;
gcvt(q,3,pro);
fillbar(490,4,538,17,9);
setcolor(15);
outtextxy(496,7,pro);
outtextxy(530,7,"%");
q+=2.38;;
}
}
fclose(F);
nbut=0;pmen=0;mouse(1);
fillbar(zap-2,1,540,19,1);
fillbar(5,460,500,475,1);
}
void load(){
int xf,yf,cf,zap=273,i=0,toch=0;
double q=0;
char pro[4];
fillbar(500,460,640,475,1);
inputfname(0);
mouse(0);
fillbar (0,22,538,458,15);
F=fopen(fname, "rb");
if (F==NULL){
help("Nemozhu prochytaty ");
fillbar(zap-2,1,540,19,1);
nbut=0;pmen=0;mouse(1);
fillbar(450,460,640,475,1);
return;
}
help("Chekayte, chytayu");
while (!feof(F)){
fscanf(F, " %3d %3d %2d |",&xf,&yf,&cf);
putpixel(xf,yf,cf);
if (toch%6000==0) {
fillbar(zap+i,5,zap+i+3,16,12);
obem(zap+i,5,zap+i+3,16);
i+=5;
gcvt(q,3,pro);
fillbar(490,4,538,17,9);
setcolor(15);
outtextxy(496,7,pro);
outtextxy(530,7,"%");
q+=2.563;}
toch+=1;
}
fillbar(zap-2,1,540,19,1);
fclose(F);
nbut=0;pmen=0;mouse(1);
}
2. Написав горячи клавіши:
void disp(){
switch (pmen){
case 1 : pointe(); break;
case 2 : line(); break;
case 3 : pryamokutnyk();break;
case 4 : kolo(); break;
case 5 : tekst(); break;
case 6 : sterty(); break;
case 7 : copiya(); buf=0; break;
case 8 : tyagty(); buf=0; break;
case 9 : mult(); break;
case 10: fillbar(0,22,538,458,15);pmen=0; break;
}
}
Лістинг програми:
#include<graphics.h>
#include<conio.h>
#include<bios.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<dos.h>
#include<stdio.h>
int col=0,but,nb,nbut,key,scr,pmen;
long int x1,y1,x2,y2,xm,ym,x,y,xp,yp,xk,yk,buf,xst,yst;
long int xn,xc,yc,kpix,mplus,mminus;
float m,xpr,ypr,linpx,linry;
char txh[80];
void *p;
FILE *F;
char fname[12];
void initgr()
{
int gd=DETECT,gmode,errorcode;
initgraph(&gd,&gmode," ");
}
struct coord{
int corx;
int cory;
int col;
};
struct coord mxy[5000];
void fillbar(int x1,int y1,int x2,int y2,int col)
{
setfillstyle(1,col);
bar(x1,y1,x2,y2);
}
void screen()
{
fillbar(0,0,640,20,1);
fillbar(0,22,538,458,15);
fillbar(540,22,640,458,9);
fillbar(0,460,640,480,1);
setcolor(15);
outtextxy(23,7,"F2-Save F3-Load Esc-Exit");
}
void button (int x1,int y1,int x2,int y2)
{
setcolor (15);
line(x1,y2,x1,y1);
line(x1,y1,x2,y1);
setcolor (0);
line(x2,y1,x2,y2);
line(x2,y2,x1,y2);
}
void menu()
{
int i;
char
*txmenu[]={"Krapka","Liniya","Pryamok","Kolo","Tekst","Sterty","Kopiya","Tyagnuty","Zoom","VseDell"};
for(i=0;i<10;i++)
{
button(550,40+30*i,630,60+30*i);
setcolor(15);
outtextxy(560,46+30*i,txmenu[i]);
}
}
void palette(int xp,int yp){
int i,j,cp=0;
setcolor(15);
button(xp,yp,xp+84,yp+63);
for(i=0;i<4;i++)
for(j=0;j<4;j++){
fillbar(xp+2+20*j,yp+1+15*i,xp+2+20*(j+1),yp+1+15*(i+1),cp);
cp++;}
setcolor(15);
setcolor(15);
outtextxy(xp+5,yp+70,"COLOR->");
fillbar(xp+67,yp+67,xp+83,yp+81,col);
button(xp+67,yp+67,xp+83,yp+81);
}
void mouse(int m)
{
int mode;
if (m==0) mode=2;else mode=m;
asm{
mov ax,mode
int 33h
}
}
void mStatus()
{
int mbut,mx,my;
asm{
mov ax,3h
int 33h
mov mx,cx
mov my,dx
mov mbut,bx
}
x=mx;
y=my;
but=mbut;
}
void mousemove (int xm,int ym)
{
asm{
mov ax, 4
mov cx, xm
mov dx, ym
int 33h
}
}
void count()
{
if(but==0) nb=0;
if((but==1) && (nb==0)) {nbut++;nb=1;}
}
int mousecoord(int x1,int y1,int x2,int y2)
{
mStatus();
if(x>=x1 && x<=x2 && y>=y1 && y<=y2) return 1;
else return 0;
}
void indmouse( int xind, int yind)
{
char str[3];
if (x!=xm , y!=ym)
{
xm=x;ym=y;
fillbar(xind,yind,xind+65,yind+15,15);
setcolor(9);
itoa(x,str,10);outtextxy(xind+5,yind+5,str);
itoa(y,str,10);outtextxy(xind+40,yind+5,str);
}
}
void setcol(int xpal,int ypal)
{
if(mousecoord(xpal,ypal,xpal+85,ypal+62) && but==1)
{
mouse(0);
col=getpixel(x,y);
fillbar(xpal+67,ypal+67,xpal+83,ypal+81,col);
mouse(1);
}
}
void kursmenu(int pmen,int ykn){
int ykm;
if(pmen>0){
ykm=ykn+30*(pmen-1);
setwritemode(1);
setcolor(15);
line(550,ykm,630,ykm);line(630,ykm+1,630,ykm+19);
line(550,ykm=1,550,ykm=19);line(550,ykm+20,630,ykm+20);
setwritemode(0);
}
}
void selmenu(int ymen,int np){
int i;
if(mousecoord(3,26,535,432)) scr=1;else scr=0;
for(i=0;i<np;i++)
if(mousecoord(550,ymen+30*i,630,ymen+20+30*i) && but==1){
pmen=i+1;
mouse(0);menu();kursmenu(pmen,ymen);
mouse(1);nbut=0;break;
}
}
void help(char tx[80]){
int i;
if(strcmp(txh,tx)!=0){
for(i=0;i<80;i++) txh[i]=tx[i];
fillbar(5,460,500,475,1);
setcolor(15);
outtextxy(10,463,tx);
}
}
void mark(int xm,int ym){
mouse (0);
setcolor(15);setwritemode(1);
line(xm-2,ym,xm+2,ym);
line(xm,ym-2,xm,ym+2);
setwritemode(0);
mouse(1);
}
void pointe(){
if(nbut==0)
help("Vvedit koordynaty tochky x,y");
if(nbut==1){
setcolor(col);
mouse(1);
nbut=0;
}
}
void line(){
if(nbut==0) help("Vvedit pochatok linii x1,y1");
if(nbut==1) {x1=x;y1=y;mark(x1,y1);nbut=2;}
if(nbut==2) help("Vvedit kinez linii x2,y2");
if(nbut==3) {mouse(0);mark(x1,y1);setcolor(col);line(x1,y1,x,y);mouse(1);nbut=0;}
}
void srect(int xm,int ym,int x2,int y2){
if(x2<538 && y2<458){
setwritemode(1);
setcolor(6);
setlinestyle(1,0,0);
rectangle (xm,ym,x2,y2);
setwritemode(0);
setlinestyle(0,0,0);
}
}
void pryamokutnyk(){
if(nbut==0) {mouse(1);help("Vvedit verhniy livyy ugol x,y");}
if(nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Vvedit nyzhniy pravyy ugol x,y");nbut++;}
if(nbut==2) {mouse(0);srect(x1,y1,x2,y2);x2=x;y2=y;srect(x1,y1,x2,y2);}
if(nbut==3) {mouse(0);setcolor(col);rectangle(x1,y1,x2,y2);nbut++;mouse(1);}
if(nbut==4) {mouse(1);graphdefaults();nbut=0;}
}
void ramkolo(float r1,int kol){
setwritemode(1);
setcolor(kol);
setviewport(0,22,538,458,1);
circle(x1,y1-22,r1);
setwritemode(0);
graphdefaults();
}
void kolo(){
float r;
if(nbut==0) help("Vvedit zentr kola x,y");
if(nbut==1) {x1=x;y1=y;mark(x1,y1);nbut=2;}
if(nbut==2) {help("Vvedit radius kola xr,yr");
mouse(0);
r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
ramkolo(r,0);
r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
ramkolo(r,15);
mouse(1);}
if(nbut==3){
mouse(0);
setcolor(col);
r=sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y));
setviewport(0,22,538,458,1);
circle(x1,y1-22,r);
mouse(1);
nbut=0;}
}
void kurs(int x,int y){
setcolor(0);
line(x,y,x+8,y);
delay(50);
setcolor(15);
line(x,y,x+8,y);
delay(50);
}
void tekst(){
char tx[2],ch;
int xs,ys,i=0;
if(nbut==0) help("Vvedit pochatok tekstu x,y");
if(nbut==1) {help("Pry zakinchenni nazmit knopku Tab");
xs=x,ys=y;
mouse(0);
while(ch!=9){
if(kbhit()) ch=getch();
else ch=0;
tx[0]=ch;
tx[1]=0;
if(ch>31 && xs+8*i<525 && ys<460){
setcolor(col);
outtextxy(xs+8*i,ys-8,tx);i++;}
if(ch==13){i=0;xs=x;ys+=10;}
if(xs+8*i>524) {i=0;xs=x;ys+=10;}
if(ch==8) {i--;fillbar(xs+8*i,ys-8,xs+8*(i+1),ys,15);}
kurs(xs+8*i,ys+1);
}
}
nbut=0;
mouse(1);
}
void sterty(){
if(nbut==0) {mouse(1); help("Vvedit zvidky udalyaty");}
if(nbut==1) {x1=x;y1=y;x2=x;y2=y; help("Vvedit po sho udalyaty");nbut=2;}
if(nbut==2) {mouse(0);srect(x1,y1,x2,y2);x2=x;y2=y;srect(x1,y1,x2,y2);}
if(nbut==3) {mouse(0);fillbar(x1,y1,x2,y2,15);nbut++;mouse(1);}
if(nbut==0) {mouse(1);graphdefaults();nbut=0;}
}
void savebar (int xn,int yn, int xk,int yk){
int size;
if(buf==0){
size=imagesize(xn,yn,xk,yk);
p=malloc(size);
mouse(0);
getimage(xn,yn,xk,yk,p);
buf=1;
mouse(1);
}
}
void copiya(){
if(nbut==0) {mouse(1);help("Vvedit zvidky kopiyuvaty");}
if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Vvedit po sho copiyuvaty");nbut++;}
if(nbut==2) {mouse(0);srect(xp,yp,x2,y2);x2=x;y2=y;srect(xp,yp,x2,y2);}
if(nbut==3) {mouse(0);srect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);nbut++;mouse(1);}
if(nbut==4) {help("Vvedit kuda kopiyuvaty");mouse(1);}
if(nbut==5) {mouse(0);x1=xp-x2;y1=yp-x2;
if(x-x1<538 && y-y1<458)
putimage(x,y,p,0);mouse(1);graphdefaults();nbut=4;
}
}
void tyagty(){
if(nbut==0) {mouse(1); help ("Vvedit zvidky vyrizaty");}
if(nbut==1) {xp=x;yp=y;x2=x;y2=y;help("Vvedit po sho vyrizaty");nbut++;}
if(nbut==2) {mouse(0);srect(xp,yp,x2,y2);x2=x;y2=y;srect(xp,yp,x2,y2);}
if(nbut==3) {mouse(0);srect(xp,yp,x2,y2);savebar(xp+1,yp+1,x-1,y-1);fillbar(xp,yp,x2,y2,15);nbut++;mouse(1);x1=x-xp;y1=y-yp;}
if(nbut==4) {help("Vvedit kuda vstavlyaty");mouse(1);}
if(nbut==5) {mouse(0);if(x+x1<538 && y+y1<458){
fillbar(xp,yp,xp+x1,yp+y1,15);
xp=x;yp=y;putimage(x,y,p,0);}
mouse(1);graphdefaults();nbut=4;}
}
void proper(){
if(xpr>538) xpr=538;
if(ypr>458) ypr=458;
if(ypr<22) ypr=22;
}
void rzoom(float m,int xt,int yt){
float xold,yold,xnew,ynew;
xold=xt-xc;yold=yc-yt;
xnew=m*xold;ynew=m*yold;
ypr=yc-ynew;xpr=xnew+xc;
proper();
}
void dlyamult(double M,int w,int e){
rzoom(M,mxy[w].corx,mxy[w].cory);
moveto(xpr,ypr);
rzoom(M,mxy[e].corx,mxy[e].cory);
setcolor(15);
lineto(xpr,ypr);
}
void dlyamultmal(double M,int w,int e){
rzoom(M,mxy[w].corx,mxy[w].cory);
moveto(xpr,ypr);
rzoom(M,mxy[e].corx,mxy[e].cory);
setcolor(mxy[w].col);
lineto(xpr,ypr);
}
void mult(){
int i,j,k,f;
float h,xs,ys;
if(nbut==0){
mouse(1);
help("Vvedit zvidky zbilshyvaty");
for(j=0;j<5000;j++){
mxy[j].corx=0;
mxy[j].cory=0;
mxy[j].col=0;
}
}
if(nbut==1) {x1=x;y1=y;x2=x;y2=y;help("Vvedit po sho zbilshyvaty");nbut++;}
if(nbut==2) {mouse(0);srect(x1,y1,x2,y2);x2=x;y2=y;srect(x1,y1,x2,y2);}
if(nbut==3) {x2=x;y2=y;help("Nazmit: + dlya zbilshennya; - dlya zmenshennya");
srect(x1,y1,x2,y2);xc=float(x1+x2)/2;yc=float(y1+y2)/2;kpix=0;
for(j=y1;j<=y2;j++)
for(i=x1;i<=x2;i++)
if(getpixel(i,j)!=15){
mxy[kpix].corx=i;
mxy[kpix].cory=j;
mxy[kpix].col=getpixel(i,j);
kpix++;
}
nbut++;x=x1;y=y1;m=1;
}
if(nbut==4) mouse(1);
if(nbut==5) {for(j=0;j<kpix;j++)
putpixel(mxy[j].corx,mxy[j].cory,15);
mouse(1);
h=0.02;
for(i=0;i<=kpix;i++){
for(j=0;j<=kpix;j++){
if((mxy[i].col==mxy[j].col) && (mxy[i].cory==mxy[j].cory) && (mxy[i].corx==mxy[j].corx-1)) dlyamult(m,i,j);
if((mxy[i].col==mxy[j].col) && (mxy[i].cory==mxy[j].cory-1) && (mxy[i].corx==mxy[j].corx)) dlyamult(m,i,j);
if((mxy[i].col==mxy[j].col) && (mxy[i].cory==mxy[j].cory+1) && (mxy[i].corx==mxy[j].corx+1)) dlyamult(m,i,j);
if((mxy[i].col==mxy[j].col) && (mxy[i].cory==mxy[j].cory+1) && (mxy[i].corx==mxy[j].corx-1)) dlyamult(m,i,j);
}
}
if(mplus)m=m+h;
if(mminus)m=m-h;
for(i=0;i<=kpix;i++){
for(j=0;j<=kpix;j++){
if((mxy[i].col==mxy[j].col)&&(mxy[i].cory==mxy[j].cory)&&(mxy[i].corx==mxy[j].corx-1)) dlyamultmal (m,i,j);
if((mxy[i].col==mxy[j].col)&&(mxy[i].cory==mxy[j].cory-1)&&(mxy[i].corx==mxy[j].corx)) dlyamultmal (m,i,j);
if((mxy[i].col==mxy[j].col)&&(mxy[i].cory==mxy[j].cory+1)&&(mxy[i].corx==mxy[j].corx+1)) dlyamultmal (m,i,j);
if((mxy[i].col==mxy[j].col)&&(mxy[i].cory==mxy[j].cory+1)&&(mxy[i].corx==mxy[j].corx-1)) dlyamultmal (m,i,j);
}
ypr=490;if (ypr<22) ypr=-2;
}
mouse(1);
nbut=4;
}
}
void obem(int X1,int Y1,int X2,int Y2){
setcolor(7);
line(X1,Y2,X1,Y1);
line(X1,Y1,X2,Y1);
setcolor(0);
line(X2,Y1,X2,Y2);
line(X2,Y2,X1,Y2);
}
void inputfname(int fl){
char num;
char str[]={46,117,115,116,0};
int i;
for(i=0;i!=12;i++) fname[i]=0;
if (fl) help(" Vvedit name faylu dlya zberiganny ");
else help(" Vvedit name faylu yakyy potribno zavantazhyty");
i=0;
setcolor(15);
outtextxy(500,465,"file:");
while (num!=13){
if(kbhit()) num=getch();
else num=0;
setcolor(15);
line(540+8*i,474,548+8*i,474); delay(100);
setcolor(1);
line(540+8*i,474,548+8*i,474); delay(100);
setcolor(15);
if (num>32)
{fname[i]=num;outtextxy(540,465,fname);i++;}
if (num==8)
{fname[i]=0;i--;if(i<0)i=0;fillbar(540+8*i,465,548+8*i,473,1);}
}
strcat(fname,str);
outtextxy(608,465,str);
}
void save(){
char pro[4];
int xf,yf,cf,zap=273,i=0;
double q=0;
fillbar(500,460,640,475,1);
inputfname(1);
mouse(0);
F=fopen(fname,"wb");
if (F==NULL){
help("Nemozhu zapysaty");
fillbar(zap-2,1,540,19,1);
nbut=0;pmen=0;mouse(1);
fillbar(450,460,640,475,1);
return ;
}
fillbar(zap-2,3,538,18,9);
button(zap-2,2,540,19);
help("Chekayte zberigayu");
for(yf=23;yf<458;yf++){
for(xf=0;xf<538;xf++){
cf=getpixel(xf,yf);
if(cf!=15) fprintf(F,"%3d %3d %2d |",xf,yf,cf);
}
if(yf%10==0){
fillbar(zap+i,5,zap+i+3,16,12);
obem(zap+i,5,zap+i+3,16);
i+=5;
gcvt(q,3,pro);
fillbar(490,4,538,17,9);
setcolor(15);
outtextxy(496,7,pro);
outtextxy(530,7,"%");
q+=2.38;
}
}
fclose(F);
nbut=0;pmen=0;mouse(1);
fillbar(zap-2,1,540,19,1);
fillbar(5,460,500,475,1);
}
void load(){
int xf,yf,cf,zap=273,i=0,toch=0;
double q=0;
char pro[4];
fillbar(500,460,640,475,1);
inputfname(0);
mouse(0);
fillbar (0,22,538,458,15);
F=fopen(fname, "rb");
if (F==NULL){
help("Nemozhu prochytaty ");
fillbar(zap-2,1,540,19,1);
nbut=0;pmen=0;mouse(1);
fillbar(450,460,640,475,1);
return;
}
help("Chekayte, chytayu");
while (!feof(F)){
fscanf(F, " %3d %3d %2d |",&xf,&yf,&cf);
putpixel(xf,yf,cf);
if (toch%6000==0) {
fillbar(zap+i,5,zap+i+3,16,12);
obem(zap+i,5,zap+i+3,16);
i+=5;
gcvt(q,3,pro);
fillbar(490,4,538,17,9);
setcolor(15);
outtextxy(496,7,pro);
outtextxy(530,7,"%");
q+=2.563;}
toch+=1;
}
fillbar(zap-2,1,540,19,1);
fclose(F);
nbut=0;pmen=0;mouse(1);
}
void disp(){
switch (pmen){
case 1 : pointe(); break;
case 2 : line(); break;
case 3 : pryamokutnyk();break;
case 4 : kolo(); break;
case 5 : tekst(); break;
case 6 : sterty(); break;
case 7 : copiya(); buf=0; break;
case 8 : tyagty(); buf=0; break;
case 9 : mult(); break;
case 10: fillbar(0,22,538,458,15);pmen=0; break;
}
}
/*------------------------------------VOID MAIN-----------------------------*/
void main(){
initgr();
screen();
menu();
palette(550,370);
mouse(1);
while(key!=27)
{
if(kbhit()) key=getch();
else key=0;
mStatus();
if(key==60) save();
if(key==61) load();
if(key==43) {mplus=1;mminus=0;}
if(key==45) {mplus=0;mminus=1;}
indmouse(557,3);
setcol(550,370);
selmenu(40,10);
if(mousecoord(0,22,538,458)) count();
disp();
delay(1);
}
closegraph();
}
Приклад працездатності:
Висновок: Навчився зберігати та та відкривати файли з зображеннями. Удосконалив навички роботи з інтерфейсом та кодом програми.
