Əдістемелік нұсқау: Берілген сұрақтарға жауап дайындап, конспектілеңдер.
Әдебиеттер: 8 [680-698]
№9. СӨЖ.
Тақырыбы: Символдық жолдарды өңдеу функциялары.
Тапсырма: Сұрақтарға жауап беру.
Сұрақтар:
1.жолды енгізу жəне шығару функциялары
2. strlen(), strcat(), strcpy() функциялары.
Əдістемелік нұсқау: Берілген сұрақтарға жауап дайындап, конспектілеңдер.
Әдебиеттер: 8 [680-698]
Оныншы апта
Cи тілінде функцияны анықтау форматы:
тип функция аты (параметрлер спецификациясы)
{функция денесі}
Функцияны шақыру операторы былайша жүргізіледі:
функция аты (нақты параметрлер тізімі)
Функциядан қайтару үшін return операторы қолданылады.
Жалпы түрі: return өрнек;
Функциялар. Басқа программалау тілдерімен салыстырғанда Си тілінде процедура, подпрограмма және функцияға бөлу жоқ, мұнда программа тек функциямен құрылады. Функция – нақты бір есепті шешуге арналған операторлар мен хабарландырулар жиынтығы. Әр функцияны хабарлау үшін, анықтау және шақыру үшін қолданылатын оның аты болу керек. Си тіліндегі кез келген программада main (басты функция) атты функция болуы керек, тек осы функциядан кез-келген программа басталады. Функцияны шақыру кезінде оған аргументтер (формальді параметрлер) көмегімен функцияны орындау кезінде қолданылатын кейбір мәндер берілуі мүмкін.
Функция ең болмағанда бір мәнді қайтаруы мүмкін. Бұл қайтарылған мән программаның орындалу барысында функцияның шақылу нүктесіне қойылатын функцияның орындалу нәтижесі. Аргументсіз және ешқандай мәнді қайтармайтын функцияларды қолдануға болады. Мұндай функциялардың әрекеті кейбір айнымалылардың мәнін өзгертуде, кей текстерді баспаға шығаруда, т.б.-ны құрайды. Си тілінде функцияны қолданумен үш түрлі мағына - функцияны анықтау (функциямен орындалатын әрекеттердің сипаттамасы), функцияны хабарлау және функцияны шақыру байланысты. Функцияны анықтау қайтарылатын мәннің типін, функцияның атын, формальді параметрлердің типі мен санын, сонымен бірге функция денесі деп аталатын айнымалы мен операторды хабарлауды және функцияның анықтайтын әрекетін береді.
Мысалы:
int rus (unsigned char r)
{ if (r>='А' && c<=' ') return 1; else return 0; }
Берілген мысалда unsigned char типті және r атты бір параметрі бар rus атты функция анықталған. Егер функция параметрі орыс алфавитінің әріпі болса, функция 1-ге тең бүтін санды қайтарады немесе керісінше. Қолданылатын функциялардың анықтамасы main функциясының анықтамасынан кейін, оның алдында немесе басқа файлда орын алуы мүмкін. Компилятор тексеруді жүргізу үшін берілетін фактілі параметрлер типін формальді параметрге сәйкестендіре отырып, функцияны шақырғанша функция хабарландырылуын (прототип) сыйғызу керек. Функция хабарландырылуы функция анықтамасының түріндей болады, тек айырмашылығы функция денесі болмайды және формальді параметрлердің аты түсіп қалады. Соңғы мысалда анықталған функция үшін прототип түрі мынадай болуы мүмкін:
int rus (unsigned char r); немесе rus (unsigned char);
Си тілінің программаларында библиотекалық функциялар, яғни өңделген және библиотекаға жазылған функциялар кеңінен қолданылады. Библиотекалық функциялардың прототипі жүйелі программалау құрамына енетін библиотекалармен бірге қойылатын арнайы тақырыптық файлдарда жатады және #include директивасы арқылы программаға қосылады. Егер функция хабарландырылуы берілмесе, функцияның алғашқы жіберуінің анализі негізінде ол функцияны шақыру немесе анықтау болса да, функция прототипі құрылады. Бірақ мұндай прототип келесі анықтамамен немесе функция шақырылуымен келісе бермейді. Әрқашан функция прототипі бері мақұлданады. Бұл компиляторға не функцияны дұрыс қолданбау кезінде диагностикалық хабарларды беруге не программа орындалу барысында орнатылған аргументтердің сәйкес келмеуін реттеуге мүмкіндік береді. Функция параметрлерінің хабарландыру оны анықтау кезінде функция атынан соң жақшада параметр аттары, ал жақшадан соң параметр типтерін хабарландыру жазылатын "ескі стилде" орындалуы мүмкін. Мысалы, алдыңғы мысалдан rus функциясы келесі жолмен анықталуы мүмкін:
int rus (r)
unsigned char r;
{ ... /* функция денесі */ ... }
СИ тілінің синтаксисіне сәйкес функция анықтамасы келесі формада болады:
[жады-класының-спецификаторы] [тип-спецификаторы] функция-аты
([формальді-параметрлер-тізімі])
{ функция-денесі }
Болуы міндетті емес жады-класының-спецификаторы static немесе extern болатын функция жадының класын береді. Функцияның тип-спецификаторы қайтарылатын мәннің типін береді және кез келген типті сұрауы мүмкін. Егер тип-спецификаторы берілмесе, функция int типінің мәнін қайтарады. Функция массив немесе функцияны қайтара алмайды, бірақ массивке, функцияғажәне кез келген типке көрсеткішті қайтара алады. Функция анықтамасында берілетін қайтарылатын мәннің типі осы функцияның хабарландыруының типімен сәйкес келуі керек. Егер функцияның орындалуы return операторымен аяқталса, функция мәнін қайтарады. Егер return операторы өрнекті құрамаса немесе функцияның орындалуы оның соңғы операторының орындалуынан кейін аяқталса, онда қайтарылған мән анықталмаған. Формальді-параметрлер-тізімі - бұл үтір арқылы бөлінген формальді параметрлер хабарландырулар тізбегі. Формальді параметрлер - бұл функция денесінің ішінде қолданылатын айнымалылар және оларға фактілі параметрлерге сәйкес келетін көшіру арқылы функцияны шақыру кезінде алынатын мәндер. Формальді-параметрлер-тізімі үтірмен (,) немесе көп нүктелі үтір (,...)-мен аяқталады, бұл функциялардың аргументтерінің сандары айнымалы екенін білдіреді. Егер функция параметрлерді қолданбаса, онда дөңгелек жақшаның болуы міндетті, ал параметрлер тізімінің орнына void сөзін көрсету керек.
Функция хабарландыруы (прототип) төмендегідей форматта болады:
[жады-класының-спецификатор] [тип-спецификатор] функция-аты ([формальді-параметрлер тізімі]) [функция-атының-тізімі];
Функция анықатамасына қарағанда тақырытық прототипте үтірлі нүкте жазылады, ал функция денесі болмайды. Форматтың қалған элементтерін қолдану ережесі функцияны анықтаудағыдай. Функцияны шақыру форматы төмендегідей:
адрестік-өрнек ([өрнектер-тізбегі])
Функцияның аты функция денесінің басының адресі болып табылады, функцияға адрестік-өрнек арқылы байланыс жасауға болады. Өрнек-тізімі функция арқылы берілетін фактілі параметрлер тізімін береді. Бұл тізім бос болуы мүмкін, бірақ дөңгелек жақшаның болуы міндетті.
Жақша алдында тұратын адрестік-өрнек функцияны шақыратын адресті анықтайды. Бұл функция қөрсеткіш арқылы шақырыла алатынын білдіреді. Мысалы:
int (*fun)(int x, int *y);
Мұнда fun айнымалысы екі параметрмен- int типі және int - ке көрсеткіш параметрлерімен функцияға көрсеткіш ретінде хабарланған. Функцияның өзі int типінің мәнін қайтару керек. fun көрсеткішінің атын құрайтын дөңгелек жақшалар және көрсеткіш белгісінің * болуы міндетті, әйтпесе мына жазу
int *fun (intx,int *y);
int –ке көрсеткішті қайтаратын fun функциясының хабарландыруы ретінде интерпретацияланады.
Достарыңызбен бөлісу: |