2736 - Baza de Date: Diferență între versiuni

De la Universitas MediaWiki
(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...)
 
(Ștergerea conținutului paginii)
Etichetă: Golire
 
Linia 1: Linia 1:
== 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 +
<br>
; 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>
# 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
# 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 == '-'))
# 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
# Citim datele de intrare
n, angajati, p, c = citire()
# Sortăm lista de angajați în funcție de criteriile specificate
sortare(n, angajati, p, c)
afisare(angajati)
</syntaxhighlight>

Versiunea curentă din 12 noiembrie 2023 14:04