Да се състави програма, чрез която се въвеждат две естествени числа N и M. N е стойност на първият член на аритметична прогресия, а M е разлика между два члена на същата прогресия. Програмата да изчисли и запише в опашка всички членове на прогресията, които са по-малки от 100. Да се изведат елементите на опашката, като първия й член е и първи член на прогресията.
Пример: N=9, M=10 Изход: 9; 19; 29; 39; 49; 59; 69; 79; 89; 99;
По желание: ** Да се реши същата задача, при условие че N e последният член на опашката, а не първия. Например при N=99, M=10 Изход: 9; 19; 29; 39; 49; 59; 69; 79; 89; 99;


// ?????????? ???? ???????? ? ???????? const int K=100; class Queue { private: // ???????? ??? ????? ?? ???????? int head; // ???????? ??? ???? ?? ???????? int tail; // ????? ?? ?????????? ?? ?????????? ?? ???????? int s[K]; // ?????????????? ?? ???????? void init(); public: Queue(); // ???????? ???? ???????? ? ?????? bool isEmpty(); // ???????? ???? ???????? ? ????? bool isFull(); // ????? ?? ???????? ? ???????? bool push(int X); // ????????? ?? ???????? ?? ???????? bool pop(int &X); }; Queue::Queue() { init(); } // ?????????????? ?? ???????? void Queue::init() { head=0; tail=0; for(int i=0;i<=K;i++) s[i]=0; } // ???????? ???? ???????? ? ?????? bool Queue::isEmpty() { return head==tail; } // ???????? ???? ???????? ? ????? bool Queue ::isFull() { return ((tail+1)%K)==head; } // ????? ?? ???????? ? ???????? bool Queue::push(int X) { bool ok = !isFull(); if (ok){ s[tail] = X; tail++; tail%=K; } return ok; } // ????????? ?? ???????? ?? ???????? bool Queue::pop(int &X) { bool ok = !isEmpty(); if (ok) { X = s[head]; head++; head%=K; } return ok; } int main ( ) { int N, M, br=0; Queue progresia; // ????????? ??????? cout<<"Vavedete purvi chlen:"; cin>>N; cout<<"Vavedete razlika: "; cin>>M; for(int i=0;(N+M)<=(100+M);i++) { progresia.push(N); N=N+M; br++; } int y; cout<<"Progresiata e: "; for(int i=br;i>0;i--) { progresia.pop(y); cout<<y<<", "; } cout<<endl; system("pause"); return 0; }Вярно, но има излишен код. В цикъла, който натрупва елементите на прогресията не ползваш променливата i. Няма нужда да ползваш и br, може да ползваш isEmpty
#include <iostream> #include <iomanip> #include <windows.h> using namespace std; // максимален брой елементи в опашката const int N=50; class Queue { private: // указател към върха на опашката int head; // указател към края на опашката int tail; // масив за съхранение на елементите на опашката int s[N]; // инициализиране на опашката void init(); public: Queue(); // проверка дали опашката е празна bool isEmpty(); // проверка дали опашката е пълна bool isFull(); // запис на стойност в опашката bool push(int X); // извличане на стойност от опашката bool pop(int &X); // печат на опашката void print(); }; Queue::Queue() { init(); } // инициализиране на опашката void Queue::init() { head=0; tail=0; for(int i=0;i<=N;i++) s[i]=0; } // проверка дали опашката е празна bool Queue::isEmpty() { return head==tail; } // проверка дали опашката е пълна bool Queue ::isFull() { return ((tail+1)%N)==head; } // запис на стойност в опашката bool Queue::push(int X) { bool ok = !isFull(); if (ok){ s[tail] = X; tail++; tail%=N; } return ok; } // извличане на стойност от опашката bool Queue::pop(int &X) { bool ok = !isEmpty(); if (ok) { X = s[head]; head++; head%=N; } return ok; } // печат на опашката void Queue::print() { cout<<endl<<"head : "<<head<<" tail: "<<tail<<"\nqueue: | "; if(!isEmpty()) if (head<=tail) for(int i=head;i<tail;i++) cout<<setw(3)<<s[i]<<" | "; else { for(int i=head;i<N;i++) cout<<setw(3)<<s[i]<<" | "; for(int i=0;i<tail;i++) cout<<setw(3)<<s[i]<<" | "; } cout<<endl<<"array: | "; for(int i=0;i<N;i++) cout<<setw(3)<<s[i]<<" | "; cout<<endl<<"index: | "; for(int i=0;i<N;i++) cout<<setw(3)<<i<<" | "; cout<<endl<<endl; } int main ( ) { int m,n; cout<<"Vuvedete Purviq 4len na progresiqta i razlikata m/y 4islata: "; cin>>n>>m; Queue chisla; for(;n<100;n=n+m) { chisla.push(n); } //chisla.print(); int x; while(!chisla.isEmpty()) { chisla.pop(x); cout<<x<<" "; } // отпечатваме резултата system("pause"); return 0; }int main ( ) { int N, M, br=0; // деклариране на променлива N, M, br=0 Queue progresia; // деклариране на променлива от тип опашка cout<>N; // въвеждане от клавиатурата N cout<>M; // въвеждане от клавиатурата M for(int i=0;(N+M)<=(100+M);i++) { // цикъл for progresia.push(N); // записване на N в опашката N=N+M; // N присвоява стойноста на N+M br++; // увеличава се с 1 } int y; // деклариране на променлива y cout<0;i--) { // цикъл for progresia.pop(y); // извличане на стойноста от опашката cout<<y<<", "; // извеждане на екрана y } cout<<endl; // извеждане на екрана нов ред system("pause"); // край на програмата return 0; }