# PBinfo #4706 – Peak – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerinţa
Un șir de numere întregi a1, a2, …, an este peak, dacă există o poziție p, cu 1 < p < n astfel încât șirul să fie strict crescător până la poziția p și strict descrescător de la poziția p până la final. De exemplu, a = 2,5,7,20,15,7,1,-1 este peak, pe când șirurile 1,2,3,4 sau 1,3,5,3,1,5,1 sau 5,3,1 nu sunt peak.

Scrieţi definiția completă a subprogramului C++ Peak cu antetul:

void Peak(int a[], int n, int &isPeak, int &poz)
unde a este un tablou unidimensional cu maximum 1000 de numere întregi, n, numărul efectiv de elemente ale tabloului. Dacă vectorul a memorează un șir peak, atunci isPeak va fi egal cu 1, iar poz va reține poziția numărului maxim din a. Dacă vectorul a nu este un șir peak, atunci isPeak va fi egal cu 0, iar poz va reține valoarea 0.

Restricţii şi precizări

3 ≤ n ≤ 1000
elementele vectorului a sunt indexate de la 1 la n

Exemplu:
Dacă a = 2,5,7,20,15,7,1,-1 și n = 8, apelul Peak(a, n, isPeak, poz) va furniza ca rezultat isPeak = 1 și poz = 4.

Important
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
void Peak(int a[], int n, int &isPeak, int &poz)
{
    isPeak = poz = 0;
    if (a[1] >= a[2]) return;
    if (a[n - 1] <= a[n]) return;
    int i = 1;
    while (a[i] < a[i + 1]) i++;
    poz = i;
    while (i < n && a[i] > a[i + 1]) i++;
    if (i < n) poz = 0;
    else isPeak = 1;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4706)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4706/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4706/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
