Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Функции с переменным количеством параметров




Определите последовательность (формат) параметров и приведите пример вызова.

//--------------------------------------------------------1

void F1(char *p,...)

{ char **q;

for (q = &p; *q !=NULL; q++) cout << *q; }

//--------------------------------------------------------2

void F2(int *p,...)

{ int **q, i, d;

for (i=1, q = &p, d=*p; q[i]!=NULL; i++)

*q[i-1] = *q[i];

*q[i-1] = d;}

//--------------------------------------------------------3

int *F3(int *p,...)

{ int **q, i, *s;

for (i=1, q = &p, s=p; q[i]!=NULL; i++)

if (*q[i] > *s) s = q[i];

return s;

}

//--------------------------------------------------------4

int F4(int p[], int a1,...)

{ int *q, i;

for (i=0, q = &a1; q[i] > 0; i++)

p[i] = q[i];

return i;}

//--------------------------------------------------------5

union x { int *pi; long *pl; double *pd; };

void F5(int p,...)

{ union x ptr;

for (ptr.pi = &p; *ptr.pi != 0; )

{

switch(*ptr.pi++)

        {

case 1: cout << *ptr.pi++; break;

case 2: cout << *ptr.pl++; break;

case 3: cout << *ptr.pd++; break;

     }}}

//--------------------------------------------------------6

char **F6(char *p,...)

{ char **q,**s;

int i,n;

for (n=0, q = &p; q[n] !=NULL; n++);

s = new char*[n+1];

for (i=0, q = &p; q[i] !=NULL; i++) s[i]=q[i];

s[n]=NULL;

return s;}

//--------------------------------------------------------7

char *F7(char *p,...)

{ char **q; int i,n;

for (i=0, n=0, q = &p; q[i] !=NULL; i++)

if (strlen(q[i]) > strlen(q[n])) n=i;

return q[n];

}

//--------------------------------------------------------8

int F8(int a1,...)

{ int *q, i, s;

for (s=0, i=0, q = &a1; *q > 0; q++)

   s+= *q;

return s;}


//--------------------------------------------------------9

union xx { int *pi; long *pl; double *pd; };

double F9(int p,...)

{ union xx ptr;

double dd=0;

for (ptr.pi = &p; *ptr.pi != 0; )

   {

switch(*ptr.pi++)

     {

case 1: dd+= *ptr.pi++; break;

case 2: dd+= *ptr.pl++; break;

case 3: dd+= *ptr.pd++; break;

     }

   }

return dd;}

//------------------------------------------------------10

double F10(int a1,...)

{ double s,*q; int i,n;

for (s=0, n=a1, q = (double*)(&a1+1); n!=0; n--)

s += *q++;

return s;}

//-------------------------------------------------------11

double F11(int a1,...)

{ double s=0;

int *p=&a1;

while(*p!=0)

  {

  if (*p>0) s+=*p++;

  else

        { p++; s += *((double*)p)++; }

  }

return s; }

//--------------------------------------------------------12

double F12(char *p,...)

{ double s;

int *q=(int *)(&p+1);

for (;*p!=0; p++)

switch(*p)

  {

case 'd': s+=*q++; break;

case 'f': s+=*((double*)q)++; break;

case 'l': s+=*((long*)q)++; break;

  }

return s; }

//--------------------------------------------------------13

int F13(char *p,...)

{ int s=0;

int *q=(int *)(&p+1);

for(;*p!=0;p++)

if (*p>='0' && *p<='9') s+=q[*p-'0'];

return s;

}

//--------------------------------------------------------14

double F14(int p,...)

{ double dd=0;

int *q=&p;

for (; *q != 0; )

   {

   switch(*q++)

        {

   case 1: dd+= *q++; break;

   case 2: dd+= *((long*)q)++; break;

   case 3: dd+= *((double*)q)++; break;

        }

   }

return dd;}

 




Динамические массивы

//----------------------------------------------------- 1

char *F1(char *s)

{ char *p,*q; int n;

for (n=0; s[n] !='\0'; n++);

p = new char[n+1];

for (q=p; n >=0; n--) *q++ = *s++;

return p;

}

//------------------------------------------------------- 2

int *F2()

{ int n,i,*p;

cin >> n;

p=new int[n+1];

for (p[0]=n, i=0; i<n; i++)

  cin >> p[i+1];

return p; }

//------------------------------------------------------- 3

int *F3()

{ int n,i,*p;

cin >> n;

p=new int[n+1];

for (i=0; i<n; i++)

  { cin >> p[i]; if (p[i]<0) break; }

p[i]=-1;

return p; }

//------------------------------------------------------- 4

char *F4(char *p, char *q)

{ int n1, n2;

for (n1=0; p[n1]!=0; n1++);

for (n2=0; p[n2]!=0; n2++);

char *s,*v;

s=v=new char[n1+n2+1];

while(*p!=0) *s++ = *p++;

while(*q!=0) *s++ = *q++;

*s=0;

return v; }

//------------------------------------------------------- 5

double *F5(int n, double v[])

{

double *p=new double[n+1];

p[0]=n;

for (int i=0; i<n; i++) p[i+1]=v[i];

return p;

}

//------------------------------------------------------- 6

int *F6()

{ int *p, n=10,i;

p=new int[n];

for (i=0;;i++)

  {

  if (i==n) { n=n*2; p=(int*)realloc(p,sizeof(int)*n); }

  cin >> p[i];

  if (p[i]==0) break;

  }

return p;}


//------------------------------------------------------- 7

void *F7(void *p, int n)

{ char *pp, *qq, *ss;

qq = ss = new char [n];

for (pp=(char*)p; n!=0; n--) *pp++ = *qq++;

return ss;}

//------------------------------------------------------- 8

int *F8(int n)

{

int s,i,m,k,*p;

s = 10; p = new int[s];

for (i=2, m=0; i<n; i++)

{

for (k=0; k<m; k++)

if (i % p[k]==0) break;

if (k==m)

    {p[m++] = i;

    if (m==s)

          {

s=s*2;

p=(int*)realloc((void*)p,sizeof(int)*s);

}}}

return p;}

 




Массивы указателей

//------------------------------------------------------- 1

int F1(double *p[])

{ int n;

for (n=0; p[n]!=NULL; n++);

return(n); }

//------------------------------------------------------- 2

void F2(double *p[])

{ int i,k;

do {

k=0;

for (i=1; p[i]!=NULL; i++)

if (*p[i-1] > *p[i])

{ double *dd;

        dd=p[i]; p[i]=p[i-1]; p[i-1]=dd; k++;

}

} while k;}

//------------------------------------------------------ 3

void F3(double *p[], double *q)

{ int i,n;

for (i=0; p[i]!=0; i++)

  if (*p[i] > *q) break;

for (n=i; p[n]!=NULL; n++);

for (; n >=i; n--)

  p[n+1] = p[n];

p[i] = q;}

//------------------------------------------------------ 4

int F4(double **p[])

{ int k,i,j;

for (k=i=0; p[i]!=NULL; i++)

for (j=0; p[i][j] !=NULL; j++, k++);

return k;}

//------------------------------------------------------ 5

char **F5(char a[][80], int n)

{ int i; double **p;

p = new char* [n+1];

for (i=0; i<n; i++) p[i]=a[i];

p[n]=NULL;

return p;}

//------------------------------------------------------ 6

// strlen(char *) - длинастроки

char *F6(char *p[])

{ int i,sz,l,k;

for (i=sz=k=0; p[i]!=NULL; i++)

  if ((l=strlen(p[i])) >sz) { sz=l; k=i; }

return(p[k]); }

//------------------------------------------------------ 7

char **F7(char c[])

{ char **p; int i,n, cnt;

p = new char*[20];

for (i=n=cnt=0; c[n]!=0; n++)

  {

  if (c[n]==' ')

        { c[n]='\0'; cnt=0; }

  else

        {cnt++;

        if (cnt==1) p[i++]=&c[n];

        if (i==19) break;

        }

  }

p[i]=NULL; return(p);}

//------------------------------------------------------ 8

char *F8(char *p[], int m)

{ int n; char *q;

for (n=0; p[n]!=NULL; n++);

if (m >=n) return (NULL);

q = p[m];

for (n=m; p[n]!=NULL; n++) p[n]=p[n+1];

return q;}

//------------------------------------------------------ 9

// strcmp(char*,char*) - сравнениестрок

int F9(char *p[], char *str)

{ int h,l,m;

for (h=0; p[h]!=NULL; h++);

for (h--,l=0; h >= l;)

  {

  m = (l+h) / 2;

  switch(strcmp(p[m],str))

        {

case 0: return(m);

case -1: l = m+1; break;

case 1: h = m-1; break;

}

  }

return -1;}

//----------------------------------------------------- 10

// gets(char *) - ввод строки с клавиатуры

char **F10()

{int n; char **p, s[80];

p = malloc(100 * sizeof(char*));

for (n=0; n<99 & (gets(s),s[0]!='\0'); n++ )

  {

  p[n]=new char[strlen(s)+1];

  strcpy(p[n],s);

  }

p[n]=NULL; return(p); }

//----------------------------------------------------- 11

void F11(char *p[], int m)

{ int n; char *q;

for (n=0; p[n]!=0; n++);

if (m >= n) return;

for (; n > m; n--) p[n+1] = p[n];

p[m+1] = new char [strlen(p[m]+1)];

strcpy(p[m+1],p[m]);}

//----------------------------------------------------- 12

char *F12(char **p[], int n)

{ int k,i,j;

for (k=i=0; p[i]!=NULL; i++)

for (j=0; p[i][j] !=NULL; j++, k++)

  if (k==n) return(p[i][j]);

return(NULL);}










Последнее изменение этой страницы: 2018-05-10; просмотров: 198.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...