Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП теория(1).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
607.2 Кб
Скачать

16. Байланысқан жолдар. Стектер, дектер және кезектерді мысал келтіре отырып салыстырыңыз. Бір-бірінен айырмашылығын көрсетіңіз.

Стекте бірінші болып соңғы кірген элемент жойылады,яғни LIFO стратегиясы ор/ды

Стек-кезекке қарама-қарсы болып келеді яғни LIFO-нiң қағидасы бойынша ұйымдастырылған-соңғы келіп бірінші шығу (англ. last in — first out,соңғы келіп бірінші шығу) Стектiң жұмыс принципын жиiрек тәрелкелердiң стопкасымен салыстырады.Екіншінің ҥстінгісін алу ҥшін,ҥстіндегісін алу керек. Элемет қосу, сонымен бiрге итермелеумен(push), тек қанасы стек тӛбесiне болуы мҥмкiн.Қосылған элемент ҥстінде бірінші болып тұрады.элементті жою,итерiп шығарумен аталады(pop),олда тек қана стек тӛбесiнен болуы мҥмкiн,сонымен бірге екінші тұрғанның ҥстіндегі элемент жоғарғы болады.Стектер есептеушi техникаларда кең қолданылады.Мысалы, iшкi программалардан қайтару нҥктелерiнiң зерттеп отырулары ҥшiн қазiргi процессорлардың кӛпшiлiктiң архитектураның ажырамас бӛлiгi болып табылған шақыруларды стек қолданылады.Сонымен бiрге биiк деңгейдегі программалау тiлдерi параметрлердi тапсыру ҥшiн, шақыру процедураларын шақыруға стектi пайдаланады екен.Кезек – бұл мәлiметтiң сызықты тiзiмдерi,яғни FIFO принципі бойынша жұмыс істейді:‖бірінші кірдің-бірінші шықтың‖. Бұл принципті-FIFO деп атаймыз.( First In — First Out) Яғни бірінші кезекке орналастырылған элемент бірінші алынады,ал екінщі орналастырылған екінші алынады және ары қарай.Бұл кезекпен жұмыс істеудің жалғыз әдісі. Кезектер кәдімгі ӛмiрлерде жиi кездеседi. мысалы, банктер немесе тез қызмет кӛрсететін мейрамханалар жанында. Кезекпен жұмыс істеуді кӛз алдына келтiру ҥшiн,екі функция енгіземіз qstore() и qretrieve() (от "store"— "сақтау", "retrieve" — "алу"). qstore функциясы элементті кезектiң соңына сыйғызып салады, ал qretrieve функциясы кезектің басындағы элементті жойып және оның мәнiн қайтарады. Немесе кезек-белгілі бір элементтерге кіруге мҥмкіндігі бар мәлiметтер құрылымы.Элементті қосу (әдетте enqueue(кезекке салу) созімен алмастыруға болады.)кезектің соңында ғана болады. iрiктеу - тек қана кезектiң басынан басталады(әдетте бұны dequeue-кезектен алу )кезектегі таңдап алынған элемент жоғалады. Start-кезектің басына кӛрсетеді,ал end- кезекке жаңа элемент кiргенде толып кететін элеметке кӛрсетеді. [end ] q-ға кезекке элементтiң қосқанда кезектiң жаңа элементi жазылады, ал end бiрлiкке азаяды. Егер end мәні 1-ге кiшiрейсе,онда біз массивті айнала отырып, айнымалы мәнi n болып қалыптасады. Кезектен элементiнiң шығаруы ұқсас болып келеді q[start] кезектен алған кезде start айнымылысы 1-ге азаяды.Осындай алгоритмдерде –дегі бір ұяшық әрқашан бос боп тұрады,алгоритмдерді оңайлықпен орнын толтырылады. Осы әдiстiң артықшылықтары: екiнш iәдіспен салыстырғанда жадтың ҥнемделуі, ӛңдеуде оңай. Кемшiлiктері: кезектегi элементтерiнiң максимал саны массивтың ӛлшемiмен шектелген.Оның асыра толтыруына жаңа массивқа барлық элементтерiн жадтың ерекшелеуi және кӛшiру керек болады

17. Функцияны қолдану: функция прототиптері және оларды жазу стилі.

Функциялар

Функция кейбір есептеулерді ыңғайлы тәсілмен жеке безендіруге және оларды әріқарай оның қалай жұмыс істейтінін қамқорлыққа алмай-ақ, қолдануды қамтамасыз етеді. Си-де функцияны қолдану механизмі ыңғайлы, жеңіл, тиімді  және мақсаты – анық, түсінікті түрдегі программаны алу.

Кез-келген функцияны анықтау келесі түрде болады:

функция_аты нәтижесінің_типі (формальды_параметрлер_тізімі)

             {     декларация

                    инструкция

              }

Функцияны анықтаудан басқа, форматы келесі түрде болатын функция прототипі түсінігі бар.

функция_аты нәтижесінің_типі (формальды_параметрлер_тізімі)

Мұндай декларация main алдында тұруы керек және компиляторға программада осы функцияны қолдану мүмкіндіктері туралы хабарлауы керек (функцияны анықтаудың өзі main функциясынан кейін болуы керек), сол сияқты анықтамалармен және барлық шақырулармен келісімді болуы қажет. Егер функцияны анықтау немесе шақыру өзінің прототипіне сәйкес келмесе қателік туындайды.

Праметрлер атауы келісімділікті талап етпейді. Нақты түрде прототипте олар кез-келген немесе тіпті болмауы да мүмкін.

Функциямен есептелінетін мән return нұсқауының көмегімен main-ға оралады. return сөзінен кейін кез-келген өрнек жазылуы мүмкін:

return өрнек;

Функция қандай-да бір мәнді міндетті түрде қайтармайды. return нұсқауы өрнексіз, ешқандай нәтижесіз мәнді бермей-ақ, оны шақыратын программаға тек қана басқаруды береді.

main функция болғандықтан, кез-келген басқасы сияқты оны шақырған, нақты программа жіберілген операциялық ортада нәтижелі мәнді қайтара алады. Әдетте есептеуді дұрыс аяқтауды айтатындай нөлдік мән қайтарылады (return 0;).

Аргументтер, мән бойынша шақыру

Си-де функцияның барлық аргументтері "мән бойынша” беріледі, "сілтеме бойынша шақырудан” өзге аргументтердің локальды көшірмесіне емес, аргументтің өзіне қатынас жасай алады. Сондықтан Си-де функцияны шақырушы айнымалыны тікелей өзгертуге болмайтын функция шақырылады: ол оның жеке, уақытша көшірмесін ғана өзгерте алады.

Осы қасиеттің арқасында, негізінде жинақтырақ программа жазуға мүмкіндік бар.

Егер шақырылатын программада функцияға айнымалыны өзгерту талап етілсе, онда соңында айнымалыны өзгертуге жататын адрес берілуі керек (айнымалының көрсеткіші), ал шақырылатын функцияда сәйкес келетін параметрді көрсеткіш ретінде сипаттау керек және осы айнымалыға, ол арқылы жанама қатынас жасауды ұйымдастыру қажет. 

Егер функцияның аргументі массив (массив аты) болса, онда функцияға осы массивтің бастапқы адресі болатын мән беріледі; массивтің ешқандай элементтері көшірілмейді.

main и getline функциялары аргументтер жұбы арқылы және қайтарылатын мән арқылы өзара әрекеттеседі. Бір функциялар нәтижелі мәнді қайтарады, басқасы (copy сияқты) ешқандай мәнді бермей, қандай-да бір әрекетті орындау үшін қажет. Нәтиже типі copy-дің орнында void тұрады. Бұл берілген функция ешқандай мәнді қайтармайтынын анық көрсетіп тұр.

Функцияны анықтауда массивтің өлшемін беру жадыны резервке қоюды мақсат етеді. getline-нің өзінде s массивінің ұзындығын берудің қажеттілігі жоқ, өйткені оның өлшемі main-да көрсетілген..

Құрылатын массивтің соңында литер міндетті түрде ‘\0’ литеріне (нөлдік байтпен кодталған, null – литері), литерді стринг соңына орналастыру үшін орналастырылады