0770 - Perm Col

From Bitnami MediaWiki

Sursă: [1]

Cerință[edit | edit source]

Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se permute coloanele matricei circular spre stânga cu o poziție.

Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n şi m, iar apoi n*m numere naturale, separate prin spații, reprezentând elementele matricei, linie cu linie.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Programul afișează pe ecran elementele matricei transformate, câte un linie a matricei pe o linie a ecranului, elementele de pe o linie fiind separate prin câte un spațiu. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 1 ≤ m, n ≤ 100
  • elementele matricei vor fi mai mici decât 1.000.000

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

Date de intrare
4 6
4 20 15 23 18 9
1 8 23 22 14 18
17 15 13 18 12 15
3 18 8 20 12 5
Date de ieșire
20 15 23 18 9 4
8 23 22 14 18 1
15 13 18 12 15 17
18 8 20 12 5 3

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def citire_lin_col():

   try:
       lin = int(input("Introduceti numarul de linii: "))
       col = int(input("Introduceti numarul de coloane: "))
       if 1 <= lin <= 100 and 1 <= col <= 100:
           print("Datele sunt corecte.")
           return lin, col
       else:
           print("Datele nu sunt conform restricțiilor impuse.")
           exit()
   except ValueError:
       print("Trebuie introduse doar numere intregi.")
       exit()

def citeste_valori_matrice(lin, col):

   matrice = []
   for linie in range(lin):
       matrice.append([])
       for coloana in range(col):
           while True:
               try:
                   n = int(input("Introduceti un numar: "))
                   if 0 <= n <= 1000000:
                       print("Datele sunt corecte.")
                       matrice[linie].append(n)
                       break
                   else:
                       print("Datele nu sunt conform restricțiilor impuse.")
               except ValueError:
                   print("Trebuie introduse doar numere intregi.")
   return matrice

def PermCol(matrice, n, m):

   for i in range(n):
       aux = matrice[i][0]
       for j in range(m - 1):
           matrice[i][j] = matrice[i][j + 1]
       matrice[i][m - 1] = aux
   for i in range(n):
       for j in range(m):
           print(matrice[i][j], end=' ')
       print()

if _name_ == "_main_":

  n, m = citire_lin_col()
  matrice = citeste_valori_matrice(n, m)
  PermCol(matrice, n, m)

</syntaxhighlight>

Explicatii[edit | edit source]

Acest cod citeste de la tastatura dimensiunile si valorile unei matrice, apoi efectueaza o permutare a elementelor fiecarei coloane a matricei si afiseaza matricea rezultata.
Mai exact, functia citire_lin_col() citeste numarul de linii si coloane ale matricei de la tastatura, verificand ca valorile introduse sa se incadreze in intervalul [1,100], si returneaza aceste valori.
Functia citeste_valori_matrice(lin, col) creeaza o matrice de dimensiunea specificata, apoi citeste valori intregi pentru fiecare element din matrice, verificand ca acestea sa fie in intervalul [0,1000000], si adauga elementele la matricea creata anterior.
Functia PermCol(matrice, n, m) primeste ca parametri matricea citita anterior, precum si numarul de linii si coloane, si permuta fiecare coloana a matricei astfel incat primul element sa ajunga ultimul si toate celelalte elemente sa se deplaseze cu o pozitie spre stanga. Rezultatul permutarii este afisat apoi la consola.
In final, functiile sunt apelate in ordinea: citire_lin_col() pentru a citi dimensiunile matricei, citeste_valori_matrice(lin, col) pentru a citi valorile matricei, si PermCol(matrice, n, m) pentru a permuta si afisa matricea rezultata.