Faktoriyalın hesablanması

   Bu dərsimizdə faktoriyalı hesablayan funksiya tərtib edib onu ana proqramımız içərisində istifadə edəcəyik.

   Riyaziyyatdan da bildiyiniz kimi n ədədinin faktorialı 1-dən n-ə qədər (daxil olmaqla) natural ədədlərin hasilinə bərabərdir. Məsələn, 5!=5*4*3*2*1. Və o da məlumdur ki, 1!=1 və 0!=1. Buradan belə bir məntiq yürütmək olur ki, n! hesablamaq üçün n*(n-1)! hesablamalıyıq, yəni 5!=5*4!. Belə olan halda 4! üçün 4*3!, 3! üçün 3*2!, 2! hesablamaq üçün də 2*1! hesablanmalıdır. 1! isə 1-ə bərabər olduğuna görə rekursiya burada bitmiş olur. Yəgin anladınız ki, biz burada rekursiv funksiya təyin edəcəyəcik. Xatırlatmış olaq ki, proqramlaşdırmada funksiyaların özü özünü çağırmasına rekursiya, bu cür funksiyalara da rekursiv funksiyalar deyilir.

   Aşağıdakı proqram kodunda öncə fakt() adlı rekursiv funksiya təyin olunur və sonra da proqram daxilində çağrılır:

def fakt(n):
    if n <= 1:
        return 1
    else:
        return n*fakt(n-1)

n = int(input())
print("{0}!={1}".format(n,fakt(n)))

    Proqramı çalışdırıb icra etdiyinizdə istədiyiniz ədədin faktoriyalını hesablayacaq.

Ədədin rəqəmlərinə ayrılması

   Verilmiş müsbət iki rəqəmli tam ədədi rəqəmlərinə ayırmaq üçün tam və qalıqlı bölmə əməliyyatı ilə ədədi 10-a bölməliyik:

n = int(input())
print(n//10, n%10)

    Əgər ixtiyari uzunluqdakı hər hansı bir tam ədədi rəqəmlərinə ayırmaq tələb olunursa, ədəd sıfır alınana qədər 10-a tam və qalıqlı bölünməlidir. Bunun üçün şərtli dövr alqoritmini qurmaq lazımdır:

n = int(input())
while n>0:
    print(n%10,end = " ")
    n = n//10

    Proqramı çalışdıranda görəcəksiniz ki, ədədi təşkil edən rəqəmlər sonuncudan etibarən çap olunur. Əgər düz ardıcıllığı əldə etmək istəsəniz, proqramdakı birinci sətirdəki ifadəni aşağıdakı ilə əvəz edin:

n = int(input()[::-1])

   Verilmiş ədədi rəqəmlərinə ayırmaq üçün divmod() funksiyasından da istifadə etmək olardı:

n = int(input()[::-1])
while n>0:
    n, x = divmod(n, 10)
    print(x,end = " ")

   Gəlin daha bir misalı nəzərdən keçirək. Verilmiş ədədin rəqəmləri cəmini hesablayaq:

n = int(input())
s = 0
while n>0:
    s = s + n%10
    n = n//10
print(s)

    Tam ədədi rəqəmlərinə ayırmağın başqa bir üsulu da var. Bu zaman giriş veriləni ilə ədəd kimi yox sətir kimi rəftar etmək lazımdır:

s = input()
for i in s:
    print(i,end = " ")

   Bu alqoritm birinciyə nəzərən daha sürətli çalışacaq.

 

Ədədin cüt və ya tək olması

   Verilmiş ədədin cüt və ya tək olmasını müəyyənləşdirmək çox asandır. Sadə proqramçı məntiqi ilə düşünsək, biz tam ədədi ikiyə bölməli və qalığının sıfır olub-olmadığına baxmalıyıq. Bunun üçün qalıqlı bölmə (%) və şərt operatorlarından istifadə edəcəyik.

n = int(input())
if n%2 == 0:
    print("cüt")
else:
    print("tək")

    Gördüyünüz kimi ədədin ikiyə bölünməsi nəticəsində qalıq yoxdursa, ədəd cüt, qalıq varsa, ədəd təkdir.

   Eyni məsələni həll etmək üçün aşağıdakı variantdan da istifadə etmək olardı:

n = int(input())
if n%2:
    print("tək")
else:
    print("cüt")

    Gəlin buradakı məntiqi incələyək. Bildiyiniz kimi şərt operatorunda şərtdən sonra gələn ifadə (ifadələr qrupu) yalnız o zaman icra olunur ki, şərtdə verilmiş məntiqi ifadənin nəticəsi True (doğru) olmuş olsun. Verilmiş tam ədədi ikiyə qalıqlı böləndə əgər nəticə 1-ə bərabərdirsə, bu o deməkdir ki, şərtdəki məntiqi ifadənin nəticəsi True-dur. Çünki sıfırdan fərqli ədədlərin məntiqi qarşılığı hər zaman True-dur. Belə olan halda isə ekrana məlumat kimi tək çıxarmaq lazımdır. Əks halda isə ekrana cüt çıxarılmalıdır.