3205 - Calc Funct: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Scrieți o funcție operand cu doi parametri care returnează poziția maximului dintr-un șir dat de numere întregi. Se presupune că elementele șirului sunt distincte și memorate începând cu poziția <code>1</code>. Parametrii funcției sunt: tabloul în care este memorat șirul și numărul de elemente ale acestuia. Scrieți o funcție procedurală cu trei parametri care oferă poziția minimului dintr-un șir dat de numere întregi. Se presupune că e...
Tag: visualeditor
 
No edit summary
Tag: visualeditor
 
Line 42: Line 42:


7 5 2 3 1
7 5 2 3 1
== Exemplu 3 ==
calcfunctIN.txt
0
1 2 1 3 4
Output consola: Dimensiunea n trebuie să fie în intervalul (1, 100).


== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
def validate_input(n, elements):
    if not (1 < n < 100):
        print("Dimensiunea n trebuie să fie în intervalul (1, 100).")
        return False
    if len(set(elements)) != n or any(x <= 0 or x >= 1000000000 for x in elements):
        print("Elementele trebuie să fie distincte, naturale și mai mici decât 1.000.000.000.")
        return False
    return True
def pozitie_maxim(tablou, numar_elemente):
def pozitie_maxim(tablou, numar_elemente):
     poz_maxim = 1
     poz_maxim = 1
Line 70: Line 90:
     with open("calcfunctIN.txt", "r") as f:
     with open("calcfunctIN.txt", "r") as f:
         n = int(f.readline())
         n = int(f.readline())
        if n < 1 or n > 100:
            print("Dimensiunea n trebuie să fie în intervalul [2, 100) și mai mică decât 1.000.000.000.")
            return
         vector = [0] + list(map(int, f.readline().split()))
         vector = [0] + list(map(int, f.readline().split()))
      
      
     # Verificare că elementele sunt distincte, naturale și mai mici decât 1.000.000.000
     # Verificare că elementele sunt distincte, naturale și mai mici decât 1.000.000.000 și a lui n
     if len(set(vector[1:])) != n or any(x <= 0 or x >= 1000000000 for x in vector[1:]):
     if not validate_input(n, vector[1:]):
        print("Elementele trebuie să fie distincte, naturale și mai mici decât 1.000.000.000.")
         return
         return



Latest revision as of 12:23, 3 December 2023

Cerința[edit]

Scrieți o funcție operand cu doi parametri care returnează poziția maximului dintr-un șir dat de numere întregi. Se presupune că elementele șirului sunt distincte și memorate începând cu poziția 1. Parametrii funcției sunt: tabloul în care este memorat șirul și numărul de elemente ale acestuia.

Scrieți o funcție procedurală cu trei parametri care oferă poziția minimului dintr-un șir dat de numere întregi. Se presupune că elementele șirului sunt distincte și memorate începând cu poziția 1. Parametrii funcției sunt: tabloul în care este memorat șirul, numărul de elemente ale acestuia precum și rezultatul.

Scrieți o funcție procedurală care interschimbă două valori întregi.

Scrieți o funcție procedurală care are trei parametri, în ordine: v (tablou unidimensional cu elemente int), pozInit (de tip int), pozFin (de tip int), și care afișează în ordine descrescătoare a indicilor (separate prin spații) elementele secvenței delimitate de pozInit și pozFin, inclusiv. Se garantează că primul parametrul pozInit se transmite funcției mai mic strict decât pozFin. Se garantează că tabloul are cel puțin pozFin elemente și că ambii indici se transmit funcției mai mari sau egali cu 1.

Scrieți un program care, apelând util TOATE funcțiile de mai sus, preia dintr-un fișier dimensiunea (notată de noi mai departe n) și elementele unui vector și le stochează în acesta începând cu poziția 1. Programul va scrie într-un fișier, în ordine descrescătoate a indicilor, elementele cuprinse între valoarea minimă și valoarea maximă. Se garantează că elementele șirului se dau distincte.

Date de intrare[edit]

Programul citește din fișierul calcfunctIN.txt mai întâi un număr n, iar apoi n numere naturale, separate prin spații.

Date de ieșire[edit]

Programul va scrie în fișierul calcfunctOUT.txt, pe un singur rând separate prin spații, elementele secvenței specificate, în ordinea cerută.

Restricții și precizări[edit]

  • 1 ≤ n ≤ 100
  • cele n numere citite vor fi distincte, naturale, și mai mici decât 1.000.000.000

Exemplul 1[edit]

calcfunctIN.txt

5

4 1 3 2 5

calcfunctOUT.txt

5 2 3 1

Exemplul 2[edit]

calcfunctIN.txt

6

4 1 3 2 5 7

calcfunctOUT.txt

7 5 2 3 1

Exemplu 3[edit]

calcfunctIN.txt

0

1 2 1 3 4

Output consola: Dimensiunea n trebuie să fie în intervalul (1, 100).

Rezolvare[edit]

<syntaxhighlight lang="python3" line="1"> def validate_input(n, elements):

   if not (1 < n < 100):
       print("Dimensiunea n trebuie să fie în intervalul (1, 100).")
       return False
   if len(set(elements)) != n or any(x <= 0 or x >= 1000000000 for x in elements):
       print("Elementele trebuie să fie distincte, naturale și mai mici decât 1.000.000.000.")
       return False
   return True

def pozitie_maxim(tablou, numar_elemente):

   poz_maxim = 1
   for i in range(2, numar_elemente + 1):
       if tablou[i] > tablou[poz_maxim]:
           poz_maxim = i
   return poz_maxim

def minim(tablou, numar_elemente):

   poz_minim = 1
   for i in range(2, numar_elemente + 1):
       if tablou[i] < tablou[poz_minim]:
           poz_minim = i
   return poz_minim

def interschimba(a, b):

   return b, a

def afiseaza_interval(tablou, pozInit, pozFin, file=None):

   for i in range(pozFin, pozInit - 1, -1):
       print(tablou[i], end=" ", file=file)

def main():

   # Citire dimensiune și elemente din fișierul de intrare
   with open("calcfunctIN.txt", "r") as f:
       n = int(f.readline())
       vector = [0] + list(map(int, f.readline().split()))
   
    # Verificare că elementele sunt distincte, naturale și mai mici decât 1.000.000.000 și a lui n
   if not validate_input(n, vector[1:]):
       return
   # Găsirea pozițiilor maximului și minimului
   poz_maxim = pozitie_maxim(vector, n)
   poz_minim = minim(vector, n)
   # Deschidere fișier pentru scriere
   with open("calcfunctOUT.txt", "w") as f:
       # Afișare în ordine descrescătoare a indicilor între minim și maxim
       afiseaza_interval(vector, min(poz_maxim, poz_minim), max(poz_maxim, poz_minim), file=f)

if __name__ == "__main__":

   main()

</syntaxhighlight>