стандартты кітапханасында лектік функциялар орналасқан.
Қосымшаны жүктегенде автоматты түрде 5 стандартты лек ашылады. Лектер:
- енгізу (stdin);
- қателер (stderr);
- шығару (stdout);
- баспаға шығару (stdprn);
- сыртқы құрылғылар (stdoux).
Автоматты түрде қате, енгізу, шығару стандартты легі консольмен
байланысады. Лекті көрсететін көрсеткіш аргументі болатын функцияларда
44
жоғарыдағы көрсеткіштердің бірін таңдап көрсету керек. Stdin, stderr, stdout, stdprn,
stdoux- тұрақтылар.
getс ( ), putc ( ) - функциялары
getc ( ) функциясы файлдық лектен 1 символды оқиды.
Жалпы форматы: int getc ( );
Бұл функция буферден оқылған символдың кодын қайтарады.
getc ( ) функциясы лектен жаңа жол символы кездескенге дейін оқиды.
Мысалы, клавиатурадан Enter басу арқылы ғана жекелеген символдар
енгізілсін.
putc ( ) - символды лекке жазады.
Мысалы, int ix;
Ix=getc (stdin);
putc (ix, stddut);
putc() функциясы қате жіберілгенде EOF қайтарады. putc, getc функциялары
функция және макрос түрінде де анықталған. Макрос приоритеті жоғары. Оны
өзгерту үшін, яғни макросты болдырмау үшін:
# undef getc препроцессор директивасысы берілу керек.
Бүтін сандарды енгізу
Бүтін сандардың легін (буферлік) енгізіп-шығару үшін: getw ( ), putw ( )
функциялары getc ( ), putc ( ) функция секілді, тек бүтін сандарды оқиды және тек
файлдардан (екілік режимде ашылған) оқиды.
3.2. С++ тіліне тәні енгізу-шығару құралдары
С++ тілінде С тіліндегі стандарт функциялар енгізу-шығаруға қолданылады.
Сонымен қатар С++ тілінде тақырыптық файлында анықталған
енгізу-шығару құралдары бар. Лектік енгізу-шығару осы тақырыптық файлдағы
кластар арқылы орындалады.
Мына операторлар: >> - енгізу және <<- шығару операторы - кез-келген
типті мәліметтермен жұмыс жасауда қолданылады.
С++-те де үш лектік класс қарастырылған:
istream - енгізу құралдары;
ostueam - шығару құралдары;
iostream - енгізу-шығару құралдары.
Осы үш класта да <<, >> операторлары қолдынылады. С тіліндегі stdin,
stdout, stderr стандартты лектеріне сәйкес С++тілінде cin, cout, cerr, clog - объект-
лектері қарастырылған.
Cin istream класының объектісі istream енгізу легімен, ал osream класының
объектісі cout шығару легімен байланысты.
Cerr - ostream класының объектісі - қателер легі, ал clog ostream класының
объектісі - буферленген қателер легіне сәйкес.
Мысалы:
Шығару: С-де: printf (“ бүтін сан = %d, нақты = %f, ia, fb);
Си++-те: cout << “бүтін сан” <
Енгізу: Си-де scanf (“%d %f”, &ia, &fb);
Си++-те: cin >>ia >> fb;
45
Бұл жолдарда С тілінде айнымалылар арнайы форматтар мен типтері анық көрсетілу
арқылы орындалса, С++ тілінде << - операторы мәлімет типін және форматын
таңдайды, ал >> - операторы қабылданатын мәннің адресін, форматын анықтайды.
● << операторында endl манипуляторы тіркелуі мүмкін.
Мысалы, cout << “бүтін сан = ” <<іа<
Манипулятор дегеніміз -лекке қатысты нақты әрекет орындайтын арнайы
функция.
endl манипуляторы – жаңа жол символын қоюмен қатар лек буферін
тазартады.
Ал, flush манипуляторы - ( \ n) жаңа жол литерін шығармайды.
>>-операторы жолды оқығанда пробель, ТАВ белгісі, ‘\n’ литері кездескен
бойдан оқу әрекетін аяқтайды, ал осы таңбалар арқылы сипатталып кездескен
жолды толық оқу үшін cin объектісінің get( ) функциясын қолданған дұрыс.
Мысал: #include
#define n 25
void main (void)
{
char span [n];
cout << “пән аты - ?”;
cin >>span;
cout << “\n сабақ, “ <
Орындағанда: Пән аты - ? Математикалық анализ – түрінде енгізілгенмен,
нәтиже экранға толық шығарылмай былайша бейнеленеді:
Сабақ, Математикалық
Сондықтан жолды толық алу үшін мына әрекеттер ретін орындау қажет:
cin.get(span, n);
cout<< “\n Сабақ, “ <
cin объектісінің get( ) функциясында аргументпен қатар, екі параметрден тәуелді
анықталуы мүмкін, олар ‘\n’ литері және жолды құрайтын символдардың санына
қатысты параметрлер.
cin.get( ) функциясы шектеуші – символ кездескенге дейін немесе ‘\n’
литеріне дейін оқиды.
Мысалы:
cin.get (span, n, ‘*’); мұндағы ‘*’- шектеуші символ болып табылады.
3.3. С тілінде форматтап енгізу және шығару
Экранға мәліметтерді форматтап шығару. printf() функциясын шақыру
операторы келесі құрылымға ие:
printf(формат түріндегі жол, аргументтер_тізімі);
46
Форматты жол екі тырнақшамен шектелген (яғни, тексттік константа болып
табылады) және өзінің құрамына кез-келген текстті, басқару символдарын және
формат спецификаторларын қамти алады. Аргументтер тізімі келтірілмеуі мүмкін
немесе мәндері экранға шығарылатын өрнектерден тұра алады. Мысалы,
printf("\na="); операторы("a=")текстін және (\n) басқару символын қамтиды. Текст
жазылған түрінде экранға шығарылады. Басқарушы символдар шығарылатын
белгілердің экранда орналасуына әсер етеді. Басқарушы символдардың белгісі
ретінде \ беріледі. Төменде олардың тізімі келтірілген:
\n – жаңа жолға көшіру;
\t – горизонталды табуляция;
\r – курсорды жаңа жолдың басына қайтару;
\a – қоңырау дыбысы;
\b – бір сивол кері қайтару (бір позиция);
\f – жаңа параққа көшу;
\v - вертикалды табуляция.
printf("\nүшбұрыш ауданы=%f",s); операторын қарастырайық. Аргументтер тізімі
бір s айнымалысынан тұрады. Оның мәні экранға шығарылады. %f символдар жұбы
шығарылатын s айнымалысының мән форматының спецификациясы болып
табылады. % - формат белгісі, ал f әрпі шығарылатын санның нақты типті екенін
көрсетеді.
Формат спецификаторы шығарылатын өлшембірліктің сырт көрінісінің түрін
анықтайды. Кейбір формат спецификаторларын келтірейік:
%c – символ;
%s – жол;
%d – бүтін ондық сан (типі int);
%u – белгісі жоқ бүтін ондық сан (типі unsigned);
%f – бекітілген нүкте түріндегі нақты сандар;
%e – қалқымалы нүкте түріндегі нақты сандар (мантиссамен, ретпен берілген)
Мысалы, келесі операторлардың орындалуынан кейін
float m, p;
int k;
m=84.3; k=-12; p=32.15;
printf("\nm=%f\tk=%d\tp=%e", m, k, p);
экранға мына жол шығады:
m=84.299999
k=-12
p=3.21500e+01
Формат спецификаторына сандық параметрлер қосыла алады: жолдың ені мен
дәлдігі. Ені - өлшемге экранда берілетін позициялар саны, ал дәлдік – бөлшек
бөлігіне берілетін позициялар саны (нүктеден кейін). Параметрлер % пен формат
символының арасында жазылады және бір бірінен нүкте арқылы ажыратылады.
Мысалы,
printf("\nm=%5,2 ", m); нәтижесінде экранға
m=84.30 шығады.
Көрсетілген жолдың еніне шығарылатын мән симай қалған жағдайда да,
өлшем толық шығарылады.
47
Формат спецификаторларына келесі түрдегі модификаторлар да қосылуы
мүмкін:
%ld – long int шығару;
%hu – short unsigned шығару;
%lf – long double шығару.
Клавиатурадан форматты түрде енгізу. scanf()функциясын шақыру
операторы келесі құрылымға ие:
scanf(формат түріндегі жол, аргументтер_тізімі);
Бұл функция клавиатурадан енгізілген символдардың оқылуын қамтамасыз
етеді. scanf()функциясында формат жолы мен аргументтер тізімі міндетті түрде
болуы қажет. Келесі операторды қарастырайық:
scanf("%f",&a);
Мұндағы "%f" - формат жолы, &a – енізілетін мәндерге сәйкес аргументтер
тізімі. Бұл оператор a айнымалысына сандық мәннің енгізілуін қамтамасыз етеді.
Клавиатурадан енгізілетін және scanf()функциясыменен қабылданатын
символдық тізбекті кіріс ағымы деп атайды. Аргументтер тізімі – енгізілетін
айнымалылар және әр айнымалының алдына & белгісі қойылады.
Формат жолы тырнақшаға алынады және спецификациялар тізімінен тұрады.
Әр спецификация % белгісінен басталады, одан кейін
*жолдың_ені
модификатор
спецификатор
тұруы мүмкін. Соның ішінде спецификатор міндетті элемент болып табылады. *
белгісі кіріс ағымында белгілі бір символдар санын жіберуге мүмкіндік береді.
3.4. С++-тегі форматтау функциялары мен флагтар
типті
файлдағы
лектік-объектілер
жұмысы
форматтау
флагтарымен басқарылады:
Флагтар self( ) функциясы көмегімен орнатылады, unself( ) функциясы
арқылы ажыратылады.
Мысалы: cout <Флагтар
skipws - енгізу барысында пробел литерлері алынып тасталады;
left - шығарылатын мәндер әрічтің сол жақ шетімен тегістеледі, толықтырғыш
символдармен толықтырылады;
right - шығарылатын мәндер өрістің оң жақ шетінен тегістеледі;
internal - бұл символдар таңба символдар мен сан және санау жүйесі префиксі
арасында қойылады;
dec - бүтін сан 10-дық санау жүйесінде шығады;
oct - бүтін сан 8-дік санау жүйесінде шығады;
nex - бүтін сан 16-лық санау жүйесінде шығады;
show base - бүтін санды шығарғанда санау жүйесінің префиксі шығарылады;
show point - бөлшек санды шығарғанда ондық нүктесі қойылады және соңындағы
0-дер тіркеледі;
uppercase - 16-лық санау жүйесіндегі А, ..., F және Е експоненциалдық символы
үлкен әріппен шығады;
48
showpas - оң сандары шығарғанда + таңбасы қойылады;
scientific - бөлшек сан експоненциалдық түрде жпзылады;
presicion( ) – функциясы scientific немесе fixed флагы орнатылып тұрғанда, үтірлі
санның бейнелену дәлдігін анықтайды;
set precision( )- де сол секілді. Автоматты түрде – 6-ға тең.
Бұл
функция
аргументсіз шақырылғанда ағымды дәлдік мәнін анықтайды.
width( ) - функциясы шығару өрісінің енінің ең кіші мәнін анықтайды.
setw( ) - функциясы да сол секілді.
Аргументсіз
функция
ағымды
мәнді
қайтарады.
setfill( ), setprecision( ), setw( ) манипуляторлары ios класының параметрленген
мүшелері болып табылады, олармен жұмыс жасау үшін
тақырыптық файлы қосылу керек.
Енгізу-шығару бағытын адрестеу
Қазіргі операциялық жүйе клавиатура мен экранды файлдық құрылғы ретінде
қарастырады.
Клавиатура мәліметтерді оқып немесе экранға шығару программасының
бағытын адрестеу үшін жүйеге клавиатураның орнына нақты файлды, мысалы DAN.
DAT қолдануға нұсқау беріледі.
Мысалы, орындалатын файл аты – PRIMER.
Нұсқау: 1) primer < dan.dat - файлдан оқу
2) primer > res.dat - файлға шығару.
Бірге: 3) primer < dan.dat > res.dat.
Стандартты потоктар мен нақты файл арасында немесе периферийлік
құрылғылар арасында байланыс ұйымдастырудың 2 тәсілі бар:
- бағытын адрестеу;
- каналдар құру.
Канал дегеніміз - бір программадағы стандартты енгізу мен екінші
программадағы стандартты шығару арасындағы тікелей байланыс.
Мысал, procces1 | process2
Мұндағы process 1,2 екі программа.
тік сызық ( | ) - каналмен байланыстыру таңбасы.
Байланастыру жұмысы, яғни екі программаның енгізу-шығару жүйесінің
әрекетін операциялық жүйе басқарады.
Бақылау сұрақтары:
1. Лек дегеніміз не?
2. Енгізу-шығару мүмкіндіктерінің өзге тілдерден ерекшелігі қандай?
3. Енгізу-шығару барысындағы басқару таңбаларының қойылу реттері
қандай?
4. Эскейп-тізбек деген не?
Әдебиеттер:[1-2], [4-7], [9].
49
Дәріс №4. ОПЕРАТОРЛАР
Дәріс мақсаты: С/с++ тілдерінің негізгі операторларымен таныстыру. Олардың
жазылу форматы мен негізгі машиналық бағытталған деңгейдегі қызметін түсіндіру.
Кілттік сөздер: оператор, бинарлық оператор, биттік оператор, амалдар
приоритеті, инкрементті және декрементті оператор, типті түрлендіру, унарлық
оператор, оңға және солға жылжу операторлары.
Жоспары:
4.1. Арифметикалық операторлар.
4.2. Инкрементті және декрементті операторлар.
4.3. Қатынас және логикалық операторлар.
4.4. Биттік операторлар.
4.5. Меншіктеу операторлары және шартты өрнек.
4.6. Амалдар приоритеттерінің кестесі.
4.7. Типтерді түрлендіру.
4.1. Арифметикалық операторлар
Бинарлық арифметикалық операторлар «+-қосу», «- -алу», «* -көбейту», «/ -
бөлу», «%-проценттік бөлу» операторлары болып табылады.
Операндтарға атауына сәйкес амалдарды қолдану қажеттігін білдіреді. Ал, x %
y өрнегі х-ті y-ке бөлгендегі қалдықты береді. Егер қалдықсыз бөлінсе нөлге тең.
Және бұл проценттік бөлу операторы float, double типті операндтарға
қолданылмайды.
+ және - операторларының приоритеттері бірдей, олар *, / және %
операторларының
приоритеттерінен
кіші.
Бір
приоритеттік
деңгейдегі
арифметикалық операторлар солдан оңға қарай орындалады.
4.2. Инкрементті және декрементті операторлар
С/ С++ тілдерінде айнымалылардың мәндерін өсіруге немесе кемітуге арналған
екі оператор бар:
инкрементті оператор ++ - өз операндасына 1-ді қосу операторы, ал
декрементті оператор - - өз операндасынан 1-ді шегереді.
Бұл операторлар тек айнымалыларға ғана қолданылады.
Мысалы, Мына өрнекке қолдану (х+у)++ - дұрыс емес .
++ және – операторларын айнымалының алдына (префиксті оператор)
немесе артына(постпрефиксті) қойып қолдануға болады.
Мысалы, ++n және n++ .
Егер өрнекте ++ немесе – операторлары жалғыз ғана оператор болса, оның
алдында немесе артында қойылуы бәрібір. Ал күрделі өрнекте кездессе, онда і++
болса, айнымалының мәнін алдымен қайтарып, сосын ғана оның мәнін арттырады.
Ал, ++і болса, онда і-дің мәнін арттырып, соны қайтарады.
Мысалы.
50
int a=10, b, c=1; {Айнымалылар осы түрде сипатталған делік}
c=++a; {Орындалу нәтижесінде: a=11, c=11}
a=b=c--; c=a++; { Орындалу нәтижесінде: a=11, c=10}
c = a --; { Орындалу нәтижесінде: a=9, с=10}.
4.3. Қатынас және логикалық операторлары
Қатынас операторлары:
«<» - кіші, «<=» - кіші немесе тең, «>» - үлкен, «>=»- үлкен немесе тең.
Бұл операторлардың приоритеттері бірдей. Бұдан бір деңгейге төмен:
== (тең) және != (тең емес).
Логикалық операторлар &&(және) немесе ||(немесе). Арасында && немесе ||
операторлары тұрған өрнектер солдан оңға қарай есептеледі және нәтиженің мәні
ақиқат немесе жалған болғанда бірден аяқталады.
! – унарлық оператор (не), нөлдік емес операндты 0-ге, ал 0-ді 1-ге
айналдырады, көбінесе мынадай констукцияда қолданылады:
if (!V) немесе if(V= =0). Бұл екі конструкция эквивалентті.
f (!V) – конструкциясы “егер V нөл емес болса” деп оқылады.
3.1. Биттік операторлар
Биттік операторлар жеке биттер, графикалық бейнелерді экранға шығару
барысында қолданылады.
Биттермен жұмыс жасауға арналған 6 оператор бар. Бұларды тек бүтін мәнді
операндтарға қолданады, яғни char, short, int, long типті операндтарға қолданады.
Мысалы, а және в мәндері үшін амалдардың қолданылу нәтижесі:
& - биттік «және» операторы:
a b a&b
0 0 0
0 1 0
1 0 0
1 1 1
| - биттік «немесе» операторы:
a b a|b
0 0 0
0 1 1
1 0 1
1 1 1
^ - биттік «шығарушы немесе» (исключающее ИЛИ) операторы:
a b a^b
0 0 1
0 1 1
1 0 1
1 1 0
51
<< - солға жылжу операторы.
>> - оңға жылжу операторы.
~
- унарлық жоққа шығару операторы.
<<-оператордың сол жағындағы бүтін мәнді айнымалының биттік бейнесін
оператордың сол жағында көрсетілген санға сәйкес битке жылжытады. Және
босатылған төменгі биттер саны азаяды.
Мысалы, int c=65; /*0100 0001*/
C<<=1; /*1000 0010*/
Printf(“%d”,c); /* 130-шығады*/.
Ал, >>оңға жылжыту сол секілді, тек санның биттік бейнесінде көрсетілген
битке оңға жылжыту жүзеге асырылады,және босатылған үлкен биттер 0-ге
толтырылады,ал кіші биттер мағынасын жоғалтады.
Int c=10; /* 0000 1010*/
c>>=1; /* 0000 0101*/
printf(“%d”,c); /*5-шығады*/
Үтір(,) операторы - бір жолда жазылған 2өрнекті тізбектеп орындауға
мүмкіндік береді.Нәтижесінде үтірдің оң жағында орналасқан өрнектің мәні
қабылданады.
4.5. Меншіктеу операторлары және шартты өрнек
Біріктірілген меншіктеу операторы және өрнек.
Біріктірілген бинарлық операторға <ор>= меншіктеу операторы сәйкес
келеді, мұндағы <ор> – мына операторлардың бірі: +, -, *, /, %, <<, >>, &, ^, | бола
алады.
Мына жазба < өрнек1> ор = < өрнек2> төмендегі өрнекпен эквивалентті:
<өрнек1> = <өрнек1> ор <өрнек2> .
Мысалы,
x+=5; {x=x+5 өрнегімен эквивалентті }
y*=2; {y=y*2 өрнегімен эквивалентті }
Шартты өрнек. «?=» тернарлық операторының көмегімен шартты өрнек құруға
болады. Жалпы жазылу форматы мынадай:
«өрнек1» ? «өрнек2» : «өрнек3»
Алдымен «өрнек1» есептелінеді, егер оның мәні нөлге тең емес болса, яғни
ақиқат мән қабылдаса, онда «өрнек2» есептелінеді де оның мәні шартты өрнек мәні
болып табылады, әйтпесе «өрнек3» орындалады да, соның мәні қабылданады.
Мысалы, z=(a>b)?a:b өрнегі z=max(a,b) математикалық өрнегін программалауда
қолданылады.
4.6.
Амалдар приоритеттерінің кестесі
Аталған операторлардың приоритеттері мен орындалу реттерін білу маңызды.
Олар төмендегі Кесте №1-де көрсетілді.
52
Кесте№1.-Есептеулер реті мен приоритеттері кестесі
Операторлар
Реті
( ) [ ]
! ~ ++ -- + - * & size of
* / %
+ -
<< >>
< <= > >=
= = !=
&
^
!
&&
::
?:
=+= -= *= /= %= &=^= := <<= >>=
,
солдан оңға
оңнан солға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
солдан оңға
оңнан солға
оңнан солға
солдан оңға
Кестеде операторлардың реті мен приоритетті берілген, бір жолдағы
операторлар приоритеті бірдей.
Приоритеті төмені бірінші орындалуы үшін жақша қолдану қажет.
Мысалы, if((x & mask)= =0)…
Компилятор түрлері әртүрлі, соған сәйкес операторлар орындалу реттері де
құбылуы мүмкін.
4.7. Типтерді түрлендіру
Егер оператор операндтары әр түрлі типке жатса, онда олар қайсібір жалпы
түрге келтіріледі. Келтірулер ержелерге сәйкес орындалады. Әдетте ешқандай
ақпаратты жоғалтпай мәндері аз диапазонды операндтарды мәндері үлкен
диапазоды операндтарға айналдыру автоматты түрде жузеге асырылады. Мысалы,
бүтінді жылжымалы нүктелі санға айналдыру.
Char типті мәндер - бүтіндер және оларды арифметикалық өрнектерде
қолдануға болады.
Бақылау сұрақтары:
1. Операторларының универсалды тілдегі операторлардан өзгешелігі бар
ма?
2. Типтерді айқын түрлендіру не үшін қажет?
3. Инкрементті және декрементті операторларының қолданылу, жазылу
реттеріне қарай қызметі?
4. Биттік операторлар қолданылуына мысал келтіріңіз.
Әдебиеттер:[1-10], [16-17].
53
Дәріс №5. БАСҚАРУ ИНСТРУКЦИЯЛАРЫ МЕН КОНСТРУКЦИЯЛАРЫ
Дәріс мақсаты: Тілдің басқару инструкциялары мен негізгі конструкцияларын
түсіндіру.
Кілттік сөздер:
Инструкция, блок, тармақталу, таңдау, цикл, іштестірілген
цикл, цикл денесі, итерация, конструкция.
Жоспары:
5.1. Инструкция және блоктар түсінігі.
5.2. IF-ELSE6 ELSE-IF конструкциясы
5.3. switch инструкциясы.
Достарыңызбен бөлісу: