O’zgaruvchi sonli parametrli funktsiyalar.
S++ tilida parametrlar soni nomalum bo’lgan funqtsiyalarni xam ishlatish mumkin undan tashqari turlari xam nomalum bo’lishi mumkin.
Parametrlan soni va turi funqtsiyani chaqirganda argumentlar soni va turiga qarab aniqlanadi. Bunday funktsiyalar sarlavxasi kuyidagi formatda yoziladi:
[] (, …)
Bu yerda oshkoriy parametrlar ro’yxati – oshkoriy ravishda yozilgan parametrlar ismi va turi . Bu parametrlar majburiy parametrlar de yiladi. Bunday parametr kamida bitta bo’lishi shart. Qolgan parametrlar soni va turi nomalum. Ularni aniqlash , tashkil qilish va ishlatish to’lik programma tuzuvchi zimmasiga yuklanadi. O’zgaruvchi sonli parametrlarni tashkil qilish usuli umuman olganda ikkita.
Birinchi usulda , parametrlar ro’yxati oxirida yana bir xususiy parametr yoziladi unig qiymati parametrlar tugaganligini bildiradi. Funktsiya tanasida parametrlar birma bir ko’rib chiqilib oxirgi parametrligi aniqlanadi. Barcha parametrlarni turi oxirgi majburiy parametr turi bilan ustma ust tushadi.
Ikkinchi usulda birorta majburiy parametr sifatida nomalum parametrlar soni qiritiladi, va shunga qarab parametrlar soni aniqlanadi.
Ikkala usulda xam parametrlarga murojaat qilish uchun ko’rsatkichlar ishlatiladi.
Misollar:
// Birinchi usul
#include
float prod(float arg, …)
{float p=1.0;
Float *ptr=&arg;
If (*prt==0.0) return 0.0;
for (;*prt;prt++)p*=*prt;
return p;
}
void main()
{cout << “\n “<
cout << “\n “<
}
Natija:
24
480
// Ikkinchi usul
#include
Int summa(int, …);
Void main()
{cout << “\n summa(2,6,4)=” << summa(2,6,4);
Cout << “\n summa(6,1,2,3,4,5,6)=”<< summa(6,1,2,3,4,5,6);
}
Int summa(int k,…)
{
Int *ptr=&k
Int s=0;for (;k;k--) s+=*(++ptr);
Return s;
}
Natija:
summa(2,6,4)=10
summa(6,1,2,3,4,5,6)=21
Ikkala misolda noma’lum parametrlarni turi berilgan majburiy parametrni turini qabul qilgan. Xar xil parametrli turlarni ishlatish uchun turni aniqlaydigan parametr kiritish kerak:
#include
Float sum(char,int,…);
Void main()
{cout << sum(‘I’,3,10,20,30);
cout << sum(‘f’,3,10.0,20.0,5.0);
cout << sum(‘d’,3,10,20,30); }
Int sum(char z,int k,…)
{
Switch (z)
Case ‘I’
{ Int *ptr=&k+1; int s;
for (s=0;k;k--,ptr++) s+=*(ptr);
Return (float)s;}
Case ‘f’:
{float*ptr=(float *)(&k+1); float s=0.0;
for (;k;k--,ptr++) s+=*(ptr);
return s;
}
default: {cout << “\n parametr hato berilgan”;return 9999999.0;}
}
Dostları ilə paylaş: |