#include<dir. h> #include<iostream. h> #include<graphics. h> #include<bios. h>

advertisement
#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; // промежуток между квадратиками
}
}
для
определения
Download