7. Чизиқли жараёнларни дастурлаш


Download 478.36 Kb.
bet13/32
Sana28.12.2022
Hajmi478.36 Kb.
#1016431
1   ...   9   10   11   12   13   14   15   16   ...   32
Bog'liq
С да дастурлаш 1 кисм 1 семестр

Назорат саволлари:

  1. Ифода нима?

  2. Амалларни санаб беринг?

  3. Разряд суриш амалларни санаб беринг?

  4. Инкремент ва декремент амалларни тушунтириб беринг?

6. Директивалар ва уларнинг турлари


Режа:

  1. Чақирувчи директива ва ундан фойдаланиш

  2. Белгилаб олувчи директива ва ундан фойдаланиш

  3. Алмашинувчи қаторда препроцессор амаллари

  4. Шарт директивалар ва улардан фойдаланиш

6.1. Чақирувчи директива ва ундан фойдаланиш
Директивалар # - фунта белгиси билан бошланувчи С++ дастурлаш тилининг асосий буйруқларидан ҳисобланади. Файллардан матнлар қўшиш учун 3 шаклга эга бўлган #include оператори қўлланилади:
#include
#include “fayl nomi”
#include makros nomi
Макрос номи #define директиваси орқали киритилган препроцессор идентификатори ёки макрос бўлиши мумкин. Агар биринчи шакл қўлланилса препроцессор қўшилаётган файлни стандарт кутубхоналардан излайди. Агар иккинчи шакл қўлланилса препроцессор фойдаланувчининг жорий каталогини кўриб чиқади ва бу каталогда файл топилмаси стандарт системали каталогларга мурожаат қилади. C++ дастурлаш тилининг стандарти бўйича *.h суффикси кутубхонага тегишли функцияларнинг прототиплари ҳамда, типлар ва константалар таърифи жойлашган файлларни кўрсатади. Бундай файлларни сарлавҳали файллар деб аталади. Компилятор кутубхоналари билан ишлашга мўлжалланган сарлавҳали файллар рўйхати тил стандартида кўрсатилган бўлиб бу файллар номлари тилнинг ҳизматчи сўзлари ҳисобланади. Қуйида шу стандарт файллар номлари келтирилган:

assert.h



дастур диагностикаси

type.h



символларни ўзгартириш ва текшириши

iostream.h



киритиш – чиқариш воситалари

stdlib.h



ҳотира билан ишлаш

string.h



символли қаторлар билан ишлаш

time.h



сана ва вақтни аниқлаш

Дастур тузиш давомида дастурга киритиш – чиқариш оқими сарлавҳа файлини чақириш қуйидаги амалга оширилади:
#include
Turbo C ва Borland C++ компиляторларида график кутубхона билан боғланиш учун graphic.h – сарлавҳали файл қўлланилади.
Агар дастурда бир нечта функциялардан фойдаланилса, функциялар таърифи танаси билан бирга алоҳида файлларда сақлаш қулайдир. Ҳамма функциялар танасига ва main() функцияси танасига чақирилаётган функциялар прототиплари жойлаштирилса, дастур танасида функцияларни иҳтиёрий жойлаштириш мумкин. Бу ҳолда дастур фақат процессор буйруқларидан ҳам иборат бўлиши мумкин.
6.2. Белгилаб олувчи директива ва ундан фойдаланиш
Макрос таърифига кўра бир символлар кетма – кетлиги билан алмаштиришдир. Энг содда макро таъриф
#define идентификатор алмаштирувчи сатр.
Бу директива ёрдамида фойдаланувчи асосий типлар учун янги номлар киритиши мумкин. Масалан:
#define real long double
Дастур матнида long double типидаги ўзгарувчиларни real сифатида таърифлаш мумкин. Масалан:
#define range((int _max)-(int _min)+1)
Параметрли макротаърифлардан фойдаланиш янада кенгроқ имкониятлар яратади:
#define ном (параметрлар рўйҳати) алмаштирилувчи_қатор
Бу ерда ном – макрос номи. Параметрлар рўйҳати – вергул билан ажратилган идентификаторлар рўйҳати. Макротаърифнинг классик мисоли:
#define max(a,b) (a
Бу макросдан фойдаланганда компилятор max (a,b) ifodani (x#define ABS(x) (x<0?–(x):x)
Мисол учун дастурдаги ABS(E-Z) ифода (E-Z<0 ? -(E-Z):E-Z) ифода билан алмаштирилади.
Макрослар кўп ўлчовли массивлар билан ишлашда ёрдам беради. Матрицалар билан ишлаганда қуйидаги чегаралар мавжуд. Жадвалларнинг биринчи индексидан бошқа ҳамма индекслари элементлари сони кўрсатилиши шарт. Массивлар элементлари номерлари 1 дан эмас 0 дан бошланади.
Биринчи чекланишдан кутулиш йўли матрица ўрнига бир ўлчовли массив киритиш, лекин бу массив билан матрица шаклида амаллар бажариш. Бу вазифани макрос бажариш имкониятини беради. Макрос иккинчи чегарани енгиш имконини ҳам беради.
Мисол:
# define N 4
# define M 5
# 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 строка%d: “,i);
for (j=1; j<=M; j++)
cout<< (“% 6.1f “, A(i,j));
}
}
Дастурда cout<< (“% 6.1f “, A(i,j)); ифода макрос жойлашдан сўнг қуйидаги кўринишга келади.
cout<< (“% 6.1f “, x[5(i-1)+(y-1)]);
6.3. Алмашинувчи қаторда препроцессор амаллари
Алмаштирувчи қаторги ташкил қилувчи лексималар кетма – кетлигида “#” ва “##” амалларини қўллаш мумкин. Биринчи амал параметр олдига қўйилиб, шу параметрни алмаштирувчи қатор қавсларга олиниши кераклигини кўрсатади.
#define print(A) printf(#A“=%f”,A)
Юқоридаги макро таъриф берилган бўлсин. У ҳолда макросга print(a+b) мурожаат қуйидаги макро кенгайтмани ҳосил қилади:
print(“a+b”“%f”,a+b).
Иккинчи “##” амал лексималар орасида қўлланилиб, лексемаларни улашга имкон беради. Қуйидаги макро таъриф берилган бўлсин:
#define zero(a,b,c) (bac)
#define one(a,b,c) (b a c)
#define two(a,b,c) (b##a##c)



Download 478.36 Kb.

Do'stlaringiz bilan baham:
1   ...   9   10   11   12   13   14   15   16   ...   32




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling