Программирование на языке С++

Содержание



Введение

Индивидуально задание

Блок–схема

Листинги программ 

Руководство пользователя

Список используемой литературы




Введение



Язык C++ возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году — нынешняя версия этого стандарта — ISO/IEC 14882:2003.

Ранние версии языка, известные под именем «C с классами», начали появляться с 1980 года. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула (Simula) имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPLдостаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.

Разрабатывая Си с классами (позднее C++), Страуструп также написал программу cfront — транслятор, перерабатывающий исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

В 1983 году произошло переименование языка из Си с классами в C++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.

В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.

Стандартная библиотека C++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке C++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций Си printf иscanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

После многих лет работы совместный комитет ANSI-ISO стандартизировал C++ в 1998 году (ISO/IEC 14882:1998 — Язык программирования C++). В течение нескольких лет после официального выхода стандарта комитет обрабатывал сообщения об ошибках и в итоге выпустил исправленную версию стандарта C++ в 2003 году. В настоящее время рабочая группа МОС (ISO) работает над новой версией стандарта под кодовым названиемC++0x (ранее известный как C++09).




Индивидуальное задание



Окружности задаются координатами X,Y их центров и радиусами R. Датчик случайных чисел вырабатывает характеристики N окружностей. Определить, имеются ли среди этих окружностей три попарно пересекающихся. Найти среди этих окружностей все уединенные.




Блок-схема



Начало



Сравниваем расстояние(D) между цент-рами окружностей с суммой их радиусов. 

 Di,j>=Ri+Rj ? (j≠i)

Выводим на экран исходные данные:

окружности с центром Xi;Yi и радиусом Ri

Случайным образом задаём N координат X,Y и радиусов R



 

Сравниваем

 Dj,l<Rj+Rl ? 

 

 (i≠j≠l)

 Сравниваем

 Dl,k>=Rl+Rk ?

 (i≠j≠l≠k)

ДА

ДА

НЕТ

НЕТ

Таких окружностей нет

Выводим i,j,l-ые окружности

Выводим i-ую окружность

ДА























НЕТ

































Конец




Листинги программ



KOMP.CPP

#include<graphics.h>

#include<iostream.h>

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

#include<bios.h>

#include<process.h>

void pomehi(int x, int y, int i)

{

setcolor(i);

line(x-100,y-60,x-80,y-60);

line(x-60,y-50,x-40,y-50);

line(x-20,y-60,x,y-60);

line(x+20,y-50,x+40,y-50);

line(x+60,y-60,x+80,y-60);

line(x-100,y-20,x-80,y-20);

line(x-60,y-10,x-40,y-10);

line(x-20,y-20,x,y-20);

line(x+20,y-10,x+40,y-10);

line(x+60,y-20,x+80,y-20);

line(x-100,y+20,x-80,y+20);

line(x-60,y+30,x-40,y+30);

line(x-20,y+20,x,y+20);

line(x+20,y+30,x+40,y+30);

line(x+60,y+20,x+80,y+20);

line(x-100,y+60,x-80,y+60);

line(x-60,y+70,x-40,y+70);

line(x-20,y+60,x,y+60);

line(x+20,y+70,x+40,y+70);

line(x+60,y+60,x+80,y+60);

}

void komp(int x, int y)

{

int i;

///////////////monitor////////////////

i=8;

setcolor(i);

rectangle(x-120, y-100, x+120, y+100);

setfillstyle(SOLID_FILL,i);

floodfill(x-115,y-95,i);

i=0;

setcolor(i);

rectangle(x-110, y-90, x+110, y+90);

setfillstyle(SOLID_FILL,i);

floodfill(x,y,i);

i=0;

setcolor(i);

line(x-120, y-100, x-110, y-110);

line(x+120, y+100, x+130, y+90);

line(x+120, y-100, x+130, y-110);

line(x-110, y-110, x+130, y-110);

line(x+130, y-110, x+130, y+90);

line(x+20, y+110, x+20, y+100);

line(x-20, y+110, x-20, y+100);

rectangle(x+60, y+110, x-60, y+120);

line(x+60, y+110, x+70, y+100);

line(x+60, y+120, x+80, y+100);

line(x-60, y+110, x-50, y+100);

line(x+20, y+110, x+30, y+100);

circle(x+110,y+95,3);

circle(x+100,y+95,2);

circle(x+90,y+95,2);

///////////////sistemnik//////////////

i=0;

setcolor(i);

rectangle(x-130, y+120, x-200, y-100);

line(x-200, y-100, x-110, y-190);

line(x-130, y-100, x-40, y-190);

line(x-110, y-190, x-40, y-190);

line(x-130, y+120, x-110, y+100);

line(x-40, y-190, x-40, y-110);

rectangle(x-190, y-90, x-140, y-80);

rectangle(x-190, y-70, x-140, y-60);

rectangle(x-190, y-50, x-140, y-40);

rectangle(x-190, y-30, x-140, y-20);

rectangle(x-180, y-10, x-150, y);

rectangle(x-180, y+10, x-150, y+20);

rectangle(x-190, y+100, x-140, y+110);

circle(x-165,y+80,5);

circle(x-165,y+60,4);

line(x-165,y+80,x-165,y+84);

circle(x-165,y+80,2);

}

void kolonki(int x, int y, int i)

{

int k;

//////////////left//////////////////

k=i;

i=15;

setfillstyle(INTERLEAVE_FILL,i);

i=k;

setcolor(i);

rectangle(x-210, y+120, x-260, y+60);

line(x-210, y+120, x-200, y+110);

line(x-210, y+60, x-200, y+50);

line(x-260, y+60, x-240, y+40);

line(x-240, y+40, x-200, y+40);

i=k;

setcolor(i);

pieslice(x-235, y+90, 0, 180, 20);

rectangle(x-255, y+90, x-215, y+110);

floodfill(x-245,y+95,i);

//////////////right/////////////////

rectangle(x+140, y+120, x+190, y+60);

line(x+190, y+120, x+210, y+100);

line(x+190, y+60, x+210, y+40);

line(x+140, y+60, x+160, y+40);

line(x+160, y+40, x+210, y+40);

line(x+210, y+100, x+210, y+40);

i=k;

setcolor(i);

pieslice(x+165, y+90, 0, 180, 20);

rectangle(x+145, y+90, x+185, y+110);

floodfill(x+155,y+95,i);

circle(x+165,y+115,4);

circle(x+155,y+115,3);

circle(x+175,y+115,3);

arc(x+165,y+40,0,150,40);

}

void main()

{int dr=DETECT,mod;

float snd[] = {659.26, 880.00, 1046.50, 987.77, 880.00, 1046.50, 880.00, 987.77, 880.00,

698.46, 783.99, 659.26, 659.26, 880.00, 1046.50, 987.77, 880.00, 1046.50, 880.00, 987.77, 880.00,

659.26, 622.25, 587.33, 587.33, 698.46, 880.00, 987.77, 587.33, 698.46,

830.61, 880.00, 440.00, 523.25, 698.46, 698.46, 659.26, 783.95, 698.46, 698.46,

659.26, 493.88, 523.25, 440.00, 987.77, 987.77, 932.33, 880.00, 987.77, 987.77,

880.00, 783.99, 698.46, 659.26, 659.26, 783.99, 659.26, 587.33, 587.33,

698.46, 587.33, 493.88} ;

int x,y,err,i,ki,key,r,h,c,x1,x2,y1,y2;

char s,str[80]={'K','U','R','S','O','V','A','Y','A',' ','R','A','B','O','T','A'};

initgraph(&dr,&mod," ");

err=graphresult();

if(err){

cout<<"error initgraph"<<grapherrormsg(err);

exit(1);

}

snachala:

cleardevice();

i=7;

x=getmaxx()/2;

y=getmaxy()/2;

setfillstyle(SOLID_FILL,i);

floodfill(x,y,i);

setcolor(4);

outtextxy(400,70,"Press any key for STOP Music");

outtextxy(400,80,"Press 'P' for PLAY Music");

outtextxy(400,90,"Press 'M' for GOTO MENU");

outtextxy(400,100,"Press 'Esc' for exit");

settextstyle(0,0,3);

setcolor(2);

outtextxy(150,15,str);

settextstyle(0,0,2);

setcolor(6);

outtextxy(330,380,"KAFEDRA: EVM");

setcolor(5);

outtextxy(330,420,"SPECIALNOST: VMKSiS");

setcolor(4);

outtextxy(30,380,"VIPOLNIL:");

settextstyle(0,0,1);

setcolor(1);

outtextxy(180,380,"STUDENT FITU 1-2a");

settextstyle(0,0,1);

setcolor(0);

outtextxy(180,390,"XLINTCEV A.G.");

settextstyle(0,0,2);

setcolor(4);

outtextxy(30,420,"PROVERIL:");

settextstyle(0,0,1);

setcolor(1);

outtextxy(180,420,"KOLOMEICEVA T.G.");

settextstyle(0,0,1);

setcolor(0);

outtextxy(180,430,"BELIKOV I.Yu.");

komp(x,y); m1:

for(r=0;r<62;r++)

{

if (kbhit()) break;

i=15;

pomehi(x,y,i);

delay(100);

i=7;

kolonki(x,y,i);

i=0;

kolonki(x,y-10, i);

i=0;

pomehi(x,y,i);

delay(100);

sound(snd[r]/1.5);

if (r==11 ^ r==23 ^ r==27 ^ r==31 ^ r==43) { delay (1500); nosound (); delay (600); }

else if (r==53 ^ r==57 ^ r==61) { delay (300); nosound(); delay (1400); }

else if (r==47) { delay (500); nosound (); delay (700); }

else delay(50);

i=7;

kolonki(x,y-10,i);

i=0;

kolonki(x,y,i);

}

nosound();

setcolor(RED);

m:

s=getch();

if (s==27) exit(1);

if (s=='p') {setfillstyle(SOLID_FILL,0); floodfill(getmaxx()/2,getmaxy()/2,8); goto m1;}

if (s!='m') goto m;

cleardevice();

i=15;

setcolor(i);

setfillstyle(SOLID_FILL,i);

floodfill(x,y,i);

settextstyle(0,0,2);

setcolor(RED);

outtextxy(150,30,"MENU");

settextstyle(0,0,1);

setcolor(2);

outtextxy(20,100,"Zadanie po assembleru #1");

setcolor(3);

outtextxy(20,135,"Zadanie po assembleru #2");

setcolor(4);

outtextxy(20,170,"Zadanie po assembleru #3");

setcolor(5);

outtextxy(20,205,"Zadanie po assembleru #4");

setcolor(6);

outtextxy(20,240,"Zadanie po assembleru #5");

setcolor(0);

outtextxy(20,275,"Zadanie po assembleru #6");

setcolor(8);

outtextxy(20,310,"Zadanie po programmirovaniu");

setcolor(9);

outtextxy(20,345,"Back to previos display");

setcolor(12);

outtextxy(20,380,"Exit");

ki=1; x1=14; y1=95; x2=250; y2=115;

rectangle(x1,y1,x2,y2);

sled:

key=bioskey(0);

switch(key)

{

case 18432:{setcolor(15);

rectangle(x1,y1,x2,y2);

if (y1==95) {y1=375;y2=395; ki=9;}

else {y1=y1-35; y2=y2-35; ki--;}

setcolor(RED);

rectangle(x1,y1,x2,y2);

break;

}

case 20480:

{setcolor(15);

rectangle(x1,y1,x2,y2);

if (y1==375) {y1=95;y2=115; ki=1;}

else {y1=y1+35; y2=y2+35; ki++;}

setcolor(RED);

rectangle(x1,y1,x2,y2);

break;

}

case 7181: switch(ki)

{

case 1: spawnl(P_WAIT, "1.EXE", NULL); break;

case 2: spawnl(P_WAIT, "2.EXE", NULL); break;

case 3: spawnl(P_WAIT, "3.EXE", NULL); break;

case 4: spawnl(P_WAIT, "4.EXE", NULL); break;

case 5: spawnl(P_WAIT, "5.EXE", NULL); break;

case 6: spawnl(P_WAIT, "6.EXE", NULL); break;

case 7: spawnl(P_WAIT, "CPP.EXE", NULL); break;

case 8: goto snachala;

case 9: closegraph(); exit(1);

}

}

goto sled;

}











CPP.CPP

#include<graphics.h>

#include<math.h>

#include<iostream.h>

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

int sravnenie(long x1,long x2,long y1,long y2,long r1,long r2)

{int d;

d=int(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

if (d>(r1+r2)) return 1; else return 0;} //1-ne peresekajutsja 0-peresikajutsja

void main()

{char s,otv;

int dr=DETECT, mod, err;

int color[100],KOL,ist;

long x[100],y[100],r[100],l,i,f,k,j,n;

m1:

initgraph(&dr,&mod," ");

err=graphresult();

if(err) {

cout<<"error initgraph"<<grapherrormsg(err);

exit(1);

}

cout<<"Vvedite kol-vo okruzhnostei -> "; cin>>KOL;

randomize();

cleardevice();

for (i=0;i<KOL;i++)

{

x[i]=random(540)+50;

y[i]=random(320)+80;

r[i]=random(20)+30;

color[i]=random(13)+1;

}

for (i=0;i<KOL;i++)

{ setcolor(color[i]);

circle(x[i],y[i],r[i]); }

outtextxy(5,5,"Press '1' for vivoda okryzhnostei yedinenih");

outtextxy(5,15,"Press '2' for vivoda okryzhnostei sgrypirovanih po 3");

outtextxy(5,25,"Press 'q' for quit");

m: ist=0;

s=getch();

if (s=='1') {

cleardevice();

for (i=0;i<KOL;i++)

{ f=0;

for (j=0;j<KOL;j++)

if (i!=j) if (sravnenie(x[i],x[j],y[i],y[j],r[i],r[j])==1) f++;

if (f==KOL-1) {setcolor(color[i]); circle(x[i],y[i],r[i]); ist++;}

}if (ist==0) cout<<"Takix okryzhnostei net\n\n\n\n";

} else

if (s=='2') { cleardevice();

for (i=0;i<KOL;i++)

for (j=0;j<KOL;j++)

if (i!=j) if (sravnenie(x[i],x[j],y[i],y[j],r[i],r[j])==0)

{ f=0;

for(l=0;l<KOL;l++)

if ((l!=i)&&(l!=j))

if

(sravnenie(x[i],x[l],y[i],y[l],r[i],r[l])==0)||(sravnenie(x[l],x[j],y[l],y[j],r[l],r[j])==0)) {f++; k=l;}

if (f==1)

for (n=0;n<KOL;n++)

if ((n!=k)&&(n!=i)&&(n!=j))

if (sravnenie(x[n],x[k],y[n],y[k],r[n],r[k])==0) f++;

if (f==1)

{setcolor(color[i]);

circle(x[i],y[i],r[i]);

setcolor(color[j]);

circle(x[j],y[j],r[j]);

setcolor(color[k]);

circle(x[k],y[k],r[k]); ist++;}

}

if (ist==0) cout<<"Takix okruzhnostei net\n\n\n\n"; } else

if (s=='q') exit(1); else goto m;

cout<<"Snova? (y,n)"; otv=getch();

if (otv=='y') {closegraph(); goto m1;} else exit(1);

}









Руководство пользователя



При запуске курсовой работы на дисплее появится титульный лист сопровождаемый мелодией и анимацией.

Нажмите:

- любую клавишу для остановки мелодии.

- P для проигрывания мелодии

- M для перехода к МЕНЮ

- ESC для выхода

Перейдите к МЕНЮ для запуска курсовой работы

В МЕНЮ наведите курсор на задание и нажмите ENTER. Запускается задание курсовой работы. Просмотрев результат работы задания, нажимаем клавишу клавишу Q и выходим в МЕНЮ. Для выхода из программы нажимаем – ESC.

При работе с программой могут возникнуть проблемы: программа может не запускаться, и выводить ошибку инициализации графики. Чтобы избежать этого пользователь должен перед запуском программы убедиться в том, что файл EGAVGA.BGI находится в данном каталоге. В каталоге так же должны находится исполняемые файлы KOMP.EXE(Титульный лист) CPP.EXE (Задание по курсовой работе).

Программа нормально работает в операционных системах Windows XP/NT/2000/98, а так же в MS-DOS'e. В других операционных системах программа не тестировалась.




Список используемой литературы



- Бьерн Страуструп «Язык программирования С++»

- Дейтел и Дейтел «Как программировать на C++»

- Дейтел и Дейтел «Как программировать на C»

- А.Б.Крупник «Изучаем C++»

- В.В.Подбельский «Язык Си++»

- Курс лекций по предмету «Программирование на ЯВУ»

- Методические указания к лабораторным работам по предмету «Программирование на ЯВУ»