3205 - Calc Funct
Cerința[edit | edit source]
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 | edit source]
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 | edit source]
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 | edit source]
1 ≤ n ≤ 100
- cele
n
numere citite vor fi distincte, naturale, și mai mici decât1.000.000.000
Exemplul 1[edit | edit source]
calcfunctIN.txt
5
4 1 3 2 5
calcfunctOUT.txt
5 2 3 1
Exemplul 2[edit | edit source]
calcfunctIN.txt
6
4 1 3 2 5 7
calcfunctOUT.txt
7 5 2 3 1
Exemplu 3[edit | edit source]
calcfunctIN.txt
0
1 2 1 3 4
Output consola: Dimensiunea n trebuie să fie în intervalul (1, 100).
Rezolvare[edit | edit source]
<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>