Иллюстрированный самоучитель по С++ для начинающих

Решения (задачи 230-239)

Задача 231.

// Круговая диаграмма
#include <graphi,cs .h> iinclude <stdio.h> #include <conio.h> finclude <math.h>
Idefine PATHTODRIVER "c: WborlandcWbgiW"
#define N 4 // количество категорий
void krdiagr(char* *name, float* dol)
int al,a2; // угол начала и конца сектора
int color[4] = {BLUE, YELLOW, GREEN, RED};
int x,y; // координаты вывода легенды
char st(25]; // изображение числа int i;
// строим диаграмму
al = 0; //от оси ОХ
х = 350; у =100; // левый верхний угол области легенды
for (i = 0; i < N; i++)
// сектор
a2 = al + 3.6 * dol[i]; // 1% -3.6 градуса
if (i == N-l) a2 = 360; // последний, по счету, сектор
setfillstyle(SOLID_FILL, color[i]);
sector(200.200,al,a2.100.100);
// pieslice(200.200,al,a2.100);
al = a2; // следующий сектор – от конца текущего
// легенда
bar(х,у,х+30,у+10);
rectangle(х,у,х+30,у+10);
sprintf(st, "%s – %2.If%\0", name[i],
outtextxy(x+50,у,st);
у += 20;
void main(void)
{
char *name[N] = {"Книги\0","Журналь\0",
"КанцтоварьДО","Прочее\0"};' float kol[N];
// количество для категории float dol[N];
// доля категории в общем количестве float sum =0;
// общее кол-во по всем категориям int i;
int gdriver = DETECT; /./ драйвер
int graode; // режим
int errorcode; // код ошибки
// ввод исходных данных
puts("Введите количество по каждой категории")
for (i = 0; i < N; i++)
printf("%s –
scanf("%f", S
+= kol[i];
// вычислим долю каждой категории в общей сумме for (i = 0; i < N; i++)
= kol[i]/sum*100;
// инициализация графического режима
initgraphUgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode == grOk) {
krdiagr(name, dol);// строим диаграмму
getch();
closegraph(); // выход из графического режима
else
printf("Ошибка: %d\n", errorcode);
puts("Для завершения наймите Enter");
getch();

Задача 232.

// Светофор
#include <graphics.h> #include <stdio.h> #include <conio.h> #include <dos.h>
ttdefine PATHTODRIVER "c:\\borlandc\\bgi\\"
// рисует круг заданного цвета
void krug(int x,int у, int r, int fc, int be)
(
// x, у, r – координаты центра и радиус //
fc, be – цвет круга и окантовки setfillstyle(SOLID_FILL,fc);
pies I ice (х, у, 0, 360, г) setcolor(be); circle(х,у,г);
void main(void)
{
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(Sgdriver, Sgrnode, PATHTODRIVER); errorcode = graphresult();
if (errorcode!= grOk) // ошибка инициализации
// графического режима ' {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите Enter")
getch();
outtextxy(10.10,"Соблюдайте правила уличного движения!")
rectangle (88.88.112.152);
// Горит красный свет
krug(100.100.10,RED,WHITE);
krugdOO, 120, 10, LIGHTGRAY, WHITE);
krugdOO, 140, 10, LIGHTGRAY, WHITE);
for (int i = 1; i <= 3;
// Здесь горит красный
delay(3000); // задержка 3 сек
krug(100.120.10,YELLOW,WHITE); // Включить желтый
delay(1000);
krug(100.100.10,LIGHTGRAY,WHITE); // Выключить красный
krugd00, 120.10, LIGHTGRAY,WHITE); // Выключить желтый
krugd00, 140.10,GREEN,WHITE); // Включить зеленый
delay(2000);
// Мигающий зеленый сигнал
for (int j = 1; j <= 5; j++) // мигает 5 раз
delay(500);
krug(100.140.10,GREEN,WHITE);
delay(500);
krug(100.14 0.10,LIGHTGRAY,WHITE)
krug(100.120.10,YELLOW,WHITE);
delay(1500);
krug{100.120.10,LIGHTGRAY,WHITE);
krug(100.100.10,RED,WHITE);
// Включить // зеленый
// Выключить // зеленый
// Включить // желтый
// Выключить // желтый // Включить // красный
outtextxy(10.25,"Нажмите Enter!");
getch();
closegraph(); // выход из графического режима
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.