Вписване в сайта



Сряда, 24 Август 2011 09:18

списък и стек - разделяне на четни и нечетни

Написана от 
Оценете
(0 гласа)

списък и стек - разделяне на четни и нечетни

Да се състави програма, чрез която от клавиатурата се въвежда естествено число 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;
}

Прочетена 4183 пъти Последно променена в Петък, 26 Август 2011 10:28
Още в тази категория: проверка за палиндром »