beta

← Geri

İnformatika, Proqramlaşdırma

Python dövrləri və rəqəmlərlə iş: dövrü addım-addım izlə

Dövrün hər addımında dəyişənləri izləməyi, range ardıcıllığını oxumağı və ədədi rəqəmlərinə ayırmağı öyrənəcəksən.

Oxumaq üçün 4 dəqiqə

Süni intellektlə hazırlanmış şəkil: taxta masanın üstündə açıq notbuk, yanında açıq dəftər və karandaş.

1-dən 1000-ə qədər bütün ədədləri topla. Kağızda bu, uzun və darıxdırıcı işdir, harasa bir səhv də girə bilər. Python-da isə bir neçə sətirlik dövr bunu göz qırpımında edir: s = 0, sonra for i in range(1, 1001): s += i. Cavab 500500 çıxır.

İndi başqa bir sual. 6462 ədədinin rəqəmlərini topla. Sən dərhal 6 + 4 + 6 + 2 = 18 deyirsən, çünki rəqəmləri gözünlə görürsən. Proqram isə 6462-ni tək bir ədəd kimi saxlayır. Rəqəmləri bir-bir almaq üçün onu 10-a bölməli olur: 10-a bölünmədən qalıq sağdakı 2-ni verir, 6462 // 10 isə 646 saxlayır. Bu iki əməli dövrlə birləşdirəndə ədədin bütün rəqəmlərini tək-tək ala bilirsən.

Niyə lazımdır

Dövr kompüterin ən güclü tərəfidir: eyni işi yüz dəfə də, milyon dəfə də yorulmadan təkrarlayır. Rəqəmlərin cəmi, bölünənlərin sayı, ən böyük rəqəm kimi bir çox proqram dövrlə qalıq və // əməllərinin birləşməsindən yaranır.

İmtahanda proqramı özün qurmaq da, verilmiş proqramın nəticəsini tapmaq da tələb oluna bilər. Hər iki halda kompüterin etdiyini kağızda addım-addım təkrarlamağı bacarmalısan: bunu bacarırsansa, ən çaşdırıcı tapşırıq da sakit hesablamaya çevrilir.

İmtahan bu mövzuda nə soruşur?

Səndən dövrün nəticəsini hesablamaq, yığılan cəmi ifadə şəklində yazmaq, verilmiş çıxışa uyğun başlanğıc ədədlərin sərhədlərini tapmaq gözlənilir. Həmçinin şərtləri ödəyən ədədləri saymaq və ədədin rəqəmlərini araşdıran proqram qurmaq tələb oluna bilər. Bunun üçün hər addımda dəyişənlərin necə yeniləndiyini izləməlisən.

Qayda

  • Dövrün gövdəsi təkrarlanan əmrlərdən ibarətdir. Python-da gövdə girinti ilə ayrılır; başlıq iki nöqtə ilə bitir. Əmrlər yazıldığı sıra ilə işləyir.
  • while hər icradan əvvəl şərti yoxlayır. Şərt başlanğıcda yanlışdırsa, gövdə işləməz. Şərtə təsir edən dəyişənin yenilənməsini izləyərək dövrün nə vaxt dayanacağını müəyyənləşdir.
  • range ilə qurulan for dövründə sayğac ardıcıllığın qiymətlərini götürür. range(a, b, d) başlanğıcı a, sərhədi b, addımı d olan ardıcıllıq verir; b daxil edilmir. Addım yazılmadıqda 1, başlanğıc da yazılmadıqda 0 götürülür. Mənfi addım azalan ardıcıllıq üçündür; addım sıfır ola bilməz.
  • Toplayıcı cəm üçün adətən 0-dan, hasil üçün 1-dən başlayır. Say dəyişənini yalnız tələb olunan şərt ödənəndə artır. s += x yazılışı s = s + x ilə eyni yenilənmədir.
  • Qalıq % ilə hesablanır; / bölmə, ** qüvvətə yüksəltmədir. Müsbət tam n üçün n % 10 son rəqəmi verir, n // 10 isə onu silir. Bölünmə yoxlamasında qalığı sıfırla müqayisə et.
  • Müqayisə üçün ==, !=, <, >, <=, >= işlənir; = qiymət mənimsədir. and bütün şərtlərin, or ən azı birinin doğruluğunu tələb edir; not doğruluq qiymətini əksinə çevirir.
  • break cari dövrü dayandırır; continue gövdənin qalan əmrlərini ötürərək növbəti təkrara keçir. Girinti else hissəsinin hansı if-ə aid olduğunu göstərir.

Tapşırıqlarda işlənən düsturlar

Öyrənilməli düstur

q=⌊xb⌋  ⟺  bq≤x≤b(q+1)−1q=\left\lfloor\frac{x}{b}\right\rfloor\iff bq\le x\le b(q+1)-1

Burada x qeyri-mənfi tam bölünən, b müsbət tam bölən, q isə tam bölmənin nəticəsidir. Vurulan dəyişəndən dövrün təkrar sayını tap, sonra dayanma şərtinə uyğun ən böyük son qiymətdən başlayaraq bölmələri bu sərhədlərlə geriyə izlə.

Öyrənilməli düstur

N=10×(a×10k+n)+bN=10\times(a\times10^k+n)+b

n müsbət tam ədəd, k onun rəqəmlərinin sayı olduqda bu düstur sola sıfırdan fərqli a rəqəmini, sağa isə b rəqəmini artırmaqla alınan N ədədini verir. k qiymətini n sıfıra çevrilənədək 10-a tam bölmələrin sayından müəyyənləşdir.

Öyrənilməli qayda

for dövründə əmrlər hər sayğac qiyməti üçün yazıldığı ardıcıllıqla işləyir və növbəti əmr dəyişənin yenilənmiş qiymətindən istifadə edir. Burada p əvvəlki toplananları da saxladığından s dəyişəninə əlavə olunan kəsrin surətində yığılmış cəmi nəzərə al.

Öyrənilməli qayda

while dövrünün şərti hər təkrardan əvvəl yoxlanılır: son təkrara daxil olarkən doğru, həmin təkrardan sonra isə yanlış olmalıdır. p dəyişəninin ardıcıl ikiqat artmasından təkrar sayını müəyyənləşdir, x üçün son iki yoxlamadan alınan ciddi aşağı sərhədi növbəti tam ədədlə əvəz et və yeni aralığın hər iki ucunu daxil etməklə say.

Öyrənilməli qayda

Sayğac hər təkrarda sabit qədər artırsa, son qiymətlə başlanğıc qiymətin fərqini bu artıma bölməklə təkrar sayı tapılır. Həmin sayda bölmədən əvvəl dövr şərtinin ödənməsini, son bölmədən sonra isə pozulmasını tələb et və mümkün girişlərin sərhədlərini taparkən // əməlində qalığın atıldığını nəzərə al.

Öyrənilməli qayda

Müsbət tam ədədin rəqəmlərini n%10 ilə ayırıb n//10 ilə silərək bir-bir yoxlamaq olar. Cari maksimumdan böyük rəqəm gələndə maksimumu dəyiş və sayğacı 1 et, eyni rəqəm gələndə sayğacı artır, kiçik rəqəmdə isə hər ikisini olduğu kimi saxla.

Öyrənilməli qayda

or ilə birləşdirilən şərtlərdən birinin doğru olması kifayətdir; else budağının hansı if əmrinə aid olduğunu girinti göstərir. range son sərhədi götürmədiyindən hər daxil edilən qiyməti bir dəfə yoxla: xarici şərt yanlışsa artım iki, hər iki şərt doğrudursa bir, yalnız daxili şərt yanlışsa sıfırdır.

Öyrənilməli qayda

Başlanğıc qiyməti 1 olan dəyişən hər təkrarda ikiqat artırsa, t təkrardan sonra 2t2^t alınır. Təkrar sayını bununla tap və giriş sərhədlərini müəyyənləşdirərkən n dəyişəninin son təkrara qədər həddi aşmamasını, son artımdan sonra isə həddən böyük olmasını tələb et.

Öyrənilməli qayda

Müsbət n üçün n%10 sağdakı rəqəmi seçir, n//100 isə sağdan iki mərtəbəni silir; buna görə dövr rəqəmlərin birindən keçərək cəm yaradır. Verilən cəmi ödəyən ən kiçik ədədi qurarkən əvvəl böyük mərtəbənin rəqəmini kiçilt, sonra cəmə təsir etməyən mərtəbəyə sıfır yaz.

Öyrənilməli qayda

while şərti yanlış olanda gövdə işləmir, lakin dəyişənlər son yenilənmiş qiymətlərini saxlayır. Burada əvvəl t cəmə əlavə edilir, sonra seçilən budaq üzrə artırılır; çıxışı hesablayanda cəmə daxil edilən son qiymətlə dövrü dayandıran t qiymətini fərqləndir.

Öyrənilməli qayda

Müsbət tam ədədin cütlüyünü son rəqəmi müəyyən edir; n%10 həmin rəqəmi ayırır, n//10 isə onu silir. k*10+r əməli r rəqəmini yığılan ədədin sağına yazdığından şərti ödəyən rəqəmlər nəticədə sağdan sola baxılma ardıcıllığı ilə düzülür.

Öyrənilməli qayda

Şərtdəki dəyişən gövdədə yenilənirsə, yeni qiymət yalnız növbəti while yoxlamasında dövrü dayandırır və cari təkrar tam işləyir. İstənilən təkrar sayını almaq üçün əvvəlki qalıqların şərti ödəməsini, son qalığın isə onu pozmasını tələb et; ilkin ədədi tapmaq üçün tam bölmələri və qalıqları geriyə izlə.

Öyrənilməli qayda

while şərti hər təkrardan əvvəl yoxlanır; dəyişənin ardıcıl vurulmasından təkrarların sayını müəyyən et. Girişin sərhədlərini taparkən son təkrara başlamazdan əvvəl şərtin doğru, həmin təkrardan sonra isə yanlış olmasını tələb et.

Öyrənilməli qayda

Müsbət tam ədəddə n%10 sağdakı rəqəmi ayırır, n//10 isə onu silir; bu əməllərlə qonşuları sağdan sola müqayisə et. Hər cütdə sol rəqəm sağdakından kiçik olmalıdır: bircə pozuntu ümumi yoxlamanı uğursuz edir, qonşusu olmayan rəqəm isə pozuntu yaratmır.

Öyrənilməli qayda

Sayğacın başlanğıc və son qiymətləri ilə artım addımı təkrarların sayını müəyyənləşdirir; hər təkrarda cəmə sayğacın artırılmamış qiyməti ilə hesablanan hədd əlavə edilir. Son təkrardan əvvəl while şərtini doğru, sonra yanlış edən giriş sərhədlərini tap və daxil olan tam ədədləri sayarkən hər iki sərhədi nəzərə al.

Öyrənilməli qayda

and bütün şərtlərin, or isə ən azı birinin doğruluğunu tələb edir; else eyni girintidəki if ilə əlaqələnir. range(a,b) son sərhədi götürmədiyindən hər qiymət üçün uyğun budağı izlə və yalnız sayğacı artıran halları say; xarici şərtin doğruluğu daxili şərtin də doğru olması demək deyil.

Öyrənilməli qayda

Dövr daxilində əmrlər sıra ilə işləyir: əvvəl çıxma aparılır, sonra çıxılan həddi saxlayan dəyişən artırılır. Həmin dəyişənin son qiymətindən təkrar sayını tap, sonra girişdən son təkrara qədər çıxılanların cəmini və bütün təkrarlarda çıxılanların cəmini hesabla; giriş birincidən böyük, ikincidən isə böyük olmamalıdır.

Öyrənilməli qayda

Ən azı ikirəqəmli müsbət tam ədəddə n%10 və (n//10)%10 sağdakı qonşu rəqəmləri verir; bərabərlikdə sayğacı artır. Hər yoxlamadan sonra n//10 ilə yalnız bir rəqəmi sil ki, ortaq rəqəmli cütlər də yoxlanılsın; iki rəqəm qalmadıqda dövrü bitir.

Öyrənilməli qayda

Hər namizədin surətində %10 ilə ayrılan rəqəmləri ayrıca cəmlə və //10 ilə sil; qalıqsız bölünməni isə bölmənin qalığının sıfır olması ilə yoxla. Hər iki tələb ödənəndə ümumi sayğacı artır, sərhədləri də yoxla və seçim olmadığını yalnız bütün aralıq bitəndən sonra müəyyən et.

Öyrənilməli qayda

Hər müsbət tam ədədin surətindən %10 və //10 vasitəsilə rəqəmləri ayırarkən cəmi və rəqəm sayını ayrıca topla, hər yeni ədəd üçün bunları sıfırla. Cəm sayın kvadratına bərabərdirsə, ilkin ədədi dərhal çap et və seçim olduğunu yadda saxla; seçim yoxluğu yalnız bütün girişlər yoxlanandan sonra müəyyənləşir.

Kompüterin yerinə sən işlət

Hər sualda kiçik bir proqram var. Onu kağızda addım-addım işlət və nəticəni yaz.

Nümunələr

1

Başlanğıcda p = 0, s = 0 olsun. range(1, 4) dövründə əvvəl p += i, sonra s += p işləyir. Son s-i tap. i ardıcıl 1, 2, 3 olduqda p qiymətləri 1, 3, 6, s qiymətləri isə 1, 4, 10 olur. Cavab 10-dur.

2

p = 1 ilə başlayan while n <= 20 dövründə n hər dəfə 4 artır, p isə ikiqat olur. Çıxışdakı p = 8 üçün başlanğıc n-i müəyyənləşdir. Üç təkrar lazımdır: n+8≤20n+8\le20, n+12>20n+12>20. Deməli, tam başlanğıc qiymətlər 9–12 arasındadır.

3

6462 ədədində ən böyük rəqəmin sayını tap. Rəqəmləri sağdan ayır: 2, 6, 4, 6. İlk rəqəmi maksimum, sayını 1 götür. Daha böyüyünü görəndə maksimumu dəyiş, sayı 1 et; bərabərini görəndə sayı artır. Nəticə 2-dir.

Tipik səhv

n = 1, sonra while n < 50: n *= 3. Dövrdən sonra print(n) üçün cavab: 27, çünki 27 hələ 50-dən kiçikdir.

Təkrarları ayrıca yaz: girişdə 1 → çıxışda 3, 3 → 9, 9 → 27, 27 → 81. 27 < 50 doğru olduğu üçün gövdə bir dəfə də işləyir və n = 81 olur. Şərt yalnız bundan sonra yanlış çıxır, ona görə də çap olunan ədəd 81-dir.

Dövr bitəndə dəyişənin son yenilənməsini unutma: şərti artıq ödəməyən qiymət də sonrakı hesablamada işlənə bilər.

Qarışıqlıq yaranarsa, hər təkrar üçün girişdəki və çıxışdakı qiymətləri ayrıca yaz.

Özünü yoxla

Başlanğıcda p = 1-dir. for i in range(8, 2, -3) dövrünün gövdəsində p *= i əmri işləyir. Dövrdən sonra p-nin qiymətini tap.

Başlanğıcda n = 3, s = 0-dır. while n < 10 dövrünün gövdəsində əvvəl n += 4, sonra s += n işləyir. Dövrdən sonra s-in qiymətini tap.

Başlanğıcda n = 58346, s = 0-dır. while n > 0 dövrünün gövdəsində əvvəl s-ə n-in 10-a bölünməsindən alınan qalıq əlavə olunur, sonra n //= 100 işləyir. Dövrdən sonra s-in qiymətini tap.

Bu mövzunun tapşırıqlarını həll et

Bu mövzunun tapşırıqlarını həll et və hər birinin izahına bax.

Mövzu üzrə sınaq, I qrup (Rİ)

Dərslikdə bu mövzu

  • Dərslik: İnformatika, 9-cu sinif, «Ədədlərlə iş», səh. 70
  • Dərslik: İnformatika, 8-ci sinif, «Proqramda dövr», səh. 47
  • Dərslik: İnformatika, 8-ci sinif, «Sayğaclı dövrlər», səh. 50
  • Dərslik: İnformatika, 6-cı sinif, «Proqramlaşdırma mühitində dövr», səh. 63