Информация


Programm.ws - это сайт, на котором вы можете почитать литературу по языкам программирования, а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..

Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.

Глава 2. Решения

Решения задач С++ 200-252

Задача 200

// Функция frame вычерчивает рамку #include "stdio.h" #include "conio.h"
// вычерчивает рамку
void frame(int 1, int t, int w, int h)

// l,t - координаты верхнего левого угла, // w, h - ширина и высота рамки
int х,у; // координаты выводимого символа
int i;
// символы, из которых составляется рамка
char cl = 218, // левый верхний угол
с2 = 196, // горизонтальная линия сЗ = 191, // правый в
gotoxy(l,t);
putch(cl);
for (i = 0; i < w-2; i++) // символы верхней границы
// рамки putch(c2);
putch(c3); у = t+1;

x = 1+w-l;
for (i =0; i < h-1; i++) //символы левой и правой границ
gotoxy(1,у); putch(c4); gotoxy(x,у); putch(c4);

gotoxy (1, у) ;
putch(c5);
for (i = 0; i < w-2; i++) // символы нижней границы
putch(c2); putch(c6);
void main ()

clrscr () ;
frame(5,5,30,10);
puts("\nftnH завершения нажмите <Enter>")
getchO ;

Задача 201

// Функция getint #include "stdio.h" tinclude "conio.h" iinclude "stdlib.h"
// Функция getint предназначена для ввода целого // положительного числа, состоящего из одной или двух цифр. //ВПри нажатии <Enter> функция возвращает // введенное число.
#define K_BACK 8 // код клавиши <Backspace>
#define K__ENTER 13 // код клавиши <Enter>
#define HB 4 // допустимое количество цифр int getint()
char ch; // текущий символ char buf[HB]; // введенные цифры int n = 0;
// кол-во введенных цифр
buf[0] = '\0';
while ((ch = getch()) != K_ENTER)
if (ch >= '0' && ch <= '9'S5 n < HB)
{ putch(ch);
buf[n++] = ch;
}
else if (ch == К BACK && n)

printf("\b \b") n—;
if (n)

buf[n] = '\0?; return(atoi(buf)
else return(-1);
void main () {
int a; // введенное число

puts("ХпДемонстрация работы функции getint\n");
puts("Функция getint предназначена для ввода"); puts("целого положительного числа."); puts("Во время ввода, для редактирования, может"); puts("использоваться клавиша <Backspace>");
puts("При нажатии <Enter> функция возвращает");
puts("введенное число или -1, если число не введено.");
puts("Введите число и нажмите <Enter>");
printf("->");
if (a = getint () )
printf("\пВы ввели число %d", а); else puts("Число не введено.");
завершения нажмите <Enter>");
getch();

Задача 202

// Функции getfloat и pos #include <stdio.h> iinclude <conio.h> #include <stdlib.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// возвращает позицию символа в строке
int pos(char* st, char c)
f
int i = 0;
while ( st[i] != с && st[i] )
i++; if ( St[i] )
return(i+1); else
return(0);

// вводит дробное число float getfloat()
{
fdefine N 10 // кол-во символов, включая точку и минус
char ch;
char buf[N+l];
int i;

170
r (i = 0; i < N+l; i++)
buf[i++] ='\0'; i = 0; do {
ch=getch();
if (ch >= '0' && ch <= '9' && i < 8) putch(ch); buf[i++] = ch;
)
else
switch (ch) {
case '-' : if (!i)
. putch(ch); buf[i++] = ch;
break;
case '.' : if ( ! (pos(buf, '.')))
putch(ch); buf[i++] = ch;
break;
case 8 : if (i)
printf("\b \b"); buf[ —i] = '\0';

} while (ch != 13); return(atof(buf));
}

void main(void) {
float f;
printf("Введите дробное число ->"); f = get float () ;
printf("ХпВведено число %e\n", f); getch();

Задача 203

// Игра "21"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h" // функция rand
#include "time.h" // функция time

int koloda[12]; int karta();
void main()
// колода карт
// функция "выдает" карту из колоды
int igrok =0; // очки игрока
int comp =0; // очки компьютера
char otv; // ответ игрока time_t t;
// создадим колоду
for (int i=2; i <=11; i++)
koloda[i] = 4; koloda[5] = 0; // "пятерок" в колоде нет
// инициализация генератора случайных чисел srand((unsigned)time(it));
printf("ХпИгра в карты до хорошего не доведет!\п");
do {
// карта игроку igrok += karta();
// карта компьютеру if (igrok < 21)
comp += karta();
if (igrok < 21 && comp < 21) {
printf("У вас %d\n",igrok);
printf("Еще карточку? (введите у или п) ");
otv = getchar () ;
Игрок нажимает две клавиши: с буквой и <Enter>
// предыдущий вызов getchar читает букву.
// При этом в буфере клавиатуры остается код
// клавиши <Enter>. Прочитаем его.
int b;
b = getchar();
} while (igrok <= 21 && comp <= 21 && otv != 'n') ;
if (igrok ==21 || (igrok < 21 && igrok > comp)
I| comp > 21) printf("Вы выиграли!\n");
else
printf("Вы проиграли!\n");
printf ("У вас %d\n", igrok); printf ("У компьютера %d\n", comp);
printf("Для завершения нажмите <Enter>"); getch();

// выдает карту из колоды int karta()

int i; do
i = randO % 10 +2; while (koloda[i] == 0); koloda[i]—; return i;

Задача 205

// Рисует олимпийский флаг #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h>
#define PATHTODRIVER "с:\\borlandc\\bgi\\" void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(sgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
exit(l);
// полотнище флага - сплошная заливка серым цветом setfillstyle(SOLID_FILL,LIGHTGRAY); // bar(80,80,200,135);
// кольца
setcolor(GREEN); // зеленое
circle(100,100,15);
setcolor(BLACK); // черное
circle(140,100,15);
setcolor(RED); // красное
circle(180,100,15);
setcolor(YELLOW); // желтое
circle(120,115,15);
setcolor(BLUE); // синее
circle(160,115,15);
¦
getch(); closegraph(); // выход из графического режима
// Выводит корабль (с использованием метода базовой точки) finclude <graphics.h> iinclude <stdlib.h> #include <stdio.h> ¦include <conio.h>
#defme dx 10 , '/ шаг сетки по X
#define dy 10 , 11 шаг сетки по Y

void shipfint x, int у) // х, у - координаты базовой точки
/ / корпус
moveto(x,у);
lineto(x,y-2*dy);
lineto (х+ЮМх, y-2*dy) ;
lineto(x+ll*dx,y-3*dy);
lineto(x+17*dx,y-3*dy);
lineto(x+14*dx,y);
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);
¦¦/.¦¦¦¦¦;
fdefine PATHTODRIVER "с: WborlandcWbgiW" void main(void)
int gdriver = DETECT; // драйвер .
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, &gmode, PATHTODRIVER); errorcode = graphresult();
if {errorcode != grOk) // ошибка инициализации
// граф. режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
exit (1);

ship(50,150); getch () ;
closegraph(); // выход из графического режима

Задача 209

// Узор из окружностей // случайного радиуса и цвета iinclude <graphics.h> ¦include <stdlib.h> #include <stdio.h> #include <conio.h> #include "time.h" #include "dos.h"

I #define PATHTODRIVER "c: WborlandcWbgiW'
// узор из окружностей void cuzor(int n)

ttdefine DELAY // задержка между выводом окружностей int x,y,r; // координаты центра и радиус окружности time_t t;
srand((unsigned)time(&t)); // инициализация ГСЧ for (int i = 0; i < n; i++)
x = randO % 640; у = randO % 480; r = randO % 240; setcolor(rand() circle (x,y, r) ; #ifdef DELAY delay(5); #endif

void main(void)
.
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraphf&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
exit (1);
}
cuzor(200); // узор из окружностей
getch();
closegraph(); // выход из графического р

Задача 211

I // Узор из линий
// случайного цвета ¦include <graphics.h> «include <stdlib.h> :. finclude <stdio. h>
#include <conio.h> ¦include "time.h"
[¦define PATHTODRIVER "c: WborlandcWbgiW"
// узор из линий void luzor(int n)
int x,y; // координаты конца линии int с; // цвет линии time_t t;
srand((unsigned)time(&t)); // инициализация ГСЧ for (int i = 0; i < n;' i++)
x = rand() % 640; у = rand() % 480; с = rand() % 16; setcolor(c); lineto(x,y);

void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки

initgraphf&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
ntf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
exit(l);

luzor(200); // узор из окружностей
getchO;
closegraph(); // выход из графического режима

Задача 212

// Контур пятиконечной звезды
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
ttdefine PATHTODRIVER "c: WborlandcWbgiW"
// контур пятиконечной звезды
^include "math.h"
void starline(int xO, int yO, int r)
(
// xO, yO - координаты центра звезды
//г - радиус звезды
int x,y;// координаты конца луча
// или впадины int a; // угол между осью ОХ и прямой,
// соединяющей центр звезды и
// конец луча или точку впадины int rl; // радиус окружности расположения
// точек впадин
#define RTOR 2.5 // отношение радиуса лучей //к радиусу впадин
а = 18; // строим от правого гор. луча
rl = r/RTOR;
х = xO+r*cos(a*2*M_PI/360) ;
у = y0-r*sin(a*2*M_PI/360) ;
moveto(x,y);
for (int i = 0; i < 5; i++)
a = a+36;
x = xO+rl*cos(a*2*M_PI/360);
у = y0-rl*sin(a*2*M_PI/360) ;
lineto(x,y); // от луча к впадине
а = а+36;
if (а > 360) а = 18;
х = xO+r*cos(a*2*M_PI/360);
у = y0-r*sin(a*2*M_PI/360);
lineto(х,у); // от впадины к лучу
void main(void)
int gdriver = DETECT; // драйвер
int gmode; int errorcode;
// режим
// код ошибки
initgraph(&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode ! = grOk.) // ошибка инициализации
// графического режима {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>")
getch();
exit(l);
starline(100, 100, 50);
getch();
closegraphO; // выход из графического режима
// Пятиконечная звезда #include <graphics.h> #include <stdio.h> # include <conio.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// пятиконечная звезда
#include "math.h"
void star(int xO, int yO; int r)
// xO, yO - координаты центра звезды //г - радиус звезды
int poly[20]; // координаты концов лучей //и впадин
int a; // угол между осью ОХ и прямой, // соединяющей центр звезды и // конец луча или точку впадины
int rl; // радиус окружности расположения // точек впадин
#define RTOR 2.5 // отношение радиуса лучей //к радиусу впадин
int i;
а = 18; // строим от правого гор. луча rl = r/RTOR; i=0; do {
= xO+r*cos{a*2*M_PI/360); = y0-r*sin(a*2*M_PI/360); a = a+36;
= xO+rl*cos(a*2*M_PI/360); - y0-rl*sin(a*2*M_PI/360); a = a+36;
if (a > 360) a = 18; } while(i < 20) ; setfillstyle(SOLID FILL,RED);
fillpoly(10,poly) .
void main(void)
{
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки

initgraph(&gdriver, sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch(); } else {
star(100, 100, 20);
getch();
closegraph(); // выход из графического режима

Задача 215

// Российский флаг rfinclude <graphics.h> #include <stdio.h> #include <conio.h>

#define PATHTODRIVER "c: WborlandcWbgiW" void rusflag(int x, int y, int 1, int h)
(
// x, у - координаты левого верхнего угла // 1, h - длина и высота флага int w = h / 3;// рисуем флаг
setfillstyle(SOLID_FILL,WHITE) ;
// Пятиконечная звезда #include <graphics.h> #include <stdio.h> #include <conio.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// пятиконечная звезда
#include "math.h"
void star(int xO, int yO, int r)
// xO, yO - координаты центра звезды //г - радиус звезды
int poly[20]; // координаты концов лучей //и впадин
int a; // угол между осью ОХ и прямой, // соединяющей центр звезды и // конец луча или точку впадины
int rl; // радиус окружности расположения // точек впадин
#define RTOR 2.5 // отношение радиуса лучей //к радиусу впадин
int i;
а = 18; // строим от правого гор. луча rl = r/RTOR; i=0; do {
= xO+r*cos(a*2*M_PI/360); = y0-r*sin(a*2*M_PI/360); a = a+36;
= xO+rl*cos(a*2*M_PI/360); = y0-rl*sin(a*2*M_PI/360); a = a+36;
if (a > 360) a = 18; } while(i < 20); setfillstyle(SOLID FILL,RED);
¦
fillpoly(10,poly);
void main(void)

int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, sgmode, PATHTODRIVER); errorcode = graphresult();

if (errorcode != grOk) // ошибка инициализации
// графического режима {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch(); } else {
star(100, 100, 20);
getch();
closegraph(); // выход из графического режима }

Задача 215


// Российский флаг #include <graphics.h> #include <stdio.h> #include <conio.h>

#define PATHTODRIVER "c: WborlandcWbgiW" void rusflag(int x, int y, int 1, int h)

// x, у - координаты левого верхнего угла // 1, h - длина и высота флага int w = h / 3;
// рисуем флаг
setfillstyle(SOLID_FILL,WHITE);
(x, у,х+1,y+w); setfillstyle(SOLID_FILL,BLUE); bar(x,y+w,x+1,y+2*w); setfillstyle(SOLID_FILL,RED); bar(x,y+2*w,x+l,y+3*w); outtextxy(x,y+h+5,"Россия\0"); }
void main(void) {
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>"); getch(); return;
rusflag(100,100,50,25);
getch();
closegraph(); // выход из графического режима

Задача 216

// Веселая рожица #include <graphics.h> #include <stdio.h> #include <conio.h>
#define PATHTODRIVER "c: WborlandcWbgiW" // веселая рожица
Fvoid face(int x, int у)
{
setfillstyle(SOLID_FILL,YELLOW);
setcolor(YELLOW); // чтобы на круге не было I pieslice(x,у,0,360,20); setcolor(BLACK); arc(x,y+2,180,360,10); //рот
// глаза
circle(x-7,y-7,2); circle(x+7,y-7,2);
!
)id main (void)

int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraphf&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима .{
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>")
getch() ;
return;
face(100,100);
getch();
closegraph(); // выход из графического режима

Задача 219

// Узор из разноцветных концентрических окружностей ¦iinclude <graphics.h> #include <stdio.h> #include <conio.h>
fine PATHTODRIVER "с : WborlandcWbgiW" void main(void)
int x = 100, // координаты центра окружности
у = 100;
int r = 5; // радиус наименьшей окружности
int dr = 5; // приращение радиуса окружности
int color; // цвет окружности
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraphf&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode == grOk) {
for (color = 1; color <= 15; color ++) {
setcolor(color); circle(x,y,r); r += dr; }
getch();
closegraph(); // выход из графического режима } else
-
printf("Ошибка: %d\n", errorcode); puts("Для завершения нажмите <Enter>"); getch();

Задача 220

// Узор из окружностей #include <graphics.h>
#include <stdio.h> #include <conio.h>
[fdefine PATHTODRIVER "c: WborlandcWbgiW" // узор из окружностей void uzor() f
int x = 100, // координаты центра окружности
у = 100;
int r = 20; // радиус окружности
int d = 30; // расстояние между центрами окружностей int i,j; // счетчики циклов
for (i = 0; i < 4; i++)
x = 100;
for (j = 0; j < 5; j++)
{
circle (x, y, r) ; x += d;
у += d;
aid main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(Sgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
urn ,-
uzor () ;
getch();
closegraph(); // выход из графического режима

Задача 221

// Узор из квадратов tinclude <graphics.h> #include <stdio.h> #include <conio.h>
!
#define PATHTODRIVER "с:\\borlandc\\bgi\\" // узор из квадратов void uzor()
int x; ,
int у = 100;
int n; // количество квадратов в ряду
int d = 30; // размер квадрата
int 1 = 10; // расстояние между квадратами
for (int i = 0; i < 5; i++)
// для ряда определим координату X
if (i % 2)
{ // нечетный ряд
п = 5; // пять квадратов в ряду
х = 100;
j . ¦
else { // четный ряд
п = 4;
х = 100 + d/2+1/2;
for (int j = 0; j < n; j++) {
rectangle(x,y,x+d,y+d);
x += d+1;
у += d/2+1/2;
void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, &gmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch ();
return;
uzor();
getch();
closegraphO; // выход из графического режима

Задача 222

// Шахматная доска ^include <graphics.h> #include <stdio.h> #include <conio.h>

#define PATHTODRIVER "c: WborlandcWbgiW" // шахматная доска void doska()
int xO = 100, // координаты левого верхнего угла доски
уО = 100;
x,у; // координаты левого верхнего угла клетки
int w = 25; // размер клетки
int i,j; // номер строки и колонки
х = хО; у = уО; for (i = 0; i < 8; i++) // восемь строк
for ( j = 0; j < 8; j++) II восемь клеток в строке
// если сумма номера строки и номера
// колонки, на пересечении которых находится
// клетка, четная, то клетка - коричневая,
// иначе - желтая
if ((i+j) % 2)
setfillstyle(SOLID_FILL,BROWN); else setfillstyle(SOLID_FILL,YELLOW); bar (x, y, x+w, y+w) ; x += w;

x = xO; у += w;
void main(void)
.
int gdriver = DETECT; // драйвер
int gmode; int errorcode;
// режим
// код ошибки

initgraphUgdriver, Sgmode, PATHTODRIVER) ; errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
{ i
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
return,-
doska () ;
¦
getch{) ;
closegraphO; // выход из графического режима

Задача 223

// Флажок
tinclude <graphics.h> tinclude <stdio.h> #include <conio.h>
tdefine PATHTODRIVER "c: WborlandcWbgiW" 'int flagt) {
int point[12]; // координаты точек флажка
// задать координаты контура флажка point[0] = 100; point[1] = 100; point[2] = 160; point[3] = 100; point[4] = 140; point[5] = 120; point[6] = 160; point[7] = 140; point[8] = 100; point[9] = 140; point[10]= 100; point[11] = 100; setfillstyle(SOLID_FILL, RED); fillpoly(6, point); line(100, 140, 100, 170);

void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, sgmode, PATHTODRIVER); errorcode = graphresult();
(errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>"); getch(); return;
flag();

getch();
closegraph(); // выход из графического режима

Задача 224

// Вычерчивает паровоз #include <graphics.h> #include <stdio.h> #include <conio.h> ' "
#define PATHTODRIVER "c: WborlandcWbgiW"
// вычерчивает паровоз void parovoz(int xO, int yO)
#define dx 5 // шаг координатной сетки #define dy 5 // шаг координатной сетки
int tr[30]; // координаты точек контура паровоза
// корпус
tr[0] = xO+O*dx; tr[l] = yO+7 *dy;
tr[2] = xO+O*dx; tr[3] = yO+6 *dy;
tr[4] = xO+l*dx; tr[5] = yO+6 *dy;
tr[6] = xO+l*dx; tr[7] = yO+3 *dy;
tr[8] = xO+2*dx; tr[9] = yO+3 *dy;
tr[10] = xO+2*dx; trtii] = yO+0 *dy;
tr[12] = xO+3Mx; tr[13] = yO+0 *dy;
tr[14] = xO+3*dx; tr[15] = yO+3 *dy;
191
tr[16] = xO+7*dx; tr[17] = yO+3*dy;
tr[18] = xO+7*dx; tr[19] = yO+l*dy;
tr[20] = xO+13*dx; tr[21] = yO+l*dy;
tr[22] = xO+13*dx; tr[23] = yO+2*dy;
tr[24] = xO+12*dx; tr[25] = yO+2*dy;
tr[26] = xO+12*dx; tr[27] = yO+7*dy;
tr[28] = xO+O*dx; tr[29] = yO+7*dy; ¦. .
drawpoly(15,tr);
// окно
rectangle(xO+8*dx,y0+2*dy;x0+10*dx,yO+4*dy) ;
// колеса
setfillstyle(SOLID_FILL, RED);
setcolor(RED);
pieslice(xO+3*dx,yO+7*dy,0,360,l*dx);
pieslice(xO+6*dx,yO+7*dy,0,360,l*dx);
pieslice(xO+9*dx,yO+7*dy,0,360,l*dx);
// окантовка колес
setcolor(WHITE);
circle(xO+3*dx,yO+7*dy, l*dx) ;
circle(xO+6*dx,yO+7*dy,l*dx);
circle(xO+9*dx,y0+7*dy, l*dx) ;
void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, sgmode, errorcode = graphresult();
PATHTODRIVER)
if (errorcode == grOk) {
parovoz(100,100);
getch();
closegraph(); // выход из графического
else {
printf("Ошибка: %d\n", errorcode);
s("Для завершения нажмите <Enter>") getch();

Задача 226

// Оцифрованные координатные оси #include <graphics.h> #include <stdio.h> #include <conio.h>
#define PATHTODRIVER "c:\\borlandc\\bgi\\"
void grid() f
int xO,yO; // координаты начала координатных осей int dx,dy; // шаг координатной сетки (в пикселах) int h,w; // высота и ширина области вывода
// координатной сетки int x,y;

float lx,1у; float dlx,dly; char st [8];
// метки линий сетки по X и Y
// шаг меток линий сетки по X и Y
// изображение метки линии сетки
хО = 50; уО = 400; // оси начинаются в точке (50,400) dx = 40; dy = 40; // шаг координатной сетки 4 0 пикселов dlx = 0.5; // шаг меток оси X
// метками будут: 0.5, 1.0, 1.5 ... dly =1; // шаг меток оси Y
// метками будут: 1, 2, 3 ... h = 300; w = 400;
lx = 0; ly =0;
//в начало координат ставятся метки 0
line(x0,y0,x0,y0-h); // ось X line(x0,y0,x0+w,y0); // ось Y // засечки, сетка и оцифров

х = хО; do {
// засечка
setlinestyle(SOLID_LINE, 0, 1);
line(x,yO-3,x,yO+3);
// оцифровка
sprintf(st,"%2.1f",lx);
outtextxy(х-8,yO+5,st);
lx += dlx;
// линия сетки
setlinestyle (DOTTED__LINE, 0, 1);
line(x,yO-3,x,yO-h);
x += dx; } while (x < xO+w);
// засечки, сетка и оцифровка по оси Y у = уО; do {
// засечка
setlinestyle(SOLID_LINE, 0, 1);
line(xO-3,y,xO+3,y);
// оцифровка
sprintf(st,"%2.If",ly) ;
outtextxy(xO-40,у, st) ;
ly += dly;
// линия сетки
setlinestyle(DOTTED_LINE, 0, 1);
line(xO+3,y,xO+w,y) ;
setlinestyle(SOLID_LINE, 0, 1);
'y — dy; } while (y > yO-h);

void main(void) {
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, Sgrnode, PATHTODRIVER); errorcode = graphresult();
(errorcode != grOk) // ошибка инициализации
// графического режима {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
return;
grid();
getch();
closegraph(); // выход из графического режима

Задача 227

// График функции
tinclude <graphics.h>
finclude <stdio.h> *
#include <conio.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
void grafik() {
float x,dx;
float xl,x2;
float y;
int mx,my;
int xO,yO; int px,py;

// аргумент и его приращение
// диапазон изменения аргумента
// значение функции
// масштаб по X и Y - кол-во точек
// экрана, соответствующее единице
//по осям координат
// начало осей координат'
// координаты точки графика на экране
хО = 320; уО = 240; тх = 20; ту = 20; // оси координат line(10,y0,630,y0);
line(xO,lO,xO,4"7O) ;
// график
xl = -15;
x2 = 5;
dx = 0.1;
x = xl; .
while ( x < x2 )
у = 0.5*x*x + x*4 - 3; // функция px = xO + x*mx; py = yO - y*my; putpixel(px,py, WHITE); x += dx;
void main(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки

initgraph(&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режима
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
return;

graf ik () ;
getch () ;
closegraphO; // выход из графического режима
// Движущаяся окружность
tinclude <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h> // для доступа к delay
«define PATHTODRIVER "c: WborlandcWbgiW"
// вычерчивает окружность заданного цвета
void okr(int x, int у, // координаты центра
int r, // радиус
int color) // цвет
setcolor(color); circle (x,y, r) ;
void main(void)
int x,y; // координаты центра окружности int г = 5; // радиус наименьшей окружности
#define dt 10 // задержка между перемещениями
// 0.01 сек ttdefine dx 5 // шаг перемещения
int maxx; // X — координата крайней правой // точки экрана
¦ int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult{);
¦ if (errorcode == grOk)
х = 0; // движение от левой границы экрана
у = 100;
maxx = getmaxx();
while (х < maxx)
okr(x,y, r, RED) ; // нарисовать окружность delay(dt); // задержка okr(x,y,r,BLACK);// стереть окружность х += dx; } closegraph(); // выход из графического режима
else
printf("Ошибка: %d\n", errorcode);
puts("Для завершения нажмите <Enter>"); getch();

Задача 229

// Плывущий корабль #include <graphics.h> Iinclude <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h>
tdefine dx 5 // шаг сетки по X #define dy 5 // шаг сетки по Y

void ship(int x, int y, int color ) // x, у — координаты
// базовой точки
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) ;
eto(x+14*dx,y);
lineto(x,у);
// надстройка
raoveto(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 "с: WborlandcWbgiW" void main(void)
int x,y; // координаты корабля (базовой точки) int maxx; // коорд. крайней правой точки экрана
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(Sgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode != grOk) // ошибка инициализации
// графического режи 199
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>''
getch();
return;

maxx = getmaxx();
x = -10 ; // корабль выплывает из-за правой
// границы экрана у = 100;
while ( х < maxx) {
ship(x,у, GREEN); // нарисовать корабль
delay(20);
ship(х,у,BLACK); // стереть корабль
х += 5; }
setcolor(GREEN);
outtextxy(10,10,"Рейс завершен!"); outtextxy(10,24,"Нажмите <Enter>"); getch(); closegraph(); // выход из графического режима

Задача 230

// Столбиковая диаграмма #include <graphics.h> #include <stdio.h> #include <conio.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// глобальные переменные
char *mes[] ={"двоек\0","троек\0",
"четверок\0","пятерок\0"} ;
int n[4]; // количество пятерок, четверок, // троек и двоat p[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++)
= (float)n[i]/s*100;

// вычислим высоту каждого столбика диаграммы, //но сначала определим, каких оценок больше m = 3; // пусть больше всего пятерок for (i = 2; i >= 0; i—)
if (n[i] > n[m] ) m = i;
// Пусть количеству оценок, которых больше, // соответствует столбик высотой 200 пикселов. // Вычислим высот 201
void diagr() {
int x,y; // координаты левого нижнего угла // столбика диаграммы
int i; // индекс массива
// цвет столбиков
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{ij);
bar(x,y,x+10,y-h[i]); // столбик
sprintf(buf,"%2.1f",p[i]);
outtextxy(x,y-h[i]-10,buf);
x += 20; )
// численные значения x = 50; for (i » 3; i >= 0; i—)
setfillstyle(SOLID_FILL, color[i]); //bar(x,y,x+10,y-h[i]); // столбик //OutTextXY(x,y-h[i]-10,RealToStr (p x = x+20;
, 5,
// легенда
x = 200;у = 100;
for (i = 3; i >= 0; i—)
{
setfillstyle(SOLID_FILL,color[i]) ;
bar(x,y,x+20,y+10); // столбик
outtextxy(x+25,y,mes[i]);
у += 20;

202
d main() {
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки

obr(); // ввод и обработка результатов
initgraph(Sgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode == grOk)
diagr(); // вывод диаграммы else
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>"); } getch ();

Задача 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;
¦
203
II строим диаграмму
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"};' 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
204
+= 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

// Светофор iinclude <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, у, г - координаты центра и радиус // fc, be - цвет круга и окантовки setfillstyle(SOLID_FILL,fc); 205
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(lOOO);
krug(100,100,10,LIGHTGRAY,WHITE); // Выключить красный
krugdOO, 120,10, LIGHTGRAY,WHITE) ; // Выключить желтый
krugdOO, 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();
closegraphO; // выход из графического
режима

Задача 233

// Часы с минутной и секундной стрелками
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
tinclude <dos..h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// выводит вектор заданной длины из текущей точки // используется для вывода изображения стрелки void vector(int a, // угол между вектором и осью ОХ int 1) // длина вектора
#define G 0.0174532 // коэф. перевода из градусов в радианы int x0,y0; 207
хО = getx();
уО = gety() ;
xl = хО + l*cos(a*G);
yl = уО - l*sin(a*G);
lineto(xl,yl);
void clock ()
int xO = 80, уО = 80; int d = 50; int s = 0; int m = 0; int as = 90; int am = 90;
// координаты центра часов
// диаметр циферблата
// время, кол-во секунд
// время, кол-во минут
// угол наклона секундной стрелки
// угол наклона минутной стрелки
circle(xO,yO,d+5); setfillstyle(SOLID_FILL, 0); do {
// вывести секундную стрелку moveto(x0,y0); setcolor(YELLOW); vector(as,d);
// вывести минутную стрелку moveto(x0,yO); setcolor(GREEN); vector(am,d-10) ;
delay(1000); // задержка
// стереть стрелки setcolor(0); // секундную moveto(x0,yO); vector(as,d);
// минутную moveto(xO,yO); vector(am,d-10);

208
(s > 60)
s = 0; ¦ am -= 6; // шаг движения минутной стрелки 6 градусов
if (am < 0) am = 354; }
as -= 6; if (as < 0) as = 354;
while ( !kbhit () );
void main(void)

int gdriver = DETECT; // драйвер
int gmode; // режим-
int errorcode; // код ошибки
initgraphf&gdriver, &gmode, PATHTODRIVER); errorcode = graphresult ();
if (errorcode == grOk) {
clock();
closegraph(); // выход из графического режима
else
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();

Задача 234

/|/ График функции #include <graphics.h> linclude <stdio.h> #include <conio.h> #include <math.h>
Idefine PATHTODRIVER "с : WborlandcWbgiW"
// функции, график которых надо построить
float fI(float x)
{
return(2 * sin(x) * exp(x/5));
void grafik()

// границы изменения аргумента функции
// границы изменения значения функции // аргумент функции // значение функции в точке х : // приращение аргумента // левый нижний угол области графика
// ширина и высота области графика
float xl=0,
x2=25;
float yl,y2; float x; float y; float dx=0.01 int 1-50,
b-4 00; int w=300,
h=200;
float mx,my; // масштаб по осям Х и Y int x0,y0; // точка - начало координат char st[25]; // изображение числа
// найдем максимальное и минимальное значение
// функций на отрезке [xl,x2]
yl = fl(xl); // минимум
у2 = fl(xl); // максимум
х = xl + dx;
do {
у = f 1 (к) ;
if (у < yl) yl = у;
if (у > у2) у2 = у;
х += dx; } while (x <= х2);
// вычислим масштаб по осям my = h/fabs(y2-yl); тх - w/fabs(x2-xl); // оси
= 1;
уО = b-abs(yl*my);
line(xO,yO,xO+w,yO);
// максимальное и минимальное значения функции
sprintf(st,"%3.2f",y2);
outtextxy(1+5,b-h,st);
sprintf(st,"%3.2f",yl);
outtextxy(1+5,b,st);
// построение графика
x = xl;
do {
у = fl(x);
putpixel(xO+x*mx,yO-y*my,15);
x += dx; } while (x <= x2);
void main(void)
{
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки

initgraph(&gdriver, Sgrnode, PATHTODRIVER); errorcode = graphresult();
if (errorcode == grOk)

graf ik () ; getchar(); closegraph(); } else {
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();

Задача 235

// Создает на диске файл #include "stdio.h" #include "conio.h"
#define FNAME "a:Wnumbers.txt\0" // имя файла #define N 5 /./ количество чисел
// Создает на диске А: файл и записывает в него // целые числа, введенные пользователем void main() {
char fname [20] = FNAME;
FILE *out; // файл чисел
int n; // число
puts("ХпСоздание файла");
printf("Введенные числа будут записаны в файл");
printf("%s\n", fname);
puts("После ввода каждого числа нажимайте <Enter>\n");
// Открыть файл в режиме записи (w) текста (t)
// Если файл с таким именем уже есть, то новые
// данные будут записаны поверх старых
// Для дозаписи в конец файла используйте
// режим добавления (а)
if ((out = fopen(fname, "wt")) == NULL)
printf("Ошибка открытия файла для записи");
getch();
return;
for (int i = 0; i < N; i++)
printf("->"); scanf("%i", &n); fprintf(out,"%i",n);
fclose(out); // закрыть файл
Введенные числа записаны в файл %s\n", fname); puts("\nfljifl завершения нажмите <Enter>") ; getch();

Задача 236

// Добавляет данные в файл iincluae "stdio.h" finclade "conio.h"
tdefine FNAME "a:Wnumbers.txt\0" // имя файла #define N 5 // количество чисел
// Дописывает в находящийся на диске А: файл // целые числа, введенные пользователем void main() {
char fname[20] = FNAME;
FILE *out; // файл чисел
int n; // число
puts("\пДобазление в файл");
printf("Введенные числа будут добавлены в файл");
printf("%s\n", fname);
puts("После ввода каждого числа нажимайте <Enter>\n");
// Открыть файл в режиме добавления (а) текста (t) // Если файла с таким именем нет, то он будет создан if ((out = fopen(fname, "at")) == NULL) {
printf("Ошибка открытия файла для добавления");
getch();
return;
for (int i = 0; i < N; i++) {
printf("->");
scanf("%i", &n);
fprintf(out,"%i\n",n);
fclose(out); // закрыть файл
printf("Введенные числа добавлены в файл %s\n", fnarae);
puts("\nfljiH завершения нажмите <Enter>");
getch();

Задача 237

// Выводит на экран содержимое файла #include "stdio.h" #include "conio.h"
#define FNAME "a:Wnumbers.txt\0" // имя файла
void main()
{
char fname[20] = FNAME;
FILE *in; // текстовый файл
char st[80]; // строка из файла
printf("ХпСодержимое файла %s\n", fname);
I/ Открыть файл в режиме чтения (г) текста (t)
if ((in = fopen(fname, "rt")) == NULL)
(
printf("Ошибка открытия файла для чтения");
getch();
return;
while (!feof(in)) {
fscanf(in,"%s", &st);
printf("%s\n", st);
fclose(in); // закрыть файл
puts("----------------------------------
puts("\nJtnw завершения нажмите <Enter>" getch();
// Вычисляет среднее арифметическое чисел, // находящихся в файлах #include "stdio.h" #include "conio.h"
#define FNAME "a: Wnumbers. txt\0" // имя файла void main()
char fname [20] = FNAME;
FILE *in; // текстовый файл
int a; // число
int n = 0; // количество чисел
int sum =0; // сумма чисел
float sr; // среднее арифметическое
puts("ХпВычисление среднего арифметического");
printf("чисел, находящихся в файле %s", fname);
// Открыть файл в режиме чтения (г) текста (t) if ((in = fopen(fname, "rt")) = NULL)
printf("Ошибка открытия файла для чтения");
getch();
return;
while (!feof(in)) {
fscanf(in,"%i
sum += a;
&a) ;

fclose(in); // закрыть файл
sr = (float) sum / n;
printf("Введено чисел: %i\n", n);
printf("Сумма чисел: %i\n", sum);
printf("Среднее арифметическое: %3.2f", sr) ;
puts("\nAnH завершения нажмите <Enter>"); getch();

Задача 239

// Выводит на экран содержимое файла, // имя которого указано пользователем #include "stdio.h" #include "conio.h" #include "string.h"
#define MAXLEN void main()
// максимальная длина строки в файле
char fname [40]; // имя файла
FILE *in;
// текстовый файл
char st[MAXLEN+2];// строка, прочитанная из файла
int n = 0; // кол-во строк, выведенных на экран
char key; // клавиша, нажатая пользователем
puts("Просмотр текстового файла");
puts("Введите полное имя файла и нажмите <Enter>");
printf("->");
scanf("%s",Sfname);
// Открыть файл в режиме чтения (г) текста (t)
if ((in - fopen(fname, "rt")) == NULL)
{
printf("Ошибка при обращении к файлу %s\n", fname);
getch ();
return;
clrscr();
while (!feof(in))
{
fgets(st, MAXLEN, in);
printf("%s", st);
if (++n > 21)
ntf("ХпДля продолжения нажмите");
printf("любую клавишу...");
key = getch();
gotoxy(1,wherey()); // курсор в начало текущей
// строки delline; // удалить сообщение "Для
// продолжения ..." п = 0;
fclose(in); // закрыть файл
printf("ХпДля завершения нажмите <Enter>"); getch();

Задача 240

// Дописывает в файл фамилию, имя и номер телефона #include "stdio.h" #include "conio.h"
#define FNAME "a:Wphone.txt\0" // имя файла void main()
(
char fname[20] = FNAME; FILE *out; // файл чисел
char fam[15]; // фамилия
char name[15]; // имя
char tel[9]; // номер телефона
puts("ХпДобавление в телефонный справочник");

// Открыть файл в режиме добавления (а) текста (t) // Если файла с таким именем нет, то он будет создан if ((out = fopen(fname, "at")) == NULL) {
printf("Ошибка открытия файла для добавления");
getch();
return;
// получим данные от пользователя
printf("Фамилия ->") ;
scanf("%s", &fam);
printf("Имя ->") ;
scanf("%s", iname);
printf("Телефон ->");
scanf("%s", &tel);
//и запишем их в файл
fprintf(out,"%s %s %s", fam, name, tel);
puts("Информация добавлена");
fclose(out); // закрыть файл
printf("\п\пДля завершения нажмите <Enter>\n"); getch();

Задача 242

// Поиск в телефонном справочнике #include "stdio.h" #include "conio.h"
#define FNAME "a:Wphone.txt\0" // имя файла void main ()
char fname[20] = FNAME;
FILE *in; // файл - телефонный справочник
char obr[15]; // фамилия - образец для поиска в БД
// найденная информация
char fam[15]; // фамилия
char name[15]; // имя
char tel [9]; // номер телефона
int n = 0; // количество записей, удовлетворяющих запросу puts("\пПоиск в телефонном справочнике");
Открыть файл в режиме чтения (г) текста (t) if ((in = fopen(fname, "rt")) = NULL)
printf("Ошибка открытия файла %s", fname);
getch();
return;
// получим данные от пользователя
printf("Фамилия ->");
scanf("%s", Sobr); // образец для поиска в БД
while (!feof(in))
fscanf(in,"%s %s %s", &fam, Sname, &tel);
if (fam == obr)
(
printf("%s %s %s",fam, name, tel);
}
if (n )
printf("Найдено записей: %i", n); else
printf("Данных об абоненте %s в БД нет", obr);
fclose(in);
// закрыть файл
рийз("\цЦля завершения нажмите <Enter>"); getch();

Задача 244

// Универсальная программа тестирования
// имя файла теста задается в инструкции запуска программы
#include "stdio.h"
#include "conio.h"
#include "string.h"
void main(int argc, char* argv[])
char fname[40]; // имя файла теста FILE* f; // файл теста
int VsegoVopr =0; // количество вопросов теста int PravOtv =0; // количество правильных ответов
// для текущего вопроса
int nOtv; // количество альтернативных ответов
int Prav; // номер правильного ответа
int Otv; // номер ответа, выбранного пользователем
int p; // процент правильных ответов char st[80]; // строка файла теста int i; // счетчик циклов
if ( large ) {
puts("\nHe задан файл вопросов теста!");
puts("Командная строка: test ИмяФайлаТеста\п");
return;
strcpy(fname,argv[l]); // имя файла из командной строки // Открыть файл в режиме чтения (г) текста (t) if ((f = fopen(fname, "rt")) = NULL) {
printf("Ошибка открытия файла %s", fname);
getch();
return;
clrscr ();
puts("ХпСейчас Вам будет предложен тест.");
puts("К каждому вопросу дается несколько \
вариантов ответа.");
puts("Вы должны ввести номер правильного ответа");
puts("и нажать клавишу <Enter>\n");
printf
Для начала тестирования нажмите <Enter>"); getch();
textbackground (ВШЕ) ; clrscr();
while (!feof(f))
VsegoVopr++; fgets(st, 80, f); printf("\n%s\n", st) ;
.// читаем из файла вопрос // вопрос на экран
fscanf(f,"%i %i", SnOtv, &Prav);// кол-во вариантов
// ответа
//и номер прав, ответа fgets(st,80,f); // дочитать конец предыдущей строки
//читаем и выводим альтернативные ответы for (i = 1; i <= nOtv; i-
fgets(st, 80, f);
printf ("%i. %s", i, st); }
printf("\пВаш выбор ->"); scanf("%i", sotv); if (Otv == Frav) PravOtv++;
// обработка результата тестирования
// вычислим процент правильных ответов
р = 100 * PravOtv / VsegoVopr;
printf("ХпВаша оценка - ");
if (p == 100) puts("ОТЛИЧНО!");
if (p >= 99 && р <= 80) puts("ХОРОШО.");
if (р >= 60 && р <= 79) puts("УДОВЛЕТВОРИТЕЛЬНО."
if (p < 60) puts("ПЛОХО!\п");
puts("\nflnH завершения нажмите <Enter>") ; getch(); }

Задача 245

// Выводит имена всех файлов программ
// предполагается, что первая строка
// файла - комментарий, название программы
#include <stdio.h>
#include <dir.h>
#include <string.h>
#include <conio.h>
// #define DEBUG // режим отладки
//в качестве параметра программе передается
// имя каталога, список файлов которого надо вывести
void main(int argc, char *argv[])
{
struct ffblk ffblk; // информация о файле
int done;
FILE *in; // файл программы
int n;
// обработано файлов
char mask[MAXPATH]; char infilefMAXPATH]; char outfile[MAXPATH];
if (argc < 2)
putsf'B командной строке не задан путь");
puts("к обрабатываемым файлам");
printf("Командная строка: %s path\\\n", argv[0]);
return;
printf("\пПостроение списка файлов\п")
// маска обрабатываемых файлов strcpy(mask, argv[l]); strcat(mask,"*.cpp");
// файл-список обработанных файлов
cpy(outfile, argv[l]); strcat(outfile,"filelist.txt");
printf("Обработка: %s", mask); n = 0;
done = findfirst(mask, sffblk,0); while (!done)
#ifdef DEBUG
printf ("%s ", ffblk. ff__name) ;
#endif
strcpy(infile, argv[l]);
strcat (infile, ffblk. f f__name) ;
if ((in = fopen(infile, "rt")) != NULL)
(
// читаем из файла первую строку char st[80]; fgets(st, 80, in); printf("%s %s", infile, st); fclose(in);
}
done = findnext(Sffblk); // выбрать следующий файл }
printf("\пОбработано файлов: %d\n", n); printf("Для завершения нажмите <Enter>"); getch();

Задача 247

// Рекурсивная функция "Факториал" #include "stdio.h" #include "conio.h"
unsigned int factor(unsigned int k)
{
if ( k == 1 ) .
return(1); else
return(k*factor(k-1));
void main(
unsigned int n; // число, факториал которого надо
// вычислить unsigned int f; // факториал числа п
puts("Вычисление факториалаХп");
puts("Введите число, факториал которого надо вычислить");
printf("->");
scanf("%u", &n);
f = factor(n);
printf("Факториал числа %u равен %u", n, f) ;
printf("ХпДля завершения нажмите <Enter>"); getch();

Задача 248

// Рекурсивный узор из окружностей #include <graphics.h> #include <stdio.h> #include <conio.h> #include <dos.h>
#define PATHTODRIVER "c: WborlandcWbgiW"
// элемент узора
void elem(int x, int у, int r, int p)
11 у., у, г — координаты и радиус центра // основного элемента узора // р - порядок узора

if (P)
circle(x, у, г);
delay(100);
elem(x+r, у, г/2, р-1) ;
elem(x, y-r, г/2, р-1) ;
elem(x-r, у, г/2, р-1);
+r, г/2, р-1);
void main(void) {
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, &gmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode = grOk) {
elem(320, 240, 60, 5); // рисуем узор 5-го порядка
outtext("Для завершения нажмите <Enter>");
getch();
closegraph(); // выход из графического режима
else
printf("Ошибка: %d\n", errorcode); puts("Для завершения нажмите <Enter>"); getch();

Задача 249

// Вычисляет сопротивление
// n-звенной электрической цепи
#include <stdio.h>
#include <conio.h>
float rl(r2,r3; // величины сопротивлений, //из которых состоит цепь
// вычисляет сопротивление цепи n-го порядка
float rсер(int n)
{
float r; // сопротивление цепи п if (n — 1)
return(rl + r2 + гЗ); else
{
г = rcep(n-l);
return (rl + r2*r/(r2+r) + r3);
void main ()
{
int refloat re;
II количество звеньев (порядок) цепи // сопротивление цепи
puts("ХпВычисление сопротивления электрической цепи");
puts("Введите величины сопротивлений (Ом):");
printf("rl ->");
scanf("%f", &rl);
printf("r2 ->");
scanf("%f", &r2);
printf("r3 ->");
scanf("If", &r3);
printf("Порядок цепи ->");
scanf("%i", &n);
re = rcep(n); // величины сопротивлений передаются // функции гсер через глобальные // переменные
printf("Сопротивление цепи:");
if (re > 100)
{
гс /= 1000;
printf("%5.2f кОм\п", гс) ;
else
printf("%5.2f Ом\п", re);
рииз("\пДля завершения нажмите <Enter>"); getch();
// Вычерчивает схему электрической цепи #include <graphics.h> #inclade <stdio.h> iinclude <conio.h>
idefine PATHTODRIVER "c: WborlandcWbgiW"
// вычерчивает схему эл. цепи от точки
//с координатами х,у
void drсер(int k, int x, int y)
(
#define dx 7 // шаг сетки по X #define dy 7 // шаг сетки по Y
setcolor(GREEN);
line(x,y,x+2*dx,y);
rectangle(x+2*dx,y-dy,x+6*dx,y+dy);
line(x+6*dx,y,x+8*dx,y);
outtextxy(x+3*dx,y-3*dy,"ftl");
setcolor(YELLOW); line(x+8*dx,y,x+8*dx,y+2*dy); rectangle(x+7*dx,y+2*dy,x+9*dx,y+6*dy); line(x+8*dx,y+6*dy,x+8*dx,y+8*dy); outtextxy(x+10*dx,y+2*dy,"R2");
setcolor(LIGHTGRAY); line(x,y+8*dy,x+2*dx,y+8*dy); rectangle(x+2*dx,y+7*dy,x+6*dx,y+9*dy); line(x+6*dx,y+8*dy,x+8*dx,y+8*dy); outtextxy(x+3*dx,y+5*dy, "R3");
if
k > 1 ) drcep(k-l, x+8*dx, y);
void main(void) {
int k; // порядок цепи
int gdriver = DETECT; // драйвер
int grnode; int errorcode;
// режим
// код ошибки
initgraph(&gdriver, sgmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode == grOk) {
printf("Введите порядок цепи -> ");
scanf("%i", &k);
drcep(k, 10, 50);
outtextxy(10,200,
"Для завершения нажмите <Enter>"); getch(); closegraph(); // выход из графического режима
else
printf("Ошибка: %d\n", errorcode); puts("Для завершения нажмите <Enter>"); getch();

Задача 251

// Кривая Гильберта
#include <graphics.h>
ttinclude <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
#define PATHTODRIVER "c:\\borlandc\\bgi\\"
idefine DT 3 // задержка при выводе линий по точкам #define u 10 // величина штриха кривой Гильберта
void Gilbert(int p); // вычерчивает кривую Гильбе(void)
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; /7 код ошибки
initgraph(&gdriver, &gmode, PATHTODRIVER); errorcode = graphresult();
if (errorcode = grOk) {
outtextxy (10,10, "Кривая Гильберта ..."J.Gilbert (4) ;
outtextxy(10,25,"Для завершения нажмите <Enter>");
getch();
closegraph(); r
} else {
printf("Ошибка: %d\n", errorcode);
printf("\fljiH завершения программы нажмите <Enter>");
getch(); }
// Кривая Гильберта состоит из четырех элементов: а, Ь, с и d.
// Каждый элемент строит соответствующая функция.
void a(int i);
void b(int i);
void с(int i);
void d(int i);
void my_lineto(int x2, int y2); // вычерчивает по точкам
// линию ! void Gilbert(int p) // p - порядок кривой Гильберта
{
moveto(4 50,50); a(p);
// Элементы крив void a(int i)
if (i > 0) {
d(i-l); my_lineto (getx () - u, getyO) a(i-l); my__lineto(getx() , getyO + u) a(i-l); my_lineto (getx () + u, getyO) b(i-l) ;
void b(int i)
if (i > 0) {
c(i-l); b(i-l); b(i-l); a(i-l);
my_lineto (getx () , gety () - u) ; my lineto (getx () + u, getyO) my_lineto (getx () , gety () + u) ;
void с(int i)
if (i > 0) {
b(i-l); my_lineto(getx() + u,gety());
c(i-l); my_lineto(getx (), gety() - u);
c(i-l); my_lineto(getx() - u,gety()); d(i-l);
void d(int i
if (i > 0) {
a(i-l); my_lineto (getx () , gety () + u) d(i-l); my_lineto(getx() - u,gety()) d(i-l); my_lineto (getx () , gety () - u) c(i-l);
ерчивает по точкам линию void my_lineto(int х2, int у2) {
int xl,yl; // координаты начала прямой // х2, у2 — координаты конца
int х,у; // координаты текущей точки
int dx; // приращение аргумента
int dy; // приращение у при рисовании // вертикальной линии
int color; // цвет линии
int a,b; // коэф-ты уравнения прямой
int n; // кол-во точек
int i;
xl = getx () ; yl = gety(); if ( xl != x2 ) {
//не вертикальная линия a = (У2-у1)/(х2-х1); b = yl- a * xl; n = abs(x2-xl)+1; if (x2 > xl)
dx = 1; else dx = —1; x = xl;
color = getcolorO; for (i = 1; i<= n; i++) {
у = a*x + b; putpixel(x,y,color); delay(DT); x += dx;
else { // вертикальная линия n = abs(y2-yl); if (y2 > yl)
dy = 1; else dy = -1;
x = xl;
у = yl;
color = getcolor();
for (i = 1; i<=n;
putpixel(x, y, color); delay(DT);
у += dy;
putpixel(x2, y2, color); moveto(x2, y2) ;

Задача 252

// Кривая Серпинского
#define u 5 //Длина штриха, определяет величину кривой Idefine DT 25 // определяет скорость вычерчивания кривой #define PATHTODRIVER "с: WborlandcWbgiW"
#include <graphics.h> '
ttinclude <stdio.h> #include <conio.h> #include <math.h>
// кривая Серпинского состоит из четырех
// элементов: a, b, end
// каждый элемент строит соответствующая функция
void a(int i) ;
void b(int i);
void с(int i) ;
void d(int i) ;
// вычерчивает прямую из текущей точки в заданную
// координаты конца задаются в приращениях
#define linetodxy(dx,dy) lineto(getx()+dx,gety()+dy)
void far lineto(int x2, int y2); // вычерчивает линию по
// точкам
// заменяет стандартную функцию, чтобы // процесс вычементы кривой void a(infc i)
{
if (i > 0)
a(i-l); linetodxy(u, u);
b(i-l); linetodxy(2*u,0),
d(i-l); linetodxy(u, -u); a (i-1);
void b(int i)
{
if (i > 0)
b (i-1);linetodxy(-u,u); с(i-1);linetodxy(0, 2*u), a (i-1)/linetodxy(u,u); b(i-l);
void с(int i) {
if (i > 0)
с(i-1)/linetodxy(-u,-u); d(i-l);linetodxy(-2*u, 0) ; b (i-1)/linetodxy(-u,u)/ с(i-1) /

void d(int i)
if (i > 0)

d(i-l)/linetodxy(u,-u)/ a(i-1)/linetodxy(0,-2*u); с(i-1)/linetodxy(-u,-u)/
d(i-l);
void main(void) (
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, Sgmode, PATHTODRIVER); errorcode = graphresult();
I
if (errorcode == grOk) (
int p; // порядок кривой
puts("Программа строит кривую Серпинского.");
puts("Введите порядок кривой (1-4) \
и нажмите <Enter>");
printf("->");
scanf("%i", &p);
printf("Кривая Серпинского %i-ro порядка\n", р) ;
movetodOO, 100) ;
// кривая Серпинского а(р); iinetodxy(u,и); b(р); Iinetodxy(-и,и); с(р); Iinetodxy{-и,-и); d (р) ; Iinetodxy (и, -и) ;
puts("Для завершения нажмите <Enter>"); getch(); closegraphO ;
else
printf ("Ошибка: "sdVn", errorcode); puts("Для завершения нажмите <Enter>");
ch();
// вычерчивает по точкам линию
// подменим этой функцией стандартную, чтобы
// видеть процесс вычерчивания кривой
#include <dos.h>
void far linetofint x2, int y2)
int xl,yl;
int x,y;
int dx;
int dy;
int color
int a,b;
int n;
int i;
// координаты начала прямой,
// x2,y2 — координаты конца
// координаты текущей точки
// приращение аргумента
// приращение у при рисовании
// вертикальной линии
// цвет линии
// коэф-ты уравнения прямой
// кол-во точек "
xl = getx(); yl = gety(); color = getcolorO;
if ( xl != x2 )
//не вертикальная линия a = (y2-yl)/(x2-xl); b = yl- a * xl; n = abs(x2-xl)+l; if (x2 > xl)
dx = 1; else
dx = -1;

х = xl;
for (i = 1; i<= n;
у = а*х + Ь; putpixel(x,у,color); delay(DT); х += dx;
else // вертикальная линия
n = abs(y2-yl); if (y2 > yl)
dy = 1; else dy = -1;
x = xl; у = yl; for (i = 1; i<=n; i++)
putpixel(x, y, color); delay(DT); у += dy;
putpixel(x2, y2, color); moveto(x2, y2);