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

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

Войти
Регистрация
Восстановить пароль
 
maxistudent
0 / 0 / 0
Регистрация: 09.04.2010
Сообщений: 33
#1

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

07.09.2011, 22:38. Просмотров 590. Ответов 2
Метки нет (Все метки)

Как реализовать ручной ввод в данной программе? (Задание: вставить заданный пользователем элемент Е до и после элемента с минимальным ключом в заданном пользователем односвязном списке.)
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++
Надо открывать/закрывать файлы в программе для работы с ними. Файлы текстовые (не части проекта). Так вот. Как это сделать в коде я знаю...

Ввести строку символов а)вручную, б)из файла и проверить ее на наличие латинских букв - C++
Ни черта не понимаю в работе со строками, прошу помощи у данного форума Нужно: Ввести строку символов а)вручную, б)из файла и проверить...

Как ввести данные из файла в массив? - C++
Доброго времени суток. Как ввести из файла данные в массив? Сейчас они уже прописаны. Можно это сделать двумя циклами, только не могу...

Как ввести свои данные в переменную key? - C++
// lab_work_4.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;time.h&gt; ...

Шифр Rc4 как ввести вводные данные - C++
#include &lt;iostream&gt; #include &lt;tchar.h&gt; #include &lt;fstream&gt; using namespace std; class RC4 { char K; char S; ...

Как ввести данные в динамический массив структур? - C++
Подскажите пожалуйста, можно ли вводить данные в динамический массив структур c помощью cin &gt;&gt; следующим образом: #include &lt;iostream&gt; ...

Как ввести данные без перехода на новую строку? - C++
Собственно вопрос в заголовке. for (int i = 0; i &lt; 4; i++) { for (int j = 0; j &lt; 3; j++) { cin &gt;&gt; arr; } } Если вводить...

Ввести данные в файл, и записать данные с файла в массив структур - C++
Ввести все данные в файл, и записать данные с файла в структуру. Помогите ввести и вывести структуру из файла. Допускается - и желательно...

Какие значения можно ввести для нижеприведённого кода, чтоб программа не выполнялась корректно - C++
Какие значения можно ввести для ниже приведённого кода,чтоб не выполнялась корректно программа. Задача программы:В строке, состоящей из...

С помощью методов ввести данные, вывести данные из массива - C++
Создать класс собак (название породы, возраст (больше двух лет), вес, средний вес породы, группа). В функции main создать массив собак трех...


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

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

Добавлено через 2 минуты
Точнее в твоем случае расписывать ввод для каждого из 10 элементов.
accept
4820 / 3240 / 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     Как корректно вручную ввести данные
Ответ Создать тему
Опции темы

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