Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритм.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
116.54 Кб
Скачать

2. Жиым элементтерін енгізу/шығару

Жиым элементтерін енгізу немесе оларды түрлендіру үшін цикл операторы қолданылады. Төменде 10 элем-енті бар жиымды 0-ден 9-ға дейінгі сандармен толты-рып, сонан кейін оларды кері бағытта экранға шығару мысалы көрсетілген:

main ()

{int a[10];

int i;

for (i = 0; i<10; i++)

a[i] = i;

for (i = 9; i>=0; i--)

printf(“ %i”, a[i]);

}

Си тілінде жиымды жиымға бірден теңестіруге бол-майды, мыс., а0, а1, а2, ... , а9 және с0, с1, с2, ... , с9 жиымдары үшін а=c деп жазуға болмайды. Олардың элементтерін цикл ішінде бір-біріне біртіндеп теңес-тіру керек.

int a[9], c[9];

a=c; // қате

Мұның орнына мынадай цикл жазу керек:

int a[9], c[9];

for (int i=0; i<9; ++i)

a[i]=c[i];

39. rand() функциясы 0...32767 аралығындағы бүтін сан береді. Оны қолдану үшін stdlib.h директивасын қолдану қажет. Жиым элементтері екі разрядты оң және теріс сандардан тұруы үшін алынған кездейсоқ сан 100-ге бөлінгендегі қалдықтан 50 алып тасталынады.Си тілінде кездейсоқ сандар беретін функция бар. int rand() – 0..RAND_MAX=32767 аралығынан кез келген кездейсоқ бүтін сан береді. функцияны пайдалану <stdlib.h> файлы арқылы орындалады.

#include<stdio.h> //sum_mas.cpp

#include<stdlib.h>

main()

{

int a[50];

int n;

printf("\nЖиым ұзындығы: ");

scanf("%d",&n);

for(int i=0;i<n;i++)

{

a[i]=rand()%100-50; // кездейсоқ сандар 0 32767

printf("%i ",a[i]); // 100-ден қалдық – 50

}

int sum=0;

for(i=0;i<n;i+=2)

sum+=a[i]; // 0, 2, 4 индексті элементтер...

printf("\nжұп индексті элементтер қосындысы: %i",sum);

}

40. Жиымдарды өңдеу есептерінің түрлері:

1) Есептердің 1-түріне жиым элементтерінің барлы-ғын немесе көрсетілгендерін бірдей бір тәсілмен өңдеу есептері жатады.

2) Есептердің 2-түріне (класына) жиым элементте-рінің орналасу реттілігін өзгерту тәсілдері жатады.

3) Есептердің 3-класына бірнеше жиымдарды қатар өңдеу немесе бір жиымның ішкі элементтерін бірнеше топқа бөліп жеке-жеке өңдеу тәсілдері жатады. Жиымдар бір тәсілменсинхронды өңделеді немесе әр түрлі тәсілменасинхронды түрде өңделеді.

4) Жиымның берілген санға тең элементін табу, яғни іздеу есептері жатады.

1 түрдегі есеп. Массивтің жұп индексті элементтері қосындысын анықтау.

// a[n] жиымының жұп индексті эл-ттері қосындысы

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#define n 50

void main()

{

int a[n],I; randomize();

for(int I=0;I<n;I++)

{a[I]=random(100)-50;

printf(" %i ", a[I]);

}

int Sum=0;

for(I=0;I<n;I+=2)

Sum+=a[I];

//жұп индексті эл-тер 0,2,4... қосындысы

printf("\nSum= %i ", Sum);

getch();

}

41.Сұрыптау – берілген объектілер жиынын (сандарды) ұсынылған реттілікпен қайта теріп орналастыру процесі. Жиымдарды сұрыптау жылдамдығы әр түрлі болады. Қарапайым сұрыптау тәсілдері n*n рет салыстыруды керек етеді, мұндағы n – жиым элементтері саны; ал жылдам сұрыптау тәсілі n*ln(n) рет салыстыруды қажет етеді. Қарапайым тәсілдер түсінуге жеңіл, өйткені алгоритмі түсінікті. Күрделі тәсілдер аз әрекеттер санын керек еткенмен, операциялары күрделірек болады, сондықтан элементтер саны аз жиымдарға қарапайым тәсілдерді қолданған дұрыс. Қарапайым тәсілдер 2топқа бөлінеді: - жай таңдау жолымен сұрыптау; - жай алмастыру тәсілімен сұрыптау.

Жай таңдау жолымен сұрыптау

Жиымның ең кіші элементі анықталады да, ол бірінші элементпен орын ауыстырады. Қалған элементтермен де осы тәсіл қайталанады.

int i,min,n_min,j;

for(i=0;i<n-1;i++)

{min=a[i];n_min=i; //минимум іздеу

for(j=i+1;j<n;j++)

if(a[j]<min)

{min=a[j];n_min=j;

}

a[n_min]=a[i]; //орын ауыстыру

a[i]=min}

Жай алмастыру арқылы сұрыптау

Ең соңғыдан бастап, екі элемент салыстырылады да, қажет болса, орын алмастырады. Осындай әрекет нәтижесінде ең кіші элемент жиымның ең сол жақ шетіне ығысады. Қалған жиым элементтері үшін де осы процесс қайталанады.

for(int i=1;i<n;i++)

for(int j=n-1;j>=i;j--)

if(a[j]<a[j-1])

{int r=a[j];a[j]=a[j-1];a[j-1]=r;}

}

42. Екі өлшемді жиымды – матрицаны пайдалану үшін тік жақшалар ішінде олардың екі өлшемінің де енін көрсету керек. Си тілінде екі өлшемді жиым былай сипатталады:

[<жады класы>] <типі>

<жиым аты> [<1-өлшемі>][<2-өлшемі>]

Жиым элементтері типі ескеріліп, олардың көле-міне жеткілікті етіп жиым үшін компьютер жадын-да қажетті орын бөлініп беріледі немесе жиымның аты осы аймақтың басына сілтейтін нұсқауыш типті константа болып табылады.

Мысалы:

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 болып саналады.