Форум программистов, компьютерный форум CyberForum.ru

Не знаю как переделать лабу, есть пример - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 432
01.06.2011, 20:30     Не знаю как переделать лабу, есть пример #1
Есть готовая лаба, нужно переделать под другой вариан
Помогите, пожалуйста.....

Порядок выполнения работы.
1. Выбрать класс АТД в соответствии с вариантом.
2. Определить и реализовать в классе конструкторы, деструктор, функции Input (ввод с клавиатуры) и Print (вывод на экран), перегрузить операцию присваивания.
3. Написать программу тестирования класса и выполнить тестирование.
4. Дополнить определение класса заданными перегруженными операциями ( в соответствии с вариантом).
5. Реализовать эти операции. Выполнить тестирование.

Методические указания.
1.Класс АТД реализовать как динамический массив. Для этого определение класса должно иметь следующие поля:
 указатель на начало массива;
 максимальный размер массива;
 текущий размер массива.
2. Конструкторы класса размещают массив в памяти и устанавливают его максимальный и текущий размер. Для задания максимального массива использовать константу, определяемую вне класса.
3. Чтобы у вас не возникало проблем, аккуратно работайте с константными объектами. Например:
* конструктор копирования следует определить так:
MyClass (const MyClass& ob);
* операцию присваивания перегрузить так:
MyClass& operator = (const MyClass& ob);


4. Для удобства реализации операций-функций реализовать в классе private(protected)-функции, работающие непосредственно с реализацией класса. Например, для класса множество это могут быть следующие функции:
 включить элемент в множество;
 найти элемент и возвратить его индекс;
 удалить элемент;
 определить, принадлежит ли элемент множеству.
Указанные функции используются в реализации общедоступных функций-операций (operator).

Задание варианта который есть:

2. АТД - множество с элементами типа char. Дополнительно перегрузить следующие операции:
- удалить элемент из множества (типа set-char);
* пересечение множеств;
< сравнение множеств.

текст готовой лабы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdio.h>
#include <stdafx.h>
#include <conio.h>
//#include <iostream.h>
class charArray {
private:
    char *data;
    int size;
public:
    charArray(void){
        data=new char[100];
        size=100;
        for(int index=0;index<size;index++)
            data[index]=0;
    }
    
    charArray(int mySize){
        data=new char[mySize];
        size=mySize;
        for(int index=0;index<size;index++)
            data[index]=0;
    }
    charArray(charArray& ancharArray){ //Конструктор инициализации
        size=ancharArray.size;
        data=new char[ancharArray.size];
        for(int index=0;index<size;index++)
            data[index]=ancharArray.data[index];
    }
    char& operator [](int index){
        if (index>0&&index<=size) {
            return data[index-1];
        }
    }
    charArray& operator = (const charArray& ancharArray) { //присваивание
        if (size > ancharArray.size){
            for (int index=0;index<ancharArray.size;index++)
                data[index]=ancharArray.data[index];
            for (int index=ancharArray.size;index<size;index++)
                data[index]=0;
        }else{
            for (int index=ancharArray.size;index<size;index++)
                data[index]=ancharArray.data[index];
        }
 
        return *this;
    }
    void put(int at,char value){
        if(at>0&&at<=size) {
            data[at-1]=value;
        }
 
    }
    char get(int at){
        if(at>0&&at<=size) {
            return data[at-1];
        }
        else return '\0';
 
    }
    
    ~charArray(){ 
        delete data;
    }
    friend charArray operator *(charArray& c1,charArray& c2){
        
    }
    int operator < (const charArray& ancharArray){
        return size < ancharArray.size;
    }
    charArray& operator -(char ch1){
        for (int index1=0;index1<size;index1++)
            if (data[index1]==ch1)
                for (int index2=index1;index2<size+1;index2++)
                        data[index2]=data[index2+1];
    return *this;           
    }
};
 
 
void main(){
int i1=1;
int i2=1;
charArray a1,a2;
a1.put(i1++,'a');
a1.put(i1++,'b');
a1.put(i1++,'c');
a1.put(i1++,'d');
a1.put(i1++,'e');
a1.put(i1++,'f');
 
a2.put(i2++,'c');
a2.put(i2++,'e');
a2.put(i2++,'f');
 
}
нужно переделать для

4. АТД - множество с элементами типа char. Дополнительно перегрузить следующие операции:
+ добавить элемент в множество (типа set+char);
* пересечение множеств;
int() мощность множества.


я как понимаю мощность это количество элементов
нужно переделать (- на +) и мощность
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gangsterus
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 5
11.11.2013, 17:22     Не знаю как переделать лабу, есть пример #2
zesen, ДРУЖИЩЕ ПРИВЕТ!!ну что ты переделал эту работу? =)

Добавлено через 2 часа 49 минут
zesen, помоги мне пожалуйста! =)
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 432
12.11.2013, 11:17  [ТС]     Не знаю как переделать лабу, есть пример #3
Gangsterus, я уже не помню гляну на домашнем компе. что осталось....
Gangsterus
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 5
12.11.2013, 11:45     Не знаю как переделать лабу, есть пример #4
Спасибо!!посмотри пожалуйста
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 432
13.11.2013, 00:31  [ТС]     Не знаю как переделать лабу, есть пример #5
Gangsterus, нашел!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <iostream.h>
#include <conio.h >
#include <vcl.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
// инифиализация класса country
class country
{
 public:
    char* name; // Имя
           char* form_of_government; // Форма правления
    float area ; // Площадь
 // Конструктор класса country без параметров
    country()
    {
        name = new char[15];    // выделение памяти для названия страны
        strcpy(name,"default"); // копирование названия поумолчанию в выделенную память
        form_of_government = new char[10];    // выделение памяти для формы правления в стране
        strcpy(form_of_government,"undefined"); // копирование имени поумолчанию в выделенную память
        area =0; // присваивание свойству area 0
        // вывод сообщение о создании нового экземпляра класса  country
        cout<<"Created country object"<<" "<<this<<" name: "<<name<<"\n\r";
    }
// Конструктор класса country с параметрами
// входные параметры:
// nm - Имя
// fog – Форма правления
// ar - Площадь
    country(char* nm, char* fog,float ar)
    {
        name = new char[StrLen(nm)]; // выделение памяти для названия страны
        strcpy(name,nm); // копирование имени в выделенную память
        form_of_government = new char[StrLen(fog)]; // выделение памяти для формы правления в стране
        strcpy(form_of_government,fog); // копирование формы правления в выделенную память
        area =ar; // присваивание свойству area знаение ar
        // вывод сообщение о создании нового экземпляра класса  country
        cout<<"Created country object"<<" "<<this<<" name: "<<name<<"\n\r";
    }
// Конструктор копирования класса country
    country(const country& st)
    {
        name= new char[StrLen(st.name)]; // выделение памяти копии свойства name
        strcpy(name,st.name); // копирование имени  выделенную память
        form_of_government= new char[StrLen(st.form_of_government)]; // выделение памяти копии свойства form_of_government
        strcpy(form_of_government,st.form_of_government); // копирование формы правления в выделенную память
        area=st.area;// присваивание свойству area знаение копируемого экзкмпляра класса
// вывод сообщения об завершении работы конмтруктора копирования
        cout<<"Object copied"<<" "<<this<<" name: "<<name<<"\n\r";
    }
// Диструктор класса country
    ~country()
    {
    // вывод сообщение об уничтожении экземпляра класса country
        cout<<"Destroyed country object"<<" "<<this<<" name: "<<name<<"\n\r";
        delete this->name; // освобождение памяти от строки значения свойства name
        delete this->form_of_government; // освобождение памяти от строки значения свойства form_of_government
        getch();
    }
// Метод set_name предназначен для установки свойства name в экземляре класса country
// входные параметры:
// nm - Имя 
    void set_name(char *nm)
    {
    // вывод сообщение об изменении свойства name экземпляра класса country
        cout<<"Object"<<" "<<this<<" name changed from: "<<name<<" to: "<<nm<<"\n\r";
        delete this->name;// освобождение памяти от строки значения свойства name
        name = new char[StrLen(nm)]; // выделение памяти для свойства name
        strcpy(name,nm); // копирование имени  выделенную память
    }
// Метод set_fog предназначен для установки свойства form_of_government в экземляре класса country
// входные параметры:
// fog – форма правления
    void set_fog(char *fog)
    {
// вывод сообщение об изменении свойства name экземпляра класса country
        cout<<"Object"<<" "<<this<<" form_of_government changed from: "<<form_of_government<<" to: "<<fog<<"\n\r";
        delete this->form_of_government;// освобождение памяти от строки значения свойства form_of_government
        form_of_government = new char[StrLen(fog)]; // выделение памяти для свойства form_of_government
        strcpy(form_of_government,fog); // копирование  новой формы правления в выделенную память
    }
// Метод set_area предназначен для установки свойства area в экземляре класса country
// входные параметры:
// ar - площадь
    void set_area(float ar)
    {
    // вывод сообщение об изменении свойства area экземпляра класса country
        cout<<"Object"<<" "<<this<<" quantity changed from: "<<area<<" to: "<<ar<<"\n\r";
        this->area=ar; // присваивание свойству area знаение ar
    }
// Метод show_name предназначен для просмотра свойства name класса country
    void show_name()
    {
        cout<<"Object"<<" "<<this<<" name is: "<<name<<"\n\r"; // вывод значения name
    }
// Метод show_fog предназначен для просмотра свойства form_of_government класса country
    void show_fog()
    {
        cout<<"Object"<<" "<<this<<" code is: "<<form_of_government<<"\n\r"; // вывод значения form_of_government
    }
// Метод show_area предназначен для просмотра свойства area класса country
    void show_area()
    {
        cout<<"Object"<<" "<<this<<" quantity is: "<<area<<"\n\r"; // вывод значения area
    }
 };
 
//-----------------------------------------------------------------------------
// Функция view предназначена для просмотра элементов экземпляра класса country
void view(country sh)
{
 // Инициализация указателя не метод show_name класса country
    void (country::*show_n)();
    show_n=&country::show_name;
 
        cout<<"\n\r         Info about "<<sh.name<<"\n\r";
        (sh.*show_n)(); // Вывод свойсвтва name на экран
        sh.show_fog(); // Вывод свойсвтва form_of_government на экран
        sh.show_area(); // Вывод свойсвтва area на экран
        cout<<"\n\r";
// при выходе из функции вызывается диструктор для копии объекта переданного в функцию
}
 
//-----------------------------------------------------------------------------
float main(float argc, char* argv[])
{
    country group[2], *one, *two; // определяем массив из 2-х элементов класса country
                                //и двух указателей на экземпляр класса country
                                // при этом вызывается 2 раза конструктор без параметоров
// создаем объект класса country, при этом вызывается конструктор с параметрами
    one=new country("Belarus","smeshan",207);
    two=&group[1]; // присваиваем указателю адрес второго элемента массива group
    int i,n;
 
    for(i=0;i<2;i++)
    {
 
        group[i].set_name(("Country N"+FloatToStr(i)).c_str()); // установка значения свойства name
        group[i].set_fog(("form_of_government N" +FloatToStr(i)).c_str()); // установка значения свойства form_of_government
        group[i].set_area((i+1)*(i+1));// установка значения свойства area
        view(group[i]); // вывод на экран свойств group[i], при этом вызывается конструктор копирования
    }
    one->set_fog("President"); // установка значения свойства form_of_government 
    one->set_name("Polska"); // установка значения свойства name
    one->set_area(300); // установка значения свойства area
    view(*one); // вывод на экран свойств group[i], при этом вызывается конструктор копирования
 
    getch();
    return 0;
 
// при завершении программы вызывается  деструктор для объектов массива group, а также
//объект созданный оператором new, на который указывает указатель one
}
//---------------------------------------------------------------------------
Gangsterus
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 5
13.11.2013, 12:33     Не знаю как переделать лабу, есть пример #6
АААААААААА сапсибо,огромное!!!не знаю как отблагодарить тебя,выручил!!!РЕСПЕКТ!есть же добрые люди,СПАСИБО!!!!!!!!!!!

Добавлено через 4 минуты
Что - то это по-моему не похоже на эту задачу
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 432
13.11.2013, 18:25  [ТС]     Не знаю как переделать лабу, есть пример #7
Gangsterus, Си++ сдавал уже давно, надо посмотреть по папкам, если есть интерес могу скинуть папку со всем может что интересного найдешь. Если надо, скинь мыло в личку - перешлю. Мне не жалко
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 18:06     Не знаю как переделать лабу, есть пример
Еще ссылки по теме:

пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить C++
C++ Есть функция которая добавляет элемент типа int в конец массива. Как ее переделать через шаблон
C++ Лафорье (13глава) - пример из книги, как он есть - не работает

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gangsterus
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 5
14.11.2013, 18:06     Не знаю как переделать лабу, есть пример #8
zesen, давай,попробуем,я сам не силён в нем,учился давно и то на делфи,а щас пошел доучиваться такие задания давать стали... )) [вырезано] кинь сюда архивчик пожалуйста,я очень благодарен тебе, СПАСИБО!

Добавлено через 18 часов 53 минуты
zesen, Дружище,привет!ну что,как дела обстоят с архивчиком?
Yandex
Объявления
14.11.2013, 18:06     Не знаю как переделать лабу, есть пример
Ответ Создать тему
Опции темы

Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru