İkilik say sistemindən onluq say sisteminə keçid

   Nəzərinizə çatdıraq ki, əslində Python proqramlaşdırma dilində ikilik say sistemində verilmiş ədədin onluq say sisteminə çevrilməsi üçün iki parametrli int(x, b) funksiyasından istifadə etmək mümkündür. Burada x digər say sistemində (indiki halda ikilik) olan ədəddir və dırnaq arasında göstərilməlidir. İkinci parametr olan b isə verilmiş ədədin hansı say sistemində (indiki halda 2) olduğunu bildirmək üçündür:

>>> int("1001", 2)
9
>>> int("1011", 2)
11
>>>

  Bu dərsimizdə sözügedən çevrilmənin alqoritmini nəzərdən keçirəcəyik.

   Gəlin nümunə kimi 1001 ikilik ədədini onluq ədədə çevirək. Bildiyiniz kimi ikilik ədədin onluq ədədə çevrilməsi riyazi olaraq aşağıdakı qayda üzrə aparılır:

binary_to_decimal

   Əvvəlcə 1001 ikilik ədədinin sağdan başlayaraq üzərinə 0, 1, 2, 3 nömrələrini yazırıq. Sonra isə rəqəmləri 2-nin uyğun qüvvətinə vurub toplayırıq.

Python dilində bu alqoritm aşağıdakı kimi alınacaq:

n = input()
k = len(n)
s = 0

for i in range(k): 
    s = s + int(n[i])*2**(k-i-1)

print(s)

Proqram icrasının nümunələri:

10101001
169
11011010
218

Ədədin sadə vuruqlara ayrılması

   Ədədin sadə vuruqlara ayrılması alqoritmi ədədin sadəliyinin yoxlanılması alqoritminə bənzəyir. Verilmiş n ədədinin ardıcıl şəkildə 2-dən başlayaraq natural ədədlərə bölünməsini yoxlayacağıq. Əgər natural ədəd olan i verilmiş n ədədini qalıqsız bölürsə, onda həmin natural ədədi sadə vuruqlar siyahısına əlavə edəcəyik. Bölünmənin nəticəsini isə n dəyişəninə mənimsədəcəyik. Bölünmə qalıqsız davam etdiyi müddətcə i bölənini sabit saxlayacağıq, qalıq alındıqda onu bir vahid artıracağıq.

   Alqoritmi √n olana qədər davam etdirmək lazımdır. Əgər sonda n ədədi 1-ə bərabər olmazsa, deməli o sadə ədəddir.  Çünki kvadrat kökündən böyük olmayan heç bir ədədə bölünmür. Odur ki, onu da sadə vuruqlar siyahısına əlavə etmək lazımdır.

n = int(input())

m = []
i = 2

while i * i <= n:     
    if n % i == 0:         
        m.append(i)         
        n = n // i     
    else:         
        i+=1 

if n > 1:
    m.append(n)

for i in m:
    print(i, end=" ")

Proqram icrasının nümunələri:

130
2 5 13
270
2 3 3 3 5

 

Ədədin sadəliyinin yoxlanılması

   Bildiyiniz kimi sadə ədədlər yalnız birə və özünə bölünən ədədlərdir. Məsələn 3 ədədi sadə ədəddir, çünki ancaq 1 və 3 ədədlərinə bölünür. 4 ədədi isə mürəkkəb ədəddir, çünki 1 və 4 ədədlərindən başqa həm də 2 ədədinə bölünür.

   Ədədin sadə olub-olmadığını tapmaq üçün bir neçə alqoritmdən istifadə olunur. Bu dərsimizdə biz bölünənlərin götürülməsi alqoritmini nəzərdən keçirəcəyik. Bölünənlərin götürülməsi alqoritmində verilmiş natural ədəd 2-dən başlayaraq öz kvadrat kökünə qədər (daxil olmaqla) bütün tam ədədlərə bölünür. Əgər bu bölənlərdən heç olmazsa biri verilmiş ədədi qalıqsız bölürsə, deməli baxılan ədəd mürəkkəb ədəddir. Yox əgər verilmiş ədəd göstərilən aralıqdakı ədədlərə qalıqlı bölünürsə, deməli baxılan ədəd sadə ədəddir.

from math import sqrt
 
n = int(input())
 
if n < 2:
    print("Ədəd 1-dən böyük olmalıdır!")
elif n == 2:
    print("Sadə ədəd")
else:
    limit = int(sqrt(n))
    i = 2
    m = True
    while i <= limit:
        if n % i == 0:
            print("Mürəkkəb ədəd")
            m = False
            break 
        i += 1 
    if m:
        print("Sadə ədəd")

Proqram icrasının nümunələri:

1
Ədəd 1-dən böyük olmalıdır!
17
Sadə ədəd
196
Mürəkkəb ədəd

 

Onluq say sistemindən ikilik say sisteminə keçid

   Nəzərinizə çatdıraq ki, əslində Python proqramlaşdırma dilində verilmiş ədədin onluq say sistemindən ikilik say sisteminə çevrilməsi üçün bin() adlı funksiya nəzərdə tutulmuşdur:

>>> bin(5)  
'0b101'
>>> bin(10) 
'0b1010'
>>>

  Bu dərsimizdə sözügedən çevrilmənin alqoritmini nəzərdən keçirəcəyik. Onluq say sistemindəki ədədi ikilik say sisteminə çevirmək üçün 2-yə bölünmələrdən əldə olunan qalıqları tapmaq lazımdır. Bu zaman öncəki addımda tam bölmədən əldə olunan qismət sonrakı addımda bölünən rolunda çıxış edir. Bölmə əməliyyatı bölünən ədəd sıfıra çevrilənə qədər davam etdirilir. Alınmış qalıqları sondan əvvələ doğru ardıcıllıqla yazmaqla  onluq ədədin ikilik say sistemindəki yazılışını əldə edirik.

   Gəlin 10-luq say sistemindəki 8 ədədini 2-lik say sisteminə çevirək:

  • 8 / 2 = 4, qalıq 0
  • 4 / 2 = 2, qalıq 0
  • 2 / 2 = 1, qalıq 0
  • 1 / 2 = 0, qalıq 1
  • 0 – bölmənin sonu
  • Nəticə: 10002

   Alqoritmi proqramlaşdırma dilində tərtib edərkən alınan qalıqları bir araya toplamaq üçün sətir tipli dəyişəndən istifadə edə bilərsiniz.

n = int(input())
b = ''

while n > 0:
    b = str(n % 2) + b
    n = n // 2
 
print(b)

Proqram icrasının nümunələri:

8
1000
11
1011

Binar axtarış alqoritmi

  Proqramlaşdırmada verilmiş bir qiymətin massiv daxilində olub-olmadığını, varsa neçənci mövqedə yer aldığını müəyyən etmək üçün bir sıra axtarış alqoritmlərindən istifadə olunur. Binar (ikili) axtarış belə alqoritmlərdən biridir, və o sıralanmış massivlərdə axtarış aparmaq üçün nəzərdə tutulmuşdur.

Alqoritmin izahı

  1. Əvvəlcə massivin orta elementi tapılır. Bunun üçün ilk və son elementlərin indeksləri dəyişənlərə mənsimsədilir, orda elementin indeksi isə hesablanır.
  2. Axtarılan qiymət orta elementin qiyməti ilə müqayisə edilir. Əgər axtarılan qiymət orta elementin qiymətindən böyükdürsə, aşağı sərhəd orta elementin bir element sağına sürüşdürülür və sonrakı axtarış massivin sağ tərəfində aparılır. Əgər axtarılan qiymət orta elementin qiymətindən kiçikdirsə, yuxarı sərhəd orta elementin bir element soluna sürüşdürülür və sonrakı axtarış massivin sol tərəfində aparılır. Əgər bərabərlik qeydə alınarsa, axtarış dayandırılır.
  3. Massivin orta elementi yenidən, amma bu dəfə seçilmiş yarı hissədə tapılır. Yuxarıdakı alqoritm cari yarı hissə üçün təkrarlanır.

Alqoritmin kodu

   Proqramda massivin elementləri təsadüfi qaydada verilmişdir. Bunun üçün random modulundan randint() funksiyası çağırılmışdır. Lakin istəsəniz massivin elementlərini klaviaturdan da daxil edə bilərsiniz. Massiv meydana gətirildikdən sonra sort() funksiyası vasitəsilə elementlər azdan çoxa doğru sıralanır.

from random import randint

mas = []
for i in range(15):
    mas.append(randint(1, 50))
mas.sort()
print(mas)
 
value = int(input())
mid = len(mas) // 2
low = 0
high = len(mas) - 1
 
while mas[mid] != value and low <= high:
    if value > mas[mid]:
        low = mid + 1
    else:
        high = mid - 1
    mid = (low + high) // 2
 
if low > high:
    print("Qiymət tapılmadı")
else:
    print("ID =", mid)

Proqram icrasının nümunələri:

[6, 9, 13, 16, 22, 23, 24, 28, 28, 29, 32, 34, 34, 35, 44]
48
Qiymət tapılmadı
[3, 11, 17, 20, 31, 33, 38, 38, 39, 42, 43, 44, 44, 46, 50]
20
ID = 3

 

Üçbucağın sahəsi (Heron düsturu)

   Aşağıdakı proqram üçbucağın sahəsini Heron düsturu ilə tapmaq üçün tərtib olunmuşdur:

import math 

a=float(input('a-nı daxil edin: ')) 
b=float(input('b-ni daxil edin: ')) 
c=float(input('c-ni daxil edin: ')) 
s=(a+b+c)/2
area=math.sqrt(s*(s-a)*(s-b)*(s-c)) 
print('Üçbucağın sahəsi: {:.2f}'.format(area))

   Biz burada sqrt() funksiyasından istifadə etmək üçün standard modullardan olan math modulunu daxil etməliyik.

Kvadrat tənliyinin kökləri

   Aşağıdakı proqram kvadrat tənliyinin köklərini tapmaq üçün tərtib olunmuşdur:

import math 

a=float(input('a-nı daxil edin: ')) 
b=float(input('b-ni daxil edin: ')) 
c=float(input('c-ni daxil edin: ')) 
d=b**2-4*a*c
if d>0:
    x1=(-b+math.sqrt(d))/(2*a)
    x2=(-b-math.sqrt(d))/(2*a)
    print('x1=',x1)
    print('x2=',x2)
elif d==0:
    x1=-b/(2*a)
    print('x1=x2=',x1)
else:
    print('Tənliyin həqiqi kökləri yoxdur.')

   Biz burada sqrt() funksiyasından istifadə etmək üçün standard modullardan olan math modulunu daxil etməliyik.

Massivin ən böyük elementi

   Bu dərsimizdə iki ölçülü massivin ən böyük elementinin tapılması alqoritmini nəzərdən keçirəcəyik. Giriş verilənləri aşağıdakı kimi veriləcək:

3 3
1 8 3
4 9 6
7 2 5

   Burada ilk sətirdə massivin sətir və sütünlarının sayı, ikinci sətirdən etibarən isə massivin elementləri verilməlidir. Sətir və sütün sayını göstərməklə massivin elementlərini istədiyiniz şəkildə daxil edə bilərsiniz. Aşağıdakı proqram bu massivin ən böyük elementini onun sətir və sütun nömrələri ilə bərabər ekrana çıxaracaq:

dim = list(map(int,input().split()))
n = dim[0]
m = dim[1]

mas = []
for i in range(n):
    mas.append(list(map(int,input().split())))

p = q = 0
max = mas[0][0]

for i in range(n):
    for j in range(m):
        if mas[i][j] > max:
            max = mas[i][j]
            p, q = i, j

print("Ən böyük element: mas[{0},{1}] = {2}".format(p+1,q+1,max))

   Beləliklə massivin elementləri daxil edildikdən sonra biz şərti olaraq massvin ən böyük elementinin onun ilk elementi olduğunu fərz edirik. Təbii ki, bu zaman bu ən böyük elementin sətir və sütün nömrələrinin də sıfır olduğunu qəbul edirik. Xatırladaq ki, proqramlaşdırmada sıra nömrələri sıfırdan başlayır.

   Daha sonra iç-içə sayğaclı dövrlərin vasitəsilə massivin elementlərini ən böyük elementi tapmaq məqsədilə yoxlayırıq. Bu zaman bütün elementlər bir-bir maksimum qəbul edilən elementlə müqayisə edilir, və əgər hər hansı bir element maksimumdan böyük olarsa, o zaman maksimum element kimi o qəbul edilir.

  Sonda massivin ən böyük elementi onun sətir və sütun nömrələri ilə bərabər ekrana çıxarılır. Diqqət edin ki, istifadəçiyə sətir və sütün nömrələri daha aydın olsun deyə, biz onların üzərinə bir vahid gəlmiş oluruq.

   Əlavə olaraq onu da qeyd edək ki, Python proqramlaşdırma dilində verilmiş ardıcıllıqda maksimum elementi tapmaq üçün max() funksiyası təyin olunmuşdur. Bu funksiyanı tətbiq etməklə də massivin maksimum elementini tapmaq mümkündür. Bizim misalda verilmiş massiv iki ölçülü olduğuna görə əvvəlcə elementlərinin qiymətləri ən böyük olan sətir tapılır, sonra da bu sətirdəki ən böyük element tapılır:

dim = list(map(int,input().split()))
n = dim[0]
m = dim[1]
mas = []
for i in range(n):
    mas.append(list(map(int,input().split())))
print(max(max(mas)))

   Bununla belə onu da qeyd edək ki, hazır max() funksiyasını istifadə etdikdə massivin ən böyük elementinin sətir və sütun nömrələrini əldə etmək mümkün olmur.

Ən kiçik ortaq bölünən (ƏKOB)

   Riyaziyyatdan da bildiyiniz kimi ən kiçik ortaq bölünən (ƏKOB) – iki natural ədədin hər birinə qalıqsız bölünən natural ədədlərdən ən kiçiyidir. ƏKOB-u tapmaq üçün aşağıdakı qaydadan istifadə olunur:

  1. Ədədlər sadə vuruqlara ayrılır;
  2. Bu ədədlərdən birinin ayrılışı götürülür;
  3. O biri ədədlərin ayrılışlarından birincisinin ayrılışında olmayan vuruqlar götürülür və birinci ədədin vuruqlarının yanına yazılır;
  4. Alınmış vuruqların hasili tapılır.

   Proqramlaşdırmada isə ƏKOB-u tapmaq üçün aşağıda göstərəcəyimiz iki üsuldan istifadə edirlər. Gəlin hər iki üsulu nəzərdən keçirək.

   Birinci üsulda aşağıdakı alqoritmdən istifadə olunur:

mas = list(map(int, input().split()))
a, b = mas[0], mas[1]

if a > b:
    z = a
else:
    z = b
while True:
    if (z % a == 0) and (z % b == 0):
        lcm = z
        break
    z += 1

print(lcm)

   İkinci üsulda isə biz bu ədədlərin ƏBOB-undan istifadə edəcəyik. Bildiyiniz kimi verilmiş iki ədədin ƏBOB və ƏKOB-ları arasında aşağıdakı münasibət vardır:

a * b = ƏBOB(a,b) * ƏKOB(a,b)

   Belə olan halda verilmiş iki natural ədədin ƏKOB-unu onların hasilini ƏBOB-larına bölməklə də tapmaq olar:

mas = list(map(int, input().split()))
a, b = mas[0], mas[1]
c = a*b

# Öncə ədədlərin ƏBOB-unu tapırıq.
while a != b:
    if a > b:
        a = a - b
    else:
        b = b - a

print (c//a)

   Hər iki proqramın kodunu incələyin, daha sonra skriptdə yazın və icra edin.

Ən böyük ortaq bölən (ƏBOB)

   Riyaziyyatdan da bildiyiniz kimi ən böyük ortaq bölən (ƏBOB) – iki tam ədədin hər birinin qalıqsız bölündüyü natural ədədlərdən ən böyüyüdür. ƏBOB-u tapmaq üçün əvvəlcə ədədləri sadə vuruqlarına ayırmaq, sonra isə ortaq olan sadə vuruqları vurmaq lazımdır.

   ƏBOB-u tapmağın effektiv metodlarından biri də Evklid Alqoritmindən istifadə etməkdir. Aşağıdakı proqramda bu alqoritmin Python dilindəki realizasiyası verilmişdir:

mas = list(map(int, input().split()))
a, b = mas[0], mas[1]

while a!=0 and b!=0:
    if a > b:
        a = a % b
    else:
        b = b % a

 print (a+b)

   Evklid alqoritminin çıxma üsulu da mövcuddur:

mas = list(map(int, input().split()))
a, b = mas[0], mas[1]
while a != b:
    if a > b:
        a = a - b
    else:
        b = b - a

print (a)

   Sonda onu da qeyd edək ki, Python dilinin math modulunda ƏBOB-u tapmaq üçün gcd() adlı funksiya təyin olunmuşdur. İstəsəniz bu hazır funksiyadan da istifadə edə bilərsiniz:

from math import gcd

mas = list(map(int, input().split()))
print(gcd(mas[0],mas[1]))