Алматы экономика және статистика академиясы


Switch  көп  нұсқалы  таңдау  операторы



Pdf көрінісі
бет6/13
Дата12.03.2017
өлшемі1,37 Mb.
#9098
1   2   3   4   5   6   7   8   9   ...   13

Switch 
көп  нұсқалы  таңдау  операторы
Программада  кездесетін  бірнеше 
нұсқаның  бірін  таңдап  алу  керек  болған  жағдайда,  switch  ауыстырғыш  операторы 
қолданылады.  Оператордың  орындалу  схемасы  төмендегі  6.3  суретте  келтірілген. 
Оның жалпы жазылуы: 
switch  
<бүтін типті өрнек>
 
{ case 
белгі1:  операторлар;
 
break;
 
  case 
белгі2:  операторлар;
 break; 
  ................ 
    
[default: операторлар;]
 } 
Мұнда switch сөзінен кейінгі өрнек мәні есептеледі, ол бүтін санды (char типі 
де)  типте  болуы  тиіс.  Сол  мән 
case
 
сөздерінен  кейін  жазылған  константалар 
мәндерімен  салыстырылады.  Егер  олардың  біріне  тең  болса,  сол  жол  орындалады, 
жол  соңында  көшу  операторы  болмаса,  келесі  жолдар  толық  орындалады.  Ал  бір 
жолды орындап болған соң, switch операторынан шығу үшін 
break
 
операторы қолда-
нылады. Егер 
switch
 
сөзінен кейінгі өрнек мәні ешбір константамен сәйкес келмесе, 
онда 
default
 
сөзінен  кейінгі  операторлар  атқарылады.  Кейде 
default
 
сөзі 
болмауы да мүмкін.  
Default
 
сөзі  болмаса,  онда  switch  операторынан  кейінгі  келесі  операторлар 
орындала береді. Switch операторындағы өрнек түрінде нақты типтегі мәліметтерді,  
сөз  тіркестерін  (жолдарды)  пайдалануға  болмайды.    Кейде  бүтін  мәндермен  үйлес-
тірілген мәліметтердің құрылымдық (структуралық) элементтері қолданылуы мүмкін. 
 
 
6.1-
сурет. Шартты оператордың құрылымдық алгоритмі 
жоқ 
 
иә 
1 оператор 

оператор 
 
өрнек 
 
 
өрнек 
 
жоқ 
 
иә 
 
оператор 
37 
 


дәріс. Цикл операторлары 
Цикл операторлары  бірнеше рет  қайталанатын есептеулерді орындау үшін қажет. 
Кез  келген  цикл  сол  цикл  тұлғасынан  (денесінен),  яғни  қайталанатын  операторлар 
тізбегінен,  бастапқы  мәндер  тағайындаудан,  цикл  параметрлерін  өзгертуден  және 
циклді қайталау шартын тексеруден тұрады (7.1 сурет). Циклдің бір рет орындалуы 
итерация  (қадам)  деп  аталады.  Шартты  тексеру  әрбір  итерация  сайын  –  цикл 
тұлғасына  дейін  (алғы  шартты  цикл)  немесе  цикл  тұлғасынан  соң  (соңғы  шартты 
цикл) атқарылады. Олардың айырмашылығы – соңғы шартты цикл, кем дегенде, бір 
рет орындалады да, содан кейін барып циклді қайталау шарты тексеріледі. Ал, алғы 
шартты циклде оны қайталау шарты цикл тұлғасынан бұрын тексеріледі, сондықтан 
кейде ол бір рет те орындалмай қалуы мүмкін.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      
а
    
 
 
 
 
 
ә
  
7.1 
сурет. Цикл операторларының құрылымдық схемасы:  
а – алғы шартты цикл; ә – соңғы шартты цикл 
Цикл  тұлғасында  мәні  өзгертілетін  айнымалылар  цикл  параметрлері  болып 
табылады.  Тұрақты  қадаммен  әрбір  итерация  сайын  өзгертіліп  отырылатын  бүтін 
типтегі цикл парараметрлері цикл санауыштары деп аталадлы. 
Бастапқы параметрлер мәндері айқын түрде берілмеуі де мүмкін, олар циклге кір-
генге дейін оның ішінде мәндері өзертілетін айнымалылар мәндерін беру үшін қажет.  
Цикл оны қайталау шарты орындалмаған кезде аяқталады. Цикл қадамының немесе 
жалпы  циклдің  аяғына  жетпей,  доғарылатын  кездері  болады,  олар 
break

conti-
nue

return
 
және 
goto
 
операторлары  көмегімен  іске  асырылады.    Сырттан  цикл 
ішіне басқаруды беру болмауы тиіс.  
С/C++  тілдерінде  ыңғайлылығына  қарай  қолданылатын  үш  түрлі  цикл  оператор-
лары бар, олар  – 
while, do .. while
 
және
 
for. 
Алғы шартты цикл  (while – әзірше) 
Орындалу саны алдын ала белгісіз болатын циклдер құру кезінде шарттары алдын 
ала  немесе  соңынан  тексерілетін  екі  цикл  түрі  бар.  Шарты  алдын  ала  тексерілетін 
цикл операторының орындалу схемасы 7.1а-суретте көрсетілген. Оның жазылуы: 
while (шарт
-
өрнек)   оператор;
 
Мұнда  шарт  ретінде  қатынас  таңбалары  кіретін  шартты  өрнек  пайдаланылуы 
мүмкін.  Өрнек  типі  арифметикалық  немесе  соған  келтірілетін  түрде  болуы  тиіс. 
Оператор қарапайым немесе құрама болуы мүмкін. Ол құрама оператор болса, онда 
операторлар жиыны жүйелі жақшаға алынып жазылады. 
While
 
операторы орындал-
ғанда, алдымен жақша ішіндегі өрнек есептеліп тексеріледі. Егер өрнек мәні ақиқат 

– 
– 
Бастапқы  
мәндер 
 
Шарт? 
Цикл параметрін 
өзгерту 
 
Операторлар 
Бастапқы  
мәндер 
Шарт? 
Операторлар 
Цикл параметрін 
өзгерту 

38 
 

while 
жоқ 
иә 
шарт? 
1-
оператор 
do 
2-
оператор 
n-
оператор 
7.2
-
сурет

Шарты соңынан 
тексерілетін цикл 
болса немесе жалпы жағдайда 0-ге тең болмаса, онда 
оператор атқарылады. Содан 
соң  жақшадағы  өрнек  тағы  да  есептеледі.  Егер  өрнек  мәні  жалған  болса  (немесе 
жалпы жағдайда 0-ге тең болса), онда 
while
 
цикл операторы өз жұмысын аяқтайды.  
Мұнда шарт-өрнек құрамына кіретін айнымалы цикл ішінде өзгеріп отырады. 
Келесі мысалда енгізілген 
num
 
бүтін санының барлық бөлгіштері  С++ тілі стилінде 
анықталады.  
// Бүтін оң санның бөлгіштерін анықтау
 
#include   
int main() 
{ int num;  
  cout << "\nSan engizingiz : "; cin >> num; 
  int half = num/2; 
// санның жартысы
  
  int div = 2;  
// алғашқы бөлгіш санды таңдау
  
  while (div <= half) {  
     if (!(num div)) cout << div <<"\n";  
     div++;  
  }  
  return 0;  

Программалауда  жиі  қолданылатын  тәсілдердің  бірі  – 
шексіз  цикл  ұйымдастырып,  одан  белгілі  бір  шарт  бойынша 
шығу  болып  табылады,  ол  үшін  цикл  басында  while (true) 
немесе  while (1) сөздері  жазылады.  While  түйінді  сөзінен 
кейінгі жақша ішіне циклде ғана қолданылатын айнымалыны 
сипаттауды жазып қоюға болады, мысалы:   
while (int x = 0){…/* x-
тің қолданылу аймағы */ }
  
Соңғы шартты цикл (do .. while) 
Шарты соңынан тексерілетін  
do
 .. 
while
 (
орындау .. 
әзірше)
 
циклінің  орындалу    схемасы  7.2-суретте  көрсетілген.  Осыған  сәйкес 
оператордың жалпы жазылу түрі: 
do  
 { 1-
оператор;
 
   2-
оператор;
 
   …  … …  
   n-
оператор;
 
 } 
while (өрнек);
 
Цикл тұлғасы ретінде қарапайым немесе құрама оператор қолданылуы мүмкін. 
Жақшадағы өрнек цикл тұлғасынан кейін тексеріледі. Сондықтан do while цикл 
тұлғасы ең болмағанда бір рет орындалады. Цикл тұлғасынан кейін жазылған 
өрнек ақиқат болса (яғни ол 0-ге тең болмаса), цикл тұлғасы қайтадан орындалады. 
Ал өрнек жалған болса (немесе 0-ге тең болса), цикл аяқталады. Мысал: 
// Енгізілген сандардың үлкенін (максимумын) табу
 
#include  
#include  
main () 

int a, max; 
clrscr(); 
printf("\
n Сандар максимумын табу 
\n"); 
39 
 

printf("Аяқтау үшін 0 енгізіңіз 
\n"); 
max = -32000;  
// алдын ала максимумды ең кіші бүтінге теңейміз
 
do 
 { 
 
printf("Сан енгізіңіз : ");
 
 scanf("%i",&a); 
 if (a > max) max = a; 
  } 
 while (a!=0); 
 
printf("Сандардың максимумы: %i",m);
 
 getch(); 

FOR 
цикл операторы 
For операторы айнымалы ретінде берілген цикл параметрінің алғашқы, соңғы мәні 
мен өзгеру қадамы белгілі болғанда, соған сәйкес бір немесе бірнеше операторларды 
қайталап  орындау  кезінде  қолданылады.  Бұл  оператор  параметрлі  цикл  операторы 
немесе арифметикалық цикл  деп аталады. For операторының жалпы жазылу түрі: 
for (x=x0; x<=xk; x=x+dx) 
    { 
     <1-
оператор>;
 
     <2-
оператор>;
 
        . . . 
     
оператор>;
 
    } 
Мұнда 
x=x0 
– 
цикл айнымалысының бастапқы мәні, 
x<=xk
 – 
циклдің орындалу 
шарты, 
x=x+dx
  – 
цикл  айнымалысының  қадамы. 
x=x0 
цикл  операторы 
орындаларда  бір  рет  есептеледі, 
x<=xk 
ақиқат  болса  немесе  0-ге  тең  болмаса, 
цикл  тұлғасы  ретіндегі  операторлар  атқарылады.  Содан  соң 
x=x+dx 
есептеледі 
және 
x<=xk 
мәні  қайта  анықталады. 
x<=xk
 
мәні  жалған  болса  немесе  жалпы 
жағдайда ол 0-ге тең болса, 
for 
операторының жұмысы аяқталады. Сонымен цикл 
тұлғасының  келесі  орындалуы  немесе  орындалмауы  оның  атқарылуы  алдында 
анықталады. 
1-
мысал. 
/* 1-
ден 100
-
ге дейінгі сандар қосындысын анықтау */
 
#include  
#include  
main () 
{ int s=0,i; 
  clrscr(); 
  printf("1-
ден 100
-
ге   
 
  
дейінгі сандар қосындысы:");
 
  for (i=1;i<=100;i++) 
   s+=i; 
  printf("s=%d",s); 
  printf("\
nАяқтау үшін Enter 
 
           
басыңыз
\n"); 
  getch();  

 
40 
 


дәріс. С тілінде жиымдарды пайдалану 
Жиым  немесе  массив  –  бір  типтегі  элементтердің  реттелген  жиыны.  Олар  бір 
атаумен  –  идентификатормен  аталады  да,  индексті  айнымалы  ұғымына  сәйкес 
келеді. Мысалы, мынадай тізбек  
0  1  1  2  3  5  8  13  21 
Фибоначчи тізбегінің 9 элементін құрайды (алғашқы екі санды таңдап алып, келесі 
санды алдыңғы екеуін қосу жолымен алады). Осындай бір текті тізбектерді жиым 
түрінде Си тілінде сипаттап, оған бастапқы мән беріп инициалдау үшін былай 
жазамыз: 
  int fib[8]={0, 1, 1, 2, 3, 5, 8, 13, 21};   
немесе 
int fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21};
     
деп  көрсетеміз. 
мұндағы fib – жиым аты, оның элементтерінің типі int, ал ені, яғни ұзындығы – 9, 
жиым элементтерінің индекстері 0-ден бастап нөмірленеді, сол себепті 9 элемент 8 
индекспен көрсетіледі. Мәндері толық көрсетілсе, индексті жазбаса да болады. Ал 
былай болса, 
int fib[8]={0, 1, 2, 3};
     
қалған элементтері 0 болып саналады. 
n=10; k=2; fib[n-k]={0, 1, 2, 3};
     
десе де болады. 
Жоғарыдағы тізбектің 7-ші элементін бір бүтін айнымалыға меншіктеу үшін былай 
жазамыз. 
int а = fib[6];  // а = 8 
 
Жиымды  сипаттау  кезінде  оның  ені  нақты  санмен  көрсетіледі,  мыс., 
a[20] 
орнына
 a[n]
 
деп жазу үшін  алдын ала  
#define n 20  
жолы көрсетіледі немесе 
const  n=20;  
болып жазылады. 
Жиым  элементтерін  енгізу  немесе  оларды  түрлендіру  үшін  цикл  операторлары 
қолданылады.  Төменде  10  элементі  бар  жиымды  0-ден  9-ға  дейінгі  сандармен 
толтырып, сонан кейін оларды кері бағытта экранға шығару мысалы көрсетілген: 
main () 

 int ia[10]; 
 int index; 
 for (index = 0; index <10; index ++) 
    ia[index] = index; 
 for (index = 9; index >=0; index --) 
    printf(" %i", ia[index]); 
Си тілінде жиымды жиымға бірден теңестіруге болмайды, мысалы, а
0

а
1

а
2
, ... , 
а
9
  
және  с
0

с
1

с
2
, ... ,  
с
9
 
жиымдары үшін  а = c деп жазуға рұқсат етілмейді. Олардың 
элементтерін цикл ішінде бір-біріне біртіндеп теңестіру керек. 
Мысалы, мынадай цикл жазылуы тиіс: 
int a[9], c[9]; 
for (int i=0; i<9; ++i) 
    a[i]=c[i]; 
41 
 

Си тілінде кездейсоқ сандарды пайдалану 
Си тілінде кездейсоқ сандар беретін функциялар  бар. 
int  rand()
  –  
0..RAND_MAX=32767  аралығынан кез келген кездейсоқ  бүтін 
сан береді.  
Ал 
int random(n) 
0..n аралығынан кез келген кездейсоқ  бүтін сан береді. 
Бұл функцияларды пайдалану 

 
файлы арқылы орындалады. 
Мысалы: 
//a[n] жиымына кездейсоқ
 
сандар енгізу
 
#include 
#include 
#include 
void main() 

int a[100]; 
int n; 
printf("\nEnter the size of array:", n); 
scanf("%i",&n); 
for(int I=0;I
{a[I]=rand()%100-50; 
 printf("  %i  ", a[I]);} 
 getch(); 

Жиымды өңдеу есептерінің түрлері (кластары)  
Жиымды өңдеу есептері көбінесе бірыңғайланған төрт түрге бөлінеді. 
1)
 
Есептердің  1-түріне  жиым  элементтерінің  барлығын  немесе  көрсетілгендерін 
бірдей бір тәсілмен өңдеу есептері жатады.  
2)
 
Есептердің  2-түріне  (класына)  жиым  элементтерінің  орналасу  реттілігін  өзгерту 
тәсілдері жатады.  
3)
 
Есептердің 3-класына  бірнеше жиымдарды қатар өңдеу немесе бір жиымның ішкі 
элементтерін  бірнеше  топқа  бөліп  жеке-жеке  өңдеу  тәсілдері  жатады.  Жиымдар 
бір тәсілмен – синхронды өңделеді немесе әр түрлі тәсілмен – асинхронды түрде 
өңделеді.  
4)
 
Есептердің 4-класына  жиымның берілген санға тең бірінші элементін табу, яғни 
іздеу есептері жатады. 
1 есеп. Жиымның ең үлкен элементін анықтау керек. 
// максимум табу
 
#include 
#include 
#include 
void main() 

int a[100]; 
int n; 
printf("\nEnter the size of array:", n); 
scanf("%i",&n); 
for(int I=0;I
{  a[I]=rand()%100-50; 
   printf("  %i  ", a[I]); 

int max=a[0]; 
for(I=1;I
42 
 

if (a[I]>max) max=a[I]; 
printf("\nMax= %i", max); 
getch(); 

 
Жиым ішіндегі екі элементтің бір-бірімен орнын ауыстыру үшін қосымша тағы бір 
айнымалы керек болады. Мысалы, a[I] және a[J] элементтерінің орнын ауыстыру үшін 
қосымша R айнымалысы керек:  
         
R=a[I]; a[I]=a[J]; a[J]=R;  
2-
есеп. Жиым элементтерін кері бағытта орналастыру. 
for(int i=0, j=n-1; i
{int r=a[i]; 
 a[i]=a[j]; 
 a[j]=r;} 
Жиымдарды синхронды түрде өңдеуде жиымдар элементін қарастыру кезінде  
индекстер бірдей қадамға өзгереді. Мысалы, бүтін сандардан құралған n 
элементтерден тұратын 2 жиым берілген делік. Жаңа 
c
 
жиымы мынадай формула 
арқылы алынады:  c[I]=a[I]+b[I]. 
for (int I=0; I
Жиымдарды асинхрондық өңдеу кезінде әр жиым индексі өз реттілігімен өзгеріп 
отырады.  
Жиымды сұрыптау (іріктеу, реттеу) 
Сұрыптау – берілген объектілер жиынын (сандарды) ұсынылған реттілікпен қайта 
теріп орналастыру процесі.  
Жиымдарды сұрыптау жылдамдығы әр түрлі болады. Қарапайым сұрыптау 
тәсілдері n*n рет салыстыруды керек етеді, мұндағы n – жиым элементтері саны;  
ал жылдам сұрыптау тәсілі n*ln(n) рет салыстыруды қажет етеді. Қарапайым 
тәсілдер түсінуге жеңіл, өйткені алгоритмі түсінікті. Күрделі тәсілдер аз әрекеттер 
санын керек еткенмен, операциялары күрделірек болады, сондықтан элементтер 
саны аз жиымдарға қарапайым тәсілдерді қолданған дұрыс.  
Қарапайым тәсілдер 3 топқа бөлінеді: 
-
 
жай таңдау жолымен сұрыптау;  
-
 
жай енгізу тәсілімен сұрыптау; 
-
 
жай алмастыру тәсілімен сұрыптау. 
Бақылау сұрақтары 
1.
 
Жиым дегенімз не? 
2.
 
Жиымдарға бастапқы мәндер қалай тағайындалады? 
3.
 
Жиымды сипаттау тәсілдері. 
4.
 
Жиым элементтерін енгізу және экранға шығару жолдары. 
5.
 
Кездейсоқ сандарды қалай шығаруға болады? 
6.
 
Жиымға кездейсоқ сандарды меншіктеу қалай орындалады? 
7.
 
Жиымды өңдеу есептерінің түрлері (кластары).  
8.
 
Жиымның ең үлкен (ең кіші) элементін анықтау. 
9.
 
Жиым элементтері қосындысын табу. 
10.
 
Жиым ішіндегі екі элементтің бір-бірімен орнын алмастыру. 
11.
 
Жиым элементтерін кері бағытта орналастыру. 
12.
 
Жиымның көрсетілген элементтерін өңдеу тәсілдері. 
13.
 
Жиымды сұрыптау (сорттау, реттеу) жолдары. 
 
43 
 


дәріс. С тілінде көп өлшемді жиымдарды пайдалану 
9.1 
Екі өлшемді жиымдар 
Екі өлшемді жиымды – матрицаны пайдалану үшін тік жақшалар ішінде 
олардың екі өлшемінің де енін көрсету керек. Мысалы: 
INT A
[4][3]; 
алғашқы сан жолдар санын, ал екінші сан бағаналар санын көрсетеді, а жиымы 
12 элементтен тұрады. Оларға бастапқы мәнді былай береміз: 
     int a[4][3]={{0,1,2},  
  
{3,4,5},  
  
{6,7,8},  
  
{9,10,11}};  
ішкі жүйелі жақшаларды қоймаса да болады: 
int a[4][3]={0,1,2,3,4,5,6,7,8,9,10,11};  
Келесі түрде сипаттау жолдардың тек бірінші элементтерін ғана анықтайды, қалған 
элементтер 0-ге тең болып саналады: 
int a[4][3]={ {0},{3},{6},{9} };  
Егер ішкі жүйелі жақшалар алынып тасталса, онда мағынасы өзгереді. 
int a[4][3]={ 0,3,6,9 };  
мұнда бірінші жолдың 3 элементі мен екінші жолдың бірінші элементі анықталады 
да, қалғандары 0 болып саналады. 
Екі өлшемді жиымды инициалдау қабаттасқан циклдер арқылы орындалады. 
1-
мысал
/* a[3][4] жиымы  элементтерін rand() арқылы енгізу және 
экранға шығару */
 
#include  
#include  
#include  
main() 

 const int row=3, col=4; 
 int a[row][col]; 
 clrscr(); 
 for (int i=0; i
    for (int j=0; j
 
  a[i][j]=rand()%100-50; 
 printf("\
nа[3][4] жиым элементтерi мәндерi:");
 
 for (i=0; i
    for (j=0; j
 
  printf(" %i",a[i][j]); 
 getch(); 

Матрицаларды өңдейтін негізгі алгоритмдер ретінде бір өлшемді жиымдарды 
өңдеу кезінде қолданылған алгоритмдер саналады. Жалпы матрицаларды өңдейтін 
барлық алгоритмдерді екі топқа бөліп қарастыруға болады, олар:  
1.
 
матрицаның барлық элементтерін өңдейтін алгоритмдер. 
2.
 
матрицаның  әр  жолы  немесе  әр  бағанасы  элементтерін  жеке-жеке  өңдейтін 
алгоритмдер. 
 
 
44 
 

Матрицаның барлық элементтерін өңдейтін алгоритмдер 
2-
мысал. Бүтін сандардан тұратын b
5,5
  
квадрат матрицасы берілген. Оның бас 
диагоналының сол жағында және оң жағында орналасқан нөлге тең элементтері 
санын анықтап, солардың  айырмасының модулін табу керек.  
Мынадай белгілеулер енгізейік: 
L1 – 
бас диагональдың сол жағында (төменінде) орналасқан элементтер саны; 
L2 – 
бас диагональдың оң жағында (жоғарысында) орналасқан элементтер саны; 
L= |L1-L2|   –  
солардың айырмасы модулі. 
#include  
#include  
#include  
void line() 
 {printf("-------------------------\n"); 
 return;} 
main () 
{ static int b[5][5]={ {5,0,0,0,0}, 
 
 
          
{0,3,12,0,0}, 
 
 
          
{0,33,13,14,0}, 
 
 
          
{0,23,0,14,0}, 
 
 
          
{35,0,13,14,9}}; 
  int i,j,L1,L2,L; clrscr(); 
  
printf("Берiлген матрица :
\n"); 
  line(); 
  for (i=0; i<5; i++) 
   {for (j=0; j<5; j ++) 

Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   13




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет