Организация программ

Изучение средств языка С++, используемых для создания параметрических типов. Использование механизма перегрузки операций в программах. Изучение механизма динамического связывания. Написание программ с использованием механизма наследования классов.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 21.01.2014
Размер файла 993,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Задание 1. Организация программ с использованием классов

Цель задания

Изучение средств языка С++ для определения новых типов данных через механизм классов.

Получение навыков в написании программ с использованием классов.

Задание. Создать класс для имитации секундомера. Члены класса: переменные типа double для хранения начального и конечного значения времени. Обязательны функции- члены класса для инициализации секундомера (присваивает переменным нулевые значения), для запуска и остановки секундомера, для вывода на экран величины истекшего времени.

UML-диаграмма созданного класса:

Код программы:

#include "stdafx.h"

#include <conio.h>

#include <iostream>

#include <stdio.h>

#include <time.h>

#include <windows.h>

#include <stdlib.h>

using namespace std;

class CTimerUser

{

public:

CTimerUser();

~CTimerUser();

private:

double m_startTime;

double m_endTime;

double m_interval;

public:

double Start();

double Stop();

void ShowTime();};

CTimerUser::CTimerUser()

{ m_startTime = 0;

m_endTime = 0;

m_interval = 0;}

CTimerUser::~CTimerUser(){}

double CTimerUser::Start()

{ m_startTime =(double) GetTickCount();

m_endTime = m_startTime;

m_interval = 0;

cout<<"start ";

return m_startTime;}

double CTimerUser::Stop()

{ m_endTime = (double) GetTickCount();

m_interval = m_endTime - m_startTime;

cout<<"stop ";

return m_endTime;}

void CTimerUser::ShowTime()

{ //тут переводим m_interval в секунды (seconds)

double seconds = m_interval/1000;

printf("%.3f",seconds);

cout<<"\n";}

int _tmain(int argc, _TCHAR* argv[])

{ CTimerUser timer;

bool bWork = false;

cout<<"Press 'a' for start and stop (press 'q' to Exit):"<<endl;

char entChar = _getch();

while (entChar!='q')

{ if (entChar=='a')

{ if (bWork) {

timer.Stop();

timer.ShowTime();}

else {timer.Start();}

bWork = !bWork;

}

entChar = _getch();

}

return 0;

}

Результаты работы программы:

Задание 2. Организация программ с использованием перегрузки функций. Использование механизма перегрузки операций в программах

Цель задания

Изучение механизма перегрузки функций.

Получение навыков в написании программ с использованием перегрузки конструкторов.

Изучение механизма перегрузки операций.

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

Задание. Создать класс “Строка_Си”, определить для него операции:

a) слияния строк (операция + );

b) сравнение строк на равенство (операция = = );

c) удаления из строки подстроки (операция - );

d) удаления из строки всех символов, содержащихся в строке-делителе (операция / );

e) копирования строки

f) функцию at (char *substr, char *dest, int i ), возвращающую номер позиции i-того вхождения строки substr в строкуdest.

Продемонстрируйте выполнение операций с объектами этого класса.

UML-диаграмма разработанного класса:

Код программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

class string_c

{

char *str;

public:

char *getstr();

string_c();

string_c(int size);

string_c(char *CS);

bool operator ==(string_c &S);

string_c operator +(string_c &S);

string_c operator -(string_c &S);

string_c operator /(string_c &S);

void showstr();

int at(char *substr,char *dest,int i);

string_c copy(){return *this;}

};

string_c::string_c()

{

str=new char[255];

}

string_c::string_c(int size)

{

str=new char[size];

}

string_c::string_c(char *CS)

{

str=new char[strlen(CS)];

strcpy(str,CS);

}

char *string_c::getstr()

{

return str;

}

bool string_c::operator ==(string_c &S)

{

if(strcmp(str,S.getstr())==0) return true;

else return false;

}

string_c string_c::operator +(string_c &S)

{

char *newch=new char[strlen(str)+strlen(S.getstr())];

strcpy(newch,str);

strcat(newch,S.getstr());

string_c newstr(newch);

return newstr;

}

string_c string_c::operator -(string_c &S)

{

char *buf1,*buf2,*buf3;

buf1=new char[strlen(str)];

strcpy(buf1,str);

buf2=S.getstr();

buf3=strstr(buf1,buf2);

while(buf3)

{

strcpy(buf3,buf3+strlen(buf2));

buf3=strstr(buf3,buf2);

}

string_c res(buf1);

return res;

}

string_c string_c::operator /(string_c &S)

{

char *buf=S.getstr();

string_c res(str);

char *c=new char[2];

c[1]='\0';

c[0]=buf[0];

string_c st(c);

res=res-st ;

for(int i=1;i<strlen(buf);i++)

{

c[0]=buf[i];

st=string_c(c);

res=res-st;

}

return res;

}

void string_c::showstr()

{

cout<<str<<endl<<endl;

}

int string_c::at(char *substr,char *dest,int i)

{

char *buf;

int j;

buf=strstr(dest,substr);

for(j=1;j<i;j++)

buf=strstr(buf+1,substr);

if(!buf) return -1;

for(j=0;j<strlen(dest);j++)

if((dest+j)==buf)return j;

}

void main()

{

string_c str1("My name is");

cout<<"-->str1"<<endl;

str1.showstr();

cout<<"-->str2 (copy of str1)"<<endl;

string_c str2=str1.copy();

str2.showstr();

cout<<"-->str1+str2"<<endl;

(str1+str2).showstr();

string_c str3("erg");

cout<<"-->str3"<<endl;

str3.showstr();

cout<<"-->str1-str3"<<endl;

(str1-str3).showstr();

cout<<"-->str1/str3"<<endl;

(str1/str3).showstr();

cout<<"-->str1==str2"<<endl;

cout<<(str1==str2)<<endl<<endl;

cout<<"-->str1==str3"<<endl;

cout<<(str1==str3)<<endl<<endl;

cout<<"-->at('S','Serg',2)"<<endl;

cout<<str1.at("S","Serg",1)<<endl;

getch();

}

Результаты выполнения программы:

Задание 3. Организация программ с использованием механизма наследования классов

Цель задания

Изучение механизма наследования классов.

Получение навыков в написании программ с использованием механизма наследования.

Методические указания

Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все свойства созданных классов.

Задание. Точка : отрезок : треугольник (нарисовать, стереть, закрасить, передвинуть, повернуть). Определить классы и их иерархию, а также продемонстрировать использование введенных конструкций при работе.

UML-диаграммы созданных классов:

Код рограммы:

#include <math.h>

#include <dos.h>

#include <conio.h>

#include <graphics.h>

class pnt

{

int x,y;

public:

pnt(int X, int Y)

{

x=X;

y=Y;

}

void povern(pnt *cent, float rad)

{

int bufx=x,bufy=y;

x=cent->X()+(bufx-cent->X())*cos(rad)-(bufy-cent->Y())*sin(rad);

y=cent->Y()+(bufx-cent->X())*sin(rad)+(bufy-cent->Y())*cos(rad);

}

void peredv(int dx,int dy)

{

x=x+dx;

y=y+dy;

}

int X() {return x;}

int Y() {return y;}

};

class ln

{

protected:

pnt *t1,*t2,*center;

int color;

public:

ln(pnt *T1,pnt *T2,int C)

{

t1=T1;

t2=T2;

color=C;

center=new pnt((t1->X()+t2->X())/2,(t1->Y()+t2->Y())/2);

}

void virtual ris()

{

setcolor(color);

line(t1->X(),t1->Y(),t2->X(),t2->Y());

}

void virtual del()

{

setcolor(0);

line(t1->X(),t1->Y(),t2->X(),t2->Y());

}

void virtual peredv(int dx,int dy)

{

del();

t1->peredv(dx,dy);

t2->peredv(dx,dy);

center->peredv(dx,dy);

ris();

}

void virtual povern(float rad)

{

del();

t1->povern(center,rad);

t2->povern(center,rad);

ris();

}

};

class trg:public ln

{

pnt *t3;

public:

trg(pnt *T1,pnt *T2,pnt *T3,int C):ln(T1,T2,C)

{

t3=T3;

center=new pnt((t1->X()+t2->X()+t3->X())/3,(t1->Y()+t2->Y()+t3->Y())/3);

}

void virtual ris()

{

setcolor(color);

line(t1->X(),t1->Y(),t2->X(),t2->Y());

line(t1->X(),t1->Y(),t3->X(),t3->Y());

line(t3->X(),t3->Y(),t2->X(),t2->Y());

}

void virtual del()

{

setcolor(0);

line(t1->X(),t1->Y(),t2->X(),t2->Y());

line(t1->X(),t1->Y(),t3->X(),t3->Y());

line(t3->X(),t3->Y(),t2->X(),t2->Y());

}

void virtual peredv(int dx,int dy)

{

del();

t1->peredv(dx,dy);

t2->peredv(dx,dy);

t3->peredv(dx,dy);

center->peredv(dx,dy);

ris();

}

void virtual povern(float rad)

{

del();

t1->povern(center,rad);

t2->povern(center,rad);

t3->povern(center,rad);

ris();

}

void zakras()

{

setfillstyle(1,color);

floodfill(center->X(),center->Y(),color);

}

};

void main()

{

int gm,gd=DETECT;

initgraph(&gd, &gm, "c:\\borlandc\\bgi\\");

pnt l1(250,250),l2(350,350);

ln line1(&l1,&l2,5);

line1.ris();

pnt tr1(150,180),tr2(200,240),tr3(300,160);

trg triang1(&tr1,&tr2,&tr3,4);

triang1.ris();

getch();

for(int i=0;i<50;i++)

{

line1.peredv(2,-2);

triang1.peredv(3,2);

delay(5);

}

getch();

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

{

line1.povern(0.1);

triang1.povern(0.16);

delay(8);

}

getch();

triang1.zakras();

getch();

closegraph();

}

Результаты выполнения программы:

Задание 4. Организация программ с использованием виртуальных функций и абстрактных базовых классов

Цель задания

1. Изучение механизма динамического связывания.

2. Получение навыков в использовании виртуальных функций.

3. Изучение принципов построения абстрактных базовых классов и производных классов, созданных на основе базовых.

4. Получение навыков в разработке абстрактных классов с применением чисто виртуальных функций, в построении производных классов с использованием открытого наследования.

Задание. Каждое задание состоит из двух частей. Одна часть общая для всех вариантов описана в преамбуле. Вторая часть, индивидуальная, описана в нумерованном списке. программа перегрузка динамическое связывание

Преамбула. Используя абстрактный базовый класс "фигура", разработанный самостоятельно, определить класс, описанный ниже. Предусмотреть следующие действия с объектами создаваемого класса:

1. динамическое создание объектов, в том числе создание массивов объектов;

2. динамическое уничтожение объектов;

3. изменение параметров объекта (цвет, размер, координаты и т.п.);

4. отображение объектов на экране.

Вариант задания: правильный шестиугольник.

UML-диаграмма созданных классов:

Код программы:

#include <graphics.h>

#include <math.h>

#include <conio.h>

int GraphDriver;

int GraphMode;

int ErrorCode;

class fig

{

protected:

int x,y,size,color;

public:

fig(){}

virtual void resize(int)=0;

virtual void draw()=0;

virtual void erase()=0;

virtual void recolor(int)=0;

virtual void move_to(int,int)=0;

};

class hexagon:public fig

{

public:

hexagon(int,int);

void resize(int);

void draw();

void erase();

void recolor(int);

void move_to(int,int);

};

hexagon::hexagon(int X,int Y)

{

x=X;

y=Y;

size=60;

color=3;

}

void hexagon::draw()

{

moveto(x+size,y);

setcolor(color);

for(int i=1;i<7;i++)

lineto(x+size*cos(M_PI/3*i),y+size*sin(M_PI/3*i));

}

void hexagon::erase()

{

int c=color;

color=getbkcolor();

draw();

color=c;

}

void hexagon::recolor(int c)

{

color=c;

draw();

}

void hexagon::move_to(int X,int Y)

{

erase();

x=X;

y=Y;

draw();

}

void hexagon::resize(int s)

{

erase();

size =s;

draw();

}

int main()

{

GraphDriver = DETECT;

initgraph( &GraphDriver, &GraphMode, "c:\\borlandc\\bgi\\" );

ErrorCode = graphresult();

hexagon *H1,*H2;

H1=new hexagon(100,100);

H1->draw();

getch();

H1->move_to(100,150);

getch();

H1->recolor(5);

getch();

H2=new hexagon(200,200);

H2->draw();

getch();

H2->resize(100);

H1->erase();

getch();

}

Задание 5. Организация программ с использованием шаблонов

Цель задания

Изучение средств языка С++, используемых для создания параметрических типов, т.е. типов, которые выполняются по-разному в зависимости от параметров, переданных при создании класса.

Получение навыков в написании программ с использованием шаблонов.

Задание. Создать шаблон класса «однонаправленный линейный список». Использовать его при решении следующей задачи:

Составить программу, которая содержит динамическую информацию о заявках на авиабилеты. Каждая заявка содержит:

- пункт назначения;

- номер рейса;

- фамилию и инициалы пассажира;

- желаемую дату вылета.

Программа должна обеспечивать:

- хранение всех заявок в виде списка;

- добавление заявок в список;

- удаление заявок;

- вывод заявок по заданному номеру рейса и дате вылета;

- вывод всех заявок.

UML-диаграмма класса:

Код программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <string.h>

#include <conio.h>

#include <windows.h>

using namespace std;

struct request

{

char Dest[20];

int number;

char FIO[30];

char Date[11];

};

template <class T> class List

{

struct reqlist

{

T req;

reqlist *Next;

} ;

reqlist *Node;

reqlist *Current;

public:

List()

{

Node=NULL;

Current=NULL;

}

void AddNode(T addt)

{

if(Node==NULL)

{

Node=new reqlist;

Node->req=addt;

Node->Next=NULL;//Next = NULL;

}

else

{

Current=Node;

while(Current->Next!=NULL)

Current=Current->Next;

Current->Next=new reqlist;

Current->Next->req=addt;

Current->Next->Next=NULL;

}

}

void DelNode(T *obj)

{

if(Node) //Node!=NULL. if(!Node) -NODE=NULL

{

if(&(Node->req)==obj)

Node=Node->Next;

else

{

Current=Node;

while(Current->Next!=NULL)

{

if(&(Current->Next->req)==obj)

{

Current->Next=Current->Next->Next;

break;

}

Current=Current->Next;

}

}

delete obj;

}

}

T* GetNext(bool fl)

{

if(fl)Current=Node;

T *Ret=&(Current->req);

if(Current!=NULL)Current=Current->Next;

return Ret;

}

};

int main()

{

List <request> AL;

int s;

request *buf,*ret;

while(true)

{

cout<<endl<<"1.Add request"<<endl

<<"2.Del request"<<endl

<<"3.Select request (date, number)"<<endl

<<"4.Output all"<<endl

<<"5.Exit"<<endl

<<" >";

cin>>s;

switch(s)

{

case 1:

delete buf;

buf=new request;

cout<<"Input Destination"<<endl;

cin.ignore();

cin.getline(buf->Dest,20,'\n');

cout<<"Input number"<<endl;

cin>>buf->number;

cout<<"Input FIO"<<endl;

cin.ignore();

cin.getline(buf->FIO,30,'\n');

cout<<"Input date"<<endl;

cin.getline(buf->Date,11,'\n');

AL.AddNode(*buf);

break;

case 2:

delete buf;

buf=new request;

cout<<"Input FIO"<<endl;

cin.ignore();

cin.getline(buf->FIO,30,'\n');

cout<<"Input date"<<endl;

cin.getline(buf->Date,11,'\n');

ret=AL.GetNext(true);

while(ret!=NULL)

{

if(strcmp(buf->FIO,ret->FIO)==0&&strcmp(buf->Date,ret->Date)==0)

AL.DelNode(ret);

ret=AL.GetNext(false);

}

break;

case 3:

delete buf;

buf=new request;

cout<<"Input number"<<endl ;

cin>>buf->number;

cout<<"Input date"<<endl ;

cin.ignore();

cin.getline(buf->Date,11,'\n');

ret=AL.GetNext(true);

cout.setf(ios::left);

cout<<setw(20)<<"Destination";

cout<<setw(10)<<"number" ;

cout<<setw(30)<<"FIO" ;

cout<<setw(11)<<"date"<<endl ;

while(ret!=NULL)

{

if((buf->number,ret->number)&&strcmp(buf->Date,ret->Date)==0)

{

cout<<setw(20)<<ret->Dest;

cout<<setw(10)<<ret->number;

cout<<setw(30)<<ret->FIO;

cout<<setw(11)<<ret->Date<<endl;

}

ret=AL.GetNext(false);

}

break;

case 4:

ret=AL.GetNext(true);

cout.setf(ios::left);

cout<<setw(20)<<"Destination";

cout<<setw(10)<<"number" ;

cout<<setw(30)<<"FIO" ;

cout<<setw(11)<<"date"<<endl ;

while(ret!=NULL)

{

cout<<setw(20)<<ret->Dest;

cout<<setw(10)<<ret->number;

cout<<setw(30)<<ret->FIO;

cout<<setw(11)<<ret->Date<<endl;

ret=AL.GetNext(false);

}

break;

default: return 0;}}}

Результаты выполнения программы:

Размещено на Allbest.ru


Подобные документы

  • Понятие перегрузки (доопределения) операций и её разновидности. Пример соответствующей программы перегрузки, понятие полиморфизма и правила isA. Использование классов операторов в программах языка С++, конструкций операторов и производных классов.

    реферат [19,9 K], добавлен 30.10.2011

  • Изображение класса на диаграмме UML. Инкапсуляция как средство защиты его внутренних объектов. Использование принципа полиморфизма для реализации механизма интерфейсов. Создание новых классов путем наследования. Ассоциация как вид отношений между ними.

    лекция [516,6 K], добавлен 03.12.2013

  • Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.

    курсовая работа [575,8 K], добавлен 06.12.2013

  • Изучение элементов языка С++, программирование разветвлений и циклов с использованием операторов условного и перехода. Обработка одномерных массивов. Поиск максимального элемента массива с заданной размерностью. Листинги программы и результатов.

    курсовая работа [647,7 K], добавлен 05.02.2013

  • Изучение устройства и механизма процессов в компиляторах и интерпретаторах. Понятие трансляции как процедуры перевода программного кода с языка Паскаль на язык С++. Описание интерфейса программы и автоматизация процесса построения диаграммы классов.

    курсовая работа [536,2 K], добавлен 03.07.2011

  • Изучение методов создания диалоговой оболочки отладчика MPI-программ, который войдет в состав системы автоматизации разработки параллельных программ (DVM-системы). Основные подходы к параллельному программированию и созданию пользовательского интерфейса.

    курсовая работа [1,5 M], добавлен 14.10.2010

  • Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.

    учебное пособие [1,6 M], добавлен 28.12.2013

  • Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.

    курсовая работа [331,9 K], добавлен 18.01.2016

  • Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.

    курсовая работа [422,2 K], добавлен 13.03.2016

  • Понятие и сущность параллельного программирования. Задачи и схема работы динамического анализатора. Оценка достоинств и недостатков динамического анализа, оценка возможности его применения для поиска зависимостей в программах, требующих распараллеливания.

    курсовая работа [73,7 K], добавлен 15.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.