списък и стек - разделяне на четни и нечетни
Да се състави програма, чрез която от клавиатурата се въвежда естествено число N от интервала [10..100]. Програмата да генерира N броя естествени числа от интервала [1..101].
Числата да бъдат записани в списък / стек.
При извеждането елементите на стека числата да се разделят на четни и нечетни, като първо се изведат всички четни, а след това всички нечетни числа.
Четните стойности се извеждат в същия ред , както са въвеждани, а нечетните стойности се извеждат в ред обратен на въвеждането им.
Пример: 10 генерирани са 42 468 335 501 170 725 479 359 963 465
Изход: 42 468 170 465 963 359 479 725 501 335
Решение
#include <iostream>
#include <list>
#include <stack>
#include <ctime>
using namespace std;
list<int> m_list;
stack<int> m_stack;
void pylni_spis(int N)
{ int i,chis;
cout<<"Generiram "<<N<<" broq psewdosluchajni chisla:\n";
for ( i=1; i<=N; i++)
{ chis=1+rand() %1000;
cout<<chis<<" ";
if (chis%2) m_list.push_back(chis); // zapis na nechetna stojnost w spisyk
else m_stack.push(chis);//zapis na chetna stojnost w steka
}//for
cout<<endl;
//cout izwevda elementite ot steka i gi zapiswa w spisyka
while (!m_stack.empty())
{ chis=m_stack.top();
m_list.push_back(chis);
m_stack.pop();//maha element ot wyrha
}//izwevda wsichki chetni stojnosti ot steka i gi wywevda w spisyka
}//pylni_spis(int N)
void pechat_spis()
{ list<int>::reverse_iterator nom;
int chis;
while (!m_list.empty())
{chis=m_list.back();//tekushiqt posleden element
cout << " " << chis;
m_list.pop_back();//maha element ot kraq na spisyka
}
cout << endl;
}//pechat_spis
int main ()
{ time_t t;//polzwa tekushoto wreme
srand( time(&t));//inicializira generator na suchajni chisla
int N;
double sred;
cout<<"Da se systawi programa, chrez koqto ot klawiaturata se wywevda N \n";
cout<<"estestweno chislo ot interwala [10..10010]. Programata da generira\n";
cout<<"N broq estestweni chisla ot interwala [1..101].Programata da izwede\n";
cout<<"redica, w koqto pyrwo se izwevdat wsichki chetni chisla, a\n";
cout<<"sled towa wsichki nechetni chisla. Redyt na izwevdaneto\n";
cout<<"na chetnite chisla syotwetstwa na reda na wywevdaneto,\n";
cout<<"nechtetnite chisla se izwevdat w red obraten na wywevdaneto im.\n";
cout<<"Da se realizira stek.\n";
cout<<"Primer: 10 generirani: 42 468 335 501 170 725 479 359 963 465\n";
cout<<"Izhod: 42 468 170 465 963 359 479 725 501 335 \n";
cout<<"Wywedete broj na chislata: ";cin>>N;
pylni_spis(N); // wywevda psewdosluchajni stojnosti
cout << "Spisykyt sydyrva slednite "<<N<<" chisla:\n";
pechat_spis();//izwevda elementite na spisyka
system("pause");
return 0;
}