2543 - Pattern 2

From Bitnami MediaWiki
Revision as of 17:06, 30 March 2023 by Sovago Rares-Andrei (talk | contribs) (Pagină nouă: == Cerința == Se dă un număr natural '''n'''. Se construiește o matrice pătratică de dimensiune '''2^n-1''', după următoarele reguli: -elementul din mijlocul matricii este egal cu '''n''' -elementele de pe linia mediană și cele de pe coloana mediană (exceptând elementul din mijlocul matricii) sunt nule -folosind linia mediană și coloana mediană, se împarte matricea în alte 4 matrici care se generează similar, dar au dimensiunea '''2^(n-1)-1'''. Calculați...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dă un număr natural n. Se construiește o matrice pătratică de dimensiune 2^n-1, după următoarele reguli:

-elementul din mijlocul matricii este egal cu n -elementele de pe linia mediană și cele de pe coloana mediană (exceptând elementul din mijlocul matricii) sunt nule -folosind linia mediană și coloana mediană, se împarte matricea în alte 4 matrici care se generează similar, dar au dimensiunea 2^(n-1)-1. Calculați și afișați suma elementelor din matricea construită conform regulilor de mai sus.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", programul va afișa pe ecran suma elementelor din matrice. Dacă sunt mai multe soluții, trebuie afișată cea mai din stânga-sus poziție. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

1 ≤ n ≤ 15

Exemple

Exemplul 1

ecran
Introduceți un număr natural n: 3
ecran
Datele sunt introduse corect.
Suma elementelor din matrice este 27

Exemplul 2

ecran
Introduceți un număr natural n: 2
ecran
Datele sunt introduse corect.
Suma elementelor din matrice este 6

Exemplul 3

ecran
Introduceți un număr natural n: -1
ecran
Datele nu corespund restricțiilor impuse.



Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 2543

import sys

def validare_date(n):

   if n < 1 or n > 15:
       print("Datele nu corespund restricțiilor impuse.")
       sys.exit(0)

def construieste_matrice(n, linie, coloana, dimensiune):

   if dimensiune == 1:
       return n
   subdimensiune = dimensiune // 2
   matrice = [[0] * dimensiune for _ in range(dimensiune)]
   mijloc = subdimensiune
   matrice[mijloc][mijloc] = n
   coloana_stanga = coloana - subdimensiune
   coloana_dreapta = coloana + subdimensiune
   linie_sus = linie - subdimensiune
   linie_jos = linie + subdimensiune
   matrice_mijloc_sus = construieste_matrice(n - 1, linie_sus, coloana, subdimensiune)
   matrice_mijloc_jos = construieste_matrice(n - 1, linie_jos, coloana, subdimensiune)
   matrice_mijloc_stanga = construieste_matrice(n - 1, linie, coloana_stanga, subdimensiune)
   matrice_mijloc_dreapta = construieste_matrice(n - 1, linie, coloana_dreapta, subdimensiune)
   for i in range(dimensiune):
       for j in range(dimensiune):
           if i == mijloc or j == mijloc:
               continue
           if i < mijloc:
               if j < mijloc:
                   matrice[i][j] = matrice_mijloc_sus[i][j]
               else:
                   matrice[i][j] = matrice_mijloc_dreapta[i][j - mijloc - 1]
           else:
               if j < mijloc:
                   matrice[i][j] = matrice_mijloc_stanga[i - mijloc - 1][j]
               else:
                   matrice[i][j] = matrice_mijloc_jos[i - mijloc - 1][j - mijloc - 1]
   return matrice

def calculeaza_suma_elementelor(matrice):

   suma = 0
   for i in range(len(matrice)):
       for j in range(len(matrice)):
           suma += matrice[i][j]
   return suma

n = int(input("Introduceți un număr natural n: ")) validare_date(n)

linie = coloana = dimensiune = 2**n - 1 matrice = construieste_matrice(n, linie // 2, coloana // 2, dimensiune) suma = calculeaza_suma_elementelor(matrice)

print("Datele sunt introduse corect.") print(f"Suma elementelor din matrice este {suma}.")



Explicatie Programul primește de la tastatură un număr natural n și construiește o matrice pătratică de dimensiune 2^n-1 conform regulilor din enunț. Apoi, se calculează suma elementelor din matrice și se afișează pe ecran.

Funcția validare_date(n) primește numărul n și verifică dacă acesta respectă restricțiile impuse (1 ≤ n ≤ 15). Dacă numărul nu respectă aceste restricții, se afișează un mesaj corespunzător și programul se oprește prin apelul funcției sys.exit(0).

Funcția construieste_matrice(n, linie, coloana, dimensiune) primește parametrii necesari pentru a construi matricea conform regulilor din enunț și returnează matricea construită. Funcția utilizează o tehnică de recursivitate pentru a construi matricea, prin împărțirea acesteia în patru submatrici similare de dimensiune 2^(n-1)-1.

Funcția calculeaza_suma_elementelor(matrice) primește o matrice ca parametru și calculează suma elementelor acesteia.

În programul principal se citește numărul n de la tastatură, se validează datele și se construiește matricea conform regulilor din enunț. Apoi, se calculează suma elementelor din matrice și se afișează pe ecran un mesaj corespunzător.





</syntaxhighlight>