Сөз тіркестерін өңдеу


Жұмыс түрі: Материал
Тегін: Антиплагиат
Көлемі: 8 бет
Таңдаулыға:
8 ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС
СӨЗ ТІРКЕСТЕРІН ӨҢДЕУ
PASCAL тілінде сөз тіркестерін өңдеу кезінде қолданылатын арнайы тип - string бар. Ал Си тілінде мұндай арнайы тип жоқ. Сөз тіркестері char типті бір өлшемді жиым ретінде қарастырылады, яғни сөз тіркесі - нөлдік байтпен аяқталатын char типті бір өлшемді жиым. Нөлдік байт - барлық биттері де нөлге тең байт, ол ´ \0 ´ символдық константасымен анықталады (тіркес соңы белгісі немесе нөл-терминатор) . Сондықтан егер тіркесте k символ болса, онда жиымды сипаттауда k+1 элемент көрсетілуі тиіс.
Мысалы, char a[7] деген сипаттау тіркестің 6 символдан тұратынын, ал соңғы байт нөлдік екенін білдіреді. Си тіліндегі тіркестік (жолдық) константа - қос тырнақшаға алынған символдар жиыны. Мысалы, “Берілген тапсырма” тіркесі, оның соңына нөлдік байтты компилятор автоматты түрде өзі жазады.
Айнымалы мәні болатын сөз тіркесін сипаттау кезінде бірден көрсетуге болады, мысалы,
char S1[10] =”123456789”, S2[] =”Болат”;
Соңғы сөз ұзындығы тіркестің символдары санымен анықталады.
Символдар тіркесін пернелерден енгізу үшін екі стандартты функция - scanf() немесе gets() қолданылады, ал олардың прототиптері stdio. h тақырыптық файлында болады.
Символдық таңбаларды енгізу/шығару
Символдарды біртіндеп енгізу/шығару үшін printf() және scanf() функцияларының %c форматы қолданылады.
getch() - параметрсіз функция, басылған перненің кодын (int) береді, экранға ешқандай символ шығармайды.
getchar() - параметрсіз функция. Пернеден символдарды бір-бірлеп енгізеді. Сөз тіркесі < Enter> пернесі басылғанша енгізіле береді, оған дейін оны өзгертуге де болады.
putch(c) - бір символды (c - cимволдық айнымалы немесе константа), яғни бір таңбаны ғана экранға шығарады.
putchar(c) - бұл да тек бір таңбаны экранға шығарады.
Бұлар conio. h тақырып файлы бойынша жұмыс істейді.
Мысалы, латын алфавиті әріптерін экранға шығару программасы төмендегідей болады:
#include <conio. h>
#include <stdio. h>
void main()
{
char z;
clrscr() ;
for(z='A'; z<='Z'; z++)
putchar(z) ;
getch() ;
}
Нәтижесі:
Ал енді осы символдарды ASCII-кодтарымен бірге шығаратын мына программаны көрейік.
/* латын алфавиті*/
#include <conio. h>
#include <stdio. h>
void main()
{
char z;
clrscr() ;
for(z='A'; z<='Z'; z++)
{
if (z=='K' z=='U') printf("\n") ;
printf(" %c-%d ", z, z) ;
}
getch() ;
}
Программа жұмысы нәтижесі:
A-65 B-66 C-67 D-68 E-69 F-70 G-71 H-72 I-73 J-74
K-75 L-76 M-77 N-78 O-79 P-80 Q-81 R-82 S-83 T-84
U-85 V-86 W-87 X-88 Y-89 Z-90
Келесі программа 0 мен 9 арасындағы цифрлық символдарды және олардың ASCII кодтарын басып шығарады:
#include <conio. h>
#include <stdio. h>
void main()
{
char z;
clrscr() ;
for(z='0'; z<='9'; z++)
{
if (z=='0' z=='5') printf("\n") ;
printf(“ %c-%d “, z, z) ж
}
getch() ;
}
Жұмыс нәтижесі:
0 - 48 1 - 49 2 - 50 3 - 51 4 - 52
5 - 53 6 - 54 7 - 55 8 - 56 9 - 57
Символдық тіркестер
Символдық жолдарды немесе тіркестерді бірнеше тәсілмен өңдеуге болады, олардың негізгілері:
- Тіркестік константаларды қолдану;
- Char типті жиымды қолдану;
- Char типіне сілтейтін нұсқауыштарды пайдалану;
- Символдық тіркестерден тұратын жиымдарды қолдану.
Сөз тіркестері немесе тіркестік (жолдық) константа қостырнақшаға алынып жазылады. Тырнақшаға алынатын символдар тізбегінің ең соңына автоматты түрде ‘\0’ символы жазылады. Компилятор жолдық символдарды компьютер жадына жазғанда, олардың көлемін анықтау үшін сол символдар санын есептейді. Символдық константа осы сөз тіркесі жазылған жады аймағына сілтейтін нұсқауыш болып табылады. Символдық тіркестер жиымын (массивін) беру кезінде компилятор компьютер жадының қажетті көлемін анықтау үшін жиымды сипаттағанда, оны тіркестік константа арқылы инициалдауға болады. Мысалы:
char c[] = “Атырау, Алтай - жеріміз”;
Әдеттегі жиым қолданылатын жағдайлар сияқты бұл жиым аты с осы жиымның 1-элементіне сілтейтін нұсқауыш болып табылады.
c ==&c[0] ;
*c ==’0’;
*(c+1) == c[1] == ‘n’;
Сөз тіркестерін анықтау үшін нұсқауыштарды мынадай түрде сипаттауға болады:
char *c1 = “\n студенттер саны”;
осы сипаттауға эквивалентті болып келесі сипаттау есептеледі:
static char c1[] =”\n студенттер саны”;
Осы қарастырылған екі сипаттау да с1 тіркесінің нұсқауыш екенін білдіреді. Компьютер жадының қажетті көлемін айқын көрсетуге де болады. Мысалы, сыртқы сипаттауда келесі жолдың мынадай түрде жазылғаны көрсетілген.
char c[25] =”Білім - өмір шырағы”;
Элементтердің саны жолдың ұзындығынан бір символ артық болуы керек, яғни оның ең соңында ‘\0’ символы болуы тиіс.
Статикалық немесе сыртқы жиымдағы бұрынғы қарастырылған әдеттегі жиымдар оларды қолдану кезінде автоматты түрде 0-мен инициалданған болатын. Ал сөз тіркестерін пайдалану кезінде де статистикалық немесе сыртқы жиымдар солар тәрізді 0 символымен инициалданады.
Келесі мысалды қарастыралық:
#include <stdio. h>
#include <string. h>
main ()
{
char msg[30] ;
strcpy(msg, "Сәлем, Азат!") ;
puts(msg) ;
}
Мұндағы msg сөзінен соң тұрған [30] саны компиляторға 29 символ үшін, яғни char типіндегі 29 айнымалыдан тұратын жиым үшін жады бөлуді қамтамасыз етеді (30-орын нөлдік символмен - \0 толтырылады) . msg айнымалысының символдық мәні жоқ; ол тек char типіндегі 29 айнымалының алғашқысының адресін (компьютер жадындағы белгілі бір орын адресі) сақтайды.
Компилятор strcpy(msg, "Сәлем, Азат!") операторын кездестіргенде, екі түрлі әрекет орындайды:
- "Сәлем, Азат!" тіркесі соңына (\0) символын (ASCII коды 0) қосады.
- strcpy функциясын орындап, msg айнымалысы нұсқап тұрған жады аймағына сол сөз тіркесі символдарын біртіндеп көшіреді. Ол тіркесті көшіруді сөз соңындағы нөлдік символдан кейін барып аяқтайды.
puts(msg) функциясын орындағанда, оған msg мәні, яғни тіркес құрамындағы бірінші символ адресі беріледі. Одан кейін puts сол символдың нөлдік символ емес екенін анықтап, ары қарай адреске бірді қосып, келесі симводы оқиды, т. с. с. тіркес соңына дейін жетеді. Нөлдік символға жеткен соң, puts жұмысты аяқтайды;
Осындай тәсіл тіркес ұзындығына шек қоймай, нөлдік символға дейінгі символдарды біртіндеп оқуды жүзеге асырады.
Символға нұсқауышты пайдалану
Екінші тәсіл - символдарға нұсқауыш жасау. Программаны келесі түрге келтірейік:
#include <stdio. h>
#include <string. h>
main()
{
char *msg;
msg = "Сәлем, Азат!";
puts(msg) ;
}
msg алдындағы жұлдызша (*) компиляторға оның символға нұсқауыш екенін білдіреді, яғни msg белгілі бір символ адресін сақтай алатын айнымалы. Бірақ мұнда компилятор символдар үшін ешқандай орын бөлмейді және msg да ешқандай мәнге ие болмайды.
Компилятор strcpy(msg, "Сәлем, Азат!") операторын кездестіргенде, ол тағы екі түрлі әрекет орындайды:
- объектілік код файлы ішіндегі бір орынға соңына (\0) символы қосылған "Сәлем, Азат!" тіркесін (ASCII коды 0) жазып қояды.
- сол тіркестің алғашқы символы адресін msg айнымалысына меншіктейді.
strcpy функциясын орындалып, puts(msg) командасы бұрынғыша нөлдік символға дейінгі мәліметті көшіреді.
Енді символдық тіркестерден тұратын жиымдарды қарастыралық. Бұл жиымдардың әрбір жолы символдық жиым болып табылады. Мысалы, статикалық жиымның сипатталуы келесідей түрде жазылуы мүмкін:
static char
*m[4] ={”регистр”, ”жады”, ”курсор”, ”элемент”};
бұл жиым символдық тіркестерге сілтейтін 4 нұсқауыш болып табылады. Сонымен, символдық тіркестер жиымдар болып табылатын болса, онда осы жиымдарға сілтейтін 4 нұсқауыш қарастырылады. 1-жолға сілтейтін 1-нұсқауыш болып m[0] есептеледі, m[1] - 2-жолға сілтейтін 2-нұсқауыш болып табылады. Сонымен, әрбір нұсқауыш соған сәйкес жолдың немесе қатардың ең бірінші символына сілтейді.
*m[0] ==’р’; *m[1] ==’ж’; *m[2] ==’к’; *m[3] ==’э’;
Тіркестерден құрылған жиымдарды сипаттағанда, символдық тіркестер көлемін көрсетуге де болады және бұл сипаттауда тіркестердің ұзындығын келесідей түрде көрсетуге болады:
static char m[10] ;
Символдар тіркестерін енгізу/шығару үшін printf() және scanf() функцияларының %s форматы қолданылады.
Тағы мысалдар келтірейік.
/* символдық тіркесті шығару */
#include <conio. h>
#include <stdio. h>
void main()
{char b[] =”Сезам, ашыл!”;
clrscr() ;
printf("%s", b) ;
getch() ;
}
Мұндағы b жиымының ұзындығы 13 символ, яғни сөздер ұзындығынан 1-ге артық.
Енді бір сөйлем енгізіп, соның соңғы сөзін экранға шығарайық.
#include <conio. h>
#include <stdio. h>
void main()
{
char s, ss; // s - енгізілетін символ
// ss - алдыңғы символ
char a[80] ; // сөз массиві
int i, k; // k - сөз ені
clrscr() ;
printf("Соңында нүкте бар сөйлем енгізіңдер:\n”) ;
for(i='0', s=' ', k=0; i<=79; i++)
{
ss=s; s=getchar() ;
if (s==' ') continue;
if (s=='. ') break;
if (ss==' ') k=0;
a[k] =s; k++;
}
//нүктеден кейін шығу не тіркес біткесін шығу
if (i==80 k==0)
printf("сөйлем дұрыс емес \n”) ;
else
{
a[k] =‘\0’; // жол соңы
printf("ең соңғы сөз: %s", a) ;
}
getch() ;
}
мұнда символдар біртіндеп getchar() функциясы арқылы енгізіледі. Егер бос орын енгізілсе continue операторы келесі қадамға көшіреді. Нүкте енгізілсе цикл тоқталады, бірақ алыңғы k символда соңғы сөз сақталады. Егер символ нүкте де, бос орын да емес болса, онда алдыңғы символ қарастырылады. Егер ол бос орын болса, онда келесі сөз енгізіліп, k нөлге тең болады. Циклден шығу нүкте арқылы немесе 80 символ енгізілген соң орындалады.
Келесі мысалда сөз тіркесінің ұзындығы екі тәсілмен анықталады.
#include <conio. h>
#include <stdio. h>
#include <string. h>
void main()
{
char st[80] ;
int i;
clrscr() ;
puts("Сөз тіркесін енгізіп, Enter басыңыз:") ;
gets(st) ;
i=0;
while (st[i++] )
;
printf("Енгізілген тіркес ұзындығы: %i\n", i-1) ;
puts("Сөз тіркесін енгізіп, Enter басыңыз:") ;
gets(st) ;
printf("Енгізілген тіркес ұзындығы: %i\n",
strlen(st) ) ;
getch() ;
}
Енді бір сөз тіркесін енгізіп, оның ішінде “т” символының неше рет кездесетінін табайық.
#include <conio. h>
#include <stdio. h>
#include <string. h>
void main()
{
char str[80] ;
int s=0;
clrscr() ;
puts("Сөз тіркесін (сөйлем) енгізіңіз:") ;
gets(str) ;
for (int i=0; i<strlen(str) ; i++)
if (str[i] == 'т') s+=1;
printf("'т' символы %i рет кездеседі\n", s) ;
getch() ;
}
Ендігі мысалда енгізілген сөздің палиндром (алды-артынан оқығанда, мәні бірдей) екенін анықтайық.
#include <conio. h>
#include <stdio. h>
#include <string. h>
void main()
{
char str[80] ;
int k, s=0;
clrscr() ;
puts("Бір сөз (палиндром) енгізіңіз:") ;
gets(str) ;
k=strlen(str) ;
for (int i=0; i<k/2; i++)
if (str[i] == str[k-i-1] ) s+=1;
if (s==k/2)
puts("Сөз - палиндром. ") ;
else puts("Сөз - палиндром емес. ") ;
getch() ;
}
Сөз тіркестерін енгізу функциялары scanf(), gets(str) .
Scanf() функциясы тіркестік айнымалылар мәнін %s форматымен енгізеді, бірақ ол тіркесті тек бірінші босорын таңбасына дейін ғана енгізе алады.
Ал gets(str) функциясы арасында босорыны бар тіркестерді енгізеді, енгізу ENTER пернесімен аяқталады.
Екі функция да тіркес соңына нөлдік байт қосып жазады. Оның үстіне тіркес -символдық жиым болып, ал жиым аты - оның компьютер жадындағы алғашқы адресіне сілтеме болғандықтан, тіркестік айнымалы атының алдына «&» символы жазылмайды.
Сөз тіркестерін шығару функциялары сprintf(), puts(), cputs()
printf() - экранға формат арқылы сөз тіркесін шығарады;
сprintf() - экранға printf() сияқты формат арқылы сөз тіркесін шығарады, тек олардың түстерін textcolor() және textbackground() функциялары арқылы өзгертуге мүмкіндік береді;
puts(str) - экранға сөз тіркесін шығарып, курсорды бірден келесі жолдың басына алып барады, мұндағы str - тіркестік константа немесе тіркестік айнымалы. Бұлар stdio. h тақырып файлы бойынша жұмыс істейді.
Екі функция да символдық жиымды нөлдік байтқа дейін шығарады. printf() функциясы символ тіркесі шығарылған соң, курсорды келесі жолға көшірмейді, ол үшін арнайы формат (\n) жазылуы тиіс. Ал puts( ) функциясы символдар шығарылған соң, автоматты түрде курсорды келесі жол басына көшіреді.
//puts функциясын пайдалану мысалы
#include <stdio. h>
#include <conio. h>
main()
{ char str1[] = “abc”;
char str2[] = “def\nghi\n”;
char str3[] = “jkl”;
puts(str1) ;
puts(str2) ;
puts(str3) ;
}
Нәтижесі:
abc
def
ghi
jkl
cputs(str) - экранға сөз тіркестерін шығарып, олардың түстерін textcolor() және textbackground() функциялары арқылы өзгертуге мүмкіндік береді, conio. h тақырып файлы бойынша жұмыс істейді.
Сөз тіркестерімен орындалатын басқа операциялар да стандартты функциялар арқылы атқарылады. Ол функциялар жұмыс істеуі үшін string. h тақырыптық файлы қажет.
Жалпы сөз тіркестеріне қолдану үшін stdlib. h немесе string. h тақырыптық файлдары қолданылады.
Сөз тіркестерімен жұмыс істейтін функциялар
1) strlen(str) функциясы str сөз тіркесіндегі символдар санын (соңғы нөлді есепке алмайды), яғни жолдың ұзындығын анықтайды, оның типі int, тақырыптық файлы <string. h>.
Мысалы. Бірнеше сөз тіркестерінің ұзындығын анықтайтын программа құру керек.
// strlen(str) функциясын пайдалану
#include <conio. h>
#include <stdio. h>
#include <string. h>
main ()
{
static char t[] =”Студенттер жайлы хабарлама. ”;
clrscr() ;
printf(“%d\n”, strlen(t) ) ;
printf(“%d\n”, strlen(”Студенттер жайлы
хабарлама. ”) ) ;
printf(”%d\n”, strlen(”аль-Фараби ат. КазҰУ”) ) ;
printf(“%d\n”, strlen(“”) ) ;
getch() ;
}
Мұның нәтижесі:
27
27
19
0
2) strcat(stroka1, stroka2) функциясы қатарларды біріктіру үшін қолданылады. Ол stroka1 және stroka2 тіркестерін біріктіріп, нәтижені stroka1 айнымалысына меншіктейді, stroka2 тіркесінің мәні өзгермейді
Мысалы:
// strcat(str1, str2) функциясын пайдалану
#include <conio. h>
#include <stdio. h>
#include <string. h>
main ()
{
char str1[50] ="Си тілін оқимыз, ";
char str2[] ="жақында емтихан тапсырамыз. ";
clrscr() ;
printf("%s\n", strcat(str1, str2) ) ;
puts(str1) ; // қатарды экранға шығару
puts(strcat("Егер жақсы оқысақ, ", str2) ) ;
getch() ;
}
Мұның нәтижесі:
Си тілін оқимыз, жақында емтихан тапсырамыз.
Си тілін оқимыз, жақында емтихан тапсырамыз.
... жалғасы- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.

Ақпарат
Қосымша
Email: info@stud.kz