👤

Sa se verifice dacă un şir dat este şir vale.
Cerința
Un şir se numeşte şir vale, dacă are un singur minim pe poziţia v şi respectă următoarele proprietăţi:

În stânga şi în dreapta minimului există cel puţin câte un element.
Secvenţa a[1], a[2], ... , a[v] este strict descrescătoare.
Secvenţa a[v], a[v+1], ... , a[n] este strict crescătoare.
Se citeşte un şir cu n elemente. Să se verifice dacă este şir vale.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire
Programul va afișa pe ecran unul dintre mesajele DA sau NU în funcţie că este şir vale sau nu.


Răspuns :

void min(int v[], int b, int &a, int &j)//v-sirul,b-dimensiunea lui v, a-minim,j-pozitia minimului
{   a=v[0];
   j=0;
   for(int i=0;i<=b;++i)
     if(a>v[i])
     {
           a=v[i];
           j=i;
     }
}

bool verifD(int v[], int &j)
{
     bool c=true;
for(int i=0;i<=j-i;++i)
if(v[i]<v[i+1])
c=false;
return c;
}


bool verifC(int v[], int b, int &j)
{
     bool c=true;
for(int i=j;i<=b-1;++i)
if(v[i]>v[i+1])
c=false;
return c;
}

int main()
{
....
min(...)
if(verifC(...)&&verifD(...))
   cout<<"DA";
else
   cout<<"NU";
....
}

#include <iostream>
using namespace std;
int main()
{
  int v,n,i,ok=1;
cout<<"n=";
  cin>>n;
  int a[n+1];
cout<<"introduceti sirul "<<endl;
  cin>>a[1];
  for(i=2;i<=n;i++)
    cin>>a[i];
  for(i=2;i<=n;i++)
  if(a[i-1]>a[i]&&a[i+1]>a[i])
        v=i;
  for(i=1;i<v;i++)
    if(a[i+1]>=a[i])
    {
    cout<<"NU"; ok=0;
    break;
    }
  if(ok)
    for(i=v;i<n;i++)
      if(a[i]>=a[i+1])
      {
      cout<<"NU"; ok=0;
      break;
      }
  if(ok)
        cout<<"DA";
        return 0;
}