/*
Wyszukiwanie wartości w tablice.
Program drukuje na ekranie tablicę, i prosi o podanie poszukiwanej wartości,
wyprowadza pozycje pierwszego wystąpienia oraz ilość w calej tablice.
Parametry opcjonalne.




















*/
#include <iostream>
#include <limits>

using namespace std; // w starszych kompilatorach trzeba zakomentować ten wiersz

int Szukaj(const unsigned short *T,unsigned N,unsigned short W,unsigned &Ilosc=*(unsigned*)0)
  {
   int Wynik=-1;
   if(&Ilosc) Ilosc=0;
   for(const unsigned short *P,*K=(P=T)+N;P<K;++P)
     {
      if(*P==W)
        {
         Wynik=P-T;
         if(!&Ilosc) break;
         ++Ilosc;
        }
     }
   return Wynik;
  }

void Drukuj(const unsigned short *T,unsigned N)
  {
   for(const unsigned short *K=T+N;;)
     {
      cout<<*(T++);
      if(T>=K) break;
      cout<<',';
     }
   cout<<endl;
  }

int main()
  {
   while(true)
     {
      const unsigned short T[]={1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,1,2,3,1,2,1};
      const unsigned N=sizeof(T)/sizeof(*T);
      Drukuj(T,N);
      cout<<"poszukiwana wartosc (!-koniec): ";
      unsigned short W;
      cin>>W;
      if(cin)
        {
         int Pos=Szukaj(T,N,W); // nie potrzebujemy ilości wystąpień - szybsze szukanie
         cout<<"Wartosc "<<W<<' ';
         if(Pos<0) cout<<"nie znaleziono w tablice"<<endl;
         else cout<<"znaleziono w pozycji "<<Pos<<endl;
         unsigned Ilosc;
         Szukaj(T,N,W,Ilosc); // potrzebujemy ilość wystąpień - dłuższe szukanie
         cout<<"Wartosc "<<W<<' ';
         cout<<"wystepuje w tablice "<<Ilosc<<" razy"<<endl;
        }
      else
        {
         cin.clear();
         if(cin.get()=='!') break;
         cout<<"Blad wprowadzenia"<<endl;
        }
      cin.ignore(INT_MAX,'\n');
      cout<<endl;
     }
   return 0;
  }


