x
t
[ 2 7 ]
i t
[ 2 8 ]
3 . 1 4 1 5 9 2 6 5
[ 2 9 ]
3 . 1
[ 3 0 ]
3 . 1 4 2
[ 3 1 ]
3 . 1 4 2
[ 3 2 ]
3 . 1 4 1 6 e + 0 0 0
P r e s s a n y k e y t o c o n t i n u e
1.6 сурет. C++ тіліндегі экранга шыккан нәтижелердің екінші беті
С тілінің енгізу жэне шыгару операторларын C++ тілінің енгізу жэне шыгару
операторларымен бірге пайдалануға болмайды.
C++ тілінде бүтін сандармен арифметикалық амалдар орындайтын тагы бір
мысал карастырайык.
C++ тілінде бүтін сандармен арифметикалық амалдар орындайтын тагы бір
мысал қарастырайық.
/+ іа және іЪ бүтін сандарын қосу, азайту, көбейту және бөлу
операциял
арын орындау */
#include
void
m a in ()
{
// мәліметтерді сипаттау
int. ia, i b, iplus,
iminus;
float del, mult;
// сандық мәндерді енгіэу
cout « "Input ia, ib: \n";
//”ia, ib енгіз:" сөэін шыгару
cin » ia » ib; // енгізілген мәндерді ia, ib-га мекшіктеу
// есептеулер
21
iplus = ia + ІЬ;
iminus = ia - ib;
mult * ia * ib;
del « ia / ib;
// нөтижөлөрді шығару
cout « "plus = n « iplus « "\n";
cout << "minus = " « iminus « и\пи;
cout « "del « " « del <<"\n";
cout « "mult = " « mult <<"\n";
)
Программа нәтижесі:
Input i a , i b :
4 5
Plus = 9
Minus = -1
Del = 0
Mult = 20
Пернетақтадан ia мен ib мәндерін енгізу кезінде арасында бос орын болуы
тиіс. Мысалда 4 цифрын енгізіп, бос орынды басып, 5 цифрын теріп, E n t e r
пернесін басу қажет.
Бөлу кезінде шығатын нәтижеге назар аударыңдар, ол дұрыс болмайды. Бұл
бүпн санды бүтін санга бөлгендегі бөлінді де бүтін сан болатындыгынан шыгып
отыр. Мүндайда дұрыс нэтиже алу үшін, іа, немесе ib айнымалыларының бірінің
типін float деп көрсету керек.
Келесі бөлімдерде осы С және C++ тілдерінің мүмкіндіктерінің екеуінен де
мысалдар келтіріледі, бірак бір программада бұл екеуін араластырмай, жеке-жеке
қарастыру ұсынылады.
Бақылау сүрақтары
1. Формат тіркесі дегеніміз не? p r i n t f функциясындағы формат тіркесінін
құрамы қандай? s c a n f функциясындагы формат тіркесінің құрамы қандай?
2. Түрлендіру спецификациясы дегеніміз не? Мәліметтердің эр түрлі типтері
үшін түрлендіру спецификацияларынан мысапдар келтіріңдер.
3. Келесі функция жұмысы нәтижесінде экранга не шығады?
p r i n tf ( " \ n C a i i a a p тізбегінін ариф м етикалы к ортасы: % 10.5f \
\п Сол тізбектің жұп элеіиенттерініц саны: %10.5d M,S/n,k);
4. Алдыңғы сұрақтың мәліметтерін экранға шығаруды « операциясы аркылы
калай жазамыз?
5. Егер х айнымалысы типі l o n g i n t , ал у айны мал ысы типі d o u b l e болса,
оларды s c a n f ()
функциясынын көмегімен экранга шыгару калай
орындапады? Осы әрекеттерді
» операциясы көмегімен капай жүзеге
асыруга болады?
22
1.5 C/C++ тілінің қарапайым операторлары
Ьас оператор. Тек *; 1 (нүктелі үтір) таңбасынан тұрады. Өрнек түріндегі
операторлардың соңын білдіреді. Күрделірек операторлар ішінде де ( i f , f o r ,
w h i l e , d o . . w h i l e , s w i t c h ) ешқандай операция орындалмайтын бос эрекетті
білдіреді.
Оператор-өрнек. С тілінің ережелерін сақтай отырып жазылған кез келген
күрделі өрнек (формула). Ол нүктелі үтір таңбасымен аякталады.
B r e a k , c o n t i n u e операторлары. Эсер ету аймагы шектелген шартсыз
кешу операторлары болып табылады. Баска операторлар ( f o r ,
w h i l e ,
d o . . w h i l e , s w i t c h ) ішінде пайдаланылып, олардьщ орындалу реттілігін
өзгерту үшін колданылады. B r e a k цикл немесе s w i t c h операторларының
жұмысын бірден токтатады, ал c o n t i n u e операторы циклдің келесі қадамына
көшіп кетуді жүзеге асырады.
Операторлар блогы мәліметтер хабарламалары мен соларды аныктаулардан
және де жүйелі жақшага алынған операторлар тізбегінен тұрады. Тіл ережесіне
сәйкес бір оператор түратын орында орналасып, бірнеше әрекеттер тізбегін
орындай алады.
R e t u r n операторы функция орындалуын аяқтайтын оператор ретінде
пайдаланылады. Екі түрлі форматта колданылады:
r e t u r n ;
немесе
r e t u r n ( ө р н е к ) ;
Алгашкы түрі осы сәтте жұмыс істеп тұрган функциядан оны шакырган
профаммага кері кайту ісін орындайды, бүл оператор болмауы да мүмкін,
ондайда функция операторларын орындау аякталған соң, кері қайту жүзеге
асырылады.
Ал екінші түрі тек кері кайту әрекетін гана орындамай, оны шакырған
функцияга ө р н е к мәнін де қайтарады. Бұл мән шақырган функциядағы белгілі
бір объектіге (өз типіне сәйкес) меншіктеледі.
G o to операторы. Эсер ету аймагы шектелген шартсыз кешу операторларына
( b r e a k , c o n t i n u e ) Караганда, g o t o операторы басқаруды белгісі бар кез
келген жолга бере алады. Оный жазылуы:
g o t o б е л г і ;
Белгі карапайым айнымалы атауы түрінде болады да, одан кейін кос нүкте
койылады. Бұл операторды колдану кажет болып саналмайды, кұрылымдык
профаммалау талаптарына сай оны пайдаланбауга тырысу керек, өйткені ол
профамма жұмысын түсінуді киындатады жэне жөнделуі киын қателердің
туындауына себепші болады.
23
Дегенмен, кейде оны қолдану қажеттілігі д е кездесіп қалады. К өбінесе ол қате
шыққан сәттерде функция соңына көшу ісін атқарады, мұндай қателер жиі кезесіп
жатса, оны қоддану ыңгайлы болып жатады. Мысалы:
v o i d f u n c l ( )
{
// функция операторлары
i f ( do__l ( ) = F A IL U R E ) g o t o e r r o r ;
i f (d o J 2 () =====FAILURE) g o t o e r r o r ;
i f ( d o J 3 () = F A IL U R E ) g o t o e r r o r ;
/ / ф унк ц и я о п е р а т о р л а р ы
r e t u r n SUCCESS;
Щ
e r r o r :
/ / ф ункция о п е р а т о р л а р ы
r e t u r n FAILURE
G o t o операторы қабаттасқан цикл операторлардың ішкі бөлігінен бірден ең
сыртына шыгу үшін д е қолданылады ( b r e a k операторы тек бір цикл сыртына
шығарады). Мысалы:
Я
w h i l e (1 -ш а р т )
{ while (
2
-іпарт)
|
{
w h i l e (
3
-шарт)
|
{
/ / о п е р а т о р л а р
i f ( қ ате_ш ар ты ) g o t o l o o p e n d
/ / о п е р а т о р л а р
>
- S
>
■
}
т
1oop_end: // программа жалга сы
G o t o операторының белгісі ағымдағы осы функцияда болуын қадағалау
қажет. Басқаша айтқанда, g o t o операторын басқа функцияда жарияланған
(немесе керісінше) белгіге көшу үшін қолдануға болмайды.
1
Жаңа үйреніп жүрген программалаушылар өз
программаларында бұл
операторды жиі қолданады. Goto операторын колдануға тырыспай, оның орына
i f , i f . . . e l s e немесе w h i l e конструкциясын пайдалану дұрысырак болып
саналады.
-
1
1 саны бүтін сандар ішіндегі ерекиіе сан болып саналады. Бірден үлкен жэне
өзінен басқа ешңандай бөлгіштері жоқ бүпіін натурал сан царапайым (жай) сан
деп аталады.
1
1.6 Ш артты операторлар
I f шартты операторының екі түрлі жазылу форматы бар:
i f
(ш а р т -ө р н е к )
1 - о п е р а т о р ;
[ e l s e
2 - о п е р а т о р ; ]
24
Тік жақшаға алынған бөлікті жазбай кетуге болады. Бұл бөлік жазылмаған
жағдайда, оператордың бірінші -
Операторды орындау барысында
қысқаиіа түрі қолданылады деп аитылады.
ш а р т -ө р н е к есептеледі. Егер оның мәні
«ақиқат»
0, «иә») болса, онда 1 - о п е р а т о р орындалады. Ал егер ол «жалған»
(= 0, «жоқ») болса, онда 2 - о п е р а т о р атқарылады. E l s e бөлігі болмаған
жағдайда, i f операторынан кейін орналасқан операторлар орындалады. Мысалы:
V
{
егер х < л
алгоритм! схемасына
(1.7 сурет) сәйкес
шартты
if
(х >= р і )
y=sin(sqrt
( х ) ) ;
else
у=х*
e x p (х+1) ;
Оператордың қысқаіиа түріне мысал ретінде
айнымалы мэні теріс болған жагдайда оның
абсолюттік
шамасын
табатын
өрнекті
келтіруге болады:
(х<0)
y=abs
(х) ;
If
операторын кабаттастыра отырып, күрделі
өрнек мәндерін анықтайтын жағдайлар да жиі
кездесіп отырады, мысалы:
if
(С = 1 )
kun=”duisenbi";
e l s e i f (с
kun
2
)
«I
s e x
; ct
•
e l s e i f (c
3)
k u n » " s a r s e n b i; и .
e l s e i f (c
4)
1.7-сурет.
Тармакты алгоритм
схемасы: а) толық түрі; ә) қысқа түрі
k u n = " b e is e n b i
If •
9
e l s e i f (c = 5)
kun®8” ju m a " ;
e l s e i f (c
6)
k u n = ns e n b i
e l s e i f (c
kun="
; и .
7)
e l s e p u t s ( n
Мынадай да мысал дар кездеседі
i f ( b a l l >= 90)
b a g a = 'A ';
e l s e
i f ( b a l l >= 75)
25
i f ( b a l l < 90)
b a g a = • В ' ;
e l s e
i f ( b a l l >= 50)
i f ( b a l l < 75)
b a g a ^ 'C * ;
e l s e
b a g a = , F * ;
Мұңдай кездерде компилятор e l s e түйінді сөзін оның алдындағы ең соңғы i f
операторымен байланыстырады. Сондыктан e l s e түйінді сөзін соған сәйкес i f
сөзімен бір деңгейде жазган ыңғайлы болады деп саналады. Бірақ ең ыңгайлысы
қабаттаскан i f операторларында олардың дұрыс орыңдалу реттілігін көрсететін
операторлар блогын пайдалану болып табылады (1.8 сурет):
1.8-сурет. Қабаттасқан тармакты
алгоритмнің бейнеленуі
i f ( b a l l >= 90)
b ag a= 'A * ;
e l s e
{ i f ( b a l l >= 75)
b a g a —'B 1;
e l s e
{ i f ( b a l l >= 50)
b a g a s s 'C ' ;
e l s e
b a g a = 1F 1;
}
>
1.7 S w it c h операторы
Жоғарыда көрсетілген қабаттаскан i f операторларын s w i t c h ауыстыргыш
операторын пайдаланып кысқаша жазу мүмкіндігі бар. Бұл операторды есептердің
тармакталу жолдары бірнешеу (екеуден артық) болған кездерде, солардың бірін
таңдау үшін қолданған ыңғайлы болып келеді. S w itc h операторынык жазылу
синтаксисі (алгоритмі 1.9 суретте):
26
switch (б
үт
і
н_сан
дық__өрнек)
Up
і
case 1__түрақты_өрнек :
1-оператор; [break;]
case 2_түрақты__ернек :
2-оператор; [break;]
case 3__түрақ*гы__өрнек :
3-оператор; [break;]
•.
9
•
•
case п__түрақты__өрнек :
п-оператор; [break;]
default :
оператор;
)
1.9-сурет. Switch операторының орындалу схемасы
Мұнда s w i t c h сөзінен кейінгі өрнек мэні есептеледі, ол бүтін сандық (сһаг
типі де) типте болуы тиіс. Сол мән c a s e сөздерінен кейін жазылған тұрактылар
мәндерімен салыстырылады. Егер тұракхы мэні солардың біріне тең болса, сол
жол орындалады да, жол соңында міндетті емес b r e a k операторы болмаса, келесі
жолдар толык орындалады. Ал бір жолды орындап болған соң, s w i t c h
операторынан шығу үшін b r e a k операторы қолданылады. Егер s w i t c h сөзінен
кейінгі өрнек мәні ешбір тұрақтымен сәйкес келмесе, онда d e f a u l t сөзінен
кейінгі оператор атқарылады. Кейде d e f a u l t сөзі болмауы да мүмкін.
D e f a u l t сөзі болмаса, онда s w i t c h операторынан кейінгі келесі операторлар
орындала береді. S w itc h операторындағы өрнек түрінде накты типтегі
мәліметтерді, сөз тіркестерін (жолдарды) пайдалануга болмайды. Кейде бүтін
мәндермен үйлестірілген мэліметтердің кұрылымдык (структуралық) элементтері
колданылуы мүмкін.
Мысал. Екі бүтін сан енгізіп, олармен арифметикалык 4 амалдың бірін орындау.
# i n c l u d e < s t d i o . h >
#i n c l u d e < c o n io .h >
c h a r s y m b o l;
27
int x,y,z;
clrscr ()
i
printf (иЕкі бүтін сан енгізіңіа: ");
scanf ("%і%і",£ у ,&z);
printf ("Қандай амал орындау кервк: ");
scanf ("%s",symbol);
switch (symbol)
{
* —
*
case
case
case
case 1/
i * »
x=y-z;
x=y+z; break
x=y
x=y/z;
printf ("белгісіз операция\
printf("\пНәтижесі - %d\n",x ) ;
getch();
)
календары бойынша жылға сәйкес жануар атын анықтау. Мұқі
12-ге калдықсыз бөлінетін жыл — мешін жылы болатыны негізге алынған.
#include
#include
main ()
{ int gil;
printf("Жьотды енгізініз: \n");
scanf(n%i"
,
&gil);
switch
{ case
( g i l
0 :
case 1
case 2
case 3
case- 4
case 5
case 6
case 7
case 8
case 9
%
12
)
printf ("Мелін жылы
("Тауық жылы
Ит жылы");
Доңыз жылы
pr in tf("Ты
111$
жылы
("Сиыр жылы"
("Барыс жылы
("Қоян жылы"
("Үлу жылы")
pr in tf("Жылан жылы
case 10: pri ntf ("Жылқы жылы
case 11: printf
жылы
Тамбасыз
сан
") ;
>
printf ("\nENTER басыңыз") ;
О ;
}
Мысал.
Апта күнінің реттілік саны
#include
#include
бойынша күннің атын аныктау.
28
m a in ()
{ i n t
d a y _ n u m ;
p r i n t f ( " E n t e r d a y n u m b er: " ) ;
s Cc n f ( " %iw , &day__num) ;
s w ir .c h ( day__num)
{
case
1
printf(^Monday"); break;
case 2
printf( •Tuesday") ; break;
case 3
printf( 'Wednesday "); break;
case 4
printf( •
Thursday" ); break;
case 5
printf( •Friday") ; break;
case 6
printf( •Saturday" ); break;
case 7
printf( •Sunday"); break;
default
printf( •Enter an integer (1..7)");
)
getch() ;
)
< •
-
Егер өрнек мэнінің бірнеше мәнінде тек бір оператор орындалуы кажет
болса, онда
case
тармактарын біріктіріп кою керек:
case 1 :
case 3 :
case 5 :
case 7 :
case 9 : printf("Odd numbers"); break;//тақ сандар
case 2 :
case 4 :
case 6 :
case 8 :
case 10 : printf("Even numbers"); break; //жүп сандар
Ф К . . •
0 »
1.8 C /C ++ тілінін операторлары н қолдану аркы лы есептер ш ыгару
«Жұмысты жака бастаған» программалаушылар, әсіресе студенттер профамма
жазуды бы лай бастайды: тапсырманы алган соң, бірден компьютерге отырады да,
сол алгоритмнің өздері білетін фрагменттерін кодтай бастайды. Айнымалыларга
бірден қарапайым атаулар (х жэне у сиякты) береді. Компьютер жұмькмстемей
тұрып калган жагдайда, жазылган профамманың барлыгы өшеді де, үзіліс
жасалынып, барлык жұмыс басынан қайталанады. Компилятордың, компьютердін
немесе операциялык жүйенін дұрыс жұмыс істемей жатқандыгы жайлы жаңсақ
күмәнді пікірлер де айтылып жатады. Программаны орындау кезіне жеткенде,
оган кез келген мәндер енгізіледі де, экранга
шыккан
нәтижелерге танданып
караумен болады. Бұндай профамма мәліметтердің тек бір енгізілген мэндері
үшін гана жұмыс істейді, ал өзгерістер енгізілсе, ойга симайтын нәтижелер
шыгып, автордын өзіне деген сенімсіздігі пайда болып, тіпті ол программалау ісін
жек көріп кететін жагдайларға да тап болуы мүмкін.
Студенттін максаты программалауды кәсіби деңгейде үйрену болып табылады.
Жақсы маман әрбір профамманы онда қойылган талаптарга сәйкес жазуга канша
29
уақыт кететінін алдын ала аныктай алатын дәрежеде болуы
тиіс.
Мұндай
жұмысқа
«білім, шыдам және төзімділіктен» баска, тәжірибе өте қажет нэрсе
болып
саналады. Оған коса, программалау пәні шыққаннан бергі
жарты ғасырдан аса
мерзімде мамандардын жинақтаган негізгі қағидаларын да меңгеру кажет. Тіггп ең
қарапайым программа жазуда да біртіндеп тізбекті түрде аткарылатын ережелер
тәрізді әрекеттерді орындау керек екендігін білген арпгық болмайды.
Программа жазып есеп шығаруда мынадай жұмыс кезендері аткарыладьі:
1. Есептің м атем атикалы қ моделін жасау. Бұл кезенде берілген мәліметтер
мен алынатын нәтижелер және де мәліметтерден нәтижеге қол жеткізуді жүзеге
есыратын матеметикалық формулалар анықталады.
2. Есептің ш ығару алгоритмін құРУ* Берілген мәліметтерден кажетті
нэтижелер алу жолында атқарылатын әрекеттер толық аныкталуы тиіс. Олар
табиги тіл немесе графикалык алгоритмді бейнелеу тәсілдерімен өрнектелуітиіс.
3. Белгілі бір программалау тілінде алгоритмге сәйкес программа жазу.
Бұл кезеңде алгоритмнің әрбір қадамына сәйкес таңдап алынган программалау
тілінің операторлары (конструкциясы) жазылады.
4. Программаны орындау немесе атқару (бастапкы модуль —> компилятор
-> объектілік модуль —> құрастырушы —> атқарылу модулі тізбегін алу).
5. Программаны тексеріп (тесттен өткізіп), оны қателерін түзету, жөндеу.
Программаны орындау барысында үш түрлі қате кетуі мүмкін:
а) синтаксистік қате — компиляциядан өткізу кезеңінде түзетіледі.
э)
программаның атқарылуы кезінде анықталатын кателер (сандардың 0-ге
бөлінуі, теріс саннан түбір, логарифм алу, т.с.с.) — программаны алгашқы
орындауда аныкталады.
б) семантикалық (логикалық) кателер — тапсырманы дұрыс түсінбеген
жагдайда, алгоритм дұрыс кұрылмаған кездерде болады.
Мұндай қателерді аныктау үшін программаны белгілі бір сандарды бастапкы
мәліметтер түрінде енгізіп орындау қажет, ягни тесттен өткізу керек. Тесттен
өткізудін максаты - кате барын аныктау, кате кеткен орынды тауып, онын
себептерін анықтау, соларға сәйкес профамманы түзету. Тест дегеніміз — алдын
ала нәтижелері белгілі болып келетін бастапқы мәліметтер жиыны. Қатені
t
" 1 ''
ІВ
|fc to
аныктауға көмектескен тест тиімді болып саналады. Программаны жөндеу ісі
тесттердің барлыгы (немесе кажетті бөлігі) қатесіз орындалганда аякгалады, ягни
олардың бәрі де дұрыс нәтиже бергенде тоқтатылады.
Тесттердің жеткілікті (қажетті) санын аныктаудын екі жолы бар: бірінші
тәсілде профамма «кара жәшік» ретінде қарастырылады да, оған бастапкы
мәлімет енгізіліп, нәтиже алынады. Жәшіктің ішкі құрылымы бізге белгісіз.
Программаны мұндай жолмен толық тесттен өткізу үшін оны барлык берілген
мэліметтер жиынында тексеріп шыгу керек, ал ол мүмкін жүмыс емес. Сондыктан
профамманы толык тексеру үшін кажетті тесттер санын аныктайтын арнайы
критерийлер
кұрастырылады. Осы тәсілде алдымен
келесі
критерийлер
колданылады:
1)
Бастапкы мәліметтер кластарын тесттен өткізу, ягни тесттер жиыны мәлі-
меттердің мүмкін болатын мәндерінің әрбір класынан бір-бір мән алуы тиіс.
30
2)
Нәтижелік мәліметгер кластарын тесттен өткізу, яғни тесттер жиыны
нэтижелік мәліметтердің әрбір
класынан тексеруге қажет бір-бір мэн
алынатындай дәрежеде болуы тиіс. Мұндайда толық тесттен өткізу — программа
басы нал оның соңына алып баратын барлық тармактарды тексеру арқылы
орындалады. Бірақ бұны да орыңдау өте қиынга согады, өйткені циклдері мен
тармактары бар программалардың басынан соңына алып баратын жолдар саны
өте көп болып келеді. Сондыктан мұндайда келесі критерийлер қолданылады:
а)
Командаларды тесттен өткізу. Тесгтер жиыны әрбір команданың бірнеше
рет (бірден артық) орындалуын қамтамасыз етуі тиіс.
ә) Тармақтарды тесгтен өткізу. Тесттер жиыны әрбір тармакгың бірнеше рет
(бірден артық) орындалуын қамтамасыз етуі тиіс. Программалау практикасында
осы критерийді пайдалану ең кең таралған тәсілдерге жатады.
31
ф
2 СЫЗЫҚТЫҚ ЖӘНЕ ТАРМАҚТЫ АЛГОРИТМДЕРГЕ
БЕРІЛГЕН ЕСЕПТЕР
2.1 есеп. А) Нақгы а және Ъ сандары берілген. Олардың косындысын $, айырма-
[ г, көбейтіндісін р жэне а-ны b-та бөлгендеп бөліңдіні һ табу керек.
Бұл алгоритм қарапайым болыгі келеді: программага а жэне b сандарын
ізу ,'s=a+b, r=a-b, p=a b, h=a/b мәндерін есептеу және экранға нэтижелерін
=0 болған кезде бұл алгоритм кате нәтиже береді. Мұндайда
гематикалық түрде экранга жазып шыгаруға болады. Бірақ
Ъ
шығару. Бірақ
һ=а/Ь=оэ деп
компьютерде нөлге бөлу операциясы орындаларда кате шыгып, нәтижесінде
экран бетінде «нөлге бөлу» туралы хабарлама пайда болады да, программаның
орындалуы тоқтатылады. Сондықтан
b
нөлге тең екендігін тексеру алгоритмде
көрсетілуі тиіс. Осы мүмкіндікті тексеретін алгоритм 2.1 -суретте көрсетілген.
Төменде апгоритмнің мэтіндік түрде жазылған нұсқасы берілген.
1-қадам.
a, b
енгізу.
2-қадам.
s=a+b, r=a-bf р=а b
есептеу.
3-қадам.
s,
г ,
р
мәндерін экранга шығару.
4-қадам. Бгер Ь=0 болса, 7-қадамга көшу.
5-кадам. Һ = а/Ь мәнін есептеу.
6-кадам. һ-ты шыгаружәне 8-кадамға көшу.
7-қадам. Ь = 0/ һ=оо хабарламасын шыгару.
8-кадам. Соны.
басы
a,b енгізу
Алгоритмнін Стіліндегі программасының
бір нұсқасы :
Достарыңызбен бөлісу: |