7. Se citesc n numere naturale.. Să se afișeze cel mai mare număr par din șir. Ex pt n=7 și sirul 1,3,2,99,8,33,4 se va afișa 8.
8. Se citesc n numere naturale.. Să se afișeze cele mai mari 2 numere din șir. Ex pt n=7 și sirul1,3,2,99,8,33,4 se va afișa 99, 33.
9. Se citesc n numere naturale.. Să se afișeze câte numere din șir aparțin unui interval a,b citit. Ex pt a=10, b=20 n=8 și sirul 2,3,4,5,6,11,13,10 se va afișa 2
10.Se citesc n numere naturale. Să se afișeze câte elemente din șir au toate cifrele pare. Ex pt n=8 și sirul 12,20,123,220228,45,4,7,76,567,0 se va afișa 3 (20,220228,4).
Răspunsuri la întrebare
#include <iostream>
#include <algorithm>
using std::cout, std::cin, std::endl, std::size;
static int *creazaSir(const size_t &dimensiuneSir)
{
int *sirNumere = new int[dimensiuneSir]; // alocă dinamic un șir de n numere
for (size_t i = 0; i < dimensiuneSir; i++)
{
cout << "sirNumere[" << i << "] = ";
cin >> sirNumere[i]; // și citești valorile
}
return sirNumere; // la final returnezi adresa șirului
}
static void problema7(int *sirNumere, const size_t &dimensiuneSir)
{
int nrMax = sirNumere[0];
for (size_t i = 0; i < dimensiuneSir; ++i) // parcurgi vectorul cu un for
if (sirNumere[i] > nrMax && sirNumere[i] % 2 == 0) // dacă numărul este mai mare decât primul element și este par
nrMax = sirNumere[i]; // setezi noul maxim la sirNumere[i]
cout << "Cel mai mare nr. par din sir este >> " << nrMax << endl; // la final afișezi
}
static void problema8(int *sirNumere, const size_t &dimensiuneSir)
{
std::sort(sirNumere, sirNumere + dimensiuneSir); // sortezi șirul crescător, cel mai mare va fi pe ultima poziție iar al doilea
// cel mai mare va fi pe penultima poziție în vector
cout << "Cel mai mare numar si al doilea cel mai mare sunt >> "
<< sirNumere[dimensiuneSir - 1] << " si " << sirNumere[dimensiuneSir - 2] << endl;
}
static void problema9(int *sirNumere, const size_t &dimensiuneSir)
{
int a, b, contorNumere{};
cout << "Introdu a si b (de ex 10 20) >> ";
cin >> a >> b; // citești intervalul
for (size_t i = 0; i < dimensiuneSir; i++) // parcurgi vectorul
if (sirNumere[i] > a && sirNumere[i] < b) // dacă numărul este inclus în interval
++contorNumere; // incrementezi contorul
cout << "Sunt " << contorNumere << " numere intre " << a << " si " << b << endl;
}
static void problema10(int *sirNumere, const size_t &dimensiuneSir)
{
int contorNumere{}, copieNumar;
bool conditiePar{false};
for (size_t i = 0; i < dimensiuneSir; i++)
{
copieNumar = sirNumere[i]; // salvăm numărul într-o copie ca să nu modificăm direct valoarea din vector
while (copieNumar) // cât timp copieNumar este diferit de 0
{
if ((copieNumar % 10) % 2 != 0) // dacă găsim o cifră impară nu mai are rost să continuăm căutarea
{
conditiePar = false; // deci setăm condiția de incrementare la false
break; // și ieșim din while
}
if (conditiePar == false) // setăm la true doar dacă conditiePar este false ( că dacă e true
// nu are rost să setăm din nou la true )
conditiePar = true;
copieNumar /= 10; // împărțim numărul la 10 pentru a scăpa de ultima cifră ( altfel ar merge la infinit )
}
if (conditiePar == true) // dacă toate cifrele sunt pare
++contorNumere; // incrementam contorul
conditiePar = false; // și resetăm condiția la false ( pentru următorul număr )
}
cout << "Sunt " << contorNumere << " numere cu toate cifrele pare!" << endl; // la final afișăm
}
int main()
{
size_t n;
cout << "Introdu dimensiunea sirului >> ";
cin >> n;
int *sirNumere = creazaSir(n);
problema7(sirNumere, n);
delete[] sirNumere;
cout << "Introdu dimensiunea sirului >> ";
cin >> n;
sirNumere = creazaSir(n);
problema8(sirNumere, n);
delete[] sirNumere;
cout << "Introdu dimensiunea sirului >> ";
cin >> n;
sirNumere = creazaSir(n);
problema9(sirNumere, n);
cout << "Introdu dimensiunea sirului >> ";
cin >> n;
sirNumere = creazaSir(n);
problema10(sirNumere, n);
delete[] sirNumere;
return 0;
}