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

Создать стек и очередь, вычислив среднее арифметическое значение всех элементов - C++

Восстановить пароль Регистрация
 
dedarh
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 20
10.07.2014, 09:43     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов #1
На основе данных входного файла создать стек и очередь, вычислив среднее арифметическое значение всех элементов. Удалить из списка элементы, значение которых меньше среднего арифметического всех элементов исходного списка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 09:43     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов
Посмотрите здесь:

найти среднее арифметическое всех элементов массива, кроме элементов... C++
В одномерном массиве, состоящем из 5 элементов, вычислить среднее арифметическое всех элементов C++
C++ Написать программу, вычисляющую среднее арифметическое всех элементов массива из 200 элементов
C++ Найти количество элементов значение которых превышает среднее арифметическое всех элементов
Найти количество элементов превышающих среднее арифметическое всех элементов массива C++
C++ Найти сумму всех положительных элементов массива и среднее арифметическое всех элементов
Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива C++
C++ Создать двумерный массив размером NxM, Найти среднее арифметическое всех нечентых элементов с четными индексам

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dedarh
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 20
11.07.2014, 12:43  [ТС]     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов #2
стек
C++ (Qt)
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
#include <iostream>
#include <stack>
#include <stdio.h>
#include <fstream>
 
using namespace std;
 
void printStack(stack<int>&p)
{
    if (!p.size())
        return;
    int t = p.top();
    p.pop();
    printStack(p);
    cout << t << " ";
    p.push(t);
}
 
ifstream in("input.txt");
ofstream out("output.txt");
 
int main()
{
    int answer=0;
    int arif=0;
    int i=0;
 
    stack<int> s1;
    stack<int> s2;
    int buf;
 
    while(in >> buf)
    {
        s1.push(buf);
        cout << buf << " ";
        i++;
        answer+=buf;
 
    }
    cout << endl;
    arif=answer/i;
 
    buf = s1.top();
    s1.pop();
    s2.push(buf);
 
    while(!s1.empty())
    {
    buf = s1.top();
    s1.pop();
    
    if(buf > arif)
    {
        s2.push(buf);
    }
    }
 
    while(!s2.empty())
    {
    buf = s2.top();
    s2.pop();
    cout << buf << " ";
    out << buf << " ";
    }
system("pause");
    in.close();
    out.close();
    return 0;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.07.2014, 16:42     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов #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
template <typename T>
void print_stack(std::stack<T> st, std::ostream& os = std::cout)
{
   while (!st.empty()) {
      os << st.top() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename T>
void print_queue(std::queue<T> st, std::ostream& os = std::cout)
{
   while (!st.empty()) {
      os << st.front() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename T>
T average_for_queue(std::queue<T> st)
{
   if (st.empty()) return T();
 
   T average = T();
   size_t count = st.size();
   while (!st.empty()) {
      average += st.front();
      st.pop();
   }
   return average/count;
}
 
template <typename T>
T average_for_stack(std::stack<T> st)
{
   if (st.empty()) return T();
 
   T average = T();
   size_t count = st.size();
   while (!st.empty()) {
      average += st.top();
      st.pop();
   }
   return average/count;
}
 
int main()
{
   std::ifstream ifs("file.txt");
   if (ifs.is_open()) {
      using input = std::istream_iterator<int>;
      using stk_cont_t = std::stack<int>::container_type;
      using que_cont_t = std::queue<int>::container_type;
 
      std::vector<int> buffer{input(ifs), input()};
      std::queue<int> qu{que_cont_t{buffer.begin(), buffer.end()}};
      std::stack<int> st{stk_cont_t{buffer.begin(), buffer.end()}};
 
      print_queue(qu);
      print_stack(st);
 
      assert(average_for_queue(qu) == average_for_stack(st));
 
      std::cout << "averege: " << average_for_queue(qu) << "\n";
   }
 
}
Добавлено через 1 минуту
С удалением элементов думаю сами справитесь.

Добавлено через 11 минут

Не по теме:

Вопрос к знатокам: как бы вы написали обобщенную функцию для печати stack, queue, priority_queue? Ну, что то вроде этого:

C++
1
2
3
4
5
6
7
8
template <typename ContainerAdaptors>
void print(ContainerAdaptors conteiner, std::ostream& os = std::cout) {
   //static_assert(??);
   //...
   //if (stack_type) print_stack_impl();
   //if (queue_type) print_queue_impl();
   //...
}



Добавлено через 1 час 51 минуту

Не по теме:

Вроде бы реализовал. Вот такое вышло

Кликните здесь для просмотра всего текста
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
namespace traits
{
//stack traits
template <class T>
struct is_stdstack: std::false_type {};
 
template <class T, class Container>
struct is_stdstack<std::stack<T, Container> >: std::true_type {};
 
//queue traits
template <class T>
struct is_stdqueue: std::false_type {};
 
template <class T, class Container>
struct is_stdqueue<std::queue<T, Container> >: std::true_type {};
 
//priority_queue traits
template <class T>
struct is_stdpriority_queue: std::false_type {};
 
template <class T, class Container, class Compare>
struct is_stdpriority_queue<std::priority_queue<T, Container, Compare> >: std::true_type {};
 
}//end namespace traits
 
namespace detail
{
template <typename Adaptor>
void print_impl(Adaptor& st, std::ostream& os,
                typename std::enable_if<traits::is_stdstack<Adaptor>::value ||
                traits::is_stdpriority_queue<Adaptor>::value>::type* = 0)
{
   std::cout << "stack or priority_queue\n";
   while (!st.empty()) {
      os << st.top() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename Adaptor>
void print_impl(Adaptor& st, std::ostream& os,
                typename std::enable_if<traits::is_stdqueue<Adaptor>::value>::type* = 0)
{
   std::cout << "queue\n";
   while (!st.empty()) {
      os << st.front() << " ";
      st.pop();
   }
   os << std::endl;
}
}//end namespace detail
 
template <typename Adaptor>
void print(Adaptor ctner, std::ostream& os = std::cout) {
   using namespace traits;
   static_assert(is_stdqueue<Adaptor>::value ||
                 is_stdstack<Adaptor>::value ||
                 is_stdpriority_queue<Adaptor>::value,
                 "not valid Container's Adaptor, must be stack, queue or priority_queue");
   detail::print_impl<Adaptor>(ctner, os);
}
 
int main()
{
   std::stack<int>          st{ {1,2,3,4} };
   std::queue<double>       qu{ {1.1, 2.2, 3.3, 4.4} };
   std::vector<int>         v{1,2,3,4,5};
   std::priority_queue<int> pqu{v.begin(), v.end()};
   print(st);
   print(qu);
   print(pqu);
   //print(v); //compile-time error
}

Yandex
Объявления
11.07.2014, 16:42     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов
Ответ Создать тему
Опции темы

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