Advertisement
awsmpshk

Stack #8

Apr 21st, 2020
374
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Создать стэк из целый чисел. Удвоить в нем вхождение всех четных элементов
  2. #include <fstream>
  3. #include <stack>
  4.  
  5. using namespace std;
  6.  
  7. void printStack(stack<int> st, ofstream& out) // функция вывода стэка в файл output.txt
  8. {
  9.   while(st.size() != 0)
  10.   {
  11.     out << st.top() << " ";
  12.     st.pop();
  13.   }
  14.   out << endl;
  15. }
  16.  
  17. void mergeStacks(stack<int>& s1, stack<int>& s2) // функция объединения стэков и записи результата в первый из них
  18. {
  19.   while (s2.size() != 0)
  20.   {
  21.     s1.push(s2.top());
  22.     s2.pop();
  23.   }
  24. }
  25.  
  26. void changeStack(stack<int>& st) // функция, решающая саму задачу
  27. {
  28.   stack<int> help;
  29.   while (st.size() != 0)
  30.   {
  31.     help.push(st.top());
  32.     if (st.top() % 2 == 0) help.push(st.top()); // заполняем вспомогательный стэк элементом дважды, если он четный
  33.     st.pop();
  34.   }
  35.   mergeStacks(st, help);
  36. }
  37.  
  38. int main()
  39. {
  40.   ifstream in("input.txt"); // объявление объекта типа ifstream для чтения из файла input.txt
  41.   ofstream out("output.txt"); // объявление объекта типа ofstream для записи в файл output.txt
  42.  
  43.   stack<int> st; // создаем стэк
  44.   int x; // переменная для занесения элементов в стэк
  45.  
  46.   while (in >> x) st.push(x); // заполнение стэка
  47.  
  48.   printStack(st, out); // вывод стэка до преобразования
  49.   changeStack(st); // преобразование стэка
  50.   printStack(st, out); // вывод стэка после преобразования
  51.  
  52.   in.close(); // закрытие входного файлового потока
  53.   out.close(); // закрытые выходного файлового потока
  54.   return 0;
  55. }
Advertisement
RAW Paste Data Copied
Advertisement