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

Как корректно вручную ввести данные - C++

Восстановить пароль Регистрация
 
maxistudent
0 / 0 / 0
Регистрация: 09.04.2010
Сообщений: 33
07.09.2011, 22:38     Как корректно вручную ввести данные #1
Как реализовать ручной ввод в данной программе? (Задание: вставить заданный пользователем элемент Е до и после элемента с минимальным ключом в заданном пользователем односвязном списке.)
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
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
 
typedef int Tp;
 
 struct NodeBase
{
 NodeBase() : next(this) {}
 NodeBase(NodeBase *next_node) : next(next_node) {}
 NodeBase *next;
};
 
 struct Node : NodeBase
{
 Tp value;
 Node(NodeBase *after, Tp node_value)
 : NodeBase(after->next), value(node_value)
    {
     after->next = this;
    }
};
 
 class SpecialList
{public:
    typedef Node NodeType;
    SpecialList() : first_(), least_(&first_) {}
    ~SpecialList()
      {
       clear();
      }
 
    void insertBeforeAndAfterLeast(Tp value)
       {
    NodeType *node = new NodeType(least_, value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
    node = new NodeType(previousTo(least_), value);
       }
 
    void pushBack(Tp value)
       {
    NodeType *node = new NodeType(lastNode(), value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
       }
 
    void clear()
       {
    NodeBase *node = first_.next;
    while (node != &first_)
      {
       first_.next = node->next;
       delete node;
       node = first_.next;
      }
    least_ = &first_;
       }
 
    friend ostream &operator<<(ostream &stream, const SpecialList &list)
       {
    NodeBase *node = list.first_.next;
    while (node != &(list.first_))
      {
       stream << ((NodeType*)node)->value << " ";
       node = node->next;
      }
    return stream;
       }
 
 private:
    NodeBase *previousTo(NodeBase *sourceNode)
       {
    NodeBase *previous = &first_;
    NodeBase *current = first_.next;
    while (current != sourceNode)
      {
       previous = current;
       current = current->next;
      }
    return previous;
       }
 
    NodeBase *lastNode()
       {
    NodeBase *node = first_.next;
    while (node->next != &first_)
      {
       node = node->next;
      }
    return node;
       }
    NodeBase first_;
    NodeBase *least_;
};
 
 void main()
{
 clrscr();
 srand(time(NULL));
 SpecialList list;
 for (int i = 0; i < 10; ++i)
   {
    int value = rand() % 10;
    cout << value << " ";
    list.pushBack(value);
   }
 cout << endl << list << endl;
 
 int value = 100 + rand() % 100;
 list.insertBeforeAndAfterLeast(value);
 cout << endl << list << endl;
}
Добавлено через 26 минут
Вот примерно так получается, но КАК ввести список не через цикл, а, например, с помощью указателей? Это же список.
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
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
 
typedef int Tp;
 
 struct NodeBase
{
 NodeBase() : next(this) {}
 NodeBase(NodeBase *next_node) : next(next_node) {}
 NodeBase *next;
};
 
 struct Node : NodeBase
{
 Tp value;
 Node(NodeBase *after, Tp node_value)
 : NodeBase(after->next), value(node_value)
    {
     after->next = this;
    }
};
 
 class SpecialList
{public:
    typedef Node NodeType;
    SpecialList() : first_(), least_(&first_) {}
    ~SpecialList()
      {
       clear();
      }
 
    void insertBeforeAndAfterLeast(Tp value)
       {
    NodeType *node = new NodeType(least_, value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
    node = new NodeType(previousTo(least_), value);
       }
 
    void pushBack(Tp value)
       {
    NodeType *node = new NodeType(lastNode(), value);
    if ((least_ == &first_) || (((NodeType*)least_)->value >= value))
    least_ = node;
       }
 
    void clear()
       {
    NodeBase *node = first_.next;
    while (node != &first_)
      {
       first_.next = node->next;
       delete node;
       node = first_.next;
      }
    least_ = &first_;
       }
 
    friend ostream &operator<<(ostream &stream, const SpecialList &list)
       {
    NodeBase *node = list.first_.next;
    while (node != &(list.first_))
      {
       stream << ((NodeType*)node)->value << " ";
       node = node->next;
      }
    return stream;
       }
 
 private:
    NodeBase *previousTo(NodeBase *sourceNode)
       {
    NodeBase *previous = &first_;
    NodeBase *current = first_.next;
    while (current != sourceNode)
      {
       previous = current;
       current = current->next;
      }
    return previous;
       }
 
    NodeBase *lastNode()
       {
    NodeBase *node = first_.next;
    while (node->next != &first_)
      {
       node = node->next;
      }
    return node;
       }
    NodeBase first_;
    NodeBase *least_;
};
 
 void main()
{clrscr();
 SpecialList list;
 int value;
 cout << "Введите список (10 значений): ";
 for (int i = 0; i < 10; ++i)
   {
    cin >> value;
    list.pushBack(value);
   }
 cout << "\nВведите Е: ";
 cin >> value;
 list.insertBeforeAndAfterLeast(value);
 cout << endl << list << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2011, 22:38     Как корректно вручную ввести данные
Посмотрите здесь:

C++ Как ввести данные в динамический массив структур?
Шифр Rc4 как ввести вводные данные C++
C++ как ввести данные из файла в массив с++
Ввести строку символов а)вручную, б)из файла и проверить ее на наличие латинских букв C++
Как ввести свои данные в переменную key? C++
Какие значения можно ввести для нижеприведённого кода, чтоб программа не выполнялась корректно C++
Структуры: ввести данные о работниках и вывести их данные, отсортированные по алфавиту C++
C++ С помощью методов ввести данные, вывести данные из массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.09.2011, 00:06     Как корректно вручную ввести данные #2
Цитата Сообщение от maxistudent Посмотреть сообщение
КАК ввести список не через цикл
никак.

Добавлено через 2 минуты
Точнее в твоем случае расписывать ввод для каждого из 10 элементов.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.09.2011, 01:51     Как корректно вручную ввести данные #3
Код
Введите список (10 значений): 1 2 3 4 5 6 7 8 9 10
лучше сделай файл со значениями
Yandex
Объявления
08.09.2011, 01:51     Как корректно вручную ввести данные
Ответ Создать тему
Опции темы

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