1653 – Proporționale1: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
 
(One intermediate revision by the same user not shown)
Line 23: Line 23:


== Rezolvare ==  
== Rezolvare ==  
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
def citeste_numar_elemente():
    while True:
        try:
            numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): "))
            if numar_elemente < 1 or numar_elemente > 100:
                raise ValueError
            return numar_elemente
        except ValueError:
            print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.")
def citeste_siruri(numar_elemente):
    while True:
        try:
            sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split()))
            sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split()))
            if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente:
                raise ValueError
            for i in range(numar_elemente):
                if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999:
                    raise ValueError
            return sir_1, sir_2
        except ValueError:
            print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente))
def verifica_proportionalitate(sir_1, sir_2):
    sir_1.sort()
    sir_2.sort()
    for i in range(numar_elemente):
        if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]:
            return False
    return True
if __name__ == '__main__':
    numar_elemente = citeste_numar_elemente()
    sir_1, sir_2 = citeste_siruri(numar_elemente)
    if verifica_proportionalitate(sir_1, sir_2):
        print("DA")
    else:
        print("NU")
    print("Datele sunt introduse corect.")
</syntaxhighlight>
=== Rezolvare ver. 2 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>



Latest revision as of 09:56, 22 May 2023

Sursa: [1]


Cerinţa[edit | edit source]

Se dau două şiruri cu câte n elemente, numere naturale nenule. Să se verifice dacă este posibilă rearanjarea elementelor celor două şiruri astfel încât acestea să fie invers proporţionale.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.

Date de ieșire[edit | edit source]

Programul afișează pe ecran mesajul DA , dacă este posibilă rearanjarea elementelor celor două şiruri astfel încât acestea să fie invers proporţionale, respectiv NU în caz contrar.

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 100
  • elementele şirurilor vor avea cel mult 4 cifre

Exemplu[edit | edit source]

Intrare
4
2 8 4 1
4 2 8 16
Ieșire
DA

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_numar_elemente():

   while True:
       try:
           numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): "))
           if numar_elemente < 1 or numar_elemente > 100:
               raise ValueError
           return numar_elemente
       except ValueError:
           print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.")

def citeste_siruri(numar_elemente):

   while True:
       try:
           sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split()))
           sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split()))
           if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente:
               raise ValueError
           for i in range(numar_elemente):
               if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999:
                   raise ValueError
           return sir_1, sir_2
       except ValueError:
           print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente))

def verifica_proportionalitate(sir_1, sir_2):

   sir_1.sort()
   sir_2.sort()
   for i in range(numar_elemente):
       if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]:
           return False
   return True

if __name__ == '__main__':

   numar_elemente = citeste_numar_elemente()
   sir_1, sir_2 = citeste_siruri(numar_elemente)
   if verifica_proportionalitate(sir_1, sir_2):
       print("DA")
   else:
       print("NU")
   print("Datele sunt introduse corect.")

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. Citim numarul de elemente din siruri si validam datele de intrare

while True:

   try:
       numar_elemente = int(input("Introduceti numarul de elemente (maxim 100): "))
       if numar_elemente < 1 or numar_elemente > 100:
           raise ValueError
       break
   except ValueError:
       print("Numarul de elemente trebuie sa fie un numar intre 1 si 100.")
  1. Citim cele doua siruri si validam datele de intrare

while True:

   try:
       sir_1 = list(map(int, input("Introduceti elementele primului sir, separate prin spatiu: ").split()))
       sir_2 = list(map(int, input("Introduceti elementele celui de-al doilea sir, separate prin spatiu: ").split()))
       if len(sir_1) != numar_elemente or len(sir_2) != numar_elemente:
           raise ValueError
       for i in range(numar_elemente):
           if sir_1[i] < 1 or sir_1[i] > 9999 or sir_2[i] < 1 or sir_2[i] > 9999:
               raise ValueError
       break
   except ValueError:
       print("Elementele trebuie sa fie numere naturale nenule cu cel mult 4 cifre si sa fie exact {} elemente in fiecare sir.".format(numar_elemente))
  1. Sortam cele doua siruri

sir_1.sort() sir_2.sort()

  1. Verificam daca sirurile sunt proportionale

proportional = True for i in range(numar_elemente):

   if sir_1[i] * sir_2[numar_elemente-1-i] != sir_1[numar_elemente-1-i] * sir_2[i]:
       proportional = False
       break
  1. Afisam rezultatul

if proportional:

   print("DA")

else:

   print("NU")

print("Datele sunt introduse corect.")

</syntaxhighlight>