2736 - Baza de Date

From Bitnami MediaWiki
Revision as of 18:24, 1 November 2023 by AntalKrisztian (talk | contribs) (Pagină nouă: == Cerinţa == Se citește numărul '''n''' și apoi '''n''' articole cu structura: '''prenume nume salariu vârstă funcție număr_de_telefon email'''. Fiecare articol este plasat pe câte o linie, câmpurile sale fiind separate prin câte un spațiu. Câmpurile '''salariu''' și '''vârstă''' conțin numere naturale, celelalte conțin șiruri de caractere. Se citește apoi un număr natural '''p''' cuprins între '''1''' și '''7''' și un caracter '''c''' care poate fi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Se citește numărul n și apoi n articole cu structura: prenume nume salariu vârstă funcție număr_de_telefon email. Fiecare articol este plasat pe câte o linie, câmpurile sale fiind separate prin câte un spațiu. Câmpurile salariu și vârstă conțin numere naturale, celelalte conțin șiruri de caractere.

Se citește apoi un număr natural p cuprins între 1 și 7 și un caracter c care poate fi + sau -.

Se cere ordonarea celor n articole în funcție de p și c, astfel:

  • dacă p=1, ordonarea se face după prenume; dacă p=2, ordonarea se face după nume; dacă p=3, ordonarea se face după salariu; dacă p=4, ordonarea se face după vârstă; dacă p=5, ordonarea se face după funcție; dacă p=6, ordonarea se face după număr_de_telefon; dacă p=7, ordonarea se face după email;
  • dacă c are valoarea +, ordonarea va fi crescătoare, iar dacă c are valoarea -, ordonarea va fi descrescătoare;
  • dacă două articole au aceeași valoare a câmpului în raport cu care se face sortarea, ordinea lor nu se va modifica.

Date de intrare

Programul citește de la tastatură numărul n, apoi cele n articole, fiecare pe câte o linie, câmpurile fiecărui articol fiind separate prin câte un spațiu, apoi p și c cu semnificația din enunț.

Date de ieşire

Programul va afișa pe ecran articolele sortate conform cerinței. Fiecare articol va fi afișat pe câte o linie, câmpurile fiind separate prin câte un spațiu.

Restricții și precizări

  • 1 ⩽ n ⩽ 80
  • câmpurile numerice vor avea valori pe 64 de biți fără semn, iar celelalte vor avea maximum 255 de caractere.

Exemplu

Intrare
3
Len Trexler 100000 55 Spymaster 5554440192 lt@sp.com
Oliver Regina 0 37 Vigilante 1234567890 or@vg.com
Sterling Archer 1000000 43 Agent 8423565491 sa@ag.com
2 +


Ieșire
Sterling Archer 1000000 43 Agent 8423565491 sa@ag.com
Oliver Regina 0 37 Vigilante 1234567890 or@vg.com
Len Trexler 100000 55 Spymaster 5554440192 lt@sp.com

Explicaţie

S-a sortat crescător după nume(2), și s-au afișat.

Rezolvare

<syntaxhighlight lang="python" line>

  1. Funcția citește datele de intrare.

def citire():

   n = int(input())  # Citim numărul de angajați
   angajati = []  # Inițializăm lista de angajați
   for _ in range(n):
       angajat = input().split()  # Citim datele unui angajat
       angajat[2] = int(angajat[2])  # Convertim salariul la int
       angajat[3] = int(angajat[3])  # Convertim vârsta la int
       angajati.append(angajat)  # Adăugăm angajatul în listă
   p, c = input().split()  # Citim p și c
   p = int(p)  # Convertim p la int
   return n, angajati, p, c
  1. Funcția 'sortare' sortează lista de angajați în funcție de criteriile specificate.

def sortare(n, angajati, p, c):

   # Sortăm lista de angajați. Dacă c este '-', sortarea este descrescătoare.
   angajati.sort(key=lambda x: x[p-1], reverse=(c == '-'))
  1. Funcția 'afisare' afișează lista de angajați.

def afisare(angajati):

   for angajat in angajati:
       print(' '.join(map(str, angajat)))  # Afișăm datele unui angajat
  1. Citim datele de intrare

n, angajati, p, c = citire()

  1. Sortăm lista de angajați în funcție de criteriile specificate

sortare(n, angajati, p, c) afisare(angajati)

</syntaxhighlight>