Контрольная работа по «Объектно-ориентированное программирование»

Автор работы: Пользователь скрыл имя, 24 Октября 2012 в 20:51, контрольная работа

Описание работы

15) Описать класс, содержащий следующую текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
 номер УДК;
 фамилию и инициалы автора;
 название;
 год издания;
 количество экземпляров данной книги в библиотеке.

Файлы: 1 файл

17.doc

— 91.50 Кб (Скачать файл)

if(a<b)

cout<<"a < b"<<endl;

if(a==b)

cout<<"a == b"<<endl;

break;}

case 4:

{int ii=a.strtoi();

cout<<ii<<endl;

ii=b.strtoi();

cout<<ii<<endl;

break;}

case 5:

{double f=a.strtof();

cout<<f<<endl;

break;}

case 6:

{cout<<RUS("Введите  наименьшую ширину строки")<<endl;

cin>>n;

cout<<RUS("Введите  точность")<<endl;

cin>>d;

cout<<"a:";

a.sput (n,d);

cout<<"b:";

b.sput (n,d);

break;}

}

}while(i>0&&i<=6);

 

return 0;

}

 

 

20) Создать абстрактный базовый класс Array с виртуальными методами сложения н поэлементной обработки массива foreach(). Разработать производные классы AndArray к OrArray (выбор). В первом классе операция сложения реализуется как пересечение множеств, а поэлементная обработка представляет собой извлечение квадратного корня. Во втором классе операция сложения реализуется как объединение, а поэлементная обработка - вычисление логарифма.

 

#include <iostream.h>

#include <stdlib.h>

#include<conio.h>

#include<math.h>

#include <windows.h>

char tt[256];

char* Rus(char *t)

{

CharToOem(t,tt);

return tt;

}

 

  class ARRAY

{ public:

float* elem;

int size;

 

ARRAY(int =1);//конструктор 

friend istream &operator>>(istream &, ARRAY &);

friend ostream &operator<<(ostream &, const ARRAY &);

virtual  void  add(ARRAY a,ARRAY b){}  //  виртуальная функция

virtual  void  foreach(){}  //  виртуальная функция

};

 

 

 

class  AndArray : public ARRAY {

public:

AndArray(int n=1):ARRAY(n){}

virtual void  add(ARRAY a,ARRAY b)

{

    int i,j,k=0;

 

for(i=0;i<a.size;i++)

for(j=0;j<b.size;j++)

if (a.elem[i]==b.elem[j])

k++;

size=k;

elem=new float[size];

for(k=i=0;i<a.size;i++)

for(j=0;j<b.size;j++)

if (a.elem[i]==b.elem[j])

elem[k++]=a.elem[i]; 

 

}

virtual void  foreach()

{

int i,j;

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

elem[i]=sqrt(elem[i]);

}

};

 

class  OrArray : public ARRAY {

public:

OrArray(int n=1):ARRAY(n){}

virtual void  add( ARRAY a, ARRAY b)

{

    int i,j,k=0;

bool flag;

for(i=0;i<a.size;i++)

for(j=0;j<b.size;j++)

if (a.elem[i]==b.elem[j])

k++;

size=a.size+b.size -k;

elem=new float[size];

for(i=0;i<a.size;i++)

elem[i]=a.elem[i];

k=a.size;;

for(i=0;i<b.size;i++)

{ for(j=0, flag=true;j<a.size;j++)

if (b.elem[i]==a.elem[j])

flag=false;

if(flag)

{elem[k]=b.elem[i];

k++;}

}

 

 

}

virtual void  foreach()

{

int i;

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

elem[i]=log(fabs(elem[i]));

}

};

//конструктор

  ARRAY::ARRAY(int n)

{

int i;

size=n;

elem=new float[size];

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

elem[i]=0;

}

 

ostream &operator<< (ostream &stream,  const ARRAY &ob)

{

int i;

for(i=0;i<ob.size;i++)

stream<<ob.elem[i]<<"  ";

stream<<endl;

return  stream;

}

istream &operator>> (istream &stream,  ARRAY &ob)

{

 

int i;

for(i=0;i<ob.size;i++)

stream>>ob.elem[i];

 

return  stream;

}

 

int main()

{

AndArray a(5),b(3), c;

cout<<Rus("1.Ввод элементов")<<endl;

cout<<"a: "<<endl;

cin>>a;

cout<<"b:"<<endl;

cin>>b;

cout<<Rus("2.Пересечение")<<endl;

c.add(a,b);

cout<<"c: "<<c<<endl;

cout<<Rus("3. Извлечение  корня")<<endl;

a.foreach();

b.foreach();

c.foreach();

cout<<"a: "<<a<<endl;

cout<<"b: "<<b<<endl;

cout<<"c: "<<c<<endl;

    OrArray a1(5),b1(3), c1;

cout<<Rus("1.Ввод элементов")<<endl;

cin>>a1;

cin>>b1;

cout<<Rus("2.Cложениe")<<endl;

c1.add(a1,b1);

cout<<"c: "<<c1<<endl;

cout<<Rus("3. Вычисление  логарифма")<<endl;

c1.foreach();

cout<<"c: "<<c1<<endl;

 

return 0;

}

 

 

11) Создать шаблон класса для работы с комплексными числами, обеспечивающий выполнение операций сложения, вычитания и умножения комплексных чисел. Написать программу, использующую этот шаблон, задавая вещественную и мнимую части как числами типа double, так и целыми числами.

# include <iostream>

# include <conio.h>

 

using namespace std;

 

//создаем шаблон класса  комплексных чисел

template <class type> class Complex

{

type a;//действительная  часть

type b;//мнимая часть

public:

//реализация конструктора  класса

//выполняющего функцию начальной инициализации

//действительной и  мнимой части

Complex(type A=0,type B=0){a=A;b=B;}

//реализация метода  перегрузки опрератора =

Complex operator=(Complex x)

{

a=x.a;

b=x.b;

return *this;

}

//реализация метода  перегрузки опрератора +

//для сложения комплексных  чисел

Complex operator+(Complex x)

{

Complex y;

y.a=a+x.a;

y.b=b+x.b;

return y;

}

//реализация метода  перегрузки опрератора -

//для вычитания комплексных  чисел

Complex operator-(Complex x)

{

Complex y;

y.a=a-x.a;

y.b=b-x.b;

return y;

}

//реализация метода  перегрузки опрератора *

//для умножения комплексных  чисел

Complex operator*(Complex x)

{

Complex y;

y.a=a*x.a-b*x.b;

y.b=a*x.b+b*x.a;

return y;

}

//реализация метода  вывода числа на экран

void show_number()

{

cout<<a<<" + i("<<b<<")"<<endl;

}

};

//реализация главной  функции

int main()

{

//объявление и инициализация 

//объектов класса Complex

//для типа int

Complex<int> i1(1,1),i2(-2,3),i3;

//объявление и инициализация 

//объектов класса Complex

//для типа double

Complex<double> d1(1.1,-2.3),d2(-1.,4.6),d3;

//работа с типом  int

cout<<"int numbers:"<<endl;

cout<<"i1 = ";i1.show_number();

cout<<"i2 = ";i2.show_number();

i3=i1+i2;

cout<<"\ni1+i2 =";i3.show_number();

i3=i1-i2;

cout<<"i1-i2 =";i3.show_number();

i3=i1*i2;

cout<<"i1*i2 =";i3.show_number();

cout<<"\n\n------------------------\n\n";

//работа с типом  double

cout<<"double numbers:"<<endl;

cout<<"d1 = ";d1.show_number();

cout<<"d2 = ";d2.show_number();

d3=d1+d2;

cout<<"\nd1+d2 =";d3.show_number();

d3=d1-d2;

cout<<"d1-d2 =";d3.show_number();

d3=d1*d2;

cout<<"d1*d2 =";d3.show_number();

 

getch();

return 0;

}

 

 

 

 

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

1. Архангельский А. Я. Программирование  в C++Builder 4. – М.: ЗАО «Издательство БИНОМ», 1999. – 928 с.  

2. Мейн М., Савитч У. Структуры  данных и другие объекты в  С++: Пер. с англ. – М.: “Вильямс”, 2002. – 832 с

3. Прата С. Язык программирования  С++. Лекции и упражнения: Пер. с  англ. – К.: Диасофт, 2001. – 656 с

 


Информация о работе Контрольная работа по «Объектно-ориентированное программирование»