Екі өлшемді массив


Екі өлшемді массивті енгізу



бет2/3
Дата02.10.2023
өлшемі23,99 Kb.
#112694
1   2   3
Екі өлшемді массивті енгізу
Бағдарлама екі өлшемді массивке кіруге мүмкіндік берсін, олардың әрқайсысы бос орындармен бөлінген m сандарды қамтитын N жолдар түрінде. Оларды қалай есептеуге болады? Мысалы, осылай:

A = []
for i in range(n):


A.append(list(map(int, input().split())))
Немесе күрделі ішкі опциялар қоңырауларын пайдаланбай:

A = []
for i in range(n):


row = input().split()
for i in range(len(row)):
row[i] = int(row[i])
A.append(row)
Генератордың көмегімен де жасауға болады:

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


Екі өлшемді массивті өңдеу мысалы
N жолдар мен N бағандарынан шаршы массив болсын. Сол жақ жоғарғы бұрышынан оң жақ төменгі бұрышқа өтетін басты диагональдағы элементтерге (яғни ij олар үшін A[i][j] элементтеріне) 1 мәнін беру қажет, басты диагональдан жоғары элементтерге – 0 мәні, басты диагоналдан төмен элементтерге – 2 мәні. Яғни мұндай массивті алу (N = 4 үшін мысал):

1 0 0 0
2 1 0 0


2 2 1 0
2 2 2 1
Бұл мәселені шешудің бірнеше жолдарын қарастырайық. Басты диагональдан жоғары элементтер – бұл элементтер A[i][j], олар үшін ij. осылайша, біз I және j мәндерін салыстыра аламыз және олар бойынша A[i][j] мәнін анықтай аламыз. Келесі алгоритм аламыз:

for i in range(n):


for j in range(n):
if i < j:
A[i][j] = 0
elif i > j:
A[i][j] = 2
else:
A[i][j] = 1
Бұл алгоритм жаман, өйткені әр элементті өңдеу үшін бір немесе екі if нұсқауларын орындайды. Егер алгоритмді қиындататын болсақ, біз шартты нұсқауларсыз жасай аламыз.
Алдымен біз негізгі диагоналді толтырамыз, ол үшін бір цикл қажет:

for i in range(n):


A[i][i] = 1
Содан кейін 0 мәнімен барлық элементтерді басты диагональдан жоғары толтырамыз, ол үшін I нөмірі бар жолдардың әрқайсысында j=i+1,..., n-1 үшін A[i][j] элементтеріне мән беру қажет. Мұнда біз қосымша циклдар қажет:

for i in range(n):


for j in range(i + 1, n):
A[i][j] = 0
Сол сияқты 2 мәнін j=0 үшін A[i][j] элементтеріне тағайындаамыз, …, i-1:

for i in range(n):


for j in range(0, i):
A[i][j] = 2
Сіз сондай-ақ сыртқы циклдар біріктіруге және тағы бір, ықшам шешім алуға болады:

for i in range(n):


for j in range(0, i):
A[i][j] = 2
A[i][i] = 1
for j in range(i + 1, n):
A[i][j] = 0
Бірақ бұл шешім тізімнің кезекті жолын құру үшін тізімдерді қайталау операциясын пайдаланады. тізімнің I жолы i 2 саннан тұрады, содан кейін бір Сан 1, содан кейін n-i-1 саны 0:

for i in range(n):


A[i] = [2] * i + [1] + [0] * (n - i - 1)
Ал болады деген циклды генератор:

A = [[2] * i + [1] + [0] * (n - i - 1) for i in range(n)]




Достарыңызбен бөлісу:
1   2   3




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет