Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
1

Вставить элемент в очередь

09.03.2013, 19:46. Показов 5533. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Формирую очередь из чисел. Как вставить после каждого простого числа нужное мне?
Имею такой код,...
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <iostream>
using namespace std;
 
struct node
  {
    float info;
    node *link;
  };
 
  node *k, // Рабочий указатель
      *l, *r; // Левый и правый указатели
  int w;
  int z=0; //счетчик чисел в очереди
  int sum; //произведение чисел в очереди
  float g; //среднее геометрическое
 
bool prost(int n)
{
   for(int i=2;i<n-1;i++)
   {
        if(n%i==0)return false;
    }
    return true;
}
 
void add()
{
    cout<<"Bведите число";
    cin>>w;
 
  while (!feof(stdin))
  {
    k = new node;
    k->link = NULL;
    k->info = w;
    sum=sum*w;
    r->link = k; // Добавление узла справа
    r = k;
    cout<<"Bведите число";
    cin>>w;
    z++;
    
  }
}
 
void vivod()
{
     k = l;
  while (k != NULL)
  {
    cout<<k->info<<" ";
    k = k->link;
  }
  cout<<"\n";
}
 
 
 
void main()
{
  setlocale(LC_CTYPE,"Russian");
  
 
  // Создание пеpвого узла
 
  cout<<"Bведите число";
    cin>>w;
  k = new node;
  k->link = NULL;
  k->info = w;
  l = r = k;
 
  z=1;
  sum = w;
  // Построение остальных узлов очереди
 
  add();
 
  // Вывод содержимого очереди
 
 vivod();
 
 g=pow(sum,1.0/z);
  
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2013, 19:46
Ответы с готовыми решениями:

Вставить элемент в очередь
Скажите, правильно я понимаю, что в очереди новые узлы вставляются после, а в стеке перед? Или я...

Вставить элемент в односвязную очередь за каждым вхождением элемента с заданным весом
Просьба объяснить, что каждая строчка делает. #include &lt;iostream&gt; #include &lt;string&gt; using...

Работа с очередью. Умейте поставить в очередь элемент, удалить элемент из очереди, пересмотреть очередь
То чувство , когда изучали web и тут нам дают задачу по с++ ... Нужна помощь !!

Создать очередь, содержащую целые числа. После всех чисел, кратных 𝑋, вставить новый элемент
Создать очередь, содержащую целые числа. После всех чисел, кратных 𝑋, вставить новый...

15
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 01:21 2
Okswes, можно конкретнее?
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 10:11  [ТС] 3
В числовой последовательности вставить после каждого простого числа удвоенное среднее геометрическое всех элементов последовательности
У меня не получается вставить среднее геометрическое в середину очереди....
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 11:01 4
Okswes, вот писал как-то, тут можно добавлять и удалять элемент в любое место списка, если вдруг все-таки нужно подправить ваш код, скажите, будем разбираться

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
// obr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct List
{
    int data;
    List *next;
};
 
class ListNode
{
    private:
        List *Head;
 
    public:
        ListNode()
        {
            Head = NULL;
        }
 
        void addToBack(const int value)                 //добавление в конец
        {
            List *Ptr = new List;
            Ptr -> data = value;
 
            if(Head == NULL)
            {
                Head = Ptr;
                Ptr -> next = NULL;
            }
            else
            {
                List *temp = Head;
 
                while(temp -> next != NULL)
                    temp = temp -> next;
                
                temp -> next = Ptr;
                Ptr -> next = NULL;
            }
        }
 
        void addToFront(const int value)                    //добавление в начало
        {
            List *Ptr = new List;
            Ptr -> data = value;
 
            Ptr -> next = Head;
            Head = Ptr;
        }
 
        void addToPos(const int value, int Pos)             //добавление в указанную
        {                                                   //позицию
            List *tmp = Head;
            List *cur = NULL;
            List *Ptr = new List;
            Ptr -> data = value;
 
            if(Pos == 1)
                addToFront(value);
            else
            {
                int Kol_el = 1;
                while(tmp != NULL && Kol_el != Pos)
                {
                    cur = tmp;
                    tmp = tmp -> next;
                    ++Kol_el;
                }
            
                cur -> next = Ptr;
                Ptr -> next = tmp;
            }
        }
 
        void delList(const int value)
        {
            List *tmp = Head;
            List *cur = NULL;
 
            if(Head != NULL)
            {
                if((Head -> data) == value)                 //если удаляем 1 элемент
                {
                    cur = Head -> next;
                    delete Head;
                    Head = cur;
                }
                else
                {
                    while((tmp != NULL) && (tmp -> data != value))
                    {
                        cur = tmp;
                        tmp = tmp -> next;
                    }
 
                    if(tmp -> next == NULL)                 //если элемент между
                    {                                       //1 и последним
                        delete tmp;
                        cur -> next = NULL;
                    }
                    else                                    //если элемент последний
                    {
                        cur -> next = tmp -> next;
                        delete tmp;
                    }
                }
            }
        }
 
        void showList()
        {
            List *temp = Head;
 
            if(Head != NULL)
            {
                while(temp != NULL)
                {
                    cout << temp -> data << " ";
                    temp = temp -> next;
                }
            }
            else
                wcout << L"Список пуст!\n";
        }
};
 
void instructions();
void menu();
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    menu();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
{
    wcout << L"Выберите пункт меню: " <<
        L"\n1 - Добавить элемент в начало" <<
        L"\n2 - Добавить элемент в конец" <<
        L"\n3 - Добавить элемент в указанную позицию" <<
        L"\n4 - удалить элемент" <<
        L"\n5 - Выход.\n";
}
 
void menu()
{
    ListNode Universal;
    int punkt_menu, value, pos;
 
    instructions();
 
 
    do{
        wcout << L"\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Universal.addToFront(value);
                    Universal.showList();
                    break;
                case 2:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Universal.addToBack(value);
                    Universal.showList();
                    break;
                case 3:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    wcout << L"Введите позицию: ";
                        cin >> pos;
 
                    Universal.addToPos(value, pos);
                    Universal.showList();
                    break;
                case 4:
                    wcout << L"Введите значение удаляемого элемента: ";
                        cin >> value;
 
                    Universal.delList(value);
                    Universal.showList();
                    break;
            }
 
    }while(punkt_menu != 5);
}
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 11:34  [ТС] 5
Спасибо) У меня только вместо номера позиции должна быть проверка на простое число. Я ее написал (функция Prost), надо только додуматься как теперь все вместе собрать....
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 13:45 6
Okswes, я думаю вот так надо сделать(не компилировал)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void addSrednee()
{                                                  
       List *tmp = Head;
       List *cur;
 
       while(tmp -> next != NULL)
       {
              if(prost(tmp -> data) == true)              //если простое
             {
                    cur = new List;
                    cur -> data = ...                           //здесь инициализируем средним геометрическим
                    cur = tmp -> next;
                    tmp -> next = cur;                       //вставляем сразу после простого числа
             }  
        }                                                              //и так по всему списку
}
Добавлено через 1 час 18 минут
Okswes, вот тут побаловался, смотрите что получилось

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <locale>
#include <math.h>
using namespace std;
 
struct List
{
    double data;
    List *next;
};
 
class ListNode
{
    private:
        List *Head;
 
    public:
        ListNode()
        {
            Head = NULL;
        }
 
        void addToFront(const double value)                    //добавление в начало
        {
            List *Ptr = new List;
            Ptr -> data = value;
 
            Ptr -> next = Head;
            Head = Ptr;
        }
 
        void delList(const double value)
        {
            List *tmp = Head;
            List *cur = NULL;
 
            if(Head != NULL)
            {
                if((Head -> data) == value)                 //если удаляем 1 элемент
                {
                    cur = Head -> next;
                    delete Head;
                    Head = cur;
                }
                else
                {
                    while((tmp != NULL) && (tmp -> data != value))
                    {
                        cur = tmp;
                        tmp = tmp -> next;
                    }
 
                    if(tmp -> next == NULL)                 //если элемент между
                    {                                       //1 и последним
                        delete tmp;
                        cur -> next = NULL;
                    }
                    else                                    //если элемент последний
                    {
                        cur -> next = tmp -> next;
                        delete tmp;
                    }
                }
            }
        }
 
        bool prost(double n)
        {
            if(n != 1 && n != 2)
            {
                for(int i = 2; i < n; i++)
                {
                    if(((int)n % i) == 0)
                        return false;
                }
            }
 
            return true;
        }
 
        void addSrednee()
        {                                                  
            List *tmp = Head;
            List *cur;
            double Kol = 0;
            double multiply = 1;
 
            while(tmp != NULL)
            {
                ++Kol;
                multiply *= tmp -> data;
                if(prost(tmp -> data) == true)   //если простое
                {
                    cur = new List;
                    cur -> data = pow(multiply, (1.0 / Kol)); //здесь инициализируем тем, чем надо
                    cur -> next = tmp -> next;
                    tmp -> next = cur;           //вставляем сразу после простого числа
                }  
 
                tmp = tmp -> next; 
            }                                   //и так по всему списку
        }
 
        void showList()
        {
            List *temp = Head;
 
            if(Head != NULL)
            {
                while(temp != NULL)
                {
                    cout << setprecision(2) << temp -> data << " ";
                    temp = temp -> next;
                }
            }
            else
                wcout << L"Список пуст!\n";
        }
};
 
void instructions();
void menu();
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    menu();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
{
    wcout << L"Выберите пункт меню: " <<
        L"\n1 - Добавить элемент в начало" <<
        L"\n2 - Проверка на простые числа" <<
        L"\n3 - Удалить элемент" <<
        L"\n4 - Выход.\n";
}
 
void menu()
{
    ListNode Universal;
    int punkt_menu;
    double value;
 
    instructions();
 
 
    do{
        wcout << L"\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Universal.addToFront(value);
                    Universal.showList();
                    break;
                case 2:
                    Universal.addSrednee();
                    Universal.showList();
                    break;
                case 3:
                    wcout << L"Введите значение удаляемого элемента: ";
                        cin >> value;
 
                    Universal.delList(value);
                    Universal.showList();
                    break;
            }
 
    }while(punkt_menu != 4);
}
слегка подправил вашу функции определения простых чисел, т.к. она показывала что 2 это не простое число, а сы то с вами знаем что это не так
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 14:15  [ТС] 7
Спасибо вам большое)
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 14:23 8
Okswes, то что нужно?
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 14:56  [ТС] 9
За труды)
А можете помочь void addSrednee() в мою программу вставить? Что-то не могу разобраться.. У меня без классов просто...
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 16:14 10
Okswes, вот посмотрите

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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <locale>
#include <math.h>
using namespace std;
 
struct List
{
    double data;
    List *next;
};
 
List *addToFront(const double value, List *Head)                    //добавление в начало
{
    List *Ptr = new List;
    Ptr -> data = value;
     
    Ptr -> next = Head;
    Head = Ptr;
 
    return Head;
}
 
List *delList(const double value, List *Head)
{
    List *tmp = Head;
    List *cur = NULL;
     
    if(Head != NULL)
    {
        if((Head -> data) == value)                 //если удаляем 1 элемент
        {
            cur = Head -> next;
            delete Head;
            Head = cur;
        }
        else
        {
            while((tmp != NULL) && (tmp -> data != value))
            {
                cur = tmp;
                tmp = tmp -> next;
            }
     
            if(tmp -> next == NULL)                 //если элемент между
            {                                       //1 и последним
                delete tmp;
                cur -> next = NULL;
            }
            else                                    //если элемент последний
            {
                cur -> next = tmp -> next;
                delete tmp;
            }
        }
    }
 
    return Head;
}
 
bool prost(double n)
{
    if(n != 1 && n != 2)
    {
        for(int i = 2; i < n; i++)
        {
            if(((int)n % i) == 0)
                return false;
        }
    }
 
    return true;
}
 
void addSrednee(List *Head)
{                                                  
    List *tmp = Head;
    List *cur;
    double Kol = 0;
    double multiply = 1;
 
    while(tmp != NULL)
    {
        ++Kol;
        multiply *= tmp -> data;
        if(prost(tmp -> data) == true)   //если простое
        {
            cur = new List;
            cur -> data = pow(multiply, (1.0 / Kol)); //здесь инициализируем тем, чем надо
            cur -> next = tmp -> next;
            tmp -> next = cur;           //вставляем сразу после простого числа
        }  
 
        tmp = tmp -> next; 
    }                                   //и так по всему списку
}
 
void showList(List *Head)
{
    List *temp = Head;
     
    if(Head != NULL)
    {
        while(temp != NULL)
        {
            cout << setprecision(2) << temp -> data << " ";
            temp = temp -> next;
        }
    }
    else
        wcout << L"Список пуст!\n";
}
 
void instructions();
void menu();
 
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    wcin.imbue(locale(".866"));
 
    menu();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
{
    wcout << L"Выберите пункт меню: " <<
        L"\n1 - Добавить элемент в начало" <<
        L"\n2 - Проверка на простые числа" <<
        L"\n3 - Удалить элемент" <<
        L"\n4 - Выход.\n";
}
 
void menu()
{
    int punkt_menu;
    double value;
 
    List *Head = NULL;                  //указатель    на начало списка
    instructions();
 
    do{
        wcout << L"\n? ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"Введите число: ";
                        cin >> value;
 
                    Head = addToFront(value, Head);
                    showList(Head);
                    break;
                case 2:
                    addSrednee(Head);
                    showList(Head);
                    break;
                case 3:
                    wcout << L"Введите значение удаляемого элемента: ";
                        cin >> value;
 
                    Head = delList(value, Head);
                    showList(Head);
                    break;
            }
 
    }while(punkt_menu != 4);
}
Но мне кажется, что лучше работать с классом, хотя это вам решать
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 16:17  [ТС] 11
Спасибо, я уже сам додумался)
Еще вопрос, если можно...) Мне нужно тоже самое сделать STL списками.
Вот сам написал
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <list>
 
using namespace std;
 
bool prost(float n)
{
    if(n!=1 && n!=2)
            {
                for(int i = 2; i < n; i++)
                {
                    if(((int)n % i) == 0)
                        return false;
                }
            }
 
            return true;
}
 
 
void main()
{
    setlocale(LC_CTYPE,"Russian");
    float w;
    int g=99;
    list<int> myList;
    list<int>::iterator listIt;
     cout<<"Bведите число";
    cin>>w;
    while (!feof(stdin))
    {
        myList.push_back(w);
        cout<<"Bведите число";
        cin>>w;
    }
    
    for(listIt=myList.begin();listIt!=myList.end();listIt++)
        cout << *listIt << ' ';
    cout << endl;
 
}
Не могу понять как реализовать проверку? Какое значение подавать в Prost?
Как работает myList.Insert?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 16:22 12
Okswes, в Prost вы должны подавать все элементы списка, и каждое проверять, иначе никак)
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 16:23  [ТС] 13
Я вот не могу понять как именно? Если можно кодом поясните...
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 16:27 14
Okswes, а чем вам моя реализация не понравилась? я не знаю как со списками в STL работать, я еще не приступал к изучению STL, поэтому не смогу вам в этом помочь...
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 15
10.03.2013, 16:28  [ТС] 15
Мне двумя вариантами надо, вы мне помогли с первым) Теперь мне с STL разобраться надо...
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
10.03.2013, 16:36 16
Okswes, посмотрите реализацию List в интернетах)
0
10.03.2013, 16:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2013, 16:36
Помогаю со студенческими работами здесь

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди
Нужно создать очередь. Добавить элемент в очередь. Удалить элемент из очереди. Вот моё...

Как добавить элемент в очередь, используя указатель на последний элемент?
Не пойму как добавить элемент в очередь используя указатель на последний элемент. Выполняю задание...

Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на3,вставить....
Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками,...

Вставить в очередь новый элемент
Не могу понять где ошибка: uses crt; type ukaz=^zap; zap=record inf:integer; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru