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

Исправить ошибки в связном списке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу с аппроксимацией http://www.cyberforum.ru/cpp-beginners/thread811470.html
С пятой задачей помогите. В голову ничего не лезит
C++ сигнатуры помогите соорудить или предложите свои варианты: 1. сканирование сигнатур байт в другой программе, адрес определить никак нельзя, так как он динамический(при перезаходе в программу все адреса меняются,байты остаются прежними) 2.массив к примеру 3C 6B 61 54 74 00 00 01 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX... http://www.cyberforum.ru/cpp-beginners/thread811461.html
C++ Почему не стоит создавать массив объектов?
Нам преподаватель сказал, что создавать массив объектов лучше не стоит(надо создавать массив указателей на объекты) так как при наследовании что-то там происходит с преобразованиями типов и привёл пример того, как не стоит писать. Вот пример: class A { public virtual int f()=0; } class B: public A
Rand - рандом не повторяющихся чисел C++
Добрый вечер.Подскажите пожалуйста как сделать что бы рандомные числа не повторялись ? Понимаю что во внутрь надо положить цикл от 0 до i-1 если совпадет то повторять .. но не магу понять как реализовать. for ( i=0; i < c; i++) { B = 1 + rand()%11; // случайные числа от 1 до 11 printf("%d ",B ); }
C++ Не получается суммировать ангары http://www.cyberforum.ru/cpp-beginners/thread811435.html
При сумме ангаров он только складывает сумму последних ангаров #include "stdafx.h" #include <iostream> #include <conio.h> #include <locale.h> using namespace std; class Angar
C++ Наследование классов. Длина вектора на плоскости и в трехмерном пространстве Условие задачи: Создать базовый класс «вектор на плоскости». Элементы класса: поля, задающие координаты точки (статус доступа protected), определяющей конец вектора (начало вектора находится в точке с координатами 0, 0); конструктор для инициализации полей; функция для вычисления длины вектора, функция для печати полей и длины вектора. Создать производный класс «вектор в трехмерном... подробнее

Показать сообщение отдельно
nastin
1 / 1 / 0
Регистрация: 15.10.2012
Сообщений: 36

Исправить ошибки в связном списке - C++

18.03.2013, 00:21. Просмотров 318. Ответов 1
Метки (Все метки)

Почти готовая лабораторка, но не хватает несколько деталей. Помогите решить проблему, пожалуйста!
Задание :
1. Создание списка из файла.
2.Insert <елемент> n Вставка елемента в позицию n.
3. DELETE N Удаление елемента з N позиции.
4.CHANGE M N – Смена елементов M N .
5.DUMP Вывод в конечный файл .

Все работает, но когда открываю текстовый файл со списком или отчетом, вместо элементов списка какие-то значки, а когда открываю файл в программе все ок, как исправить?
И еще элементы списка у меня числа, а проверку на ввод как сделать не знаю!
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
// linklist.cpp
// linked list
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
using namespace std;
////////////////////////////////////////////////////////////////
struct link                           //one element of list
   {
   int data;                          //data item
   link* next;                        //pointer to next link
   };
////////////////////////////////////////////////////////////////
class linklist                        //a list of links
   {
   private:
      link* first;                    //pointer to first link
       
   public:
      linklist()                      //no-argument constructor
         { first = NULL; }            //no first link
      void additem(int d);            //add data item (one link)
      void display();                 //display all links
      void diskOut();
      void diskIn();
      void report();
      void del_po_numb(int n);
      void reverse(int n,int m);
 
   };
//--------------------------------------------------------------
void linklist::additem(int d)         //add data item
   {
   link* newlink = new link;          //make a new link
   newlink->data = d;                 //give it data
   newlink->next = first;             //it points to next link
   first = newlink;                   //now first points to this
   }
//--------------------------------------------------------------
void linklist::display()              //display all links
   {
   cout << endl;
   link* current = first;             //set ptr to first link
   while( current != NULL )           //quit on last link
      {
      cout << current->data << endl;  //print data
      current = current->next;        //move to next link
      }
   cout << endl;   
   }
//--------------------------------------------------------------
void linklist::diskOut()
   {
   ofstream outfile;
   int d;
   outfile.open("data.txt",ios::in);
   link* current = first;           
   while( current != NULL )          
      {
      d = current->data;
      outfile.write(reinterpret_cast<char*>(&d), sizeof(int));
      current = current->next;        
      }
   outfile.close();
   }
 
//--------------------------------------------------------------
void linklist::report()
   {
   ofstream outfile;
   int d;
   
  
   outfile.open("report.txt",ios::out|ios::in);
   link* current = first;           
   while( current != NULL )          
      {
      d = current->data;
      outfile.write(reinterpret_cast<char*>(&d), sizeof(int));
      current = current->next;        
      }
   outfile.close();
   }
 
//--------------------------------------------------------------
void linklist::diskIn()
   {
               
   ifstream infile;
   int d;
   
   infile.open("data.txt",ios::in );
   infile.seekg(0);
   infile.read((char*)&d,sizeof(int));
   while(infile)
      {    
      link* newlink = new link;
      newlink->data = d;
      newlink->next = first;    
      first = newlink; 
      infile.read((char*)&d,sizeof(int));    
      }
   }
//-------------------------------------------------------------
void linklist::del_po_numb(int n)
{
   int i=1; 
      for (link* tmp=first;(*tmp).next!=NULL;tmp=(*tmp).next)
      {
         if(i==(n-1))
         {
              (*tmp).next=tmp->next->next;
               
              break;           
         }
         i++;
      }
      cout<<endl;
}
//------------------------------------------------------------- 
void linklist::reverse(int one,int two)
 {
        link *p1, *prev_p1, *p2, *prev_p2, *tmp_pos;
 
        prev_p1 = first;
        prev_p2 = first;
 
        for(int i = 1; i < one; i++) {
                prev_p2 = prev_p2->next;
        }
        p2 = prev_p2->next;
        for(int i = 1; i < two; i++) {
                prev_p1 = prev_p1->next;
        }
        p1 = prev_p1->next;
 
       // p2->data.vivod(); printf("\n");
       // p1->data.vivod(); printf("\n");
 
        if (prev_p1 == p2)
        {
            p2->next = p1->next;
            p1->next = p2;
            prev_p2->next = p1;
        }
        else if (prev_p2 == p1)
        {
            p1->next = p2->next;
            p2->next = p1;
            prev_p1->next = p2;
        }
        else
        {
            swap(p1->next, p2->next);
            swap(prev_p1->next, prev_p2->next);
        }
}
//---------------------------------------------------------------
 
////////////////////////////////////////////////////////////////
int main()
 {  
   linklist li;       
   int pos,x;
   char num;
   char ch;
   char ans;
  int n;
  int p,m;
   while(true)
   {
   cout << "What do you want to do? "
   "\n'a'-add to list"
   "\n's'-show the list"
   "\n'w'-write to file"
   "\n'r'-read file"
   "\n'j'- make report"
   "\n'o'- reverse 2 elements"
   "\n'd'-delete element number n"
   "\n'x'-exit" << endl; cin >> ans;
    switch(ans)
      {
      case 'a':  cout << "Enter link in the list: "; cin >> num; li.additem(num); break;      
      case 's':  li.display(); break;
      case 'w':  li.diskOut(); break;
      case 'r':  li.diskIn(); break;
      case 'j':  li.report(); break;
      case 'd':  cout << "Enter n :"; cin >> n; li.del_po_numb(n); break;
      case 'o':  cout <<"Enter first position :"; cin >> p; cout << "Enter second position:"; cin >> m; li.reverse(p-1,m-1);break;
      case 'x':  exit(0);
     
      default: cout << "Wrong command.";
      }
   }
   
   
   system("PAUSE");
   return 0;
 }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru