83
5.1 С тілінде кездейсоқ сандарды пайдалану
С тілінде кездейсоқ сандар беретін функциялар бар.
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();
}
5.2 Жиымды өңдеу есептерінің түрлері (кластары)
Жиымды ӛңдеу есептері кӛбінесе бірыңғайланған тӛрт тҥрге бӛлінеді.
1) Есептердің 1-тҥріне жиым элементтерінің барлығын немесе кӛрсетілген-
дерін бірдей бір тәсілмен ӛңдеу есептері жатады.
2) Есептердің 2-тҥріне (класына) жиым элементтерінің орналасу реттілігін
ӛзгерту тәсілдері жатады.
3) Есептердің 3-класына бірнеше жиымдарды қатар ӛңдеу немесе бір жиымның
ішкі элементтерін бірнеше топқа бӛліп жеке-жеке ӛңдеу тәсілдері жатады.
Жиымдар бір тәсілмен синхронды ӛңделеді немесе әртҥрлі тәсілмен асин-
хронды тҥрде ӛңделеді.
4) Есептердің 4-класына жиымның берілген санға тең бірінші элементін табу,
яғни іздеу есептері жатады.
5.2.1 Бірінші түрдегі есептер
1-есеп. Жиымның ең үлкен элементін анықтау керек.
// максимум табу
#include
#include
#include
void main()
{ int a[100], n;
84
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
if (a[I]>max) max=a[I];
printf("\nMax= %i", max);
getch();
}
2-есеп. Жиымның жұп индексті элементтері қосындысын анықтау.
/* 0, 2, 4... индексті элементтер қосындысын табу */
#include
#include
#include
void main()
{ int a[100], 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 Sum=0;
for(I=0;I
Sum+=a[I];
printf("\nSum= %i ", Sum);
getch();
}
Соңғы циклді басқаша да қҧрастыруға болады:
//Екінші тәсіл
for(I=0;I
if(I%2==0) Sum+=a[I];
printf("\nSum= %i ", Sum);
5.2.2 Екінші түрдегі есептер
Жиым ішіндегі екі элементтің бір-бірімен орнын ауыстыру ҥшін қосымша
тағы бір айнымалы керек болады. Мысалы, a[I] және a[J] элементтерінің орнын
ауыстыру ҥшін қосымша R айнымалысы керек:
R=a[I]; a[I]=a[J]; a[J]=R;
85
3-есеп. Жиым элементтерін кері бағытта орналастыру.
for(int i=0, j=n-1; i
{int r=a[i];
a[i]=a[j];
a[j]=r;}
4-есеп. Жиымның қатар тҧрған екі элементін: 1 және 2, 3 және 4, 5 және 6,
т.с.с. элементтерін бір-бірімен орын ауыстыру
for(int i=0;i
{int r=a[i];
a[i]=a[i+1];
a[i+1]=r;}
5 есеп. Жиым элементтерін k орынға солға (оңға) ығыстыру, яғни жылжыту.
int k,i,t,r,n;
printf(“k = “);
skanf(“%d”,&k);
for(t=0;t
{
r=a[0];
for(int i=0; i
a[i]=a[i+1];
a[n-1]=r;
}
5.2.3 Үшінші класс есептері
Жиымдарды синхронды тҥрде ӛңдеуде жиымдар элементін қарастыру
кезінде индекстер бірдей қадамға ӛзгереді. Мысалы, бҥтін сандардан қҧралған
n элементтерден тҧратын 2 жиым берілген делік. Жаңа c жиымы мынадай
формула арқылы алынады: c[I]=a[I]+b[I].
for(int I=0; I
Жиымдарды асинхрондық ӛңдеу кезінде әр жиым индексі ӛз реттілігімен
ӛзгеріп отырады.
1-есеп. Бҥтін сандардан қҧралған жиымдағы теріс элементтердің барлығын
оның бас жағына орналастыру керек.
int b[10]; //қосымша жиым
int i,j=0;
for(i=0;i
if(a[i]<0){b[j]=a[i];j++;}
// а-дан b-ға теріс элементтерді көшіріп жазу
for(i=0;i
if(a[i]>=0){b[j]=a[i];j++;}
// а-дан b-ға оң элементтерді көшіріп жазу
for(i=0;i
2-есеп. Жиымның барлық жҧп элементтерін жою керек.
int b[10];
int i,j=0;
86
for(i=0;i
if(a[i]%2!=0) {b[j]=a[i];j++;}
for(i=0;i
printf ("\n");
5.2.4 Төртінші класс есептері
Іздеу есептерінде берілген шартқа сәйкес келетін элементті іздеп табу керек.
Ол ҥшін жиым элементтерін біртіндеп тізбектей қарастырып отырып шартты
тексеріп шығу қажет. Осылай ету барысында циклден шығудың екі жолы бар:
- керекті элемент табылғаннан кейін;
- жиым элементтері тегіс қаралып шықты, керекті элемент табылмады.
1-есеп. Берілген k санына тең жиымның алғашқы элементін табу.
int k;
printf("\nK=");
scanf(“%i”,&k);
int ok=0;//элемент табылғаны/табылмағаны белгісі
int i,nom;
for(i=0;i
if(a[i]==k){ok=1;nom=i;break;}
if(ok==1) printf("\nnom=",nom);
else printf("\nk-ға тең элемент жоқ!");
5.3 Жиымды сұрыптау (іріктеу, реттеу)
Сҧрыптау – берілген объектілер жиынын (сандарды) ҧсынылған реттілікпен
қайта теріп орналастыру процесі.
Жиымдарды сҧрыптау жылдамдығы әртҥрлі болады. Қарапайым сҧрыптау
тәсілдері n*n рет салыстыруды керек етеді, мҧндағы n – жиым элементтері
саны; ал жылдам сҧрыптау тәсілі n*ln(n) рет салыстыруды қажет етеді.
Қарапайым тәсілдер тҥсінуге жеңіл, ӛйткені алгоритмі тҥсінікті. Кҥрделі
тәсілдер аз әрекеттер санын керек еткенмен, операциялары кҥрделірек болады,
сондықтан элементтер саны аз жиымдарға қарапайым тәсілдерді қолданған
дҧрыс.
Қарапайым тәсілдер 3 топқа бӛлінеді:
- жай таңдау жолымен сҧрыптау;
- жай енгізу тәсілімен сҧрыптау;
- жай алмастыру тәсілімен сҧрыптау.
5.3.1 Жай таңдау жолымен сұрыптау
Жиымның ең кіші элементі анықталады да, ол бірінші элементпен орын
ауыстырады. Қалған элементтермен де осы тәсіл қайталанады.
44
55
12
42
94
18
минимум
int i, min, n_min, j;
for(i=0;i
{
Достарыңызбен бөлісу: |