Răspuns :
Răspuns:
#include <iostream>
constexpr auto DIMENSIUNE_COADA = 1000;
class Coada
{
/* primulElement va arăta întotdeauna spre primul element adăugat în coadă deoarece principiul pe care funcționează coada e FIFO (first in, first out) deci dacă avem coada 1 -> 2 -> 3 primulElement va arăta spre 1, ultimulElement va arăta spre 3, dimensiunea va fi 3, capacitatea 1000 */
int primulElement, ultimulElement, capacitateCoada, dimensiuneCoada;
int* arrayCoada;
public:
/* consturctor-ul și destructor-ul cozii */
Coada(int dimensiuneCoada = DIMENSIUNE_COADA)
{
arrayCoada = new int[dimensiuneCoada];
capacitateCoada = dimensiuneCoada;
primulElement = 0;
ultimulElement = -1;
this->dimensiuneCoada = 0;
}
~Coada() { delete[] arrayCoada; }
/* funcția adaugă un element în coadă */
void adaugaInCoada(int numar)
{
/* dacă avem mai mult de 1000 elemente (cât am setat capacitatea cozii ) ieșim din program */
if (eCoadaPlina()) {
std::cerr << numar << " nu mai poate fi adaugat in coada, e plina!\n";
exit(EXIT_FAILURE);
}
/* altfel incrementăm ultimulElement (care are valoarea -1 de început) deci practic când adăugăm primul element în coadă o să adăugăm pe poziția 0 din „arrayCoada”, următorul pe poziția 1 ș.a.m.d. */
ultimulElement = (ultimulElement + 1) % capacitateCoada;
arrayCoada[ultimulElement] = numar;
/* în același timp incrementăm și variabila în care salvăm dimensiunea actuală a cozii */
dimensiuneCoada++;
}
/* funcția returnează primul element din coadă */
int scoateElementDinCoada()
{
/* dacă coada e goală practic nu avem ce să mai scoatem, ieșim din program */
if (eCoadaGoala()) {
std::cerr << "Nu putem scoate din coada, coada este goala!\n";
exit(EXIT_FAILURE);
}
/* luăm primul element (dacă avem 20 de elemente în coadă prima dată când încercăm să scoatem un element o să-l scoatem cel de pe poziția 0, dacă mai scoatem un element o să-l scoatem pe cel de pe poziția 1) ș.a.m.d. */
int numarScos = arrayCoada[primulElement];
primulElement = (primulElement + 1) % capacitateCoada;
dimensiuneCoada--;
/* returnăm numărul din coadă */
return numarScos;
}
/* niște funcții ajutătoare pentru a verifica dacă coada e plină sau goală */
bool eCoadaGoala() { return dimensiuneCoada == 0; }
bool eCoadaPlina() { return dimensiuneCoada == capacitateCoada; }
/* funcția returnează dimensiunea actuală a cozii */
int aflaDimensiunea() { return dimensiuneCoada; }
};
bool estePrim(int numar);
int main()
{
int nrElementeDinCoada, nrCitit{};
std::cout << "Cate numere adaugi in coada ? >> ";
std::cin >> nrElementeDinCoada;
/* creăm coada de N elemente */
Coada coadaNumere(nrElementeDinCoada);
/* citim numerele-n coadă */
for (int i{}; i < nrElementeDinCoada; i++) {
std::cout << "Introdu un numar >> ";
std::cin >> nrCitit;
coadaNumere.adaugaInCoada(nrCitit);
}
/* până când coada e goală sau găsim un număr prim */
while (true) {
/* scoatem numărul din coadă */
int numarDinCoada{ coadaNumere.scoateElementDinCoada() };
/* dacă este prim ieșim din program */
if (estePrim(numarDinCoada)) {
std::cout << numarDinCoada << " este prim, ne oprim!\n";
break;
}
/* dacă nu este prim, îl scoatem din coadă */
std::cout << numarDinCoada << " a fost scos din coada, nu este prim!\n";
}
return 0;
}
/* funcția verifică dacă un număr ește sau nu prim */
bool estePrim(int numar)
{
if (numar == 0 || numar == 1) {
return false;
}
for (int i{ 2 }; i <= numar / 2; ++i) {
if (numar % i == 0) {
return false;
}
}
return true;
}
Na, cam asta e, dacă nu înțelegi ceva, scrie-mi.
Vă mulțumim că ați ales să vizitați site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, vă rugăm să ne contactați. Revenirea dumneavoastră ne va bucura, iar pentru acces rapid, nu uitați să ne salvați la favorite!