Sunteți pe pagina 1din 1

Program ilustrativ: enumerri

S se definesc funcia
void afiseaza(int a[], int dim)

care afieaz n ordinea citirii tabloul a pe mai multe rnduri, astfel nct pe fiecare rnd toate
elementele nenule de acelai semn s aibe aceeai paritate. Se vor forma ct mai puine rnduri.
Rezolvare: Contabilizm paritatea i semnul elementelor afiate, trecem la linie nou la prima
apariie pe linia curent a unei incompatibiliti de tipul un par pozitiv i un impar pozitiv sau de
tipul un par negativ i un impar negartiv.
#include<iostream>
using namespace std;
enum ParSemn { zero, parPoz, parNeg, imparPoz, imparNeg };
ParSemn clasifica(int val){
if (val == 0) return zero;
return val % 2 == 0 ? (val > 0 ? parPoz : parNeg) :
(val > 0 ? imparPoz : imparNeg);
}
void afiseaza(int a[], int dim){
int cont[5] = {};
//contoare de paritate & semn
for (int i = 0; i<dim; i++){
int val = a[i];
//decidem pe ce rand afisam val
ParSemn parSemnVal = clasifica(val);
cont[parSemnVal]++;
if (cont[parPoz] && cont[imparPoz] || cont[parNeg] && cont[imparNeg]){
cout << endl;
//trecem la linie noua si
for (int j = 0; j<5; j++)
cont[j] = 0; //resetam conturile
cont[parSemnVal]++;
}
cout << val << ' ';
}
cout << endl;
}
int main(void)
{
int tab[16] = { 0, -5, -32, 0, 12, 61, -51, 4, 30, -70, 2, 3, -2, 7, -10, -4 };
afiseaza(tab, 16);
return 0;
}
/*
0 -5
-32 0 12
61 -51
4 30 -70 2
3 -2 7 -10 -4
Press any key to continue . . .*/

S-ar putea să vă placă și