0608 - NkX: Difference between revisions

From Bitnami 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...
 
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():
     # Citim numerele n și k de la tastatură
     # 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>