5. Массивті күрделі өңдеу есебі n жол және n бағаннан тұратын квадрат матрица берілсін. Бас диоганальда орналасқан элементтер үшін (сол жақ жоғары бұрыштан оң жақ төменгі бұрыш, яғни, i==j шарты орындалатын A[i][j] элементтері) 0 мәнін, бас диагональдан жоғары орналасқан элементтерге - 1 мәнін, бас диагональдан төмен орналасқан элементтер үшін 2 мәнін меншіктеп, массив құрайтын программа құрыңдар (мысалы n==3):
0 1 1
2 0 1
2 2 0
Осы есепті шешудің бірнеше жолын қарастырайық.
Бірінші әдіс Бас диагональдан жоғары орналасқан элементтер - ij шарты орындалатын A[i][j] элементтер. Олай болса, біз 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
Төменде есептің программасы келтірілген:
n=3
A = []
# массивті 5 сандарымен толтырамыз
for i in range(n):
A.append([5]*n)
# толтырылған массивті шығару
for i in range(n):
for j in range(n):
print(A[i][j], end = ' ')
print()
# массивтегі бас диагональ, одан жоғары және төмен элементтерді өзгертеміз
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
# Өзгертілген массивті шығару
print('Өзгертілген массив')
for i in range(n):
for j in range(n):
print(A[i][j], end = ' ')
print()
Жауабы:
Екінші әдіс Бұл алгоритм if құрылымын массивтің әрбір элементін өңдеу үшін 2 рет қолданады. Егер агоритмді күрделентіретін болсақ, онда біз шартты құрылымды мүлде қолданбаймыз.
Алдымен бас диагональ элементтерін толтырайық. Ол үшін бір цикл қолданамыз:
for i in range(n):
A[i][i] = 1
Ары қарай бас диагональдан жоғары орналасқан элементтерді 0 мәнімен толтырамыз, ол үшін і нөмірлі әрбір 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, ..., i-1үшін A[i][j] элементтерін алмастырамыз.
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
n=3
A = []
# массивті 5 сандарымен толтырамыз
for i in range(n):
A.append([5]*n)
# толтырылған массивті шығару
for i in range(n):
for j in range(n):
print(A[i][j], end = ' ')
print()
# массивтегі бас диагональ, одан жоғары және төмен элементтерді өзгертеміз
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
# Өзгертілген массивті шығару
print('Өзгертілген массив')
for i in range(n):
for j in range(n):
print(A[i][j], end = ' ')
print()