Задачник и решебник (1087980), страница 19
Текст из файла (страница 19)
Решенияtr[16] = x0+7*dx;tr[18] = x0+7*dx;tr[20] = x0+13*dxtr[22] = x0+13*dxtr[24] = x0+12*dxtr[26] = x04-12*dxtr[28] = x04-0*dx;drawpoly(15,tr);tr[17]tr[19]tr[21]tr[23]tr[25]tr[27]tr(29]= y0+3*dy;== yO+l*dy;= yO+l*dy;= y0+2*dy;= y0+2*dy;= y0+7*dy;== y0+7*dy;// окноrectangle(x0+8*dx,y0+2*dy,xO+10*dx,yO+4 *dy)<// колесаsetf illstyle(SOLID__FILL, RED) ;setcolor(RED);pieslice(x0+3*dx,y0+7*dy,0,360,l*dx),pieslice(xO+6*dx,y0+7*dy,0,360,l*dx)^pieslice(x0+9*dx,y0+7*dy,0,360,l*dx)<// окантовка колесsetcolor(WHITE);circle(x0+3*dx,y0+7*dy,l*dx),circle(x0+6*dx,y0+7*dy,l*dx) ,circle(x0+9*dx,y0+7*dy,l*dx) ,void main (void){int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult()/if (errorcode == grOk){parovoz(100,100);getch();closegraph0; // выход из графического режима}else {printf("Ошибка: %d\n", errorcode);192C/C++ в задачах и примерахp u t s ( " Д л я завершения нажмите < E n t e r > " ) ;getch();}}Задача 226// Оцифрованные координатные оси#include <graphics.h>#include <stdio.h>#include <conio.h>#define PATHTODRIVER "c: WborlandcWbgiW"void gridO{int xO,yO; // координаты начала координатных осейint dx,dy; // шаг координатной сетки (в пикселах)int h,w;// высота и ширина области вьшода// координатной сеткиint х,у;float 1х,1у;float dlx,dly;char St [8];// метки линий сетки по X и Y// шаг меток линий сетки по X и Y// изображение метки линии сеткихО = 50; уО = 400; // оси начинаются в точке (50,400)dx = 40; dy = 40; // шаг координатной сетки 40 пикселовdlx = 0 .
5 ;// шаг меток оси X// метками будут: 0.5, 1.0, 1.5 ...dly = 1 ;// шаг меток оси Y// метками будут: 1, 2, 3 ...h = 300;W = 400;1х = 0;1у = 0;/ / в начало координат ставятся метки ОIine(x0,y0,x0,y0-h); // ось XIine(x0,y0,x0+w,y0); // ось Y// засечки, сетка и оцифровка по оси XЧасть II, РешенияX = хО;do {/ / засечкаsetlinestyle(SOLID_LINE, О, 1);line(х,у0-3,х,у0+3);// оцифровкаsprintf (St, "%2. If М х ) ;outtextxy{x-8,y0+5,st);Ix += dlx;// линия сеткиsetlinestyle(DOTTED_LINE, О, 1) ;line(x,yO-3,X,yO-h);X += dx;} while (x < xO+w);// засечки, сетка и оцифровка по оси YУ = уО;do {// засечкаsetlinestyle(SOLID_LINE, О, 1);Iine(x0-3,y,x0+3,y);// оцифровкаsprintf(St,"%2.If",1у);outtextxy(хО-40,у,st);1у += dly;// линия сеткиsetlinestyle(DOTTED_LINE, О, 1);line(x0+3,y,x0+w,y);setlinestyle(SOLID_LINE, 0, 1);у -= dy;} while (y > yO-h);}void main (void){int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();193^194C/C++ в задачах и примерахif (errorcode != grOk)// ошибка инициализации// графического режима{printf("Ошибка: %d\n", errorcode);puts("Для завершения программы нажмите <Enter>");getch();return;}grid();getch();closegraph0; // выход из графического режимаЗадача 227// График функции#include <graphics.h>#include <stdio.h>#include <conio.h>#define PATHTODRIVER "c: WborlandcWbgiW"void grafikO{float x,dx;float х1,х2;float у;int mx,my;int хО,уО;int рх,ру;// аргумент и его приращение// диапазон изменения аргумента// значение функции// масштаб по X и Y - кол-во точек// экрана, соответствующее единице//по осям координат// начало осей координат// координаты точки графика на экранехО = 320; уО = 240;тх = 20; ту = 20;// оси координатIine(10,y0,630,y0);Часть IL РешенияW5^Iine(x0,10,x0,470);// графикxl = -15;x2 = 5;dx = 0.1;X = xl;while ( X < x2 ){у = 0.5*x*x + x*4 - 3;px = xO + x*inx;py = yO - y*my;putpixel(px,py,WHITE);X += dx;}// функция-void main (void){int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode 1= grOk)// ошибка инициализации// графического режима{printf("Ошибка: %d\n", errorcode);puts("Для завершения программы нажмите <Enter>"),getch();return;grafikO ;getch();closegraph0; // выход из графического режима}196C/C-f-f- в задачах и примерахЗадача 228// Движущаяся окружность#include <graphics.h>#include <stdio.h>#include <conio.h>#include <dos.h>// для доступа к delay#define PATHTODRIVER "c: WborlandcWbgiW"// вычерчивает окружностьvoid okr(int x, int y, //int r,//int color)//{setcolor(color);circle(x,y,r);}заданного цветакоординаты центрарадиусцветvoid main (void)int x,y;// координаты центра окружностиint г = 5; // радиус наименьшей окружности#define dt 10#define dx 5int maxx;// задержка между перемещениями// 0.01 сек// шаг перемещения// X — координата крайней правой// точки экранаint gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &ginode, PATHTODRIVER);errorcode = graphresult();if (errorcode == grOk){Часть II.
РешенияX = 0;/ / движение от левой границы экранау = 100;шахх = getmaxx();while (х < шахх){окг(х,у,r,RED); // нарисовать окружностьdelay(dt);// задержкаokr(х,у,г,BLACK)/// стереть окружностьX += dx;}closegraphO; // выход из графического режима}else{ргintf("Ошибка: %d\n", errorcode);puts("Для завершения нажмите <Enter>");getch();}Задача 229// Плывущий корабль#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <dos.h>#define dx#define dy55// шаг сетки по X// шаг сетки по Yvoid ship(int x, int y, int color ) //к,у — координаты// базовой точьси{setcolor(color);// корпусmoveto(x,y);lineto(X,y-2*dy);lineto(x+10*dx,y-2*dy);lineto(x+ll*dx,y~3*dy);lineto(x+17*dx,y-3*dy);197198С/С+-^ в задачах и примерахlineto(x+14*dx^ у ) ;lineto(x,y);// надстройкаmoveto(x+3*dx,y-2*dy);lineto(x+4*dx,y-3*dy);lineto(x+4*dx,y-4*dy);lineto(x+13*dx,y-4*dy);lineto(x+13*dx,y-3*dy);line(x+5*dx,y-3*dy,x+9*dx,y-3*dy);// капитанский мостикrectangle(x+8*dx,y~4*dy,x+ll*dx,y-5*dy);// трубаrectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);// иллюминаторыcircle(x+12*dx,y-2*dy,dx/2);circle(x+14*dx,y-2*dy,dx/2);// мачтаline(x+10*dx,y-5*dy,x+10*dx,y-10*dy);// оснасткаmoveto(x+17*dx,y-3*dy);lineto(x+10*dx,y-10*dy);lineto(x,y-2*dy);#define PATHTODRIVER "c: WborlandcWbgiW"void main (void){int x,y; // координате! корабля (базовой точки)int maxx; // коорд.
крайней правой точки экранаint gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode != grOk)// ошибка инициализации// графического режимаЧасть II. Решения{ргintf("Ошибка: %d\n", errorcode);puts("Для завершения программы нажмите <Enter>"};getch();return;maxx = getmaxx();X = -10 ; // корабль выплывает из-за правой// гранищ:,! экранау = 100;while ( X < maxx){ship(х,у, GREEN); // нарисовать корабльdelay(20);ship(х,у,BLACK);// стереть корабльX += 5;}setcolor(GREEN);outtextху(10,10,"Рейс завершен!");outtextxy(10,24,"Нажмите <Enter>");getch();closegraphО; // выход из графического режимаЗадача 230// Столбиковая диаграмма#include <graphics.h>#include <stdio.h>#include <conio.h>#define PATHTODRIVER "c: WborlandcWbgiW"// глобалы1ые переменныеchar *ines[] ={"двоек\0", "троек\0","четверок\0","пятерок\0"};int n[4];// количество пятерок, четверок,// троек и двоек199200С/С-^-+ в задачах и примерахfloat р[4]; // процент каждой оценкиint h[4];// высота столбиков диаграммvoid obr() // ввод и обработка{int s;// всего оценокint m;// номер максимального эл-та массива пint i;// индекс массиваputs("Обработка результатов контрольной работы");puts("Введите исходные данные:");for (i = 3; i >= 0; i—)(printf("%s ->", mes[i]);scanf("%i", &n[i]);}// обработкаs = 0;// всего оценокfor (i = 0 ; i < 4; i++)s += n[i];// процент каждой оценкиfor (i = 0; i < 4; i+-f)p[i] = (float)n[i]/s*100;// вьлчислим высоту каждого столбика диаграммы,//но сначала определим, каких оценок большеm = 3; // пусть больше всего пятерокfor (1 = 2; i >= 0; i—)if (n[i] > n[m]) m = i;// Пусть количеству оценок, которых больше,// соответствует столбик высотой 200 пикселов.// Вычислим высоту остальных столбиков.for (1 = 0 ; 1 < 4; i++)h[i] = 200 * n[i]/n[m];Часть II.
Решенияvoid diagr(){int x,y; // координаты левого нижнего угла// столбика диаграммыint 1;// индекс массива// цвет столбиковint color[4] = {YELLOW, BLUE, GREEN, RED};char buf[10];outtextxy(40,50,"Результаты контрольной работы\0");rectangle(40,80,170,310);X = 50; у = 300; // левый нижний угол первого столбика// столбики диаграммыfor (i = 3; i >= 0; i—){setfillstyle(SOLID_FILL, color[i]);bar(x,y,x+10,y-h[i]); // столбикsprintf(buf,"%2.If",p[i]);outtextxy(x,y-h[i]-10,buf);X += 20;}// численные значенияX = 50;for (i = 3; 1 >= 0; i—){setfillstyle(SOLID_FILL,color[i]);//bar(x,y,x+10,y-h[i]); // столбик//OutTextXY(x,y-h[i]-10,RealToStr(p[i],5,l)+»%\n");X = x+20;}// легендаX = 200;y = 100;for (i = 3; i >= 0; i—){setfillstyle(SOLID_FILL,color[i]);bar(x,y,x+20,y+10); // столбикouttextxy(x+25,у,mes[i]);у += 20;}201202С/С-^"*- в задачах и примерахvoid main О{int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиobrO; // ввод и обработка результатовinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode == grOk)diagrO; // вывод диаграммыelse{printf("Ошибка: %d\n", errorcode);puts("Для завершения программы нажмите <Enter>");}getch();}Задача 231// круговая диаграмма#include <graphics.h>#include <stdio.h>#include <conio.h>#include <math.h>#define PATHTODRIVER "c: WborlandcWbgiW"#define N 4 // количество категорийvoid krdiagr(char*{int al,a2;int color[4] =int x,y;char St[25];int i;*name, float* dol)// угол начала и конца сектора{BLUE, YELLOW, GREEN, RED};// координаты вьшода легенды// изображение числаЧисть II.
Решения// строим диаграммуa l = 0;/ / от оси ОХX = 350; у = 100; // левый верхний угол области легендыfor (i = 0 ; i < N; i++){// секторa2 = al + 3.6 * dol[i]; // 1% - 3.6 градусаif (i == N-1) a2 = 360; // последний, no счету, секторsetfillstyle(SOLID_FILL, color[i]);sector(200,200,al,a2,100,100);// pieslice(200,200,al,a2,100);al = a2; // следующий сектор - от конца текущего// легендаЬаг(х,у,х+30,у+10);rectangle(х,у,х+30,у+10);sprintf(st, "%s - %2.1f%\0", name[i], dol[i]);outtextxy(x+50,y,st);у +== 20;}}void main (void){char *name[N] = {"Книги\0","Журналы\0","Канцтовары\0","Прочее\0"};float kol[N]; // количество для категорииfloat dol[N]; // доля категории в общем количествеfloat sum = 0 ; // общее кол-во по всем категориямint i;int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибки// ввод исходных данныхputs("Введите количество по каждой категории");for (1 = 0; i < N; i+-f){printf("%s -> ", name[i3);scanf("%f", &kol[i]);203204C/C++ в задачах и примерахsum += kol[i];}// вычислим долю каждой категории в общей суммеfor (i = 0; i < N; i+4-)dol[i] = kol[i]/sum*100;// инициализация графического режимаinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode == grOk){krdiagr(name, dol);// строим диаграммуgetch();closegraphO; // выход из графического режима}else {printf("Ошибка: %d\n", errorcode);puts("Дня завершения нажмите <Enter>");getch();}Задача 232// Светофор#include <graphics.h>#include <stdio.h>#include <coniQ.h>#include <dos.h>#define PATHTODRIVER "c: WborlandcWbgiW"// рисует круг заданного цветаvoid krug(int x,int у, int r, int fc, int be){// x, y, r - координаты центра и радиус// fc, be - цвет круга и окантовкиsetfillstyle(SOLID_FILL,fс);setcolor(fc);Часть II.