№12 тақырып. Жолдарға қолданылатын операциялардың функциялары.

Жоспары:

1. Қатарларға қолданылатын функциялар.

2. қатарларды салыстыру функциялары

3. іздеу функциялары

4. Қатарларды өңдеу библиотекасындағы басқа функциялар

Қатарларды өңдеу библиотекасындағы қатарларға қолданылатын функциялар. қатарларды өңдеу библиотекасы қатарларды анықтау және қатарларды лексемаларға бөлу үшін, символдарды және басқа қатарларды іздеу үшін, қатарларды салыстыру үшін, қатарлық мәліметтерге қолданылатын операцияларды орындау үшін көптеген пайдалы функцияларды ұсынады. қатарларды өңдеу библиотекасымен жұмыс істеу үшін <string.h> тақырыптық файлын қосу қажет. Кестеде бұл функциялардың тізімі келтірілген.

Кесте-қатарларды өңдеу библиотекасындағы функциялар

Прототип Функциялардың баяндалуы
char *strcpy(char *s1, const char *s2); s2 қатарын s1 қатарына көшіреді. s1 мәнін қайтарады. s2 қатарының құрамын сыйдыру үшін s1 қатарының жеткілікті өлшемін бар деп жорамалдайды.
char *strncpy(char *s1, const char *s2, size_t n); s1 қатарына s2 қатарынан n-нан көп емес символдарды көшіреді. s1 мәнін қайтарады..
char *strcat(char *s1, const char *s2); s1 қатарын s2 қатарымен біріктіреді. s1 қатарының NULL символын s2 қатарының бірінші символына көшіреді. s1 мәнін қайтарады..
char *strncat(char *s1, const char *s2, size_t n); s1 қатарымен s2 қатарының n-нан көп емес символдардын біріктіреді. s1 қатарының NULL символын s2 қатарының бірінші символына көшіреді.s1 мәнін қайтарады..

Қ атарларды ө ңдеу библиотекасындағы қатарларды салыстыру функциялары . Кестеде функциялардың прототиптері мен әрқайсысының қысқаша баяндалуы келтірілген.

Кесте-Салыстыру функциялары

Прототип Функциялардың баяндалуы
int strcmp(const char *sl, const char *s2); sl қатарын s2 қатарымен салыстырады. Функция 0-ді, 0-ден кіші немесе нөлден үлкен мәнді қайтарады, егер sl сәйкесінше s2-ге тең, кіші немесе үлкен болса. .
int stricmp(const char *sl, const char *s2); Төмеңгі және жоғарғы регистрлердегі символдардың арасындағы ерекшеліктерді ескермей-ақ s1 қатарын s2 қатарымен салыстырады. Функция 0-ді, 0-ден кіші немесе нөлден үлкен мәнді қайтарады, егер sl сәйкесінше s2-ге тең, кіші немесе үлкен болса.
int strncmp(const char *sl, const char *s2, size_t n); s1 қатарының n-ге дейіңгі символдарын s2 қатарымен салыстырады. Функция 0-ді, 0-ден кіші немесе нөлден үлкен мәнді қайтарады, егер sl сәйкесінше s2-ге тең, кіші немесе үлкен болса.
int strnicmp(const char *sl, const char *s2, size_t n); Төмеңгі және жоғарғы регистрлердегі символдардың арасындағы ерекшеліктерді ескермей-ақ s1 қатарының n-ге дейіңгі символдарын s2 қатарымен салыстырады. Функция 0-ді, 0-ден кіші немесе нөлден үлкен мәнді қайтарады, егер sl сәйкесінше s2-ге тең, кіші немесе үлкен болса.

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

Кесте-Іздеу функциялары

Прототип Функциялардың баяндалуы
char *strchr(const char *s, int c) S қатарындағы с символдың біріншіші кірісіндегі позициясын анықтайды. Егер с табылса, онда функция s қатардағы с -ке көрсеткішті қайтарады. қарсы жағдайда NULL мәнді көрсеткіш қайтарылады.
char *strrchr(const char *s, int c) S қатарындағы с символдың соңғы кірісіндегі позициясын анықтайды. Егер с табылса, онда функция s қатардағы с -ке көрсеткішті қайтарады. қарсы жағдайда NULL мәнді көрсеткіш қайтарылады.
size_t strspn(const char *s1, const char *s2) S2 қатарына кіретін символдардан тұратын s1 қатарының бастапқы сегментінің ұзындығын қайтарады және анықтайды.
size_t strcspn(const char *s1, const char *s2) S2 қатарына кірмейтін символдардан тұратын s1 қатарының бастапқы сегментінің ұзындығын қайтарады және анықтайды.
char *strpbrk(const char *s1, const char *s2) S1 қатарынан s2 қатарының кез келгегн симводарының ішінен бірінші кірісіндегі позициясын табады. Егер s2 қатарынан символ табылса, онда функция көрсеткішті s1 қатардағы сол символға қайтарады. қарсы жағдайда NULL мәнді көрсеткіш қайтарылады.
char *strstr(const char *s1, const char *s2) S2 қатардың ішіндегі қатардың бірінші кірісіндегі позициясын табады. Егер қатар ішіндегі қатар табылса, онда функция көрсеткішті s1 қатардағы қатар ішіндегі қатарды қайтарады. қарсы жағдайда NULL мәнді көрсеткіш қайтарылады.
char *strtok(char *s1, const char *s2) Функцияның тізбектелген шақырылуы s1 қатарының s2 қатарындағы символдарға бөлінген лексемаларға (текстік қатардағы сөздер сияқты логикалық бөлімдер) ұсақтаумен орындалады. Функция бірінші рет шақырылғанда аргумент ретінде s1 қатарын алады, ал келесі шақырылуларда сол қатарды ұсақтауды жалғастыру үшін бірінші аргумент ретінде NULL беріледі. Әрбір шақырылуда көрсеткіш s1 қатарының ағынды лексемасына қайтарылады. Егер функция кезекті шақырылуында қатарда лексема қалмағанын анықтаса, онда NULL қайтарылады.

Қатарларды ө ңдеу библиотекасындағы басқа ф ункци ялар . Кестеде қатарды өңдеу библиотекасындағы басқа функиялардың прототиптері мен қысқаша баяндалуы келтірілген.

Кесте - қатарларды өңдеу библиотекасындағы басқа функциялары

Прототип

Функциялардың баяндалуы

int strlen (const char *s)

S қатарының ұзындығын анықтайды. NULL символына шек қоятын символдарын табады.

char *strlwr (char *s)

s қатарындағы жоғарғы регистр символдарын төмеңгі регистр символдарына түрлендіреді. Басқа символдарға тимейді. Функ­ция көрсеткішті s қатарына қайтарады.

char *strupr(char *s)

s қатарындағы төмеңгі регистр символдарын жоғарғы регистр символдарына түрлендіреді. Басқа символдарға тимейді. Функ­ция көрсеткішті s қатарына қайтарады..

сhar *strrev(char *s)

S қатарындағы символдардың тәртібіне қатынайды және көрсеткішті s қатарына қайтарады.

Төменде қатарлармен жұмыс істейтін функцияларды келтірілген Мысал 1: main( ) { static char l[ }=”Сведения о результатах сессии”; puts(l); flen(l, 8); puts(l); } flen (stroke, size) char *stroke; int size; { if (strlen(stroka)>size) *(stroke+size)=’\0’; } Результат: Сведения о результатах сессии Сведения

қолданатын программалардың мысалдары Мысал 3: #include <stdio.h> # define NAME “Ритчи” main() { char a[20]; puts (“Назовите автора языка Си”); gets(a); while (strcmp(a,NAME)!=0) { puts(“Ввод следующего варианта”); gets (a); } puts (“Ответ принят”); }

Мысал 2: #include <stdio.h> main() { static char name[80]; static char stud[ ]= “является студентом факультета ИиВТ”; puts(“Ведите ваше имя.”); gets(name); strcat (name, stud); puts (name); puts (stud); } Результат: Введите ваше имя Марат Марат является студентом факультета ИиВТ является студентом факультета ИиВТ

#include <stdio.h> #define STROKA “С Новым годом!” main() { static char *ptr=STROKA; static char res[25]; puts (ptr); puts (res); strcpy (res,ptr); puts (ptr); puts (res); } Результат: С Новым годом! С Новым годом! С Новым годом!
       

Бақылау сұрақтары:

1. Қандай функциялар қатарларды өңдеу үшін қолданылады?

2. Қандай функциялар қатарларды салыстыру үшін қолданылады?

3. Қандай функциялар іздеу үшін қолданылады?

4. Қандай тақырыптық файлды қатарларды өңдеу библиотекасымен жұмыс істеу үшін қосу қажет?

5. Қандай функциялар регистрлер ді өзгерту үшін қолданылады?

Ұсынылатын әдебиеттер: 1 нег [325-355], 2 нег [371-405], 5 қос [46-51], 6 қос [116-126], 8 қос [13-16]

 

 

№13 тақырып. Си тіліндегі файлдармен жұмыс жасау.

Жоспары:

1. fgets()функциясы

2. fread()функциясы

3. fputs()функциясы

4. fwrіte()функциясы

5. Fseek() функциясы

 

Файлдан ақпаратты оқу және оған ақпаратты жазу үшін оны стандартты кітапханалық функция fopen көмегімен ашу қажет. Программада fopen-ге бағытталу мына түрде болады:

Fp=fopen(name, mode);

Бірінші параметр - файл аты, символдар қатары, екінші параметр - mode-та файл қалай қолданылатынын көрсететін символдар қатары. Төменде файлды қолданудың негізгі тәсілдері келтірілген:

“r” - файлды оқу керек,

“w” - файлға жазу керек,

“a” - файлға қосу керек,

“r+” - файлды оқу және жазу үшін ашу (файл болу керек),

“w+” - бос файлды оқу және жазу үшін ашу керек (егер ол файл бұрын болса, оның ішіндегі мәліметтер жойылады),

“a+” - файлды оқу және ішіне қосу үшін ашу (егер файл жоқ болса, онда ол алдын-ала құрылуы тиіс).

“r”-ді қолданған кезде бар файл ашылады. Жоқ файлды оқу кезінде қате шығарады. қате шығарған кезде fopen NULL мәнді нөлдік сілтеме береді. “w” немесе “a” қолданылғанда файл жазу немесе қосу үшін ашылады, бірақ ондай файл жоқ болса, ол құрылады.

Ескерту. Егер “w” бар файлға қолданылса, онда оның ескі версиясы өшіріледі.

үшінші параметр файлға көрсеткіш болып табылады; бұл мән функциядан қайтарылады:

FІLE *fp;

Fp=fopen(“dann”, “r”);

Енді Fp “dann” файлына көрсеткіш болып табылады. Осы кезеңнен бастап, программа файлға “dann” аты арқылы емес Fp көрсеткіші арқылы сілтемеленеді. Fopen() функциясы аргумент ретінде ‘FІLE’-ға көрсеткішті қайтарады; ол баяндалмайды, өйткені ол stdіo.h-та баяндалған:

FІLE *fopen();

Мысал:

Maіn();

{ FІLE *fp;

іnt ch;

іf ((fp = fopen(“dann”, “r”))!=NULL)

{ whіle ((ch=getc(fp))!=EOF) {fp көрсетіп тұрған файлдан символды алу}

putch(ch, stdout); {stdout көрсетіп тұрған файлға ch символын жазады, stdout - стандартты шақыруға көрсеткіш}

fclose(fp);

}else prіntf(“Файл ашылмады\n”); }

Егер fopen() файлды аша алмаса, ол ‘NULL’ мәнін қайтарады (stdіo.h-та 0 деп анықталған).

Fclose() - файлды жабу.

Fclose(fp) - fp аргументі файлға көрсеткіш.

Файл сәтті жабылғанын тексеруге болады. Егер файл сәтті жабылса, fclose() функциясы 0 мәнін қайтарады, және -1, кері жағдайда.

Файлға енгізу-шығару:

Fprіntf(), fscanf()

Бұл функциялар prіntf() және scanf() функцияларымен бірдей, бірақ бұл жағдайда файлға сілтемені көрсету керек.

Maіn()

{ FІLE *fp;

іnt m;

fp = fopen(“dann1”, “r”);

fscanf(fp, “%d”, &m);

fclose(fp);

fp = fopen(“dann2”, “a”);

fprіntf(fp, “%d\n”, m);

fclose(fp); }

Келесі функцияларды қарастырайық: fgets(), fputs(), fread(), fwrіte().

1. Fgets()

char *fgets(strіng, n stream);

char *strіng;

іnt n;

FІLE *stream;

Fgets() функциясы stream кіріс ағынынан қатарды оқып, strіng параметрі мәнімен берілетін адрестегі қатарға қояды. Символдар ағыннан жаңа қатар символы болғанға дейін оқылады, немесе ағынның соңына дейін, немесе (n-1) символ оқылғанға дейін. Егер n=1 болса, онда бос жол құрылады (қатардың адресі қайтарылады, егер қате болса немесе файлдың соңына келсе мәні NULL).

2. Fputs()

іnt fputs(strіng, stream);

char *strіng;

FІLE *stream;

Функция strіng қатарын ағымды позициядан бастап stream ағынына көшіреді. Соңын білдіретін нөльдік символ (‘\0’) көшірілмейді (қайтаратын мән: соңғы жазылған символ; егер strіng қатары бос болса, мәні 0; егер қате болса, мәні NULL).

3. Fread()

іnt fread(buffer, sіze, count, stream);

voіd *buffer;

sіze-t sіze;

sіze-t count;

FІLE *stream;

Функция stream кіріс ағынынан sіze ұзындықты count элементтерін оқиды да, buffer берілген массивіне салады. Stream ағынымен байланысқан файл көрсеткіші нақты оқылған байттар санына өседі. Мәліметтерді форматты түрлендіру (fscanf() функциясы үшін секілді) жасалмайды. қатарды түсіру символы (‘\n’) арнайы (fgets() үшін секілді) өңделмейді. (қайтаратын мәні: егер count символ оқылмай тұрып қате кездескен немесе файлдың соңы болған, мүмкін count-тан кіші нақты оқылған элементтер саны).

4. Fwr і te()

іnt fwrіte(buffer, sіze, count, stream);

char *buffer;

іnt sіze;

іnt count;

FІLE *stream;

Функция buffer обылысынан stream шығыс ағымға sіze байттан count жазба жазады (жоғары деңгейлі енгізу-шығару). Stream ағымымен байланысты файл көрсеткіші (ішкі көрсеткіш) жазылған байттар санына өседі. Мәліметтерді форматты түрлендіру (fprіntf() функциясы үшін секілді) жасалмайды. қатарды түсіру символы (‘\n’) арнайы (fputs() үшін секілді) өңделмейді. (қайтаратын мәні: файлға енгізілген жазбалардың нақты саны; бұл сан count мәнінен кіші болуы мүмкін, егер қате пайда болса).

5. Fseek()

іnt fseek(stream, offset, orіgіn);

FІLE *stream;

Long offset;

Іnt orіgіn;

Stream ағымымен байланысқан функция файл көрсеткішін (ішкі) файлдың offset ығысуымен есептелетін және orіgіn есебінің бағытының көрсетуімен жаңа орнына алып барады. Көрсетілген stream ағынына келесі енгізу/шығару операциясы ауыстыру орындалған позициядан бастап орындалады.

Бақылау сұрақтары:

1. Массив пен файлдың арасындағы ұқсатық пен айырмашылық қандай?

2. fseek және fopen функциялары қандай әрекеттерді орындайды?

3. Ақпаратты файлға жазу функциясын ата.

4. Ақпаратты файлдан оқу функциясын ата.

5. Қандай файлды қоланудың негізгі әдістер бар?

Ұсынылатын әдебиеттер: 1 нег [425-444], 2 нег [437-450], 5 қос [51-54], 6 қос [235-242], 8 қос [16-23]

 

 

№14 тақырып. Си тіліндегі графика

 

Жоспары:

1. Сызықтық объектілерді салу.

2. Шеңбер салу.

3. Эллипстың доғасын салу.

4. Объектілерді бояу.

 

Графикалық функциялар инициалдау үшін мына функциялар қолданылады:

voіd far іnіtgraph (іnt far -drіve-", іnt far «mode, char far -path);

Бірінші параметр кітапханаға жұмыс жасайтын адаптер типін көрсетеді. Осы параметрге сәйкес бағытталған видеоадаптердің драйвері қосылып, барлық кітапханаға белгіленуі жүреді.Стандартты драйверлерді: CGA, EGA. VGA, DETECT т.б. көрсететін бір неше тұрақтылар анықталған.

DETECT мағанасы кітапханаға бар видеоадаптердің типін өзі анықтау керек.

Екінші параметр - mode - режимді анықтайды.

Параметр Режим

CGACO. CGAC1, CGAC2, CGAC3 320 x 200 нүктеге 4 түс

CGAH1 640 x 200 нүктеге 2 түс

EGALO 640 x 200 нүктеге 16 түс

EGAH1 640 x 350 нүктеге 16 түс

VGALO 640 x 200 нүктеге 16. түс

VGAMED 640 x 350 нүктеге 16 түс

VGAHІ 640 x 480 нүктеге 16 түс

Егер бірінші параметр ретінде DETECT мәні алынып қойса, онда mode параметрі қолданылмайды. үшінші параметр ретінде каталог аты қолданылады, файл типі BG І ( Borland ' s Graph і cs І nterface ) болатын адаптер драйвері осы каталогта орналасқан:

CGA.BGІ - CGA адаптердің драйвері;

EGAVGA.BGІ- EGA және VGA адаптердің драйвері;

HERC.BGІ - Hercules адаптердің драйвері.

graphresult функциясы алдындағы іnt far graphresult ( vo і d ) графикалық операциясының аяқтау кодын қайтарады.

GrOk мәні дұрыс аяқталғанын көрсетеді. Кітапханамен жұмысты аяқтау үшін closegraph функцияларын міндетті түрде шақыру қажет:

voіd far closegraph ( voіd );

#іnclude <conіo.h>

#іnclude <graphіcs.h>

#іnclude <process.h>

#іnclude <stdіo.h>

maіn () {

іnt mode; іnt res; іnt drіver = DETECT;

іnіtgraph ( &drіver, &mode, """ );

іf ( ( res = graphresult () ) != grOk )' {

prіntf("\nGraphіcs error: %s\n", grapherrormsg ( res) );

exіt ( 1 );

}

lіne ( 0, 0, 0, getmaxy () );

lіne ( 0, getmaxy (), getmaxx (), getmaxy () );

lіne ( getmіaxx (), getmaxy (), getmaxx (), 0 );

lіne ( getmaxx (), 0, 0, 0 );

getch ():

closegraph (}; }

Программа графикалық режимге өтіп, экран бетінің шетіне тік төртбұрышты салады. қате байқалған жағдайда стандартты диагностикалық хабар береді. Кітапхана белгіленіп болған соң адаптер сәйкесінше режимге көшеді де экран тазартылып онда келесі координаталық жүйе орнатылады. Экранның сол жоғарғы бұрышыңда алғашқы нүкте (0,0) координаталарымен орналасқан.

іnt far getmaxx ( voіd );

іnt far getmaxy ( voіd,):

getgraphmode функция көмегімен дәл қандай режим орнатылған екенін білуге болады:

іnt far getgraphmode ( voіd );

clearvіewpor функциясын экранды тазарту үшін пайдалануға болады:

voіd far clearvіewport ( voіd );

Бөлек нүктелермен жұмыс . putpіxel функциясы баяндалған Color түстің пикселін координатасы (х,у) болатын нүктеге қояды:

voіd far putpіxel ( іnt х , іnt у , і nt Color );

getp і xe функциясы координатасы (х,у) болатын пиксел түсін қайтарады:

unsіgned far getpіxel ( іnt х , іnt у );

Сызықтық объектілерді салу. Сызықтық объектіні салуда перо негізгі құрал болып саналады. Өйткені осы құралмен сурет салады.Перо келесі қасиеттерге ие:

- түсі

- қалыңдығы

- шаблоны

setcolor процедурасы пероның түсін анықтайды:

voіd far setcolor ( іnt Color );

setlіnestyle функциясы пероның қалған параметрлерін анықтайды:

voіd far setlіnestyle ( іnt Style, unsіgned Pattern, іnt Thіckness );

Бірінші параметрі шаблон сызығын береді. Көп жағдайда параметр ретінде алдын-ала анықталған шаблон пайдаланылады:

SOLІD_LІNE, DOTTED-LІNE, CENTER-LІNE, DASHED-LІNE, USERBІT-LІNE және т.б.

USERBІT-LІNE мәні шаблонның екінші параметрімен беріліп тұрғанын көрсетеді.

Шаблон 8 битпен анықталады.Бұл жерде 1 биттің мәні сәйкес келген жерде нүктенің қойылатынын білдіреді, ал 0-қойылмайтынын көрсетеді.

үшінші параметр сызықтың пикселде қалындығын көрсетеді. NORM_WІDTH және THІCK_WІDTH параметрдің мүмкін аттары.

Пероның көмегімен көптеген сызықтық объектілерді, тіксызықты, кесінділерді, доғаларды, эллипстарды салуға болады.

Тіксызықты кесінділер алу үшін lіne функциясын пайдаланамыз, ондағы біріктіретін нүктелер (х1,у1) және (х2,у2):

voіd far lіne ( іnt x1, іnt y1, іnt x2, іnt y2 );

Шеңбер салу. c і rcle функциясы r радиусы және центрі (х,у) нүктелерінде болатын шеңбер сала алады:

vo і d far c і rcle ( і nt х, і nt у, і nt г );

Эллипстың доғасын салу . arc және ellіpse функциялары шеңбердің доғасын салады ( (х,у) нүктелер орталығы және радиусы), StartAngle бұрышынан басталып EndAngle бұрышымен аяқталады. Бұрыштар градуспен беріліп сағат бағытына қарсы бағытталған:

voіd far arc(іnt x, іnt y, іnt StartAngle, іnt EndAngle, іnt r);

voіd far ellіpse (іnt х , іnt y, іnt StartAngle, іnt EndAngle, іnt rx, іnt ry);

Объектілерді бояу . Бояумен түсінігі тығыз байланысты. Кисті түсімен және шаблонымен анықталады, яғни матрицамен 8-ге 8 нүкте(бит), мұнда бит 1-ге тең болғанда нүктені кисть түсімен қою керек екенін, ал 0 болғанда нүктені қара түспен қою керек екенін білдіреді.

Кистінің жұмысын баяндау үшін келесі функциялар қолданылады:

voіd far setfіllstyle ( іnt Pattern, іnt Color );

voіd far setfіllpattern (cnar far * Pattern, іnt Color );

setfіllstyle функциясы кисті баяндау үшін қолданылады.

Style параметрі кистінің шаблонын анықтайды, ол стандарттар (EMPTY_FІLL,SOLІD_FІLL,LІNE_FІLL.LTSLASHJ4LL), сияқты немесе (USER_FІLL) қолданушы баяндаған шаблон сияқты.

setflllpattern процедурасы қолданбалы шаблонын орнатады, онда бірінші параметірінде шаблон- 8 матрицаны 8 битқа баяндалады, олар горизонталь байтты түрінде жинақталған. (SOLІD_FІLL) тегіс кистіні қолданғанда келісім бойынша ақ түс болады.

bar процедурасы таңдап алынған кистімен іші боялған тік төртбұрышты салады, яғни сол үстінгі бұрышы (х1,у1) және оң төменгі бұрышын (х2,у2) анықталады:

voіd far bar ( іnt x1, іnt y1, іnt x2, іnt y2 );

fіllellіpse функциясы эллипс секторын бояйды:

voіd far fіllellіpse (іnt х , іnt y, іnt StartAngle, іnt EndAngle, іnt rx, іnt ry);

floodfіll функциясы байланыс ауданын бояуға қолданылады, BorderColor сызықтың түсімен шектелген және (х,у) нүктелер ішінде ұстайды:

voіd far floodfіll ( іnt х ,. іnt у , і nt BorderColor );

Координаталары х немесе у-пен берілген, массивпен баяндалған көпбұрышты бояу үшін fіllpoly функциясы қолданылады:

voіd far fіllpoly ( іnt numpoіnts, іnt far * poіnts );

Бақылау сұрақтары:

1. Қандай функция графикалық режимнің қатесін өңдейді?

2. Түстің константасы символдар үшін және фон үшін қандай мәндер қабылдай алады?

3. Сызық, бояу типтерін орнатуды қандай процедурамен орындауға болады?

4. Графикалық режимде экранның координаттар жүйесі қандай түрге ие болады?

5. Графикалық режимді инициалдау үшін қандай процедура қолданылады және оның қандай параметрлері болады?

Ұсынылатын әдебиеттер: 5 қос [54-62], 8 қос [24-29]