p align="center">(обов'язковий) Текст програми #include <stdio.h> #include <conio.h> #include <graphics.h> #include <math.h> class Point { int x, y; public: Point(){} Point(int _x, int _y) { x=_x; y=_y; } int getx(){ return x; } int gety(){ return y; } void draw(int color) { setcolor(color); circle(x, y, 3); } }; long sd(Point p1, Point p2, Point p3) { return ((long)(p3.getx()-p1.getx())*(long)(p2.gety()-p1.gety())-(long)(p2.getx()-p1.getx())*(long)(p3.gety()-p1.gety())); } int Peretyn(Point p1, Point p2, Point p3, Point p4) { if (sd(p1, p2, p3)*sd(p1, p2, p4)<=0 && sd(p3, p4, p1)*sd(p3, p4, p2)<=0) return 1; return 0; } class Polygon { Point p1, p2, p3, p4; long s; public: Polygon(){ s = 0; } Polygon(Point _p1, Point _p2, Point _p3, Point _p4) { p1=_p1; p2=_p2; p3=_p3; p4=_p4; s=0; Point t; if (Peretyn(p1, p2, p3, p4)) { t=p2; p2=p3; p3=t; } else if (Peretyn(p2, p3, p4, p1)) { t=p1; p1=p2; p2=t; } } void Calc() { s+=(long)(p1.getx()-p2.getx())*(long)(p1.gety()+p2.gety()); s+=(long)(p2.getx()-p3.getx())*(long)(p2.gety()+p3.gety()); s+=(long)(p3.getx()-p4.getx())*(long)(p3.gety()+p4.gety()); s+=(long)(p4.getx()-p1.getx())*(long)(p4.gety()+p1.gety()); s=labs(s)/2; } long gets() { return s; } void sets(long _s) { s=_s; } void draw(int color) { setcolor(color); moveto(p4.getx(), p4.gety()); lineto(p1.getx(), p1.gety()); lineto(p2.getx(), p2.gety()); lineto(p3.getx(), p3.gety()); lineto(p4.getx(), p4.gety()); } }; float Angle(Point p1, Point p2) { long dx = (p2.getx()-p1.getx()); long dy = (p2.gety()-p1.gety()); if (dx==0 && dy==0) return 0; float res = float(dx*dx)/(float(dx*dx+dy*dy)); if (dx<0) res=-res; return res; } int main() { clrscr(); FILE *f=fopen("rect1.txt", "r"); int i, j, n; char s[200]; fgets(s, 200, f); for(n=0;!feof(f);++n) fgets(s, 200, f); rewind(f); Point* p=new Point[n]; fgets(s, 200, f); for(i=0; i<n; i++) { int x, y; fscanf(f, "%s%s%s%d%s%s%d%s", s, s, s, &x, s, s, &y, s); p[i]=Point(x, y); if (x<p[0].getx() || (x==p[0].getx() && y<p[0].gety())) { Point t=p[0]; p[0]=p[i]; p[i]=t; } } Polygon test(Point(10, 0), Point(10, 1), Point(9, 1), Point(9, 2)); for(i=1; i<n; i++) { float An = Angle(p[0], p[i]); int nom = i; for(j=i+1; j<n; j++) { float an = Angle(p[0], p[j]); if (an<An) { An = an; nom = j; } } Point t = p[i]; p[i]=p[nom]; p[nom]=t; } int gd=DETECT, gm; initgraph(&gd, &gm, "e:\\tc\\bgi"); if (graphresult()!=grOk) { printf("ERROR!\n"); return 1; } setcolor(GREEN); for(i=0; i<n; i++) p[i].draw(GREEN); int i1, i2, i3, i4; Polygon pmin, pmax; pmin.sets(1000000000); for(i1=0; i1<n; i1++) for(i2=i1+1; i2<n; i2++) for(i3=i2+1; i3<n; i3++) for(i4=i3+1; i4<n; i4++) { if (i1==40 && i2==43 && i3==47 && i4==49) { i2=i2; } Polygon pp = Polygon(p[i1], p[i2], p[i3], p[i4]); pp.Calc(); if (pp.gets()>pmax.gets()) pmax=pp; if (pp.gets()<pmin.gets()) pmin=pp; } pmin.draw(RED); pmax.draw(YELLOW); getch(); closegraph(); } Додаток Б. (обов'язковий) Текст програми меню #include<stdio.h> #include<conio.h> #include<iostream.h> #include<graphics.h> #include<string.h> #include<process.h> #include <stdlib.h> #include <math.h> #include <dir.h> #include "clases.h" #define LEFT 75 #define RIGHT 77 #define ENTER 13 char bc_path[255]="e:\\tc\\BIN\\tc.exe"; char bc_path1[255]="e:\\tc\\BIN\\"; int findfile(void); void f_file(char *fname); void generateNewInfile(void); /**********************************************/ class MenuItem { int x1; int y1; int x2; int y2; char str[80]; public: void setParam(int xx1,int yy1,int xx2,int yy2,char *sstr) { x1=xx1; y1=yy1; x2=xx2; y2=yy2; strcpy(str,sstr); }; void showAct(void); void showPas(void); void About(void); void Run(int); }; void MenuItem::showPas(void) { setviewport(x1,y1,x2,y2,1); setfillstyle(1,0); bar(1,1,x2,15); setfillstyle(1,8); bar(1,1,x2-1,14); setfillstyle(1,15); bar(0,0,x2-2,13); setfillstyle(1,7); bar(1,1,x2-2,13); setcolor(15); outtextxy(6,4,str); setcolor(0); outtextxy(5,3,str); }; void MenuItem::showAct(void) { setviewport(x1,y1,x2,y2,1); setfillstyle(1,0); bar(0,0,x2,15); setfillstyle(1,9); bar(2,3,x2,14); setcolor(12); outtextxy(7,5,str); setcolor(10); outtextxy(6,4,str); }; void MenuItem::About(void) { char str[80]; window(10,5,70,15); FILE*f1=fopen("About.dat","r"); for(int i=0;i<3;i++) { fgets(str,80,f1); gotoxy(1,i+1); printf("%s",str); i++; }; getch(); }; void MenuItem::Run(int activ) { switch (activ) { case 0: About(); break; case 1: f_file("input.txt"); break; case 2: f_file("menu.cpp"); break; case 3: int res = spawnl(P_WAIT,"circles.exe",NULL); break; case 4: closegraph(); exit(0); break; }; }; /***************************************************/ class Menu { MenuItem mits[5]; int nomAct; int oldNomAct; void onLeft(void); void onRight(void); void onEnter(void); void show(void); void show1(void); public: Menu(int xx,int yy); void getMessage(int msg); }; Menu::Menu(int xx,int yy) { int x,y; x=xx; y=yy; char str[80]; FILE *f; f=fopen("menudata.txt","r"); for(int i=0;i<5;i++) { fgets(str,80,f); mits[i].setParam(x,y,x+strlen(str)*8+1,y+15,str); x+=strlen(str)*8+3; }; nomAct=0; oldNomAct=1; show(); }; void Menu::getMessage(int msg) { switch(msg) { case LEFT: onLeft(); show1(); break; case RIGHT: onRight(); show1(); break; case ENTER: onEnter(); show1(); }; }; void Menu::onLeft(void) { oldNomAct=nomAct; nomAct=(nomAct==0)?4:nomAct-1; }; void Menu::onRight(void) { oldNomAct=nomAct; nomAct=(nomAct==4)?0:nomAct+1; }; void Menu::onEnter(void) { mits[nomAct].Run(nomAct); }; void Menu::show(void) { int gdr=DETECT,gm; initgraph(&gdr,&gm,"e:\\tc\\bgi"); setfillstyle(1,0); bar(0,0,639,479); for(int i=0;i<5;i++) if(i==nomAct) mits[i].showAct(); else mits[i].showPas(); }; void Menu::show1(void) { for(int i=0;i<5;i++) if(i==nomAct) mits[i].showAct(); else mits[i].showPas(); }; //********************************************** main() { Menu mnu(40,40); while(1) mnu.getMessage(getch()); } int findfile() { struct ffblk ffblk; if(findfirst(bc_path,&ffblk,0)==0) return 1; for(;;) { cleardevice(); gotoxy(1,1); cout << "\nЌҐ¬®¦г § ©вЁ । Єв®а д ©«iў."; cout << "\n‚ўҐ¤iвм и«пе в i¬'п д ©«г вЁЇг bc.exe"; cout << "\nЌ ЇаЁЄ« ¤ C:\\bc\\bin\\bc.exe Ў® exit ¤«п ўЁе®¤г.\n"; cin >> bc_path; if(bc_path[0]=='e'&&bc_path[1]=='x') { cleardevice(); return 0; } if(findfirst(bc_path,&ffblk,0)==0) { cleardevice(); return 1; } else { cout << "\n” ©«\n"<<bc_path<<"\nҐ§ ©¤Ґ® Ў® ҐЄ®аЄвҐ i'¬п д ©«г\n"; getch(); } } } void f_file(char *fname) { if(findfile()==0) return; char cmd[250]; strcpy(cmd, "notepad "); strcat(cmd,bc_path1); strcat(cmd,fname); system(cmd); }
Страницы: 1, 2, 3
|