Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт ТРПЗ(голяк).doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Хід виконання роботи

  1. Підключив до програми бібліотечні файли math.h i string.h.

  2. Написав функцію відображення підказок.

  1. Написав функцію малювання крапок і функцію аналізу пунктів меню.

  1. Написав функцію малювання лінії.

  1. Написав функцію для малювання прямокутників.

Висновок: Навчився створювати графічні елементи в програмному середовищі.

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();

}

Приклад працездатності:

Висновок: Навчився зберігати та та відкривати файли з зображеннями. Удосконалив навички роботи з інтерфейсом та кодом програми.