Форум программистов, компьютерный форум, киберфорум
Наши страницы

Что за ошибка и почему? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение из txt файла http://www.cyberforum.ru/cpp-beginners/thread836164.html
есть файл. в файле записано следующие: ---------------------------------------DATABASE---------------------------------------- Date Delivery: 12.05.13 Serial number: 95584812 Variant cutting: saw...
C++ Печать предложения в обратном порядке Дано предложение в файле. Нужно вывести его в обратном порядке. Ребят, тут много тем с похожими вопросами, но того что надо не нашел, подскажите как записать некоторое предложение из файла в какой то... http://www.cyberforum.ru/cpp-beginners/thread836161.html
разработка рекурсивных функций, не возвращающих значений ( рекурсивную функцию для нахождения n-го члена и суммы n первых членов прогрессии) C++
помогите пожалуйста разобраться с задачей: Даны первый член и разность арифметической прогрессии. Написать рекурсивную функцию для нахождения n-го члена и суммы n первых членов прогрессии.
C++ Какой код у тире?
Которое –. '\n' - другой символ.
C++ Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым http://www.cyberforum.ru/cpp-beginners/thread836125.html
Добрый день, помогите пожалуйста сделать вот такую программу. Даны натуральное k , символьный файл f и текстовый файл f1 . Файл f содержит 30 слов , каждое из которых будем называть ключевым....
C++ Обнаружить в заданном тексте Обнаружить в заданном тексте слова, содержащие более 3-х гласных букв, сначала распечатать их, а потом заменить гласные буквы символом "-" и снова распечатать их. подробнее

Показать сообщение отдельно
Kiragaz
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 13

Что за ошибка и почему? - C++

12.04.2013, 21:18. Просмотров 831. Ответов 11
Метки (Все метки)

Нужно сделать двунаправленный список с кучей функций, список создал, много чего сделал, осталось добавление и обновление.
Уже около недели воюю с программой пытаясь добиться хоть какого нибудь добавления, но пока ничего, может поможете советом или ещё как нибудь разобраться что я пишу не так.

Вот то что у меня есть
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
//------------------------------------------------------------------------------
#include <iostream.h>
#include <fstream.h>
#include <ctime.h>
#include <windows.h>
#include <stdio.h>
#include <vcl.h>
//==============================================================================
//обьявление списка
struct Double_List {//структура данных
                    int Data;//информационное поле
                    char performer[30];
                    Double_List *Next, //адресное поле
                                *Prior; //адресное поле
             };
 
Double_List *Head; //указатель на первый элемент списка
int prd;
int prdx;
Double_List *Current;//указатель на текущий элемент списка (при необходимости)
Double_List *Endl;//указатель на конец списка
 
//==============================================================================
//создание двунаправленного списка (добавления в конец)
void Make_Double_List(int n,Double_List** Head,Double_List* Prior){
  if (n > 0) {
    (*Head) = new Double_List();//выделяем память под новый элемент
    cout << "Введите год издания и исполнителя: ";
    cin >>(*Head)->Data>>(*Head)->performer;//вводим значение информационного поля
    (*Head)->Prior = Prior;
    (*Head)->Next=NULL;//обнуление адресного поля
    Make_Double_List(n-1,&((*Head)->Next),(*Head));
  }
  else (*Head) = NULL;
}
 
//==============================================================================
//печать двунаправленного списка
void Print_Double_List(Double_List* Head) {
  if (Head != NULL) {
    cout << Head->Data <<"-"<<Head->performer<< "\t";
    Print_Double_List(Head->Next);//переход к следующему элементу
  }
  else cout << "\n";
}
 
//==============================================================================
//вставка элемента с заданным номером в двунаправленный список
Double_List* Insert_Item_Double_List(Double_List* Head,int Number,int Data,char performer){
  Number--;
  Double_List *NewItem=new Double_List();
  NewItem->Data=Data;
  NewItem->performer=performer; //вот на эту строчку ругается вот так: [C++ Error] Unit1.cpp(53): E2277 Lvalue required
  NewItem->Prior=NULL;
  NewItem->Next = NULL;
  if (Head == NULL) {//список пуст
    Head = NewItem;
  }
  else {//список не пуст
    Double_List *Current=Head;
    for(int i=1; i < Number && Current->Next!=NULL; i++)
    Current=Current->Next;
    if (Number == 0){ //вставляем новый элемент на первое место
      NewItem->Next = Head;
      Head->Prior = NewItem;
      Head = NewItem;
    }
    else {//вставляем новый элемент на непервое место
      if (Current->Next != NULL) Current->Next->Prior = NewItem;
      NewItem->Next = Current->Next;
      Current->Next = NewItem;
        NewItem->Prior = Current;
      Current = NewItem;
    }
  }
  return Head;
}
 
//==============================================================================
 /*удаление элемента с заданным номером из двунаправленного списка*/
Double_List* Delete_Item_Double_List(Double_List* Head, int Number){
  Double_List *ptr;//вспомогательный указатель
  Double_List *Current = Head;
  for (int i = 1; i < Number && Current != NULL; i++)
    Current = Current->Next;
  if (Current != NULL){//проверка на корректность
    if (Current->Prior == NULL){//удаляем первый элемент
      Head = Head->Next;
      delete(Current);
      Head->Prior = NULL;
      Current = Head;
    }
    else {//удаляем непервый элемент
      if (Current->Next == NULL) {
      //удаляем последний элемент
        Current->Prior->Next = NULL;
        delete(Current);
        Current = Head;
      }
      else {//удаляем непервый и непоследний элемент
        ptr = Current->Next;
        Current->Prior->Next =Current->Next;
        Current->Next->Prior =Current->Prior;
        delete(Current);
        Current = ptr;
      }
    }
  }
  return Head;
}
 
//==============================================================================
//сортировка списка
void Sort_Double_List(Double_List* &top,Double_List* &endl,int key){
{//сортировка Выбором
Double_List* sort;    // элемент для того, чтобы запоминать отсортированные элементы
Double_List* big;    // переменная для хранения или самого большого элемента, или наоборот
Double_List* temp;   // временная переменная, ней мы пробегаем по циклам
temp = big = Head;       // начальные значения
sort = NULL;
 while (big!=NULL)    // пока у нас есть не отсортированные элементы
 {
    big=temp;     // запоминаем наименший элемент как первый из неотсорт списка
    if(big!=NULL) //проверка последнего прохода
    {
    while (temp!=NULL)
    {
            switch(key)
        {   //проверка по ключу            //поиск минимального элемента
            case 1://по году издания
            if (temp->Data<big->Data) big=temp;break;
        }
 
      temp=temp->Next;//следующий элемент
    }
    if (big->Prior!=NULL)
       big->Prior->Next=big->Next;   // отчленение минимального из списка
    if (big->Next!=NULL)
       big->Next->Prior=big->Prior;
    if (sort!=NULL)
    {
        big->Next=sort->Next;    // так вставляем если уже есть
        sort->Next=big;           // сортированный список
        big->Prior=sort;
        if(big->Next!=NULL)     // для последнего элемента,
        {                          // чтобы не присваивать  пустоте значения
        big->Next->Prior=big;
        }
        sort=big;              //запомиманем конец отсортированного списка
    }
    else                       // если первый элемент отсортированного
      {
        if (big!=Head) big->Next=Head;
        big->Prior=NULL;
        big->Next->Prior=big;
        Head=sort=big;       // запоминаем указатели на конец и
      }                     // начала нового сортированного списка
  temp=big->Next; // передвигаем указатель на начало не сорт списка
      }
 }
temp=Head;
while(temp!=NULL)
   {
     endl=temp;
     temp=temp->Next;
   } //находим последний элемент
  }
 }
 
//==============================================================================
//освобождение памяти, выделенной под двунаправленный список
void Delete_Double_List(Double_List* Head){
  if (Head != NULL){
    Delete_Double_List(Head->Next);
    delete Head;
  }
}
 
//==============================================================================
//нахождение номера элемента в списке
Double_List *Search(int Number)
{
    Double_List *lmnt=Head->Next;
    while(lmnt!=Head && lmnt->Data!=Number)
    {
        lmnt = lmnt->Next;
        prd+=1;
    }
    if (lmnt == Head)
        return lmnt;
    else
        return NULL;
}
/*
//==============================================================================
int Empty()
{
    if ( Head->Next==Head && Head->Prior == Head ) return 1;
    else return 0;
}
//==============================================================================
Double_List *SearchB(int Number)
{
   Double_List *lmnt=Head->Next;
    while(lmnt!=Head && lmnt->Data!=Number)
    {
        lmnt = lmnt->Prior;
        prdx+=1;
    }
    if (lmnt == Head)
        return lmnt;
    else
        return NULL;
}
 
//==============================================================================
void AddAft(int Number, int point)
{
        Double_List* lmnt=(Double_List*)malloc(10*sizeof(Double_List));
        lmnt->Next=Head;
        lmnt->Prior=Head;
        lmnt->Data=Number;
        Head->Next=lmnt;
        Head->Prior=lmnt;
 
    Double_List *current=Search(point);
    if (current!=NULL)
    {
        Double_List *lmnt=(Double_List*)malloc(10*sizeof(Double_List));
        lmnt->Next=current->Next;
        lmnt->Prior=current;
        lmnt->Data=Number;
        current->Next->Prior=lmnt;
        current->Next=lmnt;
     }
 
}
 
//==============================================
void AddBef(int Number, int point)
{
  Double_List *current = SearchB(point);
    if (current!=NULL)
    {
      Double_List *lmnt=(Double_List*)malloc(10*sizeof(Double_List));
        lmnt->Data=Number;
        lmnt->Next=current;
        lmnt->Prior=current->Prior;
        current->Prior->Next=lmnt;
        current->Prior=lmnt;
            }
 
}
*/
 
//==============================================================================
main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int Number,lmnt,Data;
int n,key;
char ans2,performer;
 
//создание списка из n элементов
cout<<"Введите количество элементов для спика: ";
cin>>n;
Make_Double_List(n,&Head,NULL);
//вывод списка на экран
Print_Double_List(Head);
 
//удаление элемента списка
cout<<"Какой элемент удалить: ";
cin>>Number;
Delete_Item_Double_List(Head,Number);
Print_Double_List(Head);
 
cout<<"Куда всталлять: ";
cin>>Number;
cout<<"Что вставлять: ";
cin >>Data>>performer;
Insert_Item_Double_List(Head,Number,Data,performer);
Print_Double_List(Head);
 
 /*
//добовление элемента в список
 cout << " Введите элемент для добавления : " ;
            cin >> lmnt;
            cout << endl;
            if (Empty() == 1 )
            {
                AddAft(lmnt,0);
                cout << " Элемент добавлен " << endl;
            } else
   cout << "1 - Добавить перед " << endl << "2 - Добавить после  " << endl << "Ваш выбор:  " ;
             cin >> ans2;
            switch(ans2)
             {
            case '1' :
                 cout << " Перед каким элементом добавить: ";
                 cin >> Number;
                AddAft(lmnt,Number);
                 cout<<" Элемент добавлен "<< endl; break;
            case '2' :
                 cout << " После какого элемента добавить: ";
                 cin >> Number;
                AddBef(lmnt,Number);
                 cout << " Элемент добавлен " << endl; break;
            default :
                     cout << " Ошибка, такого пункта нету"<< endl; break;
             }
 
 */
 
//нахождение номера элемента в списке
cout << "Введите год издания: ";
cin >> lmnt;
prd=0;
if (Search(lmnt)!= NULL)
 {
cout<<"Элемент не найден."<<endl;
  }
else
{cout << prd+1 << endl;}
 
//сортировка списка
Sort_Double_List(Head,Endl,1);
Print_Double_List(Head);
 
//удаление списка целиком
Delete_Double_List(Head);
 
 
system ("pause");
}
Заранее спасибо за помощь!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru