Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 14:07, реферат
1) Си тілінде функциямен жұмыс
2) Арнайы кілттік near, far, huge сөздері
3) Си тілінде типтерді түрлендіру
С++ тілінде функциямен жұмыс
Жоспар:
1) Си тілінде функциямен жұмыс
2) Арнайы кілттік near, far, huge сөздері
3) Си тілінде типтерді түрлендіру
Си-де функцияның өзі айнымалы болып табылмайды, бірақ функцияға көрсеткішті анықтауға болады және олармен әдеттегі айнымалы ретінде жұмыс жасауға болады: меншіктеуге, массивте орналастыруға, функцияның параметрі ретінде беруге, функциядан нәтиже ретінде қайтаруға т.б.
Бұл мүмкіншіліктерді суреттеу үшін жолдарды лексикографикалық ретпен емес, n-міндетті емес аргументтін беру кезінде жолдарды олардың сандық мәні бойынша реттейтін сұрыптау программасын қолданайық.
Сұрыптау үш бөлімнен тұрады:
- салыстыруға, жұп объектілердің ретін анықтайтын;
- алмастыруға, жұп объектілердің ретін керісіншеге алмастыратын;
- сұрыптаушы алгоритм, барлық объектілер реттелмейінше салыстыру мен алмастыруды жүзеге асырады.
Атап айтсақ, сұрыптау алгоритмі салыстыру және алмастыру операцияларынан тәуелсіз, сондықтан оған салыстыру мен алмастырудың әртүрлі функцияларын параметрлер ретінде бере отырып, алгоритмді сұрыптаудың әртүрлі критерилеріне бағыттауға болады (сызықтық таңдау, стандартты алмасу, Шелл сұрыптауы, қайықтық (челнок) сұрыптауы және т.б.).
qsort, strcmp және numcmp функциясына
көңіл аударғанда олардың
qsort функциясы тек стрингтерді
ғана емес, кез-келген типтегі
берілгендерді өңдейді.
Бұл параметр comp функцияға к
Екі стрингті салыстыратын numc
#include <stdlib.h>
\\ numcmp: s1 мен s2-ні сан ретінде салыс
int numcmp (char *s1, char *s2)
{ double v1, v2;
v1=atof(s1); v2=atof(s2);
if (v1<v2) return –1;
else if (v1>v2) return 1;
else return 0;
}
Кейде Си декларация синтаксисін әсіресе, функцияның көрсеткіштері барларды сөз қылады. Қарапайым жағдайда бұл синтаксис жақсы, бірақ күрделі жағдайларда декларация жақшаларымен аса қаныққан және оларды солдан оңға қарай оқу мүмкін емес болғандықтан, ол қиыншылық тудырады.
Мәселені келесі екі декларацияның айырмашылығымен мысал келтіре отырып жазайық:
int * f(); // f int-қа көрсеткішті қайтарады.
int ( * pf)(); // pf – int-ті қайтаратын функция көрсеткіш
* префикстік операторлардың
Келесі декларацияны және олардың сөздік сипаттамасын қарастырайық:
char ( *(*ar[3])()) [5] ÷ ar- char типінен тұратын [5] массивіне көрсеткішті қайтаратын функцияға [3] көрсеткіштер массиві.
Си тілінде типтерді түрлендіру кейде анық емес түрде жүргізіледі, мысалы үнсіздік бойынша түрлендіруде немесе меншіктеу процесінде, типтерді келтіру операцияларын орындау жолымен кейде анық түрде жүргізіледі. Типтерді түрлендіру функциясының аргументі ретінде берілген, мәндер түрленгенде орындалады. Көрсеткіштерді түрлендіру жағдайын қарастырайық.
Бір типтің мәніне көрсеткіш басқа
типтің мәнінің көрсеткішіне алмастырыла
алады. Бірақ нәтиже әр түрлі типтегі
объектілердің түзетілуіне
Жариялануы кезінде көрсеткіш үнемі кейбір типпен байланыса алады. Жеке жағдайда бұл void типі болуы мүмкін. void-қа көрсеткішті кез-келген көрсеткішке алмастыруға болады, және керісінше.
Кез-келген тип көрсеткіштері функция көрсеткіштеріне алмасуы мүмкін және керісінше.
Арнайы кілттік near, far, huge сөздері программалауға көрсеткіштердің форматы мен өлшемдерін модификациялауға мүмкіндік береді. Компилятор таңдалған моделдің жадысында қабылданған көрсеткіштің өлшемін ескереді және адрестік мәндердің түрлендіруінің сәйкестілігін анық емес түрде жүргізуі мүмкін. Сонымен, көрсеткіштің функция аргументі ретінде берілуі, оның өлшемінің келесі екі мәндердің үлкеніне түрленуінің анық емес болуына әкеліп соғуы мүмкін:
- жадының әрекет етуші моделі үшін көрсеткіштің қабылданған көрсеткішіне;
- аргументтің тип өлшеміне.
Егер көрсеткіштің – аргумент типі анық көрсетілген болса, сондай-ақ near, far, huge, модификаторларымен бірге берілген функцияның прототипі (функцияның алдын-ала жариялануы) болса, онда дәл осы типке түрлендіру жүргізіледі.
Қолданылған әдебиеттер:
М.Элис, Б.Строуструп. С++ жайлы ақпарат.1992 445бет
http://www.studfiles.ru. http://www.wiki.auditory.ru