49 - DARS. MAKROSLAR.
Makros ta'rifiga ko’ra bir simvollar ketma – ketligi bilan almashtirishdir. Eng sodda makro ta'rif
# define identifikator almashtiruvchi satr.
Bu direktiva yordamida foydalanuvchi asosiy tiplar uchun yangi nomlar kiritishi mumkin.
Masalan: # define Real Long double
Dastur matnida Long double tipidagi o’zgaruvchilarni Real sifatida ta'riflash mumkin.
Masalan: # define Range((int _ Max)-(int _ Min)+1)
Parametrli makrota'riflardan foydalanish yanada kengroq imkoniyatlar yaratadi:
# define nom (parametrlar ruyhati) almashtiriluvchi_qator
Bu erda nom – makros nomi.
Parametrlar ruyhati – vergul bilan ajratilgan identifikatorlar ruyhati.
Makrota'rifning klassik misoli :
# define max (a,b) (a
Bu makrosdan foydalanganda kompilyator max (a,b) ifodani (x
Yana bir klassik misol:
# define ABS(x) (x<0 ? –(x):x)
Misol uchun dasturdagi ABS(E-Z) ifoda (E-Z<0 ? (E-Z):E-Z) ifoda bilan almashtiriladi.
Makroslar ko’p o’lchovli massivlar bilan ishlashda yordam beradi. Matritsalar bilan ishlaganda quyidagi chegaralar mavjud. Jadvallarning birinchi indeksidan boshqa hamma indekslari elementlari soni ko’rsatilishi shart. Massivlar elementlari nomerlari 1 dan emas 0 dan boshlanadi.
Birinchi cheklanishdan kutulish yuli matritsa o’rniga bir o’lchovli massiv kiritish , lekin bu massiv bilan matritsa shaklida amallar bajarish. Bu vazifani makros bajarish imkoniyatini beradi. Makros ikkinchi chegarani engish imkonini ham beradi.
Misol:
# define N4
# define M5
# define A(I,j) x [M(I-1)+(j-1)]
# include
void main ()
{ double x[NM];
int I, j, k;
for (k=0 ; k
x[k]=k;
for (I=1; I<=N; I++)
{ Cout<< (“\n stroka%d: “,i);
for (j=1; j<=M; j++)
Cout<< (“% 6.1f “, A(I,j));
}
}
Dasturda Cout<< (“% 6.1f “, A(I,j)); ifoda makros joylashdan so’ng quyidagi ko’rinishga keladi.
Cout<< (“% 6.1f “, x[5(I-1)+(y-1)]);
0>0>
Dostları ilə paylaş: |