русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Void main(void)


Дата додавання: 2013-12-23; переглядів: 1858.


Int i,j;

K= min_index(list, dlina);

Main()

Int k;

Return(mindx);

Return n;

Int b;

Fac(int n)

T=*x;

Int k;

Void lin(char a)

Return (y);

Else

Return (x);

Int maxi(int x, int y)

Mini(int x, int y)

Return t;

Int mini(int x, int y)

{int t;

if (x<y) t=x;

else t=y;

}

Мiniфункциясын келесі түрде де жазуға болады:

{

return (x<y)? x:y;

}

Екі бүтін санның ішіндегі үлкенін анықтайтын функцияның мысалы:

{

if (x>y)

}

Егер қайтарылатын мәннің типі көрсетілмесе, ол int типті болып есептеледі.

Си тіліндегі мәнді қайтаратын барлық функциялар өрнектердің оң жағында жазылуы тиіс, өйтпеген жағдайда ешқандай да нәтиже қай­та­рылмайды. Бірақ функция нәтижесінің адресі қайтарылатын жағдайда, ол сол жақта болуы керек.

Егер функция ешқандай мән қайтармайтын болса, онда ол void (бос) типті функция ретінде сипатталуы тиіс. Мысалы, дисплей экра­нына бір толық жолды шығару үшін келесі функцияны жазамыз:

{

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

printf(“%c”, a);

}

Егер функцияда ешқандай параметр болмаса, онда функцияны декларациялау барысында жай жақша ішіне void сөзін жазған дұрыс. Мысалы, негізгі функция тақырыбының көбінесе былай жазылуы мүмкін:

void main(void).

Си тілінде әрбір функция – программаның жеке бөлігі, оны орындау үшін осы функцияны шақыру керек. Мысалы, goto операторы арқылы басқаруды кез келген функцияның тұлғасына беруге болмайды.

Функция келесі түрде шақырылады:

<функция_аты>(аргументтер_тізімі);

мұндағы аргументтер ретінде тұрақтыларды, айнымалыларды, өрнек­терді (олардың мәндері функцияны шақырудан бұрын программада анықталады) қолдануға болады. Функцияны шақыру тізімінің аргу­мент­тері сол функцияның анықталу параметрлерінің тізімімен саны жағынан, орналасу ретімен, сәйкес параметрлері типтерімен толықтай үйлесуі тиіс. Аргументтер жоқ болған жағдайда да, функция атынан кейінгі жай жақшалардың болуы міндетті.

Айнымалылардың әрекет ету аймағы

Айнымалылардың әрекет ету аймағы – программаның ағымдағы әрекеттеріне қандай мәліметтердің қатынасуға болатынын анықтайтын қағида. Айнымалылардың үш типі болады: ауқымды, локальді (жергі­лікті) және формальды. Жергілікті айнымалылардың әрекет ету айма­ғы – олар сипатталған программа бөлігі, яғни олар сол функция тұлға­сында ғана белгілі болып табылады. Программаның осы бөлігінен шыққан соң, жергілікті айнымалылар мен олардың мәндері жоғалады.

Формальды айнымалылар – тұтынушы функциясының тақыры­бын­да көрсетілген параметрлер. Формальды параметрлер функция тұлғасында жергілікті айнымалылар сияқты қолданылады. Формальды параметрлердің әрекет ету аймағы – функция тұлғасы болып табы­латын блок.

Ауқымды айнымалылар программадағы функциядан тыс сипат­та­лады. Олар программаның кез келген жерінде қолданылуы мүмкін, сондықтан ауқымды айнымалыларды алдын ала сипаттау және бас­тап­қы мәндерді меншіктеу керек. Ауқымды айнымалылардың әрекет ету аймағы – олар сипатталғаннан бастап, программа соңына дейін болып саналады.

Си тілінде әрбір айнымалы компьютер жадының келесі төрт класының біріне жатуы тиіс, олар – автоматты (auto), сыртқы (extern), статикалық (static), регистрлік (register). Айнымалы класын көрсету үшін оның типі спецификациясының алдына қажетті түйінді сөз (auto, extern, static, register) қоса жазылады. Мысалы, register int a;

Айнымалы үшін жады класы нақты көрсетілмеген жағдайда, ол auto класына жатқызылады.

Си тілінде функцияны шақыру барысында аргументтер өздерінің осы программадағы мәндеріне сәйкес әрекеттер атқарады, яғни функцияға аргументтердің нақты мәндері емес олардың көшірме­лері жіберіледі. Компьютер жадында (стекте) функцияның формальды параметрлері үшін орын бөлінеді және функцияны шақыру кезінде сол бөлінген орындарға нақты аргументтер мәндері орналастырылады. Содан кейін функция осы мәндерді пайдаланады, бірақ функциядан шыққан кезде олар жоғалып кетеді.

Қажет болған жағдайда, функцияны оған берілген аргумент­терді өзгерту үшін қолдануға болады. Ол үшін шақырылатын функцияға аргумент ретінде айнымалы мәнінің орнына оның адресін жіберсе болғаны. Ал аргумент негізгі (оригинал) мәнді пайдалануы үшін “*” нұсқауыш операциясын қолдану қажет.

1- мысал. x және y мәндерінің орындарын ауыстыратын функция­ның анықталуы:

void z1(int *x, int *y)

{ int t;

*x=*y;

*y=t;

}

Осы функцияны пайдаланатын (шақыру) программа бөлігі:

int a=2, b=3;

void z1(int*, int*);

printf(“\n a=%d, b=%d”, a, b);

z1(&a, &b);

printf(“\n a=%d, b=%d”, a, b);

Мұнда функцияны шақыру кезінде, мәндер өзгеріске ұшырайды, яғни экранға төмендегі мәндер шығарылады:

a=2, b=3

a=3, b=2

2-мысал. unsigned char типті r параметрімен шақырылатын rus функциясы анықталған. Егер функцияның параметрі орыс алфавитінің әрпі болса, бірге тең бүтін мәнді, ал кері жағдайда 0 мәнін шығарады.

int rus (unsigned char r){if (r>='А' && c<=' ') return 1; elsereturn 0;}

Функциялар өздерін өздері рекурсивті түрде шақыруы да мүмкін.

3-мысал: n!=1*2*3*…*n санының факториалын есептейтін рекур­сивті функцияны қарастырайық:

{

if (n==1) return 1;

b=fac(n-1)*n;

}

Функцияны рекурсивті шақыру кезінде ол функцияның жаңа көш­ір­­месі құрылмайды, бұл шақыру жергілікті айнымалылар мен пара­метрлердің жаңа көшірмелерін құрады. Рекурсивті функциядан шығу­дың дұрыс жолдарын қарастыру қажет, өйтпеген жағдайда мұндай функциямен жұмыс істеу барысында біраз уақыттан кейін ол “тоқтап қалуы” мүмкін.

Кез келген басқа объектілер сияқты функцияларда да нұсқауышты пайдалануға болады, мысалы, type t, type z параметрлі type типін қайтаратын функциядағы р нұсқауышын келесі түрде сипаттауға болады:

type (*p)(type1 t1, type2 t2);

Айтылғандарды тұжырымдай келе функцияда бір және екі өлшем­ді жиымдарды (массивтерді) пайдалануды қарастырайық.

Функцияға нақты параметр ретінде бір өлшемді жиымды жіберуге болады, ол үшін жиымның бастапқы (нөлінші) элементінің орнын көр­сет­сек жеткілікті.

Бір өлшемді жиымды пайдалану мысалы:

int min_index(int sp[], int ras)

{ int i, mindx, m;

mindx=0;m=sp[mindx];

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

if(sp[i]<m)

{ m=sp[i]; mindx=i;

};

}

Бұл жерде Си тілінің артықшылығын айта кеткен жөн. Жоғарыда қарастырылған мысалдан көріп отырғанымыздай, компиляторға өңде­ліп отырған жиым мөлшерін анық көрсетудің қажеті жоқ. Функция тұлғасында жиымның бастапқы элементінің адресін көрсету жеткі­лікті. Бір өлшемді жиымды кездейсоқ бүтін сандармен толтыру үшін келесі түрдегі функцияны пайдалануға болады:

void init(int mas[],int ras);//функцияны сипаттау

{

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

mas[k]=rand();

}

Программаның қандай да бір бөлігінде жоғарыда аталған функ­цияны init(spisok, dlina)түрінде шақырсақ, бір өлшемдіұзын­­дығыdlinaболатынspisok жиымының элементтері кездейсоқ мәндерге ие болады. Енді min_indexфункциясын пайдаланатын программаны қарастырайық:

#include <stdio.h>

#include <conio.h>

#define dlina 150

{int k, list[dlina];

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

list[k]=rand();

printf("list[%3d]=%6d\n",k, list[k]);

}

Функцияныңнақты параметрі ретінде екі немесе одан да көп өлшемді жиымдарды да пайдалануға болады.

Екі өлшемді жиымды пайдалану мысалы:

void minit(int matrix[][KO],int str);

{

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

for (j=0; j<KO; j++)

matrix[i][j]= rand();

}

Жоғарыда қарастырырылған функцияда екі өлшемді жиымның бағаналарының саны тұрақты және ол ауқымды KO айнымалысымен анықталған.

4- мысал. NxN өлшемді бүтін сандар жиымын (50-ден көп емес) енгізіп, функция арқылы оның оң мәндерінің қосындысын табу керек.

#include <stdio.h>

#include <conio.h>

void summa(int,int a1[ ][50]);//функцияны сипаттау

{

int a[50][50];


<== попередня лекція | наступна лекція ==>
Функция коды | Void main(void)


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн