#include<dir. h> #include<iostream. h> #include<graphics. h> #include<bios. h> #include<conio. h> #include<stdio. h> #include<process. h> #include<dos. h> #include<stdlib. h> #include <math. h> #define N 2 void krdiagr (char* *name,float *procent); // диаграмма int out (); // справка о программе int SOUND (); // звук void OUTPUT (int p1, int p2, int p3, int p4); // цвета и текст меню void CLEAR (); // очистка экрана int main () / { clrscr (); int count=1; // счётчик int key; // переменная хранит нажатие клавиш _setcursortype (_NOCURSOR); // выключаем курсор while (count<=4) // цикл { if (bioskey (1)! =0) key=bioskey (0); window (10,6,70, 20); // формат окна textbackground (BLUE); // цвет окна clrscr (); // очистка экрана switch (count) // цикл для меню { case 1: OUTPUT (0x4f,0x1f,0x1f,0x1f); // вызывает подпрограмму OUTPUT gotoxy (10, 20); // координаты текста cprintf ("Informacia ob aftore programmi"); // выводит текст по координатам if (key==0x1c0d) // если нажали "Enter” { CLEAR (); // вызывает подпрограмму чистки экрана cprintf ("Babii Alexandr 11.05.1993"); // выводим текст } break; // обрываем цикл case 2: OUTPUT (0x1f,0x4f,0x1f,0x1f); // вызывает подпрограмму OUTPUT gotoxy (10, 20); // координаты текста cprintf ("Informacia o tekuwem diske\ "); // выводит текст ниже окна if (key==0x1c0d) // если "Enter” { CLEAR (); // вызывает подпрограмму чистки экрана int gdriver = DETECT, gmode, errorcode; // инициализация графики int midx, midy; initgraph (&gdriver, &gmode, ""); errorcode=graphresult (); if (errorcode! = grOk) { printf ("Graphics error: %s\n", grapherrormsg (errorcode)); printf ("Press any key to halt: "); getch (); exit (1); } struct dfree free; // структура содержит информацию о дисках long avail; // переменная хранящая число свободного места int drive; // переменная хранящая текущий диск drive=getdisk (); getdfree (drive+1, &free); if (free. df_sclus == 0xFFFF) { printf ("Error in getdfree () call\n"); exit (1); } avail= (long) free. df_avail // свободные кластеры * (long) free. df_bsec // байты в секторе * (long) free. df_sclus; // секторы в кластере printf ("Tekuwii disk----------------------------| %c: \n", 'A' + drive, avail); long total; // переменная хранящая общий размер диска drive=getdisk (); // получаем букву текущего диска getdfree (drive+1,&free); if (free. df_sclus==0xFFFF) { printf ("Error in getdfree () call\n"); exit (1); } total= (long) free. df_total // общие кластеры * (long) free. df_bsec // байты в секторе * (long) free. df_sclus; // секторы в кластере printf ("\Obwee koli4estvo klasterov na diske: - ---|%u" "\nKoli4estvo svobodnix klasterov: - --------|%u" "\nKoli4estvo sektorov v klastere: - --------|%u" "\nKoli4estvo bait v sektore: - -------------|%u" "\n", free. df_total,free. df_avail,free. df_sclus,free. df_bsec); printf ("Obwii razmer disca %c: %lu mb\n",'A'+drive,total/1024/1024); printf ("Svobodnoe mesto disca %c: %lu mb\n",'A'+drive,avail/1024/1024); long zaniato=total-avail; printf ("Zaniatoe mesto disca %c: %lu mb\n",'A'+drive,zaniato/1024/1024); char *name [N] ={"Zaniato\0","Svobodno\0"}; // символьная строка хранит названия мест float razmer [N]; // размеры float procent [N]; // проценты float sum=0; // сумма int i; // временная используется в цикле как счетчик для нахождения сумм razmer [0] =zaniato; // размер занятого места razmer [1] =avail; // размер свободного места for (i=0; i<N; i++) { sum+=razmer [i]; // сумма обеих размеров (величин) } for (i=0; i<N; i++) // цикл procent [i] =razmer [i] /sum*100; // находит проценты krdiagr (name,procent); // вызывает подпрограмму вывода диаграммы getch (); // задержка экрана closegraph (); // закрываем графику } break; // обрываем цикл case 3: OUTPUT (0x1f,0x1f,0x4f,0x1f); gotoxy (10, 20); // координаты начала расположения окна и текста cprintf ("Spravka o programme"); // вывод на экран if (key==0x1c0d) // если нажата клавиша "Enter" выходим из программы { CLEAR (); // вызываем подпрограмму чистки экрана out (); // вызываем подпрограмму вывода текста } break; // обрываем цикл case 4: OUTPUT (0x1f,0x1f,0x1f,0x4f); gotoxy (10, 20); // координаты начала расположения окна и текста cprintf ("Vixod"); // выводим на экран if (key==0x1c0d) return 0; // если нажата клавиша "Enter" выходим из программы break; // обрываем цикл default: break; } key=bioskey (0); if (key ==0x5000) // если нажата клавиша вниз { SOUND (); // вызываем подпрограмму звука if (count==4) count = 1; // если счетчик равен 4, придаем ему значение 1 else count++; // иначе сдвигаем вперед (вправо) } if (key ==0x4800) // если нажата клавиша вверх { SOUND (); // вызываем подпрограмму звука if (count==1) count = 4; // если счетчик равен 1, придаем ему значение 4 else count--; // иначе сдвигаем его назад (влево) } if (key==0x11b) return 0; // если нажата клавиша "Esc" выходим из программы } return 0; } int SOUND () // звук { sound (100); // частота delay (100); // длительность 1 секунда nosound (); // выключает звук return 0; // возвращает ноль } void OUTPUT (int p1, int p2, int p3, int p4) { clrscr (); textattr (p1); cprintf ("Aftor programmi\n\r"); textattr (p2); cprintf ("Disk\n\r"); textattr (p3); cprintf ("HELP\n\r"); textattr (p4); cprintf ("Vixod"); window (10, 20,70, 20); // координаты окна textattr (0x04f); // фон синий, текст белый clrscr (); // чистит экран } void CLEAR () { window (10,6,70, 20); // координаты окна textattr (0x0f); // цвет текста (фон чёрный, текст белый) clrscr (); // чистит экран } int out () { cprintf ("Dlia upravlinia programmoi ispolzuite klaviwi '%c' i '%c', dlia vibora 'Enter'. Dlia vixoda ispolzuite 'Esc'.", 24, 25); // выводит текст на экран return 0; // возвращает ноль } void krdiagr (char* *name,float* procent) { int a1,a2; // начало и конец диаграммы в градусах int color [2] ={RED,BLUE}; // цвета для диаграммы и квадратиков int x,y; // переменные хранящие координаты квадратиков int i; // переменная используется в цикле соответствующих цветов a1=0; // начало диаграммы равно нулю x=10; y=130; // координаты размещения квадратиков for (i=0; i<N; i++) // цикл { a2=a1+3.6*procent [i]; // вычисляет градусы if (i==N-1) // условие a2=360; // конец диаграммы setfillstyle (SOLID_FILL,color [i]); // стиль диаграммы // sector (200, 200,a1,a2,100,100); pieslice (280,280,a1,a2,100); // вывод диаграммы a1=a2; printf (" %s-%f %\n",name [i],procent [i]); bar (x,y,x+30,y+10); // вывод квадратиков y+=16; // промежуток между квадратиками } } для определения