0608 - NkX: Diferență între versiuni
De la Universitas MediaWiki
(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...) |
|||
Linia 31: | Linia 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 | ||
Linia 48: | Linia 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> |
Versiunea de la data 12 noiembrie 2023 08:54
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
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()