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

Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5 - C++

Восстановить пароль Регистрация
 
newyork7776
 Аватар для newyork7776
346 / 339 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
17.06.2013, 13:38     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5 #1
Задача: у нас есть очередь на n элементов (n - пишет пользователь) type = integer;
нужно вывести в порядке возрастание элементы, которые кратны 2,3,5.
Помогите пожалуста!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2013, 13:38     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5
Посмотрите здесь:

Найти произведение элементов массива целых чисел, которые кратны 7. C++
C++ Найти и вывести на экран последние три числа, которые кратны четырем (4) и не кратны трем (3)
C++ Узнать, есть ли среди элементов массива элементы с нечетными номерами, которые кратны 17, и если есть, посчитать их сумму
В массиве из 15 элементов, вывести те элементы , которые находятся перед максимальным C++
Найти все числа в промежутке от A до B, которые (и сумма цифр которых) не кратны 5 и кратны 3 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maksig
4 / 4 / 0
Регистрация: 26.02.2013
Сообщений: 24
17.06.2013, 15:38     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5 #2
Привет напиш хоть для начала свой код:stop:
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
17.06.2013, 16:34     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5 #3
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
class Queue {
public:
  class Bad_Size { };
  class Overflow { };
 
  Queue(int size);
  ~Queue();
 
  int dequeue();
  void enqueue(int d);
  void sort();
private:
  int *data;
  int end, top;
  int max_size;
};
 
Queue::Queue(int size) {
  if(size > 1000 || size < 0)
    throw Bad_Size();
  top = size - 1;
  end = size;
  max_size = size;
  data = new int[size];
}
 
Queue::~Queue() {
  delete[] data;
}
 
void Queue::sort() {
  for(int i = 0; i != max_size - 1; ++i) {
    for(int j = max_size - 1; j != i; --j) {
      if(data[i] > data[j]) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
      }
    }
  }
}
 
void Queue::enqueue(int d) {
  if(end == 0)
    throw Overflow();
  --end;
  data[end] = d;
}
 
int Queue::dequeue() {
  int index = top;
  --top;
  return data[index];
}
 
int main() {
  setlocale(0, "");
  srand(time(0));
  
  std::cout << "Введите размер очереди: ";
  int size;
  std::cin >> size;
  
  Queue *queue = new Queue(size);
  
  std::cout << "Элементы очереди: " << std::endl;
  
  int counter = 0;
  
  for(int i = 0; i != size; ++i) {
    int x = 1 + rand () % 20;
    queue->enqueue(x);
    std::cout << counter << ". " << x << std::endl;
    ++counter;
  }
  
  std::cout << "\nЭлементы очереди кратные 2,3,5: " << std::endl;
  counter = 0;
  
  for(int j = 0; j != size; ++j) {
    int x = queue->dequeue();
    if(!(x % 2) || !(x % 3) || !(x % 5)) {
      ++counter;
      std::cout << counter << ". " << x << std::endl;
    }
  }
  
  delete queue;
  
  return 0;
}
Добавлено через 9 минут
Исправленный:
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
class Queue {
public:
  class Bad_Size { };
  class Overflow { };
 
  Queue(int size);
  ~Queue();
 
  int dequeue();
  void enqueue(int d);
  void sort();
private:
  int *data;
  int end, top;
  int max_size;
};
 
Queue::Queue(int size) {
  if(size > 1000 || size < 0)
    throw Bad_Size();
  top = size - 1;
  end = size;
  max_size = size;
  data = new int[size];
}
 
Queue::~Queue() {
  delete[] data;
}
 
void Queue::sort() {
  for(int i = end; i != top; ++i) {
    for(int j = top; j != end; --j) {
      if(data[i] < data[j]) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
      }
    }
  }
}
 
void Queue::enqueue(int d) {
  if(end == 0)
    throw Overflow();
  --end;
  data[end] = d;
}
 
int Queue::dequeue() {
  int index = top;
  --top;
  return data[index];
}
 
int main() {
  setlocale(0, "");
  srand(time(0));
  
  std::cout << "Введите размер очереди: ";
  int size;
  std::cin >> size;
  
  Queue *queue = new Queue(size);
  
  std::cout << "Элементы очереди: " << std::endl;
  
  int counter = 0;
  
  for(int i = 0; i != size; ++i) {
    int x = 1 + rand () % 20;
    queue->enqueue(x);
    ++counter;
    std::cout << counter << ". " << x << std::endl;
  }
 
  queue->sort();
  
  std::cout << "\nЭлементы очереди кратные 2,3,5: " << std::endl;
  counter = 0;
  
  for(int j = 0; j != size; ++j) {
    int x = queue->dequeue();
    if(!(x % 2) || !(x % 3) || !(x % 5)) {
      ++counter;
      std::cout << counter << ". " << x << std::endl;
    }
  }
  
  delete queue;
 
  std::cin.get();
  std::cin.get();
  return 0;
}
newyork7776
 Аватар для newyork7776
346 / 339 / 79
Регистрация: 21.05.2013
Сообщений: 1,305
Завершенные тесты: 1
17.06.2013, 18:05  [ТС]     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5 #4
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
#include <iostream>
#include <queue>
using namespace std;
int main()
{
    queue <int> q;int i=0,n;
    cout << "Enter number = ";cin >> n;
    while (i!=n)                                    //создаем чергу и пишем в него числа
    {
        if (n>0){
         q.push(n);i++;
         cin >> n;}
        else {cout << "Error";exit;}
    }
if(!q.empty())                                      //показ на екран
      {
  while(!q.empty())
   {
    cout << q.front() << " ";
    q.pop();
   }
  }
 
if(!q.empty())                                      //здесь я хочу вывести те числа которие деляться на 2,3,5
      {                                             //в чём моя ошибка почему нельзя просто взять елемент % 2 
          while(!q.empty())                         //c:\users\philips\documents\visual studio 2010\projects\фывсчя\фывсчя\фывфыв.cpp(29): error C2676: бинарный "%": "std::iterator" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
   {
       queue <int>::iterator p=q.front();
    if ((p % 2 == 0) || (p % 3 ==0) || (p % 5 ==0)) cout << q.front() << " ";
    q.pop();
   }
  }
    cout << "\n";
    system("pause");
}
пожалуста дайте совет как исправить ошибки

Добавлено через 3 минуты
мой алгоритм
1 - сначала создать чергу
2 - записать числа
3 - сортировать чергу
4 - посмотрель если число кратное 2,3,5 вивести его на екран(или можна в другую чергу)
так можна решить задачу или нет?

Добавлено через 56 минут
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 <iostream>
#include <queue>
using namespace std;
int main()
{
    queue <int> otv;
    queue <int> q;int i=0,n,k;
    queue<int> q1;
    cout << "Enter number = ";cin >> n;
   while (i!=n)                                    //создаем чергу и пишем в него числа
    {
        cout << "Enter element = ";cin >> k;
        if (k>0)
        {
         q.push(k);i++;
        }
        else {cout << "Error";break;}
   }
   
 
//здесь нужна сортировка q
 
 cout << "\nQueue [start]= ";
if(!q.empty())                                      //здесь я хочу вывести те числа которие деляться на 2,3,5
      {                                            
          while(!q.empty())                        
                 {
                    if ((q.front() % 2 == 0) || (q.front() % 3 == 0) || (q.front() % 5 == 0)) otv.push(q.front());
                     cout << q.front() << " ";
                    q.pop();    
    
                }
  }
cout << "\nQueue [finish] = ";
if(!otv.empty())                                      //показ на екран
      {
  while(!otv.empty())
   {
    cout << otv.front() << " ";
    otv.pop();
   }
  }
    cout << "\n";
    system("pause");
}
вот прога нужна только сортировка скиньте пожалуста

Добавлено через 25 минут
вот код програми.Так можно так делать или нет?
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
#include <iostream>
#include <queue>
using namespace std;
void SortMass(int* m, int n)
{
     for(int i = n - 1; i >= 1; i--)
       for(int j = 0; j < i; j++)
       {
               if(m[j] > m[j+1])
               {
                       int foo = m[j];
                       m[j] = m[j+1];
                       m[j+1] = foo;
               }
       }  
}
int main()
{
    queue <int> otv;
    queue <int> q;int n,k,i=0;
    int mas[100];
    queue<int> q1;
    cout << "Enter number [n<100]= ";cin >> n;
   while (i!=n)                                    //создаем чергу и пишем в него числа
    {
        cout << "Enter element = ";cin >> k;
        if (k>0)
        {
         q.push(k);i++;
        }
        else {cout << "Error";break;}
   }
   
 cout << "\nQueue [start]= ";
if(!q.empty())                                      //здесь я хочу вывести те числа которие деляться на 2,3,5
      {                                            
          while(!q.empty())                        
                 {
                     if ((q.front() % 2 == 0) || (q.front() % 3 == 0) || (q.front() % 5 == 0)) 
                     {
                         mas[i]=q.front();
                         i++;
                     }
                      cout << q.front() << " ";
                      q.pop();  
    
                }
  }
cout << "\nQueue [finish] = ";
SortMass(mas,i);
for (int j=n;j<i;j++)
    cout << mas[j] << " ";
    cout << "\n";
    system("pause");
}
алгоритм:
1 - создать Queue
2 - пишем числа в Queue
3 - узнаем числа 2,3,5
4 - сли есть такое число в Queue записуем его в наш масив
5 - сортируем наш масив
6 - пишем масив

P.S.скажите так можна или нужно иначе решить задачу
Yandex
Объявления
17.06.2013, 18:05     Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5
Ответ Создать тему
Опции темы

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