Автор работы: Пользователь скрыл имя, 24 Октября 2012 в 20:51, контрольная работа
15) Описать класс, содержащий следующую текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
номер УДК;
фамилию и инициалы автора;
название;
год издания;
количество экземпляров данной книги в библиотеке.
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("Введите
наименьшую ширину строки")<<
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.Ввод элементов")<
cout<<"a: "<<endl;
cin>>a;
cout<<"b:"<<endl;
cin>>b;
cout<<Rus("2.Пересечение")<<
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.Ввод элементов")<
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-------------------
//работа с типом 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. Архангельский А. Я.
2. Мейн М., Савитч У. Структуры данных и другие объекты в С++: Пер. с англ. – М.: “Вильямс”, 2002. – 832 с
3. Прата С. Язык
Информация о работе Контрольная работа по «Объектно-ориентированное программирование»