bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Логин:
Пароль:
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » ООПиП

КР вар. 8 по ООПиП ч.2 (по страой программе)
Подробности о скачивании 06.01.2011, 13:09
1. Реализуйте класс, для которого [] перегружено для реализации записи в файл по указанному индексу.

Текст программы:

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
class oshibka
{
public:
print()
{
cout << "Nevozmozhno otkryt' file."; //Сообшение об ошибке
}
};
class _file
{
private:
char file_name[50];
int mas[10];
fstream file;
public:

_file(char name[50])
{
strcpy(file_name,name);
file.open(file_name,ios::out);
for(int i=0;i<10;i++)
{
mas[i]=i;
file.write((char *) &mas[i],sizeof(mas[i]));
}
file.close();
}
void list() //Вывод элементоа массива
{
file.open(file_name);
for(int i=0;i<10;i++)
{
file.read((char *)mas[i],sizeof(mas[i]));
cout << mas[i] << "\t";
}
file.close();
}
void zamena() //замена элемента с указанным индексом
{
file.open(file_name);
for(int i=0;i<10;i++)
{
file.read((char *)mas[i],sizeof(mas[i]));
}
file.close();
int ind,el;
cout << "Vvedite index elementa dlya zameny-";
cin >> ind;
cout << "Vvedite novoe znachenie elementa-";
cin >> el;
mas[ind-1]=el;
file.open(file_name,ios::out);
for(i=0;i<10;i++)
{
file.write((char *) &mas[i],sizeof(mas[i]));
}
file.close();
}
};
int main()
{
_file f("file.txt");
try
{
f.list();
f.zamena();
f.list();
}
catch(oshibka error)
{
cout << "ERROR:";
error.print();
}
return 0;
}


2. Реализовать шаблон класса Stack, реализующий стек. Для представления элемента стека использовать шаблон класса Node. Определить функции добавления на вершину стека и чтение с вершины (как шаблонный класс).
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;

class Exception {
public:
Exception(char * c="Error!") {
message=c;
};
char *message;
};
class MemoryException : public Exception {
public:
MemoryException():Exception("Out of memory error!"){};
};
class Downflow : public Exception {
public:
Downflow():Exception("Stack is empty!"){};
};

template <class T>
struct Node { //структура узла
T data; //данные
Node *l; //указатель на предыдущий узел
};
template <class T>
class stack
{
public:
stack() { head=0;} //конструктор по умолчанию
~stack() {}; // деструктор

Node<T> *push (T inf) { //запихнуть в стек
Node<T> * newbie = new Node<T>; //создаем новый узел
if (!newbie)
{
throw MemoryException();
}

newbie->l=head; //указатель узла на предыдущий
newbie->data=inf; //записываем данные
head=newbie; //перемещаем вершину
return head;
}
T pop () {
if (!head)
{
throw Downflow();
}

Node<T> *tmp=head->l;
T ret=head->data; //запоминаем что надо вернуть
delete head; //удаляем старую вершину
head=tmp; //запоминаем новую
return ret;
}
Node<T> *head; //вершина стека
};

int main()
{
stack<int> stack;
while (1)
{
cout << endl << "Menu:" << endl << "1. Push" << endl << "2. Pop" << endl << "3. Exit" << endl;
int key=0;
cin >> key;
switch (key)
{
case 1:
cout << "Enter a int number: "; //ввести число
int x;
cin >> x;
try
{
stack.push(x); //в стек
}
catch (MemoryException except)
{
cout << except.message;
return 1;
}

break;
case 2:
try {
cout << "Popped " << stack.pop() << endl; //достаем из стека
}
catch (Downflow except)
{
cout << except.message;
// return 1;
}
break;
case 3:
return 0;
}
}
}



3. Реализовать шаблон класса Stack, реализующий стек. Для представления элемента стека использовать шаблон класса Node. Определить функции добавления на вершину стека и чтение с вершины (как класс контейнера и итератора).

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;

class Exception {
public:
Exception(char * c="Error!") {
message=c;
};
char *message;
};
class MemoryException : public Exception {
public:
MemoryException():Exception("Out of memory error!"){};
};
class Downflow : public Exception {
public:
Downflow():Exception("Stack is empty!"){};
};

template <class T>
struct Node {
T data;
Node *l;
};
template <class T>
class stack
{
public:
stack() { head=0; num=0; }
~stack() {};
Node<T> *push (T inf)
{
Node<T> * newbie = new Node<T>;
if (!newbie)
{
throw MemoryException();
}
newbie->l=head;
newbie->data=inf;
head=newbie;
num++;
return head;
}
T pop () {
if (!head)
{
throw Downflow();
}
Node<T> *tmp=head->l;
T ret=head->data;
delete head;
head=tmp;
num--;
return ret;
}
long getNum()
{
return num;
}
long num;
Node<T> *head;
};
template <class T>
class Iterator {
public:
Node<T> *head, *p;
public:
Iterator(){ head=0; p=0;};
Iterator(stack<T> ¤t){
head=current.head;
p=head;
};
T &operator*() { return p->data; };
friend int operator==(Iterator<T> &a,Iterator<T> &b) {
if (a.p == b.p)
{
return 1;
}
return 0;
}
friend int operator!=(Iterator<T> &a,Iterator<T> &b) {
if (a.p == b.p)
{
return 0;
}
return 1;
}
Iterator &operator=(Iterator<T> ¤t)
{
p=current.p;
head=current.head;
return *this;
}
Iterator &operator ++(int) {
if (p->l)
p=p->l;
else
throw Downflow();
return *this;
};
};

int main()
{
stack<int> st;
while (1)
{
cout << endl << "Menu:" << endl << "1. Push" << endl << "2. Pop" << endl << "3. Print stack" << endl << "4. Exit" << endl;
int key=0;
cin >> key;
int x;
switch (key)
{
case 1:
{
cout << "Enter a int number: ";
cin >> x;
try
{
st.push(x);
}
catch (MemoryException except)
{
cout << except.message;
return 1;
}
break;

}
case 2:
{
try
{
cout << st.pop() << endl;
}
catch (Downflow except)
{
cout << except.message;
// return 1;
}

break;
}
case 3:
{
Iterator<int> iter(st),iter_last(st);
long i=0;
for (i=0;i<st.getNum()-1;i++)
{
iter_last++;
}

try {
do
{
cout << *iter << ' ';
iter++;
if (iter == iter_last)
cout << *iter << ' ';
}while (iter!=iter_last);
}
catch (Downflow except)
{
cout << except.message;
return 1;
}
break;
}
case 4:
{
return 0;
}
}
}
}

После ввода двух элементов выведем стек на экран:

Теперь вытолкнем значения из стека:


Диаграмма классов:

Литература

1. Дейгел Х., Дейгел П. Как программировать на С++:пер. с англ. – М., Бином, 2001.
2. Луцик Ю. А., Ковальчук А. М., Лукьянова И. В. Объектно-ориентированное программирование на языке С++. – Мн., БГУИР, 2003.

Категория: ООПиП | Добавил: phart
Просмотров: 1571 | Загрузок: 50
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]