2302 - Memory 009: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dau două șiruri de numere '''A''' și '''B'''.Calculati '''A ∩ B'''. == Date de intrare == Fișierul de intrare '''memory009.in''' conține pe prima linie numerele '''n, m''' (lungimile celor două șiruri), iar pe a doua linie '''n''' numere naturale separate prin spații, iar pe a treia linie '''m''' numere naturale separate prin spații == Date de ieșire == Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de i...
 
No edit summary
 
Line 64: Line 64:




def executa():
if __name__ == '__main__':
     with open("memory009.in", "r") as fin:
     with open("memory009.in", "r") as fin:
         # Citim numerele n și m de pe prima linie
         # Citim numerele n și m de pe prima linie
Line 83: Line 83:




executa()






'''Explicatie'''


Programul citeste numerele din fisierul de intrare "memory009.in" și verifică dacă acestea sunt în acord cu specificatiile problemei (n si m trebuie să fie mai mari decat 0, fiecare lista trebuie să aiba 32 de elemente, elementele din fiecare lista trebuie să fie nenegative). Dacă datele de intrare nu sunt valide, programul va afișa un mesaj corespunzător și se va opri.


Dacă datele de intrare sunt valide, programul va citi cele două liste de numere din fișierul de intrare și va stoca numărul de apariții ale fiecărui element din fiecare listă într-un vector corespunzător. Apoi, programul va parcurge aceste două vectori și va scrie în fișierul de ieșire "memory009.out" toate numerele care apar în ambele liste de numere, în ordine crescătoare.


Funcția valideaza_date verifică dacă datele de intrare sunt valide sau nu și afișează un mesaj corespunzător. Funcția rezolva scrie rezultatul în fișierul de ieșire "memory009.out". Funcția executa este funcția principală care citeste datele de intrare, validează aceste date, rezolvă problema și afișează mesaje corespunzătoare








</syntaxhighlight>




==Explicatie==


Valideaza_date(n, m, f1, f2) - Această funcție primește patru parametri: n, m, f1 și f2. Aceasta verifică dacă n și m sunt ambele mai mari sau egale cu 1 și dacă lungimea ambelor liste f1 și f2 este de 32. De asemenea, verifică dacă orice număr în f1 sau f2 este mai mare sau egal cu 0. Dacă oricare dintre aceste verificări nu este valabilă, funcția afișează un mesaj de eroare și iese din program folosind funcția exit().


Rezolva(n, m, f1, f2) - Această funcție primește și ea patru parametri: n, m, f1 și f2. Funcția deschide un fișier numit "memory009.out" în modul de scriere, apoi parcurge ambele liste și scrie indexul tuturor elementelor care apar în ambele liste în fișierul de ieșire.


</syntaxhighlight>
Executa() - Această funcție deschide fișierul "memory009.in" în modul de citire, citește numerele n și m de pe prima linie, apoi inițializează două liste de lungime 32 cu toți elementele egale cu 0. Apoi, funcția citește cele n numere ale primei liste și incrementează fiecare element din f1 care corespunde cu aceste numere. Apoi, funcția citește cele m numere ale celei de-a doua liste și incrementează fiecare element din f2 care corespunde cu aceste numere. În cele din urmă, funcția validează datele apelând funcția valideaza_date() și rezolvă problema apelând funcția rezolva().
 
if __name__ == '__main__': - Această instrucțiune verifică dacă acest script este rulat ca modul principal al programului. Dacă da, atunci acesta apelează funcția executa(). Aceasta este o modalitate comună de a separa codul care trebuie să fie executat de la importare în alte module.

Latest revision as of 05:45, 2 April 2023

Cerinţa[edit | edit source]

Se dau două șiruri de numere A și B.Calculati A ∩ B.

Date de intrare[edit | edit source]

Fișierul de intrare memory009.in conține pe prima linie numerele n, m (lungimile celor două șiruri), iar pe a doua linie n numere naturale separate prin spații, iar pe a treia linie m numere naturale separate prin spații

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",fișierul de ieșire memory009.out va conține mulțimea M care reprezinta mulțimea A ∩ B, în ordine crescătoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

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

  • 1 ≤ n ≤ m ≤ 1.000.000
  • numerele de pe a doua linie și a treia a fișierului de intrare vor fi mai mici sau egale cu 30
  • în fișierul de ieșire nu se repetă elementele !

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

memory009.in
3 2
2 5 3
5 9
ecran
Datele sunt introduse corect.
memory009.out
5

Exemplul 2[edit | edit source]

memory009.in
3 4
1 2 3
2 3 4 5
ecran
Datele sunt introduse corect.
memory009.out
2 3

Exemplul 3[edit | edit source]

memory009.in
0 2
1 2 3
2 3 4 5
ecran
Datele nu corespund restricțiilor impuse.
memory009.out



Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 2302 - Memory 009

def valideaza_date(n, m, f1, f2):

   if n <= 0 or m <= 0 or len(f1) != 32 or len(f2) != 32:
       print("Datele nu corespund restricțiilor impuse.")
       exit(0)
   for i in range(32):
       if f1[i] < 0 or f2[i] < 0:
           print("Datele nu corespund restricțiilor impuse.")
           exit(0)
   print("Datele sunt introduse corect.")


def rezolva(n, m, f1, f2):

   with open("memory009.out", "w") as fout:
       for i in range(32):
           if f2[i] != 0 and f1[i] != 0:
               fout.write(str(i) + " ")


if __name__ == '__main__':

   with open("memory009.in", "r") as fin:
       # Citim numerele n și m de pe prima linie
       n, m = map(int, fin.readline().split())
       f1 = [0] * 32
       f2 = [0] * 32
       # Citim cele n numere ale primei liste de pe a doua linie
       numere1 = list(map(int, fin.readline().split()))
       for x in numere1:
           f1[x] += 1
       # Citim cele m numere ale celei de-a doua liste de pe a treia linie
       numere2 = list(map(int, fin.readline().split()))
       for x in numere2:
           f2[x] += 1
   valideaza_date(n, m, f1, f2)
   rezolva(n, m, f1, f2)







</syntaxhighlight>


Explicatie[edit | edit source]

Valideaza_date(n, m, f1, f2) - Această funcție primește patru parametri: n, m, f1 și f2. Aceasta verifică dacă n și m sunt ambele mai mari sau egale cu 1 și dacă lungimea ambelor liste f1 și f2 este de 32. De asemenea, verifică dacă orice număr în f1 sau f2 este mai mare sau egal cu 0. Dacă oricare dintre aceste verificări nu este valabilă, funcția afișează un mesaj de eroare și iese din program folosind funcția exit().

Rezolva(n, m, f1, f2) - Această funcție primește și ea patru parametri: n, m, f1 și f2. Funcția deschide un fișier numit "memory009.out" în modul de scriere, apoi parcurge ambele liste și scrie indexul tuturor elementelor care apar în ambele liste în fișierul de ieșire.

Executa() - Această funcție deschide fișierul "memory009.in" în modul de citire, citește numerele n și m de pe prima linie, apoi inițializează două liste de lungime 32 cu toți elementele egale cu 0. Apoi, funcția citește cele n numere ale primei liste și incrementează fiecare element din f1 care corespunde cu aceste numere. Apoi, funcția citește cele m numere ale celei de-a doua liste și incrementează fiecare element din f2 care corespunde cu aceste numere. În cele din urmă, funcția validează datele apelând funcția valideaza_date() și rezolvă problema apelând funcția rezolva().

if __name__ == '__main__': - Această instrucțiune verifică dacă acest script este rulat ca modul principal al programului. Dacă da, atunci acesta apelează funcția executa(). Aceasta este o modalitate comună de a separa codul care trebuie să fie executat de la importare în alte module.