0608 - NkX: Difference between revisions
Pagină nouă: == Cerinţa == Se dau două numere naturale '''n''' și '''k''', cu proprietatea că '''2*k < n'''. Să se afişeze pe ecran elementele unei matrice pătratice de dimensiune '''n''', formată din valorile '''1''' şi '''2''', construită astfel: * valorile de pe diagonala principală sunt '''1'''; * valorile de pe '''k''' pseudodiagonale paralele cu diagonala principală şi situate imediat deasupra acesteia sunt '''1'''; * valorile de pe '''k''' pseudodiagonale paralele cu... |
|||
Line 31: | Line 31: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def validare(nr, bare1): # functia de validare a datelor de intrare | |||
if not isinstance(nr, int) or nr < 1 or nr > 100: | |||
raise ValueError("Datele de intrare nu corespund restrictiilor impuse") | |||
if not isinstance(bare1, int) or bare1 < 0 or bare1 > 50: | |||
raise ValueError("Datele de intrare nu corespund restrictiilor impuse") | |||
print("Datele de intrare corespund restrictiilor impuse") | |||
def main(): | def main(): | ||
# | # Solicităm introducerea numerelor n și k | ||
print("Introduceți numerele n și k, separate printr-un spațiu: ") | |||
n, k = map(int, input().split()) | n, k = map(int, input().split()) | ||
try: | |||
validare(n, k) # apelul functiei de validare | |||
except ValueError as e: | |||
print(e) | |||
return | |||
# Inițializăm matricea cu valori de 2 | # Inițializăm matricea cu valori de 2 | ||
Line 48: | Line 66: | ||
for linie in matrice: | for linie in matrice: | ||
print(' '.join(map(str, linie))) | print(' '.join(map(str, linie))) | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 08:54, 12 November 2023
Cerinţa
Se dau două numere naturale n și k, cu proprietatea că 2*k < n. Să se afişeze pe ecran elementele unei matrice pătratice de dimensiune n, formată din valorile 1 şi 2, construită astfel:
- valorile de pe diagonala principală sunt 1;
- valorile de pe k pseudodiagonale paralele cu diagonala principală şi situate imediat deasupra acesteia sunt 1;
- valorile de pe k pseudodiagonale paralele cu diagonala principală şi situate imediat sub aceasta sunt 1;
- valorile de pe diagonala secundară sunt 1;
- valorile de pe k pseudodiagonale paralele cu diagonala secundară şi situate imediat deasupra acesteia sunt 1;
- valorile de pe k pseudodiagonale paralele cu diagonala secundară şi situate imediat sub aceasta sunt 1;
- restul valorilor din matrice sunt 2.
Date de intrare
Programul citește de la tastatură numerele n k.
Date de ieșire
Programul va afișa pe ecran matricea construită, câte o linie a matrice pe o linie a ecranului, elementele de pe o line fiind separate prin exact un spaţiu.
Restricţii şi precizări
- 1 ⩽ n ⩽ 100
Exemplu
- Intrare
- 10 1
- Ieșire
- 1 1 2 2 2 2 2 2 1 1
- 1 1 1 2 2 2 2 1 1 1
- 2 1 1 1 2 2 1 1 1 2
- 2 2 1 1 1 1 1 1 2 2
- 2 2 2 1 1 1 1 2 2 2
- 2 2 2 1 1 1 1 2 2 2
- 2 2 1 1 1 1 1 1 2 2
- 2 1 1 1 2 2 1 1 1 2
- 1 1 1 2 2 2 2 1 1 1
- 1 1 2 2 2 2 2 2 1 1
Rezolvare
<syntaxhighlight lang="python" line> def validare(nr, bare1): # functia de validare a datelor de intrare
if not isinstance(nr, int) or nr < 1 or nr > 100: raise ValueError("Datele de intrare nu corespund restrictiilor impuse")
if not isinstance(bare1, int) or bare1 < 0 or bare1 > 50: raise ValueError("Datele de intrare nu corespund restrictiilor impuse")
print("Datele de intrare corespund restrictiilor impuse")
def main():
# Solicităm introducerea numerelor n și k print("Introduceți numerele n și k, separate printr-un spațiu: ") n, k = map(int, input().split())
try: validare(n, k) # apelul functiei de validare except ValueError as e: print(e) return
# Inițializăm matricea cu valori de 2 matrice = [[2] * n for _ in range(n)]
# Parcurgem fiecare element din matrice for i in range(n): for j in range(n): # Dacă elementul se află pe una dintre diagonalele specificate, îl setăm la 1 if abs(i - j) <= k or abs(i + j - n + 1) <= k: matrice[i][j] = 1
# Afișăm matricea, fiecare linie pe o linie nouă și elementele separate prin spațiu for linie in matrice: print(' '.join(map(str, linie)))
if __name__ == "__main__":
main()
</syntaxhighlight>