Міністерствоосвіти і науки України
Запорізькийнаціональний університет
Кафедраінформаційних технологій
Індивідуальнаробота
Зтеми: «С++. Класи і об’єкти»
Виконав:
студ.2 курсу
матем.ф-ту
гр.8226-1
ЛапінС.М.
Перевірив:
БорюС.Ю.
Запоріжжя2007
Цель: Разработка простейших классов напримере разработки моделей элементарных объектов и динамических информационныхструктур (одно и двунаправленных списков).
1 часть работы«разработка простых классов»
Постановка задачи
Разработать класс, наборметодов (конструктор и минимум два метода) для программной модели заданногообъекта. Описание объекта и его основных свойств приводится ниже. Разработатьвызывающую программу (main),использующей объекты разработанного класса и тестирующие работоспособность всехметодов.
Варианты заданий
14. Объект«прямоугольник заданный длинами двух сторон». Предусмотреть возможностьоперации присваивания, определения площади и периметра, а так же логическийметод, отвечающий на вопрос – является ли прямоугольник квадратом. Конструктордолжен позволить создавать объекты без и с начальной инициализацией.
Програма:
#ifndef rectangle__h
#define rectangle__h
#include
class rectangle
{
private:
doublea, b;
public:
rectangle();
rectangle(double,double);
~rectangle();
rectangle& operator=(const rectangle & x);
doublesquare(void);
doubleperimeter(void);
doublediagonal(void);
intis_square(void);
voidprint_rectangle(void);
};
#endif
#ifndefconrectangle__h
#defineconrectangle__h
#include
#include«rectangle.h»
rectangle::rectangle()
{
cout
a=1.0;
b=1.0;
};
rectangle::rectangle(doublex, double y)
{
cout
a=x;
b=y;
};
rectangle::~rectangle()
{
cout
a=0.0;
b=0.0;
};
rectangle &rectangle::operator=(const rectangle & x)
{
if(this==&x)return *this;
this->a=x.a;
this->b=x.b;
return*this;
};
doublerectangle::square(void)
{
returna*b;
};
doublerectangle::perimeter()
{
return2*a+2*b;
};
doublerectangle::diagonal()
{
returnsqrt(a*a+b*b);
};
intrectangle::is_square()
{
if(a==b)return 1;
return0;
};
voidrectangle::print_rectangle()
{
charmsg1[]=" ", msg2[]=" not ";
cout
cout
cout
if(is_square())
cout
else
cout
cout
return;
};
#endif
#include
#include«conrectangle.h»
void main()
{
rectangler1;
doublea,b;
chars[1];
cout
do
{
cout
r1.print_rectangle();
cout
cin>>a>>b;
rectangler2(a, b);
cout
r2.print_rectangle();
r1=r2;
cout
r1.print_rectangle();
cout
cin>>s;
}
while(s[0]!='q');
return;
};
Результати:
D:\Studies\Labs\Cpp\Individ_6>ind1
The constructor«rectangle()» worked.
ESLI VAM ETA PROGAPOKAZHETSA TUPOY… NE PEREZHYVAITE! ETO DEISTVITEL'NO TAK :)
Our rectangle:
a=1 b=1
S= 1 m^2 P=4 m d=1.41421 m
Rectangle is square.
Input a, b:
456.125
789.5452485
The constructor«rectangle(double, double)» worked.
Your rectangle:
a=456.125 b=789.545
S= 360131 m^2 P=2491.34 m d=911.829 m
Rectangle is notsquare.
Your rectangle isour now:
a=456.125 b=789.545
S= 360131 m^2 P=2491.34 m d=911.829 m
Rectangle is notsquare.
Repeat orquit?(r/q)...r
The destructor"~rectangle()" worked.
Our rectangle:
a=456.125 b=789.545
S= 360131 m^2 P=2491.34 m d=911.829 m
Rectangle is notsquare.
Input a, b:
0.4876
0.4876
The constructor«rectangle(double, double)» worked.
Your rectangle:
a=0.4876 b=0.4876
S= 0.237754 m^2 P=1.9504 m d=0.689571 m
Rectangle is square.
Your rectangle isour now:
a=0.4876 b=0.4876
S= 0.237754 m^2 P=1.9504 m d=0.689571 m
Rectangle is square.
Repeat orquit?(r/q)...r
The destructor"~rectangle()" worked.
Our rectangle:
a=0.4876 b=0.4876
S= 0.237754 m^2 P=1.9504 m d=0.689571 m
Rectangle issquare.
Input a, b:
16.23
31.06
The constructor«rectangle(double, double)» worked.
Your rectangle:
a=16.23 b=31.06
S= 504.104 m^2 P=94.58 m d=35.0448 m
Rectangle is notsquare.
Your rectangle isour now:
a=16.23 b=31.06
S= 504.104 m^2 P=94.58 m d=35.0448 m
Rectangle is notsquare.
Repeat orquit?(r/q)...q
The destructor"~rectangle()" worked.
The destructor"~rectangle()" worked.
D:\Studies\Labs\Cpp\Individ_6>
2 частьработы «Информационные динамические структуры»
Постановказадачи
Написать программу, в которойсоздаются динамические структуры, и выполнить их обработку в соответствиисо своим вариантом.
Для каждого вариант разработатьследующие методы:
1. Конструкторпустого списка.
2. Добавлениеэлемента в список (в соответствии со своим вариантом).
3. Удаление элементаиз списка (в соответствии со своим вариантом).
4. Печать списка.
5. Запись списка вфайл.
6. Восстановлениесписка из файла.
7. Деструктор списка(уничтожение).
Порядок выполнения работы
1. Разработатьописание класса, выделить публичные и приватные поля данных. Разработатьинтерфейс класса – прототипы методов.
2. Написать функциюдля создания списка. Функция может создавать пустой список, а затем добавлять внего элементы.
3. Написать функциюдля печати списка. Функция должна предусматривать вывод сообщения, если списокпустой.
4. Написать функциидля удаления и добавления элементов списка в соответствии со своим вариантом.
5. Выполнитьизменения в списке и печать списка после каждого изменения.
6. Написать функциюдля записи списка в файл.
7. Написать функциюдля уничтожения списка.
8. Записать список вфайл, уничтожить его и выполнить печать (при печати должно быть выданосообщение «Список пустой»).
9. Написать функциюдля восстановления списка из файла.
10. Восстановитьсписок и распечатать его.
11. Уничтожитьсписок.
Вариантызаданий
14. Записи в линейномсписке содержат поле данных звена типа *char(строка символов).Сформировать двунаправленный список. Удалить из него К элементов с указанныминомерами. Добавить К элементов с указанными номерами.
Програма:
#ifndef list_h
#define list_h
class list
{
private:
structelement
{
char*info;
element*up;
element*down;
};
element*first, *last, *current;
public:
list(); //constructor
~list(); //destructor
voiddel_list(); //ochishchajet spisok
voidinit_list(int,char*); //initsializatsia spiska fonarhym metodom
voidprint_list(); //vyvod na ekran spiska
int current_element(int); //zdelat element s nomerom «int»tekushchim, vernetsa 0;
//Eslidoidem do kontsa spiska,to vernetsa nomer poslednego elementa,kotoryi i budettekushchim
int next_element(); //sdelat tekushchim sledujushchiy element tekuschuego
int previous_element(); //sdelat tekushchim predydushchiy element tekuschuego
intnum_current(); //nomer v spiske tekushchego elementa
char*read_element(int &); //prochitat element s nomerom; Robe jogotekushchim
char*read_element(); //prochitat tekushchiy element
voidadd_element(char*, int &);//dobavit element na nomer «int»; Robenovyi element tekushchim
voidadd_after(char*); //dobavit element posle tekushchego; Robe novyielement tekushchim
voidadd_before(char*); //dobavit element do tekushchego; Robe novyi elementtekushchim
voiddel_element(); //udalit tekushchiy element; Robe sleduushchiyelement tekushchim
voiddel_element(int &); //udalit element z nomerom «int»; Robesleduushchiy element tekushchim
int fput_list(char*); //zapisat spisok v fail s imenem char*
int fget_list(char*); //vostanovit spisok iz faila s imenem char*
int num_list(); //kol-vozvenjev u spiska
};
#endif
#ifndef list__h
#define list__h
#include«list.h»
#include
list::list()
{
current=last=first=NULL;
};
voidlist::add_after(char* s)
{
if(current==NULL)
{
current=newelement[1];
current->info=newchar[strlen(s)+1];
strcpy(current->info,s);
current->up=current->down=NULL;
first=last=current;
return;
};
if(current==last)
{
last=newelement[1];
last->info=newchar[strlen(s)+1];
strcpy(last->info,s);
last->down=NULL;
last->up=current;
current->down=last;
current=last;
return;
};
//putin buffer adress down
last->down=current->down;
current->down=newelement[1];
current->down->up=current;
current=current->down;
current->down=last->down;
//clearbuffer
last->down->up=current;
last->down=NULL;
current->info=newchar[strlen(s)+1];
strcpy(current->info,s);
return;
};
voidlist::add_before(char* s)
{
if(current==NULL)
{
add_after(s);
return;
};
if(current==first)
{
first=newelement[1];
first->up=NULL;
first->down=current;
current=current->up=first;
first->info=newchar[strlen(s)+1];
strcpy(first->info,s);
return;
};
first->up=current->up;
current->up=newelement[1];
current->up->down=current;
current=current->up;
current->up=first->up;
first->up->down=current;
first->up=NULL;
current->info=newchar[strlen(s)+1];
strcpy(current->info,s);
return;
};
voidlist::add_element(char* s, int &k)
{
inti;
i=current_element(k);
if((i
{
cout
k=i+1;
add_after(s);
};
if(i==0)
add_before(s);
return;
};
voidlist::del_element()
{
if(first==NULL)
{
cout
return;
};
if(current==first)
{
if(current==last)
{first=last=NULL;}
else
{
first=current->down;
first->up=NULL;
};
delete[]current->info;
delete[]current;
current=first;
return;
};
if(current==last)
{
last=current->up;
last->down=NULL;
delete[]current->info;
delete[]current;
current=last;
return;
};
last->down=current->down;
current->up->down=current->down;
current->down->up=current->up;
delete[]current->info;
delete[]current;
current=last->down;
last->down=NULL;
return;
};
voidlist::del_element(int &k)
{
inti=current_element(k);
if((i
{
cout
k=i;
};
del_element();
return;
};
list::~list()
{
del_list();
};
voidlist::del_list()
{
while(last!=first)
{
current=last;
delete[] last->info;
last=last->up;
delete[] current;
};
if(first) delete [] first->info;
delete[]first;
current=first=last=NULL;
return;
};
//current ostaetsanetronutym
intlist::num_list()
{
if(first==NULL)return 0;
inti(1);
element*temp=first->down;
while(temp!=NULL)
{
i++;
temp=temp->down;
};
returni;
};
//if OK return 0,esle return i (number current element)
intlist::current_element(int k)
{
if(first==NULL)
{
cout
return0;
};
inti(1);
current=first;
if(i==k)return 0;
while(current->down)
{
current=current->down;
if(++i==k) return 0;
};
returni;
};
//Esli sled.element sdelalsa tekuschim return 1, else 0
intlist::next_element()
{
if(current->down)
{
current=current->down;
return1;
};
return0;
};
//Esli pred.element sdelalsa tekuschim return 1, else 0
intlist::previous_element()
{
if(current->up)
{
current=current->up;
return1;
};
return0;
};
intlist::num_current()
{
if(current==NULL)return0;
inti(1);
element*temp=current;
while(temp->up!=NULL)
{
i++;
temp=temp->up;
};
returni;
};
char*list::read_element()
{
returncurrent->info;
};
char*list::read_element(int &k)
{
inti;
i=current_element(k);
if((i
{
cout
k=i;
};
returncurrent->info;
};
voidlist::init_list(int k, char* str)
{
if(k==0) return;
intf(2);
char*s;
s=newchar[strlen(str)+7];
if(first!=NULL)
{
cout
cout
cout
cout
cout
cin>>f;
};
if(f==0)return;
if(f==1)current=last;
if(f==2)
{
del_list();
first=newelement[1];
first->info=newchar[strlen(str)+3];
sprintf(first->info,"%s1",str);
first->up=first->down=NULL;
current=last=first;
};
for(int j=f; j
{
sprintf(s,"%s%d",str,j);
add_after(s);
};
return;
};
voidlist::print_list()
{
cout
element*temp=first;
if(first==NULL)
{
cout
return;
};
do
{
coutinfo
temp=temp->down;
}
while(temp);
cout
return;
};
intlist::fput_list(char* s)
{
FILE*f;
if((f=fopen(s,«w+»))==NULL)
{
cout
return0;
};
if(!first) fclose(f);
element*temp=first;
do
{
fputs(temp->info,f);
fputs("\n",f);
temp=temp->down;
}
while(temp);
fclose(f);
return1;
};
intlist::fget_list(char* s)
{
intff=2;
if(first!=NULL)
{
cout
cout
cout
cin>>ff;
};
if(!ff)return ff;
FILE*f;
if((f=fopen(s,«r»))==NULL)
{
cout
return0;
};
charstr[255];
if(ff==1)
current=last;
char*sss;
if(ff==2)
del_list();
while(fgets(str,256,f))
{
sss=newchar[strlen(str)];
intj=0;
while(str[j]!='\n')
sss[j]=str[j++];
sss[j]='\0';
add_after(sss);
delete[] sss;
};
fclose(f);
returnff;
};
#endif
#include«list_.h»
void main()
{
intn=16;
cout
lists;
chara[255];
strcpy(a,«Seha»);
s.print_list();
cout
cout
cout for go on...\n»;
getchar();
cout
cin>>n;
cout
s.init_list(n,a);
s.print_list();
cout
cout
cout
cout for go on...\n»;
getchar();//cleariostream
getchar();
cout
cin>>n;
s.current_element(n);
cout
cout
cin>>n;
getchar();//cleariostream
for(int i=0; i
{
cout
gets(a);
cout
s.add_after(a);
s.print_list();
cout
cout for go on...\n»;
getchar();
};
cout
s.next_element();
cout
cout for go on...\n»;
getchar();
cout
cin>>n;
getchar();//cleariostream
for(int i=0; i
{
cout
gets(a);
cout
s.add_before(a);
s.print_list();
cout
cout for go on...\n»;
getchar();
};
cout
cin>>n;
getchar();//cleariostream
for(int k,i=0; i
{
cout
gets(a);
cout
cin>>k;
cout
s.add_element(a,k);
s.print_list();
cout
cout for go on...\n»;
getchar();//cleariostream
getchar();
};
cout
cin>>n;
s.current_element(n);
cout
cout
cin>>n;
getchar();//cleariostream
for(int i=0; i
{
cout
s.del_element();
s.print_list();
cout
cout for go on...\n»;
getchar();
};
cout
cin>>n;
getchar();//cleariostream
for(int k,i=0; i
{
cout
cin>>k;
cout
s.del_element(k);
s.print_list();
cout
cout for go on...\n»;
getchar();//cleariostream
getchar();
};
cout
s.fput_list(«Seha.lsm»);
cout
s.del_list();
s.print_list();
cout
cout for go on...\n»;
getchar();
cout
s.fget_list(«Seha.lsm»);
s.print_list();
cout
cout for go on...\n»;
getchar();
cout
s.previous_element();
cout
cout for go on...\n»;
getchar();
cout for exit...»;
getchar();
};
Результат:
D:\Studies\Labs\Programing\Labs\Cpp\Individ_6\ind2>ind2
Rozhdeniespiska...
Vmestimoe spiska:
Spisok pust!!!
Vsego elementov vspiske: 0
Tekuschiy elementspiska: 0
Press for go on...
Skol'koproinitsializirovat' elementov spiska?
n=9
Initsialitsiaspiska...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 9
Tekuschiy elementspiska: 9
Press for go on...
Kakoi element vspiske sdelat' tekeschim?
n=6
Vsego elementov vspiske: 9
Tekuschiy elementspiska: 6
Skol'ko elementovdobavit'?
3
Vvedite strokudlja dobavlenija v spisok
Sveta 1
Dobavlenie posletekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2 ||Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Seha 7 || Seha 8
|| Seha 9 |
Vsego elementov vspiske: 10
Tekuschiy elementspiska: 7
Press for go on...
Vvedite strokudlja dobavlenija v spisok
Sveta 2
Dobavlenie posletekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2 ||Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Seha 7
|| Seha 8 || Seha 9|
Vsego elementov vspiske: 11
Tekuschiy elementspiska: 8
Press for go on...
Vvedite strokudlja dobavlenija v spisok
Sveta 3
Dobavlenie posletekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2 ||Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || Seha 7 || Seha 8|| Seha 9 |
Vsego elementov vspiske: 12
Tekuschiy elementspiska: 9
Press for go on...
Delaem tekuschimsledujushiy element...
Vsego elementov vspiske: 12
Tekuschiy elementspiska: 10
Press for go on...
Skol'ko eschjeelementov spiska nuzhno dobavit'?
3
Vvedite strokudlja dobavlenija v spisok
Svitlana 1
Dobavlenie dotekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || Svitlana 1 ||Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 13
Tekuschiy elementspiska: 10
Press for go on...
Vvedite strokudlja dobavlenija v spisok
Svitlana 2
Dobavlenie dotekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || Svitlana 2 ||Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 14
Tekuschiy elementspiska: 10
Press for go on...
Vvedite strokudlja dobavlenija v spisok
Svitlana 3
Dobavlenie dotekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || Svitlana 3 ||Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 15
Tekuschiy elementspiska: 10
Press for go on...
Skol'ko eschjeelementov spiska nuzhno dobavit'?
3
Vvedite strokudlja dobavlenija v spisok
I
Vvedite nomerelementa, na kakoe mesto nuzhno dobavit' novyi element
10
Dobavlenie 10-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || I || Svitlana3 || Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 16
Tekuschiy elementspiska: 10
Press for go on...
Vvedite strokudlja dobavlenija v spisok
like
Vvedite nomerelementa, na kakoe mesto nuzhno dobavit' novyi element
11
Dobavlenie 11-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || I || like ||Svitlana 3 || Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 17
Tekuschiy elementspiska: 11
Press for go on...
Vvedite strokudlja dobavlenija v spisok
you!!!
Vvedite nomerelementa, na kakoe mesto nuzhno dobavit' novyi element
12
Dobavlenie 12-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 4 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta
3 || I || like ||you!!! || Svitlana 3 || Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 ||
Seha 9 |
Vsego elementov vspiske: 18
Tekuschiy elementspiska: 12
Press for go on...
Kakoi element vspiske sdelat' tekeschim?
n=4
Vsego elementov vspiske: 18
Tekuschiy elementspiska: 4
Skol'ko elementovudalit'?
3
Udalenietekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 5 || Seha 6 || Sveta 1 || Sveta 2 || Sveta 3 || I ||
like || you!!! ||Svitlana 3 || Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 17
Tekuschiy elementspiska: 4
Press for go on...
Udalenietekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Seha 6 || Sveta 1 || Sveta 2 || Sveta 3 || I || like || yo
u!!! || Svitlana 3|| Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 16
Tekuschiy elementspiska: 4
Press for go on...
Udalenietekuschego...
Vmestimoe spiska:
| Seha 1 || Seha 2|| Seha 3 || Sveta 1 || Sveta 2 || Sveta 3 || I || like || you!!! || Sv
itlana 3 ||Svitlana 2 || Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 15
Tekuschiy elementspiska: 4
Press for go on...
Skol'ko eschjeelementov spiska nuzhno udalit?
3
Vvedite nomerelementa, kotoryi nuzhno udalit'
2
Udalenie 2-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 3|| Sveta 1 || Sveta 2 || Sveta 3 || I || like || you!!! || Svitlana 3 |
| Svitlana 2 ||Svitlana 1 || Seha 7 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 14
Tekuschiy elementspiska: 2
Press for go on...
Vvedite nomerelementa, kotoryi nuzhno udalit'
12
Udalenie 12-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 3|| Sveta 1 || Sveta 2 || Sveta 3 || I || like || you!!! || Svitlana 3 |
| Svitlana 2 ||Svitlana 1 || Seha 8 || Seha 9 |
Vsego elementov vspiske: 13
Tekuschiy elementspiska: 12
Press for go on...
Vvedite nomerelementa, kotoryi nuzhno udalit'
12
Udalenie 12-togoelementa...
Vmestimoe spiska:
| Seha 1 || Seha 3|| Sveta 1 || Sveta 2 || Sveta 3 || I || like || you!!! || Svitlana 3 |
| Svitlana 2 ||Svitlana 1 || Seha 9 |
Vsego elementov vspiske: 12
Tekuschiy elementspiska: 12
Press for go on...
Zapis' spiska vfail...
Udalenie spiska...
Vmestimoe spiska:
Spisok pust!!!
Vsego elementov vspiske: 0
Tekuschiy elementspiska: 0
Press for go on...
Vostanovleniespiska...
Vmestimoe spiska:
| Seha 1 || Seha 3|| Sveta 1 || Sveta 2 || Sveta 3 || I || like || you!!! || Svitlana 3 |
| Svitlana 2 ||Svitlana 1 || Seha 9 |
Vsego elementov vspiske: 12
Tekuschiy elementspiska: 12
Press for go on...
Delaem tekuschimpredyduschiy element...
Vsego elementov vspiske: 12
Tekuschiy elementspiska: 11
Press for go on...
Press for exit...
D:\Studies\Labs\Programing\Labs\Cpp\Individ_6\ind2>
Seha.lsm:
Seha 1
Seha 3
Sveta 1
Sveta 2
Sveta 3
I
like
you!!!
Svitlana 3
Svitlana 2
Svitlana 1
Seha 9