{"id":1122,"date":"2024-01-17T17:40:47","date_gmt":"2024-01-17T12:40:47","guid":{"rendered":"https:\/\/yarat.uz\/?p=1122"},"modified":"2025-03-19T15:27:04","modified_gmt":"2025-03-19T10:27:04","slug":"funksiyalar","status":"publish","type":"post","link":"https:\/\/yarat.uz\/?p=1122","title":{"rendered":"Funksiyalar"},"content":{"rendered":"<p style=\"text-align: center;\"><strong>Funksiya tushunchasi<\/strong><\/p>\n<p style=\"text-align: justify;\">Ma&#8217;lumki, Arduinoda har qanday skechda 2 ta <strong>majburiy funksiya<\/strong> mavjud bo&#8217;ladi: &#8220;setup()&#8221; va &#8220;loop()&#8221; funksiyalari. Lekin bulardan tashqari, skechda <strong>foydalanuvchi o&#8217;z funksiyalari<\/strong>dan hamda <strong>biblioteka funksiyalari<\/strong>dan ham foydalanishi mumkin. Biblioteka funksiyalaridan foydalanish ham foydalanuvchi funksiyalariga o&#8217;xshash tarzda amalga oshiriladi. Lekin, biblioteka funksiyalari asosiy sketchdan tashqari fayllarda hosil qilinganligi sababli, bunday funksiyalardan foydalanishdan oldin sketchning boshlang&#8217;ich sohasida mazkur fayllar (bibliotekalar)ni <strong>&#8220;#include&#8221;<\/strong> operatori yordamida qo&#8217;shib olish talab etiladi.<\/p>\n<p style=\"text-align: justify;\">Quyida Arduino IDE da (C++ dasturlash tilida) qo&#8217;llaniladigan funksiyalarni shartli ravishda bir necha turlarga ajratamiz va ular bilan tanishamiz.<\/p>\n<p style=\"text-align: justify;\"><strong>Funksiya<\/strong> &#8211; bu dasturning alohida nomga ega bo&#8217;lgan qismi.<\/p>\n<p style=\"text-align: justify;\">Katta xajmli dastur bilan ishlashni soddalashtirish uchun uni funksiyalarga ajratish maqsadga muvofiq. Bundan tashqari, dastur davomida ko&#8217;p marta takrorlanadigan kodlar majmuasini, alohida funksiyaga ajratib olish mumkin. Natijada funksiyani qayta-qayta ishga tushirish (chaqirish) uchun dastur davomida faqat uning nomini ko&#8217;rsatish yetarli bo&#8217;ladi. Funksiyadan foydalanishning yana bir afzalligi, ko&#8217;p foydalaniladigan funksiya xotiradan faqat 1 marta joy egallashi sababli, qurilmaning flesh-xotirasini iqtisod qilishga ham yordam beradi.<br \/>\nFunksiya boshqa funksiyalardan alohida holda keltirilishi kerak. Shundan keyin uni nomi bo&#8217;yicha chaqirish mumkin bo&#8217;ladi. Funksiya quyidagi tuzilishga ega bo&#8217;ladi:<\/p>\n<p><strong>qiymat_turi funksiya_nomi<\/strong> (argumentlar) {<br \/>\nfunksiya_kodi<\/p>\n<p style=\"text-align: justify;\">Bu yerda:<br \/>\n<strong>qiymat_turi<\/strong> &#8211; funksiya natijasida o&#8217;zlashtiriladigan qiymatning turi, <strong>funksiya_nomi<\/strong> &#8211; funksiyani chaqirish uchun ishlatiladigan nom, <strong>argumentlar<\/strong> &#8211; funksiya ichida qo&#8217;llaniladigan o&#8217;zgaruvchilar ro&#8217;yxati (qo&#8217;llanilishi majburiy emas), <strong>funksiya_kodi<\/strong> &#8211; funksiya ichida bajariladigan amallar ketma-ketligi.<\/p>\n<p style=\"text-align: justify;\">Agar funksiya argumentlarga ega bo&#8217;lmasa, uni chaqirishda &#8220;<strong>()<\/strong>&#8221; (qavs) belgilarini ham tushirib qoldirish munkin (Lekin, funksiyani e&#8217;lon qilishda, argumentga ega bo&#8217;lmagan taqdirda ham, () belgilari ko&#8217;rsatilishi shart).<\/p>\n<p style=\"text-align: justify;\">Agar funksiya argumentlarga ega bo&#8217;lsa, uni chaqirish quyidagicha bajariladi:<\/p>\n<p style=\"text-align: justify;\"><strong>funksiya_nomi<\/strong>(1-argument, 2-argument, &#8230;);<\/p>\n<p style=\"text-align: justify;\">Funksiya har doim natijani o&#8217;zida saqlaydi. Agar funksiya bajarilishi natijasini biron o&#8217;zgaruvchiga o&#8217;zlashtirish talab qilinsa, funksiyani chaqirish quyidagi tuzilishga ega bo&#8217;lishi kerak (argumentga ega bo&#8217;lishi yoki ega emasligidan qat&#8217;iy nazar):<\/p>\n<p style=\"text-align: justify;\">natija = <strong>funksiya_nomi<\/strong>();<\/p>\n<p style=\"text-align: center;\"><strong>Funksiyaning asosiy turlari<\/strong><\/p>\n<p style=\"text-align: justify;\">Funksiya argument qabul qilishi yoki qabul qilmasligi, shuningdek uning natijasi o&#8217;zgaruvchiga o&#8217;zlashtirlishi yoki o&#8217;zlashtirilmasligi mumkin. Shulardan kelib chiqib, funksiyani 4 ta asosiy turlarga bo&#8217;lish mumkin. Quyida ularning har birini misol asosida ko&#8217;rib chiqamiz:<\/p>\n<p style=\"text-align: justify;\"><strong>1) Argument qabul qilmaydigan va natijani qaytarmaydigan funksiya<\/strong> (ayrim boshqa dasturlash turlarida bunday funksiyani <strong>protsedura<\/strong> deb ataladi).<\/p>\n<p style=\"text-align: justify;\">Bunday funksiyani e&#8217;lon qilishda <strong>&#8220;void&#8221;<\/strong> (&#8220;bo&#8217;shliq&#8221;) deb nomlangan qiymat turi qo&#8217;llaniladi. Bizga ma&#8217;lum bo&#8217;lgan &#8220;setup&#8221; va &#8220;loop&#8221; majburiy funksiyalari ham ushbu turga mansub.<\/p>\n<p style=\"text-align: justify;\">Misol tariqasida 2 ta sonni yig&#8217;indisini hisoblab, natijani o&#8217;zgaruvchiga o&#8217;zlashtiradigan funksiyani ko&#8217;rib chiqamiz.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nbyte a, b;<br \/>\nint c;<br \/>\nvoid setup(){<br \/>\nSerial.begin(9600);<br \/>\na = 15;<br \/>\nb = 25;<br \/>\nyigindiniHisoblash();<br \/>\nSerial.println(c); \/\/port monitorida 40 natijasi (yig&#8217;indi) ko&#8217;rsatiladi.<br \/>\n}<\/p>\n<p>void loop(){<br \/>\n}<\/p>\n<p>void yigindiniHisoblash() {<br \/>\nc = a + b;}<\/div><\/div>\n<p style=\"text-align: justify;\">Bunday turdagi funksiyadan foydalanish va uni tushunish juda oson, lekin optimallik nuqtai nazaridan qaraganda qo&#8217;pol hisoblanadi. Chunki, bunday usulda o&#8217;zgaruvchilardan funksiya ichida va tashqarisida foydalanish uchun ularni global o&#8217;zgaruvchi sifatida e&#8217;lon qilishga to&#8217;g&#8217;ri keladi, chunki bunday funksiya yuqorida aytilganidek, natijani qaytarmaydi. Shuning uchun, funksiya natijasini, global o&#8217;zlashtirishga to&#8217;g&#8217;ri keladi. Global o&#8217;zgaruvchilar esa, qurilma tezkor (SRAM) xotirasidan joy band qiladi (bu joy qurilma ishi davomida doim band turadi). Bunday funksiyadan foydalanish, ayniqsa tezkor xotirasi xajmi kichik bo&#8217;lgan mikrokontrollerlar uchun to&#8217;g&#8217;ri kelmasligi mumkin.<\/p>\n<p style=\"text-align: justify;\"><strong>2) Argument qabul qilmaydigan lekin natijani qaytaradigan funksiya.<\/strong><\/p>\n<p style=\"text-align: justify;\">Natijani qaytaradigan funksiyani e&#8217;lon qilish uchun, uning qaytaradigan natijasi qiymati turi oldindan ma&#8217;lum bo&#8217;lishi kerak. Aks holda, dasturda xatolik yuz berishi mumkin.<br \/>\nMasalan, yuqoridagi misoldagi <strong>a<\/strong> va <strong>b<\/strong> o&#8217;zgaruvchilari qiymati <strong><em>byte<\/em><\/strong> (0 dan 255 gacha qiymat qabul qiladi) turiga mansub, <strong>c<\/strong> esa, <strong><em>int<\/em><\/strong> (-32768 dan 32768 gacha) turiga mansub. Agar <strong>c<\/strong> ham <strong><em>byte<\/em><\/strong> turiga mansub bo&#8217;lganida hamda <strong>a<\/strong> va <strong>b<\/strong> o&#8217;zgaruvchilarining qiymatlari yig&#8217;indisi 255 dan ortib ketganida, xatolik yuz bergan bo&#8217;lar edi. Shuning uchun ham <strong>c<\/strong> o&#8217;zgaruvchisi uchun <strong><em>int<\/em><\/strong> turi qo&#8217;llanildi.<\/p>\n<p style=\"text-align: justify;\">Ushbu funksiya turida, natija qaytarilishi uchun, funksiya oxirida <strong>return<\/strong> operatoridan foydalaniladi. Ushbu operator nafaqat natijani qaytaradi, balki funksiya bajarilishini ham yakunlaydi (return operatoridan, yuqoridagi <strong>void<\/strong> turidagi funksiyani yakunlash uchun ham foydalanish mumkin, biroq bunda funksiya turidan kelib chiqib, natija baribir qaytarilmaydi).<\/p>\n<p style=\"text-align: justify;\">Yuqoridagi misolni, natijani qaytaradigan funksiya uchun o&#8217;zgartiramiz:<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nbyte a, b;<br \/>\nvoid setup(){<br \/>\nint c;<br \/>\nSerial.begin(9600);<br \/>\na = 15;<br \/>\nb = 25;<br \/>\n<strong>c = yigindiniHisoblash();<br \/>\n<\/strong>Serial.println(c);<br \/>\n}<\/p>\n<p>void loop(){<br \/>\n}<\/p>\n<p><strong>int<\/strong> yigindiniHisoblash() {<br \/>\n<strong>return (a + b);<\/strong><br \/>\n}<\/div><\/div>\n<p style=\"text-align: justify;\">Ko&#8217;rinib turibdiki, ushbu misolda <strong>c<\/strong> o&#8217;zgaruvchisi &#8220;setup&#8221; funksiyasi ichida lokal o&#8217;zgaruvchi sifatida e&#8217;lon qilingan. Funksiya ichida e&#8217;lon qilingan o&#8217;zgaruvchidan boshqa funksiyalarda foydalanib bolmaydi, lekin u tezkor xotiradan ham doimiy joy talab qilmaydi. Aniqrogi, funksiya ishi yakunlanganidan keyin, xotiradan o&#8217;chib ketadi. Lekin, agar <strong>c <\/strong>o&#8217;zgaruvchisining qiymatidan boshqa funksiyalarda ham foydalanish zarur bo&#8217;lsa, uni ham global o&#8217;zgaruvchi sifatida e&#8217;lon qilinishi kerak.<\/p>\n<p style=\"text-align: justify;\"><strong>3) Argumentlar qabul qiladigan va natijani ham qaytaradigan funksiya.<\/strong><\/p>\n<p style=\"text-align: justify;\">Ushbu funksiyani chaqirish va e&#8217;lon qilishda, ham uning argumentlari, ham qaytaradigan natija qiymati turi oldindan ma&#8217;lum bo&#8217;lishi kerak. Aks holda, dasturda xatolik yuz berishi mumkin.<\/p>\n<p style=\"text-align: justify;\">Funksiyani e&#8217;lon qilishda argumentlar yangi o&#8217;zgaruvchilar yordamida, ularning qiymat turi va nomini ko&#8217;rsatgan holda vergul belgisi bilan ajratib ko&#8217;rsatiladi. Funksiya chaqirilgan paytda, uning argumentlari funksiya ichida foydalanilishi mumkin bo&#8217;lgan lokal o&#8217;zgaruvchilarga aylanadi. Ya&#8217;ni dastlabki o&#8217;zgaruvchilarning qiymati funksiya ichidagi yangi o&#8217;zgaruvchilarga nusxalanadi.<\/p>\n<p style=\"text-align: justify;\">Yana, yuqoridagi misolni o&#8217;zgartiramiz:<br \/>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nvoid setup(){<br \/>\nbyte a, b;<br \/>\nint c;<br \/>\nSerial.begin(9600);<br \/>\na = 15;<br \/>\nb = 25;<br \/>\n<strong>c = yigindiniHisoblash(a, b);<br \/>\n<\/strong>Serial.println(c);<br \/>\n}<\/p>\n<p>void loop(){<br \/>\n}<\/p>\n<p><strong>int<\/strong> yigindiniHisoblash(<strong>byte a1, byte b1<\/strong>) {<br \/>\n<strong>return (a1 + b1);<\/strong><br \/>\n}<\/div><\/div>\n<p style=\"text-align: justify;\">Ko&#8217;rinib turibdiki, ushbu misolda <strong>a, b, c<\/strong> o&#8217;zgaruvchlarning barchasi &#8220;setup&#8221; funksiyasi ichida lokal o&#8217;zgaruvchi sifatida e&#8217;lon qilingan. Demak, kod yanada optimallashdi.<\/p>\n<p style=\"text-align: justify;\">Muhim eslatma.<br \/>\nfunksiyani chaqirishda argument sifatida o&#8217;zgaruvchi o&#8217;rniga bir yola sonlardan ham foydalanish mumkin:<\/p>\n<p style=\"text-align: justify;\">c = yigindiniHisoblash(15, 25);<\/p>\n<p style=\"text-align: justify;\">Lekin shuni unutmaslik kerakki, Arduinoda turi e&#8217;lon qilinmagan qiymatlar <em><strong>int<\/strong><\/em> turiga mansub deb qaraladi. Natijada, <em><strong>int<\/strong><\/em> turidagi ushbu qiymatlar funksiyaning yangi o&#8217;zgaruvchilari turi <em>(<\/em><strong><em>byte<\/em><\/strong><em>)<\/em> dan farq qilib qoladi va xatolik yuz berishi mumkin! Masalan, quyidagi ifoda yuqoridagi misolga tatbiq etilsa, xatolik yuz beradi:<\/p>\n<p style=\"text-align: justify;\">c = yigindiniHisoblash(150, 250); \/\/150 va 250 <em>int<\/em> turiga, a1 va b1 lar qiymati esa <em>byte<\/em> turiga mansub.<\/p>\n<p style=\"text-align: justify;\">Xatolikning oldini olish uchun, funksiyani chaqirish paytida argumentlarning qiymat turini <em><strong>byte<\/strong><\/em> sifatida aniq ko&#8217;rsatish mumkin:<\/p>\n<p style=\"text-align: justify;\">c = yigindiniHisoblash(byte(150), byte(250));<\/p>\n<p style=\"text-align: justify;\">Funksiya universalligini saqlash uchun, yaxshisi uni e&#8217;lon qilishda ham <em><strong>byte<\/strong><\/em> o&#8217;rniga <em><strong>int <\/strong><\/em>turini ko&#8217;rsatish maqsadga muvofiq bo&#8217;ladi:<\/p>\n<p style=\"text-align: justify;\"><strong>int<\/strong> yigindiniHisoblash(<strong>int <\/strong>a1, <strong>int <\/strong>b1) {<br \/>\nreturn (a1 + b1);<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">Yuqoridagi misollarning barchasida <em><strong>byte<\/strong><\/em> va <em><strong>int<\/strong><\/em> qiymat turlaridan foydalanildi. Agar o&#8217;zgaruvchilar qiymat turi har xil bo&#8217;lsa, dasturni tegishli ravishda o&#8217;zgartirish kerak bo&#8217;ladi:<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nvoid setup(){<br \/>\nint a, b;<br \/>\nfloat c;<br \/>\nSerial.begin(9600);<br \/>\na = 15; b = 25;<br \/>\n<strong>c = yigindiniHisoblash((float)a, (float)b);<br \/>\n<\/strong>Serial.println(c); \/\/natija: 60.00<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">void loop(){<br \/>\n}<\/p>\n<p style=\"text-align: justify;\"><strong>float<\/strong> yigindiniHisoblash(<strong>float <\/strong>a1,\u00a0<strong>float <\/strong>b1) {<br \/>\nreturn (a1 + b1);<br \/>\n}<\/div><\/div>\n<p style=\"text-align: justify;\"><strong>4) Argument qabul qiladigan lekin natijani qaytarmaydigan funksiya<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Bunday funksiya ham yuqoridagi 1-turdagi funksiya bilan deyarli bir xil ishlaydi, farqi uni chaqirishda funksiya argumentlarini ham ko&#8217;rsatiladi. E&#8217;lon qilishda esa, <strong>&#8220;void&#8221;<\/strong> deb nomlangan qiymat turi qo&#8217;llaniladi. Shu nuqtai nazardan qaraganda, 1-funksiya ushbu 4-funksiyaning xususiy holati deb qaralishi ham mumkin.<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nint c;<br \/>\nvoid setup(){<br \/>\nbyte a, b;<br \/>\nSerial.begin(9600);<br \/>\na = 15;<br \/>\nb = 25;<br \/>\nyigindiniHisoblash(a, b);<br \/>\nSerial.println(c); \/\/port monitorida 40 natijasi (yig&#8217;indi) ko&#8217;rsatiladi.<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">void loop(){<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">void yigindiniHisoblash(byte a1, byte a2) {<br \/>\nc = a1 + a2;<br \/>\n}<br \/>\n<\/div><\/div>\n<p style=\"text-align: justify;\">Demak, ushbu holda <strong>a<\/strong> va <strong>b<\/strong> lokal o&#8217;zgaruvchilari funksiyaning argumenti sifatida ko&#8217;rsatilib, natija global <strong>c<\/strong> o&#8217;zgaruvchisi orqali qaytarilyapti. Ushbu funksiya natijani qaytarmasa-da, natija o&#8217;zlashtirilgan o&#8217;zgaruvchi global e&#8217;lon qilinganligi sababli, uning qiymatidan boshqa funksiyalarda ham foydalanilishi mumkin.<\/p>\n<p style=\"text-align: center;\"><strong>Funksiyaning boshqa ayrim turlari<\/strong><\/p>\n<p style=\"text-align: justify;\">C++ dasturlash tilida (Arduinoda ham) <strong>haddan tashqari yuklangan funksiya<\/strong> (&#8220;\u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&#8221;) deb ataladigan funksiya ham farqlanadi.<\/p>\n<p style=\"text-align: justify;\"><strong>Haddan tashqari yuklangan funksiya<\/strong> deganda, bir xil nom bilan e&#8217;lon qilingan, lekin har xil qiymat turidagi natijalarni qaytaradigan yoki turlicha sondagi argumentlarga ega bo&#8217;lgan funksiya tushuniladi. Bir yo&#8217;la misolga o&#8217;tamiz:<br \/>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> f;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">setup<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><strong><span class=\"enlighter-text wp-dark-mode-ignore\"> f1 = <\/span><span class=\"enlighter-m3 wp-dark-mode-ignore\">2<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">.5;<br \/>\n<\/span><\/strong><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><strong><span class=\"enlighter-text wp-dark-mode-ignore\"> f2 = <\/span><span class=\"enlighter-n0 wp-dark-mode-ignore\">0.25<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><\/strong><span class=\"enlighter-text wp-dark-mode-ignore\">Serial.<\/span><span class=\"enlighter-m3 wp-dark-mode-ignore\">begin<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">9600<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a = <\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">15, 25<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; <\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ natija 40<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a = <\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">15, 25<strong>, 35<\/strong><\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; <\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ natija 75<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">f = <\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">f1, f2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; <\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 2.75<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">Serial.<\/span><span class=\"enlighter-m3 wp-dark-mode-ignore\">println<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">Serial.<\/span><span class=\"enlighter-m3 wp-dark-mode-ignore\">println<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">f<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><\/p>\n<div class=\"enlighter wp-dark-mode-ignore\" style=\"text-align: justify;\">\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">loop<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a1 <\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k0 wp-dark-mode-ignore\">return<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a1 + a2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a1, <\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a2, <\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a3<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k0 wp-dark-mode-ignore\">return<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a1 + a2 + a3<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">yigindiniHisoblash<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a1, <\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-k0 wp-dark-mode-ignore\">return<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a1 + a2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<\/span><\/div>\n<\/div>\n<div class=\"wp-dark-mode-ignore\">\n<div class=\"wp-dark-mode-ignore\"><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<br \/>\n<\/div><\/div>\n<\/span><\/div>\n<\/div>\n<\/div>\n<p style=\"text-align: justify;\">Bu yerda bir xil nomli funksiya 3 xil usulda chaqirilganda 3 xil natija qaytariladi. Dastur ko&#8217;rsatilgan argumentlar soni va ularning qiymat turlariga qarab, kerakli funksiyani o&#8217;zi chaqiradi va tegishli natijani qaytaradi: argument sifatida 2 ta butun son ko&#8217;rsatilsa 1-funksiya, 3 ta butun son ko&#8217;rsatilsa 2-funksiya va <em><strong>float<\/strong><\/em> turli o&#8217;zgaruvchilar ko&#8217;ratilsa 3-funksiya bajariladi.<\/p>\n<p style=\"text-align: justify;\"><strong>O&#8217;zgaruvchining qiymatiga o&#8217;zgartirish kiritadigan funksiya<\/strong> &#8211; bu funksiyani chaqirish paytida argument sifatida ko&#8217;rsatilgan o&#8217;zgaruvchining dastlabki qiymatini o&#8217;zgartiradigan funksiya hisoblanadi.<\/p>\n<p style=\"text-align: justify;\">Oldingi funksiyalar bo&#8217;yicha misollardan ma&#8217;lumki, funksiyani e&#8217;lon qilish paytida e&#8217;lon qilingan yangi o&#8217;zgaruvchilar qiymatlari funksiyani chaqirish paytida argument sifatida ko&#8217;rsatilgan o&#8217;zgaruvchilarning qiymatlaridan nusxalangan edi. Funksiya kodidagi amallar esa faqat yangi lokal o&#8217;zgaruvchilar ustida bajarilgan. Ya&#8217;ni, oldingi o&#8217;zgaruvchilar qiymatiga ta&#8217;sir qilmagan. Navbatdagi turdagi funksiya bajarilishi natijasida aynan dastlabki o&#8217;zgaruvchi qiymati o&#8217;zgaradi. Buning uchun funksiyada dastlabki o&#8217;zgaruvchi qiymatini <strong>havola<\/strong> (&#8220;\u0441\u0441\u044b\u043b\u043a\u0430&#8221;) sifatida ko&#8217;rsatiladi. Natijada, funksiyaning ichida yangi o&#8217;zgaruvchi ustida bajarilgan amallar aslida dastlabki o&#8217;zgaruvchi qiymatini o&#8217;zgartiradi. Havolani ko&#8217;rsatishda funksiyani e&#8217;lon qilish paytida yangi o&#8217;zgaruvchi qiymat turi oxiriga <strong>&amp;<\/strong> (ampersand) belgisi qo&#8217;shilishi yetarli. Misol:<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nvoid setup(){<br \/>\nbyte a, b;<br \/>\nint c;<br \/>\nSerial.begin(9600);<br \/>\na = 15;<br \/>\nb = 25;<br \/>\nyigindiniHisoblash(a, b);<br \/>\nSerial.println(a); \/\/natija: <strong>10<br \/>\n<\/strong>Serial.println(b); \/\/natija: <strong>20<br \/>\n<\/strong>Serial.println(c); \/\/natija: <strong>30<br \/>\n<\/strong>}<\/p>\n<p style=\"text-align: justify;\">void loop(){<br \/>\n}<\/p>\n<p style=\"text-align: justify;\"><strong>void<\/strong> yigindiniHisoblash(<strong>byte&amp; a1, byte&amp; b1<\/strong>) {<br \/>\n<strong>a1=a1-5; <\/strong>\/\/<strong>a1<\/strong> ning o&#8217;zgarishi havola asosida <strong>a<\/strong> o&#8217;zgaruvchining qiymati o&#8217;zgarishiga olib keladi<br \/>\n<strong>b1=b1-5;<\/strong> \/\/<strong>b1<\/strong> ning o&#8217;zgarishi havola asosida <strong>b<\/strong> o&#8217;zgaruvchining qiymati o&#8217;zgarishiga olib keladi<br \/>\n<strong>c=a1+b1; <\/strong>\/\/yig&#8217;indi <strong>a<\/strong> va <strong>b<\/strong> ning o&#8217;zgargan qiymatlari asosida hisoblanadi<br \/>\n}<br \/>\n<\/div><\/div>\n<p style=\"text-align: center;\"><strong>Funksiya yordamida har xil qiymat turiga mansub o&#8217;zgaruvchilar bilan ishlash<br \/>\n<\/strong><\/p>\n<p style=\"text-align: justify;\">Dastur davomida har xil turdagi o&#8217;zgaruvchilar qiymati bilan ishlash jarayonini yagona funksiyani yaratish orqali ham bajarish mumkin. Masalan, bizga <strong>int<\/strong> va <strong>float<\/strong> turidagi qiymatlar berilgan bo&#8217;lsin, 2 xil funksiya bajarilishi natijalarini (ularning yig&#8217;indisini va matn sifatida birlashtirilgan holatini) port monitoriga chiqaramiz:<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\nvoid setup(){<br \/>\nSerial.begin(9600);<br \/>\nSerial.println(yigindiniHisoblash(25, 3.25));\u00a0 \/\/natija: 28.25<br \/>\nSerial.println(matngaAylantirish(25, 3.25));\u00a0 \/\/&#8221;25 va\u00a0 3.25 sonlari birlashdi&#8221; matni ko&#8217;rinadi<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">void loop(){<br \/>\n}<\/p>\n<p style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">float<\/span> yigindiniHisoblash(int a, float b) {<br \/>\n<span class=\"enlighter-text wp-dark-mode-ignore\">\u00a0 return<\/span> ((float)a+b);<br \/>\n}<\/p>\n<p style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">String<\/span> matngaAylantirish(int a, float b) {<br \/>\n<span class=\"enlighter-text wp-dark-mode-ignore\">\u00a0 return<\/span> ((String)a + &#8221; va &#8221; + b + &#8221; sonlari birlashdi&#8221;);<br \/>\n}<br \/>\n<\/div><\/div>\n<p style=\"text-align: center;\"><strong>Funksiyadan bir nechta natijalarni qaytarish<br \/>\n<\/strong><\/p>\n<p style=\"text-align: justify;\">Umuman olganda, C++ da (Arduinoda ham) funksiyadan bir nechta natijani qaytarish tushunchasi yo&#8217;q. Lekin, struktura yordamida murakkabroq bo&#8217;lsa-da, shunday &#8220;qo&#8217;lbola&#8221; funksiyani yaratsa bo&#8217;ladi.<\/p>\n<p style=\"text-align: justify;\">Struktura o&#8217;zi nima?<\/p>\n<p style=\"text-align: justify;\"><strong>Struktura<\/strong> (struct) &#8211; har xil qiymat turlari asosidagi o\u2019zgaruvchilarning bir nom ostida va alohida qiymat turi sifatida e\u2019lon qilinishi hisoblanadi.<\/p>\n<p style=\"text-align: justify;\">Struktura bilan ishlash quyidagi tartibda amalga oshiriladi:<\/p>\n<p style=\"text-align: justify;\">1) Global o&#8217;zgaruvchilar sohasida yangi <strong>struktura turi<\/strong> (yorlig&#8217;i) va uning tarkibidagi o&#8217;zgaruvchilar e&#8217;lon qilinadi;<br \/>\n2) E&#8217;lon qilingan struktura turi asosida funksiya yaratiladi (turlarini ko&#8217;rsatgan holda kerakli argumentlar ham sanab o&#8217;tiladi) va kerakli amallar kodi keltiriladi, natijalar umumlashgan holda struktura nomiga o&#8217;zlashtiriladi;<br \/>\n3) Asosiy kodda struktura nomi bo&#8217;yicha e&#8217;lon qilinadi va kerakli funksiyani chaqiruvchi kod kiritiladi.<\/p>\n<p style=\"text-align: justify;\">Tushunarli bo&#8217;lishi uchun misolni batafsil izohlari bilan misol keltiramiz:<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Strukturaga misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n\/\/funksiya natijalari float turida bo&#8217;lishini hisobga olib, barcha o&#8217;zgaruvchilarni shu tur bilan e&#8217;lon qilinadi!<\/p>\n<p style=\"text-align: justify;\">struct <strong>Amallar<\/strong> { \/\/&#8221;Amallar&#8221; nomli struktura turi (yorlig&#8217;i) e&#8217;lon qilinmoqda<br \/>\nfloat qushish; \/\/float turli qiymatni qabul qiluvchi &#8220;qushish&#8221; o&#8217;zgaruvchisi e&#8217;lon qilinmoqda<br \/>\nfloat ayirish; \/\/float turli qiymatni qabul qiluvchi &#8220;ayirish&#8221; o&#8217;zgaruvchisi e&#8217;lon qilinmoqda<br \/>\nfloat kupaytirish; \/\/float turli qiymatni qabul qiluvchi &#8220;kupaytirish&#8221; o&#8217;zgaruvchisi e&#8217;lon qilinmoqda<br \/>\nfloat bulish; \/\/float turli qiymatni qabul qiluvchi &#8220;bulish&#8221; o&#8217;zgaruvchisi e&#8217;lon qilinmoqda<br \/>\n};<\/p>\n<p style=\"text-align: justify;\">void setup {<br \/>\nSerial.begin(9600);<br \/>\n<strong>Amallar amal;<\/strong> \/\/&#8221;Amallar&#8221; umumlashgan turi asosida &#8220;amal&#8221; nomli struktura e&#8217;lon qilinmoqda<br \/>\n<strong>amal<\/strong> = <strong>hisoblash<\/strong>(5, 15.25); \/\/&#8221;hisoblash&#8221; nomli funksiya argumentlari ko&#8217;rsatilgan holda chaqirilmoqda va natija &#8220;amal&#8221; nomli strukturaga o&#8217;zlashtirilmoqda;<\/p>\n<p style=\"text-align: justify;\">Serial.println(<strong>amal.qushish<\/strong>); \/\/strukturadagi 1-o&#8217;zgaruvchi qiymati natija sifatida chiqarilmoqda<br \/>\nSerial.println(<strong>amal.ayirish<\/strong>); \/\/strukturadagi 2-o&#8217;zgaruvchi qiymati natija sifatida chiqarilmoqda<br \/>\nSerial.println(<strong>amal.kupaytirish<\/strong>); \/\/strukturadagi 3-o&#8217;zgaruvchi qiymati natija sifatida chiqarilmoqda<br \/>\nSerial.println(<strong>amal.bulish<\/strong>); \/\/strukturadagi 4-o&#8217;zgaruvchi qiymati natija sifatida chiqarilmoqda<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">void loop(){<br \/>\n}<\/p>\n<p style=\"text-align: justify;\">Amallar hisoblash(int a, float b){ \/\/Amallar turli (yorliqli) &#8216;hisoblash&#8217; funksiyasi e&#8217;lon qilinmoqda<br \/>\n<strong>Amallar amal;<\/strong> \/\/&#8217;amal&#8217; nomli ichki struktura e&#8217;lon qilinmoqda<br \/>\n<strong>amal.qushish = (float)a + b;<\/strong> \/\/struktura o&#8217;zgaruvchilariga qiymatlar o&#8217;zlashtirilmoqda;<br \/>\n<strong>amal.ayirish = b-(float)a;<\/strong> \/\/struktura o&#8217;zgaruvchilariga qiymatlar o&#8217;zlashtirilmoqda;<br \/>\n<strong>amal.kupaytirish = (float)a * b;<\/strong> \/\/struktura o&#8217;zgaruvchilariga qiymatlar o&#8217;zlashtirilmoqda;<br \/>\n<strong>amal.bulish = b\/(float)a;<\/strong> \/\/struktura o&#8217;zgaruvchilariga qiymatlar o&#8217;zlashtirilmoqda;<br \/>\n<strong>return amal;<\/strong> \/\/&#8217;amal&#8217; strukturasiga o&#8217;zlashtirilgan qiymatlar qaytarilmoqda<br \/>\n}<br \/>\n<\/div><\/div>\n<p style=\"text-align: justify;\">Yuqoridagi misolda biz <strong>int<\/strong> va <strong>float<\/strong> turli 2 ta son ustidagi 4 ta amallarni bajaruvchi &#8220;hisoblash&#8221; nomli funksiyani yaratdik.<\/p>\n<p style=\"text-align: center;\"><strong>Funksiyani tavsiflash va realizatsiya qilish<\/strong><\/p>\n<p style=\"text-align: justify;\">Yuqorida keltirilgan misollarning barchasida biz funksiyaning qanday e&#8217;lon qilinishi va chaqirilishini ko&#8217;rib chiqdik. Arduino bibliotekalarini yaratishda va umuman, kodni optimallashtirish maqsadida funksiyaning e&#8217;lon qilinishi (<strong>tavsiflash<\/strong>) va amalga oshirilishi (<strong>realizatsiya<\/strong>) ni ajratib qo&#8217;yish tavsiya etiladi. Ya&#8217;ni, loyiha boshida uni tavsiflanadi, boshqa joyida (xususan, unga ilova qilingan alohida faylda ham bo&#8217;lishi mumkin) realizatsiya qilinadi.<\/p>\n<p style=\"text-align: justify;\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Tavsiflashga misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<p style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">int c=0;<br \/>\nint<\/span> yigindiniHisoblash(byte a, byte b);<br \/>\n<span class=\"enlighter-text wp-dark-mode-ignore\">void<\/span> ayirma(byte a, byte b);<\/p>\n<p><span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Realizatsiyaga misol<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<p style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">int<\/span> yigindiniHisoblash(byte a, byte b) {<br \/>\nreturn a+b;<br \/>\n}<\/p>\n<p style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">void<\/span> ayirma(byte a, byte b){<br \/>\nc=a-b;<br \/>\n}<\/p>\n<p><span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<p style=\"text-align: justify;\">Ko&#8217;rinib turibdiki, tavsiflash realizatsiyaning boshlang&#8217;ich qismidan iborat xolos. Lekin asosiy qoida shundan iboratki, tavsiflash aynan loyiha boshida amalga oshirilishi kerak, shundan keyin realizatsiyani hatto boshqa fayl yoki bibliotekaga ham ko&#8217;chirib qo&#8217;yish mumkin (boshqa fayldan qo&#8217;shib olish uchun uning nomini <strong>#include<\/strong> operatori orqali e&#8217;lon qilish ham talab etiladi).<\/p>\n<p style=\"text-align: center;\"><strong>Shablonli funksiyalar<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong>Shablonli funksiya<\/strong> &#8211; bu har qanday qiymat turi bilan ishlay oladigan funksiya hisoblanadi. Berilgan qiymatdan kelib chiqib kompilyatorning o&#8217;zi uning qanday turga mansubligini aniqlaydi va zarurat bo&#8217;lsa, bir nechta haddan tashqari yuklangan funksiya yaratib olishi mumkin.<\/p>\n<p style=\"text-align: justify;\">Shablonli funksiya quyidagicha e&#8217;lon qilinadi:<\/p>\n<p style=\"text-align: justify;\"><span class=\"enlighter-k0 wp-dark-mode-ignore\">template<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">&lt;<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">shablon_parametrlari<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&gt;<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> funksiya_tavsifi<\/span><\/p>\n<div style=\"text-align: justify;\"><span class=\"enlighter-text wp-dark-mode-ignore\">funksiya tavsifi<\/span>ni kengaytirib ko&#8217;rsatish mumkin:<\/div>\n<p style=\"text-align: justify;\"><span class=\"enlighter-k0 wp-dark-mode-ignore\">template<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">&lt;<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">shablon_paramterlari<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&gt;<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> qiymat_turi <\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">argumentlar<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><br \/>\n<span class=\"enlighter-text wp-dark-mode-ignore\">funksiya_kodi<\/span><br \/>\n<span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><br \/>\nMisol sifatida har qanday turdagi sonning kvadratini hisoblash funksiyasini yaratamiz:<\/p>\n<p style=\"text-align: justify;\"><span class=\"enlighter-k0 wp-dark-mode-ignore\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Shablonli funksiya<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\ntemplate<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&lt;<\/span><span class=\"enlighter-k0 wp-dark-mode-ignore\">typename<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> shablon<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&gt;<\/span><br \/>\n<span class=\"enlighter-text wp-dark-mode-ignore\">shablon <\/span><span class=\"enlighter-m0 wp-dark-mode-ignore\">kvadrat<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">shablon son<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<\/span><br \/>\n<span class=\"enlighter-k0 wp-dark-mode-ignore\">return<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> son * son;<\/span><br \/>\n<span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/span><br \/>\n<span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">setup<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> byte a = 10;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> b = 125;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> c = <\/span><span class=\"enlighter-n0 wp-dark-mode-ignore\">3.14<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a = <\/span><span class=\"enlighter-m0 wp-dark-mode-ignore\">kvadrat<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; \/\/natija: 100<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> b = <\/span><span class=\"enlighter-m0 wp-dark-mode-ignore\">kvadrat<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">b<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; \/\/natija: 15625<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> c = <\/span><span class=\"enlighter-m0 wp-dark-mode-ignore\">kvadrat<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">c<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; \/\/natija: 9,85<br \/>\n<\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ a == 100<br \/>\n<\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ b == 15625<br \/>\n<\/span><span class=\"enlighter-c0 wp-dark-mode-ignore\">\/\/ c == 9.85<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<br \/>\n<\/div><\/div>\n<\/span><\/p>\n<div style=\"text-align: justify;\">Shablonga yanada ko&#8217;proq qiymatlar turini uzatish mumkin. Ixtiyoriy turlarga mansub bo&#8217;lgan ikkita sonning ko&#8217;paytmasini hisoblovchi funksiyaga misol:<\/div>\n<div style=\"text-align: justify;\">\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Shablonli funksiya<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<span class=\"enlighter-k0 wp-dark-mode-ignore\">template<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&lt;<\/span><span class=\"enlighter-k0 wp-dark-mode-ignore\">typename<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> T1, <\/span><span class=\"enlighter-k0 wp-dark-mode-ignore\">typename<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> T2<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">&gt; \/\/ikki argumentli shablon e&#8217;lon qilinyapti<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">uint32_t<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">kupaytirish<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">T1 a1, T2 b1<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{ \/\/ixtiyoriy turli 2 ta sonni ko&#8217;paytirish funksiyasi e&#8217;lon qilinyapti<br \/>\n<\/span><span class=\"enlighter-k0 wp-dark-mode-ignore\">return<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> a1 * b1;<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">setup<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">byte a = 10;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> b = 125;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> c = <\/span><span class=\"enlighter-n0 wp-dark-mode-ignore\">3.14<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">long<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> d = <\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\"><span class=\"enlighter-m0 wp-dark-mode-ignore\">kupaytirish<\/span>(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a, b<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">d = <\/span><span class=\"enlighter-m0 wp-dark-mode-ignore\">kupaytirish<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a, c<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<\/div><\/div><\/span><\/p>\n<\/div>\n<div class=\"enlighter wp-dark-mode-ignore\">\n<div style=\"text-align: justify;\">Shablonli funksiyani chaqirishni soddaroq ifodalash mumkin:<\/div>\n<div><span class=\"enlighter-g1 wp-dark-mode-ignore\"><span class=\"enlighter-m0 wp-dark-mode-ignore\">kupaytirish&lt;<span class=\"enlighter-text wp-dark-mode-ignore\">byte, <\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">float<\/span>&gt;<\/span>(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a, b<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">;<br \/>\n<\/span><\/p>\n<div style=\"text-align: center;\"><strong>Makro-funksiyalar<\/strong><\/div>\n<div style=\"text-align: justify;\"><strong>Makro-funksiya <\/strong>&#8211; <span class=\"enlighter wp-dark-mode-ignore\"><span class=\"enlighter-k4 wp-dark-mode-ignore\">#define<\/span><\/span> operatori yordamida e&#8217;lon qilinadigan va natijasi hisoblanadigan funksiya. Bunday funksiyani foydalanuvchi funksiyasi sifatida e&#8217;lon qilish ham shart emas. Shunchaki loyiha boshlang&#8217;ich qismidagi sohada <strong>#define<\/strong> operatorining o&#8217;ziga xos vazifasi &#8211; u orqali e&#8217;lon qilingan belgilar ketma-ketligini biz ko&#8217;rsatgan har qanday qiymat bilan almashtirishi hisoblanadi.<\/div>\n<div style=\"text-align: justify;\">Masalan, makrofunksiyani quyidagicha e&#8217;lon qilishimiz mumkin:<\/div>\n<div style=\"text-align: justify;\">\n<p><span class=\"enlighter-k4 wp-dark-mode-ignore\"><span class=\"enlighter-k0 wp-dark-mode-ignore\"><div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-plus su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Makro-funksiya<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<\/span><\/span>#define yigindi(x, y) ((x)+(y))<br \/>\nUning mazmuni: kompilyatsiya paytida uchragan har qanday <span class=\"enlighter-k4 wp-dark-mode-ignore\">sum(1-qiymat, 2-qiymat)<\/span> kodini &#8220;1-qiymat+2-qiymat&#8221; ga, ya&#8217;ni qiymatlarning yig&#8217;indisiga almashtiriladi:<br \/>\n<span class=\"enlighter-k4 wp-dark-mode-ignore\">#define yigindi(x, y) ((x)+(y))<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">setup<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">byte a = 10;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">byte b = 20;<br \/>\n<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">byte c = <\/span><span class=\"enlighter-k4 wp-dark-mode-ignore\">yigindi<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">a, b<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; \/\/natija: c=30<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">int<\/span><span class=\"enlighter-text wp-dark-mode-ignore\"> d = <\/span><span class=\"enlighter-k4 wp-dark-mode-ignore\">yigindi<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">(<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">500, 900<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">)<\/span><span class=\"enlighter-text wp-dark-mode-ignore\">; \/\/natija: d=1400<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<br \/>\n<\/span><span class=\"enlighter-k5 wp-dark-mode-ignore\">void<\/span> <span class=\"enlighter-m0 wp-dark-mode-ignore\">loop<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">()<\/span> <span class=\"enlighter-g1 wp-dark-mode-ignore\">{<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\">}<br \/>\n<\/span><span class=\"enlighter-g1 wp-dark-mode-ignore\"><\/div><\/div><\/span><\/p>\n<\/div>\n<div style=\"text-align: justify;\">Makro-funksiyaning yana bir qulayligi &#8211; u oddiy funksiya kabi xotiradagi manzilga ega bo&#8217;lmaydi va chaqirilgan paytida to&#8217;g&#8217;ridan-tog&#8217;ri bajarilib ketiladi. Bu esa, dastur ishini tezlashtirishga yordam beradi. Shu bilan birga, uning ushbu xususiyati ba&#8217;zi vaziyatlarda uning kamchiligi ham hisoblanadi. Agar makrofunksiyani chaqirish dastur davomida juda ko&#8217;p bo&#8217;lsa, qiymatni boshqasiga almashtirishlar soni ham ko&#8217;payib ketadi va makro-funksiya xotiradan ko&#8217;proq joy oladi. Shuning uchun makro-funksiyadan o&#8217;rinli foydalanish zarur, masalan, unga murojaatlar soni kam bo&#8217;ladigan, lekin murakkab hisoblash jarayonlari bajariladigan holatlar uchun qo&#8217;llash maqsadga muvofiq.<\/div>\n<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"text-align: justify;\">Yuqorida biz funksiyalarning dasturlashdagi ahamiyati, ularning asosiy turlari va boshqa jihatlari bilan tanishib chiqdik va hozircha shu ma&#8217;lumotlar bilan sheklanamiz. Qo&#8217;shimcha ma&#8217;lumotlarni esa, har doim Internet sahifalaridan topish mumkin (<em>Materialni tayyorlashda asosan rus tilidagi <a href=\"https:\/\/alexgyver.ru\/lessons\/functions\/?ysclid=lri572gfet965647058\">alexgyver.ru<\/a> sayti materiallaridan foydalanildi. Mazkur sayt Arduinoni o&#8217;rganish yo&#8217;nalishidagi rus internetining yetakchi saytlaridan biriga aylanib ulgurgan<\/em>).<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Funksiya tushunchasi Ma&#8217;lumki, Arduinoda har qanday skechda 2 ta majburiy funksiya mavjud bo&#8217;ladi: &#8220;setup()&#8221; va &#8220;loop()&#8221; funksiyalari. Lekin bulardan tashqari, skechda foydalanuvchi o&#8217;z funksiyalaridan hamda biblioteka funksiyalaridan ham foydalanishi mumkin. Biblioteka funksiyalaridan foydalanish ham foydalanuvchi funksiyalariga o&#8217;xshash tarzda amalga oshiriladi. Lekin, biblioteka funksiyalari asosiy sketchdan tashqari fayllarda hosil qilinganligi sababli, bunday funksiyalardan foydalanishdan oldin sketchning [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-1122","post","type-post","status-publish","format-standard","hentry","category-qollanmalar"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/1122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1122"}],"version-history":[{"count":50,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/1122\/revisions"}],"predecessor-version":[{"id":4931,"href":"https:\/\/yarat.uz\/index.php?rest_route=\/wp\/v2\/posts\/1122\/revisions\/4931"}],"wp:attachment":[{"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yarat.uz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}