Бағдарламалу технологиясы


Кезек типіндегі құрылыммен жұмыстарды ұйымдастыру



жүктеу 1,63 Mb.
бет59/73
Дата03.02.2022
өлшемі1,63 Mb.
#35497
түріОқулық
1   ...   55   56   57   58   59   60   61   62   ...   73
Ба?дарламалу технологиясы

11.3 Кезек типіндегі құрылыммен жұмыстарды ұйымдастыру

Кезек типіндегі құрылымдар «қайтаруы бар іздеу» алгоритмдерінде кең қолданылады. Графтардың, бұтақтардың төбелерінен өту алгоритмдері «ішіне қарай жүру» алгоритімін жүзеге аIrimshikу кезінде – стектерді немесе «көлденеңінен жүру» алгоритмін жүзеге аIrimshikу кезінде – кезектерді қолданады. Жаппай қызмет көрсету теориясының көптеген есептері оңтайлы нұсқаларды табу үшін кезектерді қолданады.

Кезек типіндегі құрылымның екі тақырыбы болады: ол арқылы кезек элементімен жұмысты орындайтын (элементті жою) кезектің басы және кезекке жаңа элементтерді қосу үшін қолданылатын кезектің соңы. Кезектермен жұмыс жасау үшін C# тілінде арнайы класс (Queue) бөлінген. Бұл кластың әдістер жиыны бар

Queue класында келесі үш конструктор бар:

Public Queue ();

Public Queue (int capacity);

Public Queue (ICollection c);

Бірінші конструктор 10 элементке «бос» кезекті құрайды. Екінші конструктор сиымдылығы capacity элементіне тең «бос» кезекті құрайды. Үшінші конструктор ICollection элементтері арқылы жұмыс жасайтын, n элементке арналған жаңа кезекті құрайды.

Queue класының негізгі әдістері 11.2-кестесінде ұсынылған.
11.2-кесте – Queue класының негізгі әдістері.


Әдіс

Сипатама

public virtual bool

Contains(object v)



True мәнін қайтарылады, егер v объектісі кезекте болса, әйтпесе false мәні қайтарылады.

public virtual void Clear()

Кезекті тазартады (Count қасиеті – кезек элементтерінің саны нөлге теңестіріледі).

public virtual object Peek()

Объектті кезектің басынан қайтарады, бірақ оны жоймайды.

public virtual object Dequeue()

Объектті кезектің басынан қайтарады және оны жояды.

public virtual void Enqueue(object v)

v объектісін кезек соңына қосады.

Кезек әдістерінің жұмысын түсіндіретін мысал келесі есепте қарастырылады:

11.2-есебі. Дүкенге бір күнде 250 адам келеді. Сатып алушыларға қызмет көрсету ретінде мыналар сатылады: нан – ықтималдығы 25%; ірімшік – ықтималдығы 20%; печенье– ықтималдығы 20%; сыра – ықтималдығы 10% және балмұздақ – ықтималдығы 25%. Әрбір сатып алушы тек бір өнімді ғана сатып алады деп есептейік. Барлық оқиғалардың ықтималдықтары 0 – 100 аралығына тең. Сатып алушылар кезегін ұйымдастыру керек, ал оларға қызмет көрсету кезінде әртүрдегі сатылған өнімдердің санын және жиі сатып алынатын өнімді анықтап басып шығару керек.

Есептің шарты бойынша барлық оқиғалардың ықтималдықтары бірдей, сондықтан, егер 0 мен 100 аралығында кездейсоқ санды құрсақ, онда оқиғаның орындалу ықтималдығы берілген диапозон арқылы анықталады. Мысалы, нанды сатып алу ықтималдылығы 1-ден 25-ке дейінгі аралықта анықталады, ал ірімшікті – 26 мен 45, печеньені – 46 мен 65, сыраны – 66 мен 75 және балмұздақты –76 мен 100 аралықтарында анықтайды.

Өнімнің әрбір түрін 0 мен 4-ке дейінгі бүтін сандармен анықтауға болады. Сонымен, сатып алушылар кезегін олар сатып алатын өнімдер кезегімен алмастыруға болады, олар бүтін санмен белгіленеді.

Бағдарлама коды:

using System;

using System.Collections;

using System.Text;

namespace ConsoleApplication1

{

class Program



{

public static int n;

static void vkl(Queue ocer, int n)

{

ocer.Enqueue(n);



}

static void iskl(Queue ocer)

{

n = (int)ocer.Dequeue();



}

public static void Main()

{

Queue zagol = new Queue();



int[] masi = new int[5];

char[] masc = new char[5] { 'N', 'I', 'P', 'S', 'B' };

string[] mass = new string[5] { "Nan", "Irimshik", "Печенье", "Sira", "Balmuzdak" };

int i, j, p, k;

Random rnd = new Random();
for (i = 0; i < 4; i++) masi[i] = 0;

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

{

p = rnd.Next() % 100 + 1;



if (p <= 25) vkl(zagol, 0);

if (25 < p && p <= 45) vkl(zagol, 1);

if (45 < p && p <= 65) vkl(zagol, 2);

if (65 < p && p <= 75) vkl(zagol, 3);

if (p > 75) vkl(zagol, 4);

};

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



{

iskl(zagol);

masi[n]++;

Console.Write(masc[n]);

if ((i + 1) % 25 == 0) Console.WriteLine();

};

k = 0; j = 0;



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

{

Console.WriteLine(" {0} = {1}", mass[i], masi[i]);



if (k < masi[i]) { k = masi[i]; j = i; }

}

Console.WriteLine("Еn kop satilgan {0} = {1}", mass[j], masi[j]);



Console.WriteLine("Enter pernesin basiniz");

Console.ReadLine();

}

}

}



Бағдарлама жұмысы:

IBIINSBIINNINPINPPNPBSIIP

INNPBPSNNNNNPBSPINSBPSNPP

BBBNNNNIBNNNBINISPBSPPNNB

PPNPNPBSBNNININPBSINIPIPB

IPBBPBBBNBNBINPNPBNPNPBSS

NBBPNBNPSINNBBSNBPPPPPNBB

BPNPBSIPPINPBPBBBPIBNNPBI

PPISPSIPPNBIIIPNNBBSNNBSP

PBSINIPSSPNIIPSBISPINNSSN

NSNIIPNPNBBNIININSIPINSNI

Nan = 68


Irimshik = 45

Pechenie= 58

Sira = 29

Balmuzdak = 50

Еn kop satilgan Nan = 68

Enter pernesin basiniz




жүктеу 1,63 Mb.

Достарыңызбен бөлісу:
1   ...   55   56   57   58   59   60   61   62   ...   73




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

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау