Orodha ya maudhui:

Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Python: Hatua 10
Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Python: Hatua 10

Video: Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Python: Hatua 10

Video: Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Python: Hatua 10
Video: Cheki jama alivyo paa na ndege ya kichawi utashangaa 2024, Novemba
Anonim
Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Chatu
Jinsi ya kutengeneza Programu ya ujumuishaji wa Nambari katika Chatu

Hii ni mafunzo juu ya jinsi ya kuunda na kuendesha programu ambayo itatathmini ujumuishaji dhahiri kwa kutumia hesabu ya ujumuishaji wa nambari. Nimegawanya hatua katika sehemu 3: kuelewa algorithm ambayo itatumika kutengeneza programu, kuorodhesha programu kwa kutumia lugha ya programu ya Python, na kuendesha programu hiyo. Mafunzo haya yamekusudiwa mtu ambaye anaweza kuhitaji haraka kufanya kikokotoo kutathmini ujumuishaji dhahiri, au labda anahitaji algorithm ya kutumiwa katika programu kubwa zaidi. Maarifa ya kimsingi ya hesabu yanatarajiwa, lakini habari inayofaa ya hesabu inachunguzwa. Ujuzi wa programu hautarajiwa, lakini ni muhimu kwani ninaelezea kwa ufupi tu jinsi programu inavyofanya kazi.

Nini utahitaji:

Kompyuta ya kibinafsi iliyo na ufikiaji wa mtandao

Hatua ya 1: Kuelewa Algorithm Sehemu ya 1: Ujumuishaji dhahiri na Matumizi yake

Kuelewa Sehemu ya 1 ya Algorithm: Ujumuishaji dhahiri na Matumizi yake
Kuelewa Sehemu ya 1 ya Algorithm: Ujumuishaji dhahiri na Matumizi yake

Nitafikiria unajua kidogo ya kile kilicho muhimu katika muktadha wa hesabu za kimsingi. Jumuishi ni muhimu kwa sababu zinakuruhusu kujumlisha safu ya maadili iliyozidishwa na urefu mdogo; hii ni muhimu katika maeneo mengi ya fedha, nadharia ya nambari, fizikia, kemia, na sehemu zingine nyingi. Mpango huu, hata hivyo, utakuruhusu tu kuhesabu eneo lililo chini ya ukingo wa muda ulio na mwisho, au kwa maneno mengine, haifanyi tathmini ya anti-derivatives - algorithm yenye nguvu zaidi ni muhimu kwa hilo. Algorithm hii ni muhimu ikiwa unahitaji kutathmini ujumuishaji dhahiri katika programu kubwa iliyoainishwa kuelekea kitu kingine, au ikiwa unataka kuangalia jibu lako kwa ujumuishaji wowote dhahiri uliofanywa kwa mkono.

Ujumuishaji wa kimsingi wa msingi unawakilisha eneo chini ya pembe iliyoelezewa na kazi k.v. f (x). Kwa ujumuishaji dhahiri, tunatafuta eneo kati ya alama mbili (zilizoandikwa a na b mtawaliwa). Kwenye picha, mkoa wa zumaridi ndio eneo ninalorejelea, na equation ya kuamua hii pia imeonyeshwa katika mkoa huo. Kazi iliyoonyeshwa kwenye picha ni ya kiholela.

Hatua ya 2: Kuelewa Sehemu ya 2 ya Algorithm: Ukadiriaji wa Nambari

Kuelewa Sehemu ya 2 ya Algorithm: Ukadiriaji wa Nambari
Kuelewa Sehemu ya 2 ya Algorithm: Ukadiriaji wa Nambari

Kompyuta inahitaji seti pana ya maagizo ya kuhesabu eneo hilo chini ya kazi holela ambayo itafanya kazi kwa kazi yoyote, kwa hivyo njia za uchambuzi ambazo unaweza kuwa na ufahamu nazo hazina faida yoyote kwani ni muhimu sana. Njia moja ya kuhesabu ujumuishaji takriban, ambayo kompyuta inaweza kushughulikia, hufanywa kwa kujaza eneo la kupendeza na kiwango kilichofafanuliwa na mtumiaji cha mstatili wa upana sawa na urefu wa kutofautisha kisha kufupisha maeneo yote ya mstatili. Sifa ngumu ya mistatili itaacha eneo lingine likiwa halijaguswa, kwa hivyo kwanini hii inachukuliwa kama ukadirio; Walakini, mstatili zaidi unaweza kubana kati ya mipaka (a na b), hesabu itakuwa sahihi zaidi kwani maeneo ambayo hayajaguswa yanakuwa machache zaidi. Kwa kuwa kompyuta itafanya kazi hiyo, unaweza kuweka idadi ya mstatili katika mkoa unaotakiwa kuwa idadi kubwa sana, na kufanya makadirio kuwa sahihi sana. Katika picha inayounga mkono, fikiria kwamba kila mstatili katika eneo lililotengwa ni wa upana sawa. Nilifanya bidii yangu kuwafanya upana sawa katika Rangi ya Microsoft, lakini sikufanya kazi bora.

Hatua ya 3: Kuelewa Algorithm Sehemu ya 3: Kanuni ya Midpoint

Kuelewa Sehemu ya 3 ya Algorithm: Utawala wa Midpoint
Kuelewa Sehemu ya 3 ya Algorithm: Utawala wa Midpoint

Sheria hii inachagua jinsi mstatili hutengenezwa na kutumiwa katika makadirio. Kila mstatili kutoka kwa "N" mstatili lazima uwe na upana sawa, Δx, lakini kila mstatili nth hauwezi kuwa sawa sawa: sababu tofauti ni urefu ambao hutofautiana kama kazi iliyopimwa wakati fulani. Utawala wa katikati unapata jina lake kutokana na ukweli kwamba unatathmini urefu wa kila mstatili kama f (x_n), ambapo "x_n" ni kitovu cha katikati cha kila mstatili, kama ilivyoelekezwa kushoto au kulia kwa mstatili. Kutumia midpoint ni kama kutekeleza wastani ambao utafanya makadirio kuwa sahihi zaidi kuliko ikiwa utatumia kulia au kushoto. Picha inayounga mkono hatua hii inafupisha jinsi sheria ya midpoint inafafanuliwa kihesabu.

Hatua ya 4: Kuunda Sehemu ya Programu 1: Kupakua Mkusanyaji / Mhariri wa Python

Sasa kwa kuwa unaelewa algorithm ambayo inahitaji kutekelezwa, ni suala la kupata kompyuta kukufanyia hesabu. Hatua ya kwanza ya kuwaambia kompyuta nini cha kufanya ni kupata zana za kufanya hivyo. Algorithm hii inaweza kutolewa kwa lugha yoyote; kwa unyenyekevu, mpango huu utasajiliwa kwa lugha ya chatu. Kuamuru kompyuta yako kufanya shughuli na Python, utahitaji mhariri ambayo inachukua maagizo yaliyoandikwa katika lugha hiyo ambayo itakusanywa kwa lugha ya mashine ambayo kompyuta yako inaweza kuelewa ili iweze kutekeleza majukumu unayoiambia ifanye. Katika siku hii na umri, mhariri na mkusanyaji kawaida hujumuishwa, hata hivyo sivyo ilivyo kila wakati. Unaweza kutumia mhariri / mkusanyaji wowote unayofaa, lakini nitakuonyesha jinsi ya kupata kipenzi changu cha kibinafsi cha Python: Canopy. Ikiwa tayari unayo mhariri / mkusanyaji, unaweza kuruka hatua hizi.

  1. Nenda kwa
  2. Bonyeza Pakua Dari
  3. Bonyeza kitufe cha kupakua kinacholingana na mfumo wako wa uendeshaji

    Upakuaji utaanza kiatomati

  4. Fuata maagizo ya kuingizwa baada ya kuanza faili ya utekelezaji
  5. Endesha Programu
  6. Bonyeza "Mhariri" kutoka kwa menyu kuu ya programu
  7. Bonyeza "unda faili mpya" katikati ya skrini

Kutoka wakati huu unapaswa kuona dirisha nyeupe tupu na mshale unaofanana na hati ya msingi ya usindikaji wa maneno. Sasa uko tayari kuanza kuorodhesha hesabu ya ujumuishaji wa nambari kwa kusuluhisha ujumuishaji dhahiri. Hatua zinazoendelea zitakuwa na kijisehemu cha nambari ambacho utanakili na ufafanuzi wa kile snippet inafanya kwa mpango huo kwa ujumla.

Hatua ya 5: Kuunda Sehemu ya Programu ya 2: Kuingiza Kazi na Kufafanua anuwai

Kuunda Sehemu ya Programu ya 2: Kuingiza Kazi na Kufafanua Vigeuzi
Kuunda Sehemu ya Programu ya 2: Kuingiza Kazi na Kufafanua Vigeuzi

Nakili nambari kwenye picha.

Kwa programu yoyote unaweza kujiona ukiweka coding, kutakuwa na anuwai. Tofauti ni jina lililopewa thamani ambayo itatumika na inayoweza kubadilika. Katika lugha nyingi za programu (ikiwa sio zote) lazima uanze kutofautisha kabla mpango hauwezi kuibadilisha. Katika kesi ya programu hii nimetaja vigeuzi "N," "a," na "b." Thamani hizi zinawakilisha idadi ya iterations (AKA idadi ya mstatili), mpaka wa chini, na mipaka ya juu mtawaliwa. Unaweza kutaja haya kitu chochote unachotaka, lakini kulinganisha fomula zilizopewa katika "Kuelewa Algorithm Sehemu ya 3: Utawala wa Midpoint," ni bora kuziweka sawa. Ona kwamba hazijawekwa tu kwa thamani maalum. Hii ni kwa sababu zinafanywa pembejeo ambazo, wakati programu inaendeshwa, mtumiaji wa programu anaweza kufafanua thamani itakuwa nini. Maandishi katika nukuu, baada ya amri ya kuingiza, hujitokeza wakati unapoendesha programu kukuambia ni aina gani ya thamani ya kucharaza. Pia utagundua kuwa "int" na "kuelea" hutumiwa kabla ya majina ya pembejeo. Masharti haya yanaambia kompyuta ni aina gani ya kutofautisha thamani hii. "Int" ni nambari kamili, na "kuelea" ni thamani ya uhakika inayoelea (yaani decimal). Inapaswa kuwa wazi kwa nini hizi zimeteuliwa kama hizo.

Nakala yoyote iliyopo baada ya "#" ni maoni ambayo inamruhusu mpangaji kufuata nambari hiyo kwa njia ya kibinadamu; Nimetoa maoni fulani kwenye nambari yangu ambayo utanakili, lakini jisikie huru kuongeza maoni yoyote ambayo hukusaidia haswa. Programu haitasoma chochote na "#" kabla yake kama amri.

Sehemu ya nambari inayosomeka "kutoka kwa uagizaji wa hesabu" "inauambia mpango huo kuagiza safu ya kazi za kihesabu ambazo zinaweza kutumiwa bila kuzipanga mwenyewe. "*" Inamaanisha "yote." Soma sehemu hii ya nambari kama: kutoka kwa maktaba ya kuagiza math kazi zote. Hii hukuruhusu kutumia kazi za kihesabu kama sine, cosine, logi, exp, n.k Kazi hizi zinaweza kuunganishwa kihisabati ndani ya nambari.

Hatua ya 6: Kuunda Programu Sehemu ya 3: Kuunda Kazi ya Ujumuishaji

Kuunda Sehemu ya Programu ya 3: Kuunda Kazi ya Ujumuishaji
Kuunda Sehemu ya Programu ya 3: Kuunda Kazi ya Ujumuishaji

Nakili nambari kwenye picha iliyo chini ya nambari iliyotangulia.

ONYO: Sehemu hii ni mnene, na ninataka kuondoa vitu kadhaa ambavyo vinaweza kutatanisha. Wakati wa kuzungumza juu ya programu, neno "kazi" linaibuka sana. Neno hili pia linaibuka sana wakati unazungumza juu ya hesabu. Kwa hivyo, kutoka wakati huu na kuendelea, wakati ninazungumza juu ya kazi kwa maana ya programu, nitaandika "kazi ya Python," na wakati ninazungumza juu ya kazi ya hesabu, nitasema "kazi ya hisabati." Wakati fulani tutatumia kazi ya Python kama uwakilishi wa kazi ya hesabu inayohusika.

Kijisehemu kijacho cha nambari ndio moyo wa programu. Hapa, kazi ya Python inafafanuliwa ambayo hufanya hesabu ya ujumuishaji wa nambari kwa kutumia sheria ya katikati.. ambayo pia hufafanuliwa ndani ya "Jumuisha" kazi ya Python. Unaweza kuita kazi hii ya Python kitu chochote unapofanya usimbuaji, lakini ni busara kuiita iweze kujumuisha kwani ni kazi ambayo inaunganisha kazi ya hisabati.

Kwa wakati huu ni muhimu kutoa maoni juu ya jinsi Python hutenganisha vizuizi vya nambari. Kizuizi cha nambari ni sehemu nzima inayofanya kazi fulani. Lugha tofauti za programu zitakuwa na njia maalum za kutofautisha "vitalu" hivi. Kwa Python, kizuizi kinatofautishwa na indentations: kila sehemu ya kufanya kazi ina indent yake mwenyewe, na kunaweza kuwa na vizuizi vilivyowekwa ndani ya vizuizi vingine vya ndani. Hii inawakilisha majukumu ndani ya majukumu, na kimsingi inaelezea mpangilio ambao nambari inahitaji kutekelezwa. Katika kesi ya kazi iliyofafanuliwa ya chatu "Unganisha," kila kitu ndani ya kazi hiyo kimewekwa kitalu kimoja na hivyo kutofautisha majukumu ambayo yatatekelezwa ndani ya kazi hiyo. Kuna sehemu zilizoingia ndani ya kazi hii ya Python ambayo hufanya majukumu yao pia. Inakwenda kama ifuatavyo: amri (kazi) imewekwa, koloni inafuata amri, na kile amri inafanya imewekwa chini.

Mara tu baada ya kufafanua kazi ya "unganisha" Python, utafafanua kazi nyingine ya Python iitwayo f (x). Hii inawakilisha kazi ya hisabati ambayo itaunganishwa. Kwa kila kazi tofauti ya hisabati unayotaka kujumuisha, itabidi upeleke kwenye laini hii ya programu kuibadilisha (tofauti na anuwai ambazo hufafanuliwa wakati programu inaendeshwa). Kila kazi ya Python itakuwa na thamani ya kurudi, hii ndio kazi inarudi ukitupa thamani. Katika kesi hii thamani ya kutupwa ni "x," na neno hili "x" litachukua thamani ya kile unachokitupa - ni thamani ya muda mfupi.

Ifuatayo, kitanzi hufanya kama muhtasari unaofafanuliwa katika fomula katika sehemu ya "Kuelewa Algorithm" ya mafunzo haya. Muhtasari huu unahitaji vigeugeu zaidi, moja ambayo itafanya kama dhamana ya kurudi kwa kazi yote ya "Unganisha" Python. Kabla ya kitanzi, nimechagua vigeuzi hivi kama "thamani," na "thamani2." kazi ya kitanzi ni kupindua juu ya anuwai ya anuwai ya kutofautishwa ulioteuliwa, ambayo inaweza kufafanuliwa kwa urahisi ndani ya amri ya kitanzi; katika kesi hii, tofauti hiyo ni "n." Masafa ambayo iteration hufanyika ni 1 hadi N + 1. Unapaswa kugundua kuwa muhtasari uliofafanuliwa katika fomula zilizotajwa hapo juu ni kati ya 1 hadi N. Tunafafanua kwa njia hii kwa sababu lugha ya Python inahesabu kila thamani iliyohesabiwa kuanzia sifuri, kwa hivyo inabidi tugeuze anuwai ya maadili ili kutoshea tunayotaka. masafa. Kitanzi hicho basi kinaruhusu muhtasari wa urefu wote wa mstatili pamoja na huhifadhi thamani hiyo kwa kutofautisha ambayo niliiita "thamani." Hii inaonekana katika kipande cha nambari ambacho kinaonekana kama: thamani + = f (a + ((n- (1/2)) * ((b-a) / N))).

Kutoka hapo, kipande kifuatacho cha nambari kinatumia ubadilishaji uitwao "value2" ambao unapewa kuwa jumla ya urefu wote wa kila mstatili ulioongezwa na upana uliowekwa wa kila mstatili - hili ni jibu letu la mwisho ambalo tunataka iliyoonyeshwa na programu yetu, na kwa hivyo ndio dhamana ya kurudi ya "Unganisha" kazi ya Python.

Hatua ya 7: Kuunda Programu Sehemu ya 4: Kuonyesha Jibu

Kuunda Sehemu ya Programu ya 4: Kuonyesha Jibu
Kuunda Sehemu ya Programu ya 4: Kuonyesha Jibu

Nakili nambari kwenye picha iliyo chini ya nambari iliyotangulia.

Sasa kwa kuwa jibu linaweza kupatikana kupitia kazi ya "Unganisha" Python, tunataka kuweza kuionyesha. Hili ni suala la kuweka maadili ambayo yalikuwa yameingizwa na mtumiaji ("N," "a," na "b") katika kazi ya "Unganisha" Python na uchapishe kwenye skrini. Amri hii imeonyeshwa kwenye laini ya 21, na ndiyo yote unayohitaji kufanya kumaliza hatua hii. Nambari kwenye mistari ya 19 na 20 iko tu kwa "kupendeza" pato la programu nzima.. kuchapishwa baada ya mstari huo wa maandishi.

Hatua ya 8: Kuendesha Programu Sehemu ya 1: Kuendesha Programu Kama ilivyo

Kuendesha Programu ya Sehemu ya 1: Kuendesha Programu Kama ilivyo
Kuendesha Programu ya Sehemu ya 1: Kuendesha Programu Kama ilivyo

Ikiwa hutumii Dari, basi labda hauitaji hata kufuata hatua hii kabisa na kuendesha programu inaweza kuhitaji taratibu tofauti. Katika Canopy, kabla ya kuweza kuendesha programu, utahitaji kuihifadhi. Aina ya faili ya programu ya Python ni faili ya.py - inaokoa kiatomati kama hii. Chagua mahali unataka faili iokolewe, basi utaweza kuendesha programu.

Kuendesha Programu:

  1. Piga kitufe kijani ambacho kinaonekana kama "kitufe cha kucheza" kilicho kwenye mwambaa zana hapo juu ambapo jina la faili yako linaonekana (rejea picha).
  2. Programu hiyo itaanza kwenye skrini ya chini ya mhariri ambayo inajulikana kama mazingira ya uchambuzi wa data ya Canopy. Kwa kudhani ulinakili vidokezo kama nilivyoviandika, unapaswa kuona chini ya mazingira ya uchambuzi wa data ya Canopy haraka: "Ingiza mara ngapi unataka kujumlisha (mara zaidi = sahihi zaidi):." (rejea picha)
  3. Ingiza kwa thamani ya mara ngapi unataka kufanya iteration yaani 10000 (ni ngapi mstatili unataka kushinikiza ndani ya eneo lako), kisha bonyeza Enter.
  4. Vidokezo zaidi vitaonekana na taarifa ambazo zinapaswa kuwa ni maelekezo ya kawaida ya kuingiza uliyoingizwa kwenye programu katika hatua ya 5. Wajaze kwa usahihi kama vile nambari 3 hapo juu.
  5. Muhimu unapaswa kutathminiwa, na matokeo yaonekane.

Ikiwa uliandika programu kama ilivyoonyeshwa kwenye picha zilizotangulia, umejumuisha tu f (x) = x ^ 2 juu ya mipaka kadhaa. Muhimu wa x ^ 2 ni rahisi kutathmini kwa mkono, kwa hivyo unapaswa kuangalia na kuhakikisha kuwa programu ilitoa jibu la karibu sana kwa thamani sahihi ya uchambuzi iliyoamuliwa kwa mkono. Wakati ninaendesha programu na maadili N = 10000, a = 0, na b = 10, napata jibu 333.33333249999964. Jibu sahihi la uchambuzi, ni 333.333. Hii ni sahihi sana na haraka. Kwa kweli umebana mstatili 10, 000 kati ya 0 na 10 kwenye mhimili wa x na umetumia kukadiria eneo chini ya curve x ^ 2!

Hatua ya 9: Kuendesha Programu Sehemu ya 2: Kuunganisha Kazi zingine za Hesabu

Kuendesha Programu Sehemu ya 2: Kuunganisha Kazi zingine za Hesabu
Kuendesha Programu Sehemu ya 2: Kuunganisha Kazi zingine za Hesabu

Katika hatua ya awali, ikiwa umekuwa ukifuata kwa uaminifu, uliunganisha f (x) = x ^ 2. Hiyo sio kazi pekee ya kihesabu ambayo mpango huu unaweza kujumuisha. Kumbuka kutoka hatua ya 5 uliingiza safu ya maktaba ya hesabu ya kazi za Python kwenye programu. Hii hukuruhusu kutumia kazi ngumu zaidi za kihesabu ambazo zinaweza kuunganishwa. Wacha tupige risasi. Kwa kweli, unaweza kutumia kazi yoyote unayopenda, lakini nitaonyesha zaidi usahihi wa nambari hii kwa kujumuisha kazi fulani ya kihesabu ambayo inatoa thamani inayojulikana wakati imeunganishwa juu ya anuwai fulani. Kazi hiyo ni f (x) = Dhambi [x]. Kazi hii ya hesabu inaonyeshwa kwenye picha ya kwanza inayoambatana, iliyopangwa kutoka 0 hadi 2π, na eneo la kupendeza limetiwa kivuli kwa zumaridi. Kuna idadi sawa ya eneo chanya kwani kuna eneo hasi katika kipindi hiki, kwa hivyo ikiwa utaongeza jumla ya eneo, unapaswa kupata sifuri. Wacha tuone ikiwa hii kweli inatokea:

Kuweka kazi ya hisabati f (x) = Sin [x] katika programu:

  1. Kabla ya kuendesha programu tena, chini ya maoni "#chapa kazi yako baada ya kurudi," andika: sin (x) ambapo x ** 2 iko sasa. (rejea picha).
  2. Endesha programu kwa kupiga kitufe cha kucheza kijani tena.
  3. Chapa 10000 kwa N thamani (ni mara ngapi unataka kujumlisha).
  4. weka "0" kwa mpaka wa chini.
  5. Weka 6.2832 kwa mpaka wa juu (takriban 2π).
  6. Angalia ni thamani gani unayopata.

Wakati nilifanya hivi, niliishia kupata thamani ya 1.079e-10: hii ni sawa na.0000000001079, ambayo iko karibu kabisa na sifuri, kwa hivyo inaonekana kuwa sahihi, na inaonyesha kuwa algorithm inashughulikia eneo hasi vya kutosha.

Hatua ya 10: Kuendesha Programu Sehemu ya 3: Kupanua Programu

Kwa wakati huu umemaliza: unayo algorithm kamili inayofanya kazi iliyowekwa kwenye Python ambayo inaendesha vizuri na inatoa majibu sahihi sana. Walakini, mpango huu unaweza kuboreshwa. Mimi sio programu, na nina uzoefu mdogo na Python. Kwa kweli, ilibidi nijirudishe mwenyewe kwa kutumia Python kumaliza mafunzo haya, lakini hiyo inapaswa kukupa ujasiri kwamba Python ni lugha rahisi kujifunza. Hoja yangu ni kwamba unaweza kupanua programu hii kwa kuifanya ifanikiwe zaidi, labda utekeleze GUI fulani, na uifanye iwe rahisi kutumia.

Mawazo yangu juu ya kupanua programu:

  • Tekeleza kiolesura cha mtumiaji cha picha kinachokuruhusu kuendesha programu bila kutumia mazingira ya uchambuzi wa data wa Canopy
  • Fanya hivyo ili kazi ya hesabu kuunganishwa sio lazima iwe pembejeo ndani ya programu, lakini inaweza kuwa pembejeo baada ya programu kuendeshwa (mwanzoni nilikuwa nikijaribu kufanya hivyo, lakini sikuweza kutambua).
  • Fafanua kazi ya "Jumuisha" Python kwa hivyo inachukua f (x) kazi kama ilivyopangiwa kuwa na f (x) kazi iliyofafanuliwa ndani yake.

Hii ni mifano tu ya maeneo ya kuboreshwa, lakini ninahakikisha kuna maeneo mengine mengi ambayo yanaweza kuboreshwa. Kwa hivyo ninaacha hatua hii kama mfano wa kasoro ambazo programu hii ina na labda zoezi kwa mtu yeyote ambaye anataka kuboresha programu zaidi.

Ilipendekeza: