1845 - OrdonareF Rec: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerinţa== Scrieţi definiția completă a subprogramului recursiv ordonare care are 2 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului. Subprogramul ordonează crescător elementele tabloului a, fără a returna valori. ==Date de intrare== Se va introduce de la tastatură 2 numere naturale care vor fi transmise ca perimetrii ==Date de ieșire== Pe...
 
No edit summary
Line 19: Line 19:
==Exemplu==
==Exemplu==
Dacă n=6 și a=(63,273,9,83,93,123), după apelul subprogramului tabloul a devine (9,63,83,93,123,273).
Dacă n=6 și a=(63,273,9,83,93,123), după apelul subprogramului tabloul a devine (9,63,83,93,123,273).
==Important==
Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


==Rezolvare==
==Rezolvare==
Validarea datelor de intrare poate fi realizată în funcția validare, iar funcția ordonare poate fi implementată recursiv, folosind o metodă de sortare prin interschimbare.
Implementarea poate arăta astfel:
def validare(n, a):
    """
    Verifica daca datele de intrare corespund cerintei
    :param n: numarul de elemente din lista
    :param a: lista cu elemente
    """
    if n < 1 or n > 1000:
        print("Datele de intrare nu corespund restricțiilor impuse.")
        return False
    for elem in a:
        if elem >= 1000000000:
            print("Datele de intrare nu corespund restricțiilor impuse.")
            return False
    print("Datele de intrare corespund restricțiilor impuse.")
    return True
  def ordonare(a, n):
  def ordonare(a, n):
     if n <= 1:
    """
    Ordoneaza crescator elementele tabloului a, fara a returna valori
    :param a: lista de elemente
    :param n: numarul de elemente din lista
    """
     if n == 1:
         return
         return
     # Divizarea listei in doua jumatati
     for i in range(n-1):
    m = n // 2
         if a[i] > a[i+1]:
    left = a[:m]
             a[i], a[i+1] = a[i+1], a[i]
    right = a[m:]
     ordonare(a, n-1)
    # Sortarea celor doua jumatati
 
    ordonare(left, len(left))
 
    ordonare(right, len(right))
  def main():
    # Combinarea celor doua jumatati ordonate
    n = int(input("Introduceti numarul de elemente: "))
    i = j = k = 0
    a = []
    while i < len(left) and j < len(right):
    for i in range(n):
         if left[i] < right[j]:
        elem = int(input(f"Introduceti elementul {i+1}: "))
             a[k] = left[i]
        a.append(elem)
            i += 1
 
        else:
    if validare(n, a):
            a[k] = right[j]
        ordonare(a, n)
            j += 1
        print(f"Tabloul ordonat: {a}")
        k += 1
 
    while i < len(left):
 
        a[k] = left[i]
  if __name__ == '__main__':
        i += 1
    main()
        k += 1
     while j < len(right):
        a[k] = right[j]
        j += 1
        k += 1
  # Citirea datelor de intrare
n = int(input())
a = []
for i in range(n):
    a.append(int(input()))
# Verificarea datelor de intrare
if n <= 0 or n > 1000:
    print("Datele de intrare nu corespund restricțiilor impuse.")
else:
    # Apelul functiei de ordonare
    ordonare(a, n)  
    # Afisarea tabloului ordonat
    print("Datele de intrare corespund restricțiilor impuse.")
    print(a)
La rularea programului, în cazul în care datele introduse sunt corecte, se va afișa mesajul "Datele de intrare
  corespund restricțiilor impuse." și tabloul ordonat, astfel:
6
63
273
9
83
93
123
Datele de intrare corespund restricțiilor impuse.
[9, 63, 83, 93, 123, 273]

Revision as of 11:26, 25 March 2023

Cerinţa

Scrieţi definiția completă a subprogramului recursiv ordonare care are 2 parametri: a, prin care primeşte un tablou unidimensional cu maximum 1000 de numere naturale mai mici decât 1.000.000.000 și n, numărul efectiv de elemente ale tabloului. Subprogramul ordonează crescător elementele tabloului a, fără a returna valori.

Date de intrare

Se va introduce de la tastatură 2 numere naturale care vor fi transmise ca perimetrii

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".

Restricţii şi precizări

0 < n <= 1000 numele subprogramului cerut este ordonare parametrii sunt, în această ordine: a, n elementele tabloului a sunt indexate de la zero se recomandă realizarea unei soluții recursive

Exemplu

Dacă n=6 și a=(63,273,9,83,93,123), după apelul subprogramului tabloul a devine (9,63,83,93,123,273).

Important

Soluţia propusă va conţine doar definiţia subprogramului cerut. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Rezolvare

Validarea datelor de intrare poate fi realizată în funcția validare, iar funcția ordonare poate fi implementată recursiv, folosind o metodă de sortare prin interschimbare.

Implementarea poate arăta astfel:

def validare(n, a):
   """
   Verifica daca datele de intrare corespund cerintei
   :param n: numarul de elemente din lista
   :param a: lista cu elemente
   """
   if n < 1 or n > 1000:
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return False
   for elem in a:
       if elem >= 1000000000:
           print("Datele de intrare nu corespund restricțiilor impuse.")
           return False
   print("Datele de intrare corespund restricțiilor impuse.")
   return True


def ordonare(a, n):
   """
   Ordoneaza crescator elementele tabloului a, fara a returna valori
   :param a: lista de elemente
   :param n: numarul de elemente din lista
   """
   if n == 1:
       return
   for i in range(n-1):
       if a[i] > a[i+1]:
           a[i], a[i+1] = a[i+1], a[i]
   ordonare(a, n-1)


def main():
   n = int(input("Introduceti numarul de elemente: "))
   a = []
   for i in range(n):
       elem = int(input(f"Introduceti elementul {i+1}: "))
       a.append(elem)
   if validare(n, a):
       ordonare(a, n)
       print(f"Tabloul ordonat: {a}")


if __name__ == '__main__':
   main()