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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
stepan123
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 9
#1

"Классы и объекты - динамические структуры" - C++

20.05.2012, 06:14. Просмотров 1100. Ответов 0
Метки нет (Все метки)

Цель: Разработка простейших классов на примере разработки моделей динамических информационных структур (одно и двунаправленных списков).


Постановка задачи
Написать программу, в которой создаются динамические структуры, и выполнить их обработку в соответствии со своим вариантом.

Для каждого вариант разработать следующие методы:
1. Конструктор пустого списка.
2. Добавление элемента в список (в соответствии со своим вариантом).
3. Удаление элемента из списка (в соответствии со своим вариантом).
4. Печать списка.
5. Запись списка в файл.
6. Восстановление списка из файла.
7. Деструктор списка (уничтожение).


Порядок выполнения работы

1. Разработать описание класса, выделить публичные и приватные поля данных. Разработать интерфейс класса – прототипы методов.
2. Написать функцию для создания списка. Функция может создавать пустой список, а затем добавлять в него элементы.
3. Написать функцию для печати списка. Функция должна предусматривать вывод сообщения, если список пустой.
4. Написать функции для удаления и добавления элементов списка в соответствии со своим вариантом.
5. Выполнить изменения в списке и печать списка после каждого изменения.
6. Написать функцию для записи списка в файл.
7. Написать функцию для уничтожения списка.
8. Записать список в файл, уничтожить его и выполнить печать (при печати должно быть выдано сообщение "Список пустой").
9. Написать функцию для восстановления списка из файла.
10. Восстановить список и распечатать его.
11. Уничтожить список.

Задание:
Записи в линейном списке содержат ключевое поле типа int. Сформировать однонаправленный список. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера;

вот моя лаба готовая её нужно переделать в виде класса
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
include <string.h>
#include<iostream>
#include <conio.h>
using namespace std;
 // Элемент данных 
 struct Element 
 { 
  // Данные 
  int data;  
  // Адрес следующего элемента списка 
  Element * Next; 
 }; 
 // Односвязный список 
 class List 
 { // Адрес головного элемента списка 
  Element * Head; 
  Element * Prev;     // указатель на последний элемент списка
  // Количество элементов списка 
  int Count; 
  public: 
  // Конструктор 
  List(); 
  // Добавление элемента в список 
  void Add(char data); 
  void PasteElement(int data, int position);
  
  void DelElement(int position);
  // Распечатка содержимого списка 
  void Print(); 
 }; 
 List::List() 
 { 
  Head = NULL;
  Prev = NULL; 
  Count = 0; 
 } 
 
 void List::Add(char data) 
 { 
  // создание нового элемента 
  Element * temp = new Element; 
  // заполнение данными 
  if(Head == NULL)              //если это первый элемент, то
    {
        temp->Next = NULL;          
        Head = temp;                //"голова" указывает на созданный элемент
    }
    else                            //если не первый, то
        Prev->Next = temp;          //предыдущий указывает на него
 
    temp->data = data;              //копируем данные
    temp->Next = NULL;          //указываем на хвост, так как этот элемент последний
    Prev = temp;
  Count++; 
 } 
 void List::Print() 
 { 
  // запоминаем адрес головного элемента 
  Element * temp = Head; 
  // Пока еще есть элементы 
  while(temp != 0) 
  { 
  // Выводим данные 
  cout << temp->data<< " "; 
  // Переходим на следующий элемент 
  temp = temp->Next; 
  } 
  cout << endl; 
 } 
 
 void List::PasteElement(int data, int position)
{
   Element *Temp = Head;
    Element *nextEl;
    Element *nElem = new Element;       //создаем временный элемент
    if ((position>Count) || (position<1))       //если указанный элемент не существует, то
        cout << "Takogo elementa net" << endl;  //выводим предупреждение на экран
    else
    {
        for(int i=1; i!=position; i++)  //иначе, переходим до этого элемента
        {    
            Temp = Temp->Next;
        }
        nElem->data=data;
        if (Temp == Head) //если добавляем после первого элемента
        {
            if (Count == 1) //если этот элемент единственный
            {
                Temp->Next=nElem;
                nElem->Next=NULL;
                Prev = nElem;
            }
            else //если он первый, но не единственный
            {
                nextEl = Temp->Next;
                Temp->Next = nElem;
                nElem->Next = nextEl; 
            }
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }
 
        if (Temp->Next == NULL)         //если добавляем после последнего элемента
        {   
            Temp->Next=nElem;
            nElem->Next=NULL;
            Prev=nElem;
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }   
        if (Temp->Next != NULL)     //если добавляем в центр списка
        {   
            nextEl = Temp->Next;
            Temp->Next = nElem;
            nElem->Next = nextEl;
            Count++;
            cout << "Element " << position << " dobavlen" << endl;
            return;
        }           
    }
};
 
void List::DelElement(int position)
{
    Element *Temp=Head;
    Element *pred;      //создаем временный элемент
    if ((position>Count) || (position<1))       //если указанный элемент не существует, то
        cout << "Takogo elementa net" << endl;  //выводим предупреждение на экран
    else
    {
        for(int i=1; i!=position; i++)  //иначе, переходим до этого элемента
        {
            pred=Temp;    
            Temp = Temp->Next;
        }
        
        if (Temp == Head) //если удаляем первый элемент
        {
            if (Count == 1) //если этот элемент единственный
            {
                Head = NULL;
                Prev = NULL;
            }
            else //если он первый, но не единственный
            {
                Head = Temp->Next; 
            }
 
            delete Temp;
            Count--;
 
            cout << "Element " << position << " udalen" << endl;
            return;
        }
 
        if (Temp->Next == NULL)     //если удаляем последний элемент
        {   
            pred->Next=NULL;   
            Prev=pred;
            delete Temp;
            Count--;
            cout << "Element " << position << " udalen" << endl;
            return;
        }       
        
        if (Temp->Next != NULL) //если элемент находится в центре списка
        {   pred->Next=Temp->Next;
            delete Temp;
            Count--;
            cout << "Element " << position << " udalen" << endl;
            return;
        }
    }
};
     
 // Тестовый пример 
 int main() 
 { 
  setlocale (LC_CTYPE,"Russian");
  int k,n,x,y,q;
  // Создаем объект класса List 
  List lst; 
  cout<<"\nВведите количество элементов:\n";
  cin>>n;  
  for(int i=0; i <n; i++)
  { 
    cout<<"\nВведите элемент:\n";
    cin>>k;
    lst.Add(k); 
  }
  cout << "Заполненный список:" <<endl; 
  lst.Print();
  cout<<"\nВведите позицию с коротой добавлять:\n";
  cin>>y;
  cout<<"\nВведите елемент:\n";
  cin>>x;
  lst.PasteElement(x,y);
  lst.Print();
  cout<<"\nВведите номер элемента для удаления:\n";
  cin>>q; 
  lst.DelElement(q);
  lst.Print(); 
  system("PAUSE");
 }
Добавлено через 1 час 33 минуты
123123

Добавлено через 38 минут
Хнык1

Добавлено через 9 часов 9 минут
)))))))))))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 06:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Классы и объекты - динамические структуры" (C++):

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

"Классы и объекты" -"операторы" - C++
Объект «множество целых чисел удвоенной длины заданной мощности». Предусмотреть возможность операции присваивания, объединения двух...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле... - C++
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не лучше ли (практичнее, или возможно ли...

Создать классы "Computer", "Software", "User" и реализовать взаимодействие объектов этих типов между собой - C++
Помогите решить задачку,нужна в инст на экзамен. Составить программу реализующую: 1)классы,которые могут содержать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 06:14
Привет! Вот еще темы с ответами:

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") - C++
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет плательщика&quot;; &quot;Счет получателя&quot;; &quot;Сумма, переводится банковской...

Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат" - C++
Реализовать класс Графический объект от которого будут наследоваться классы &quot;круг&quot; и &quot;квадрат&quot;. Собственно, сам код, который был написан...

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор" - C++
Дали задачу по программированию: составить класс &quot;Источник напряжения&quot;, для которого нужно реализовать два производных класса: &quot;Цепь&quot; и...

Базовый класс "многоугольник" и производные классы "треугольник" и "прямоугольник" - C++
Не могу понять как реализовать данное задание. Создать 1 базовый класс и несколько производных.Все небольшие ф-ии сделать встроенными...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru