Rezolvare completă PbInfo #2736 Baza De Date

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 lentxoxo@lesbos.com
Oliver Regina 0 37 Vigilante 1234567890 mynameisoliverqueen@starcity.com
Sterling Archer 1000000 43 Agent 8423565491 ageofconsentis14inalabamaofeurope@isis.com
2 +

Ieșire

Sterling Archer 1000000 43 Agent 8423565491 ageofconsentis14inalabamaofeurope@isis.com
Oliver Regina 0 37 Vigilante 1234567890 mynameisoliverqueen@starcity.com
Len Trexler 100000 55 Spymaster 5554440192 lentxoxo@lesbos.com

Explicație

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

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Baza De Date:

#include<bits/stdc++.h>
using namespace std;

struct data
{
    string prenume,nume,functie,email,numar;
    unsigned long long salariu,varsta;
};

data d[1001];
int p;
char c;

bool comp(data i,data j)
{
    if(c=='-')
    {
            if(p==1)
                if(i.prenume>j.prenume)
                    return 1;
            if(p==2)
                if(i.nume>j.nume)
                    return 1;
            if(p==3)
                if(i.salariu>j.salariu)
                    return 1;
            if(p==4)
                if(i.varsta>j.varsta)
                    return 1;
            if(p==5)
                if(i.functie>j.functie)
                    return 1;
            if(p==6)
                if(i.numar>j.numar)
                    return 1;
            if(p==7)
                if(i.email>j.email)
                    return 1;
    }
    else
    {
            if(p==1)
                if(i.prenume<j.prenume)
                    return 1;
            if(p==2)
                if(i.nume<j.nume)
                    return 1;
            if(p==3)
                if(i.salariu<j.salariu)
                    return 1;
            if(p==4)
                if(i.varsta<j.varsta)
                    return 1;
            if(p==5)
                if(i.functie<j.functie)
                    return 1;
            if(p==6)
                if(i.numar<j.numar)
                    return 1;
            if(p==7)
                if(i.email<j.email)
                    return 1;
    }
    return 0;
}

int main()
{
    string s;
    int n,k=0;
    cin>>n;
    cin.get();
    for(int i=1;i<=n;i++)
    {
        getline(cin,s);
        vector<string> v;
        istringstream buffer(s);
        for(string w;buffer>>w;)
            v.push_back(w);
        for(int j=0;j<v.size();j++)
            switch(j)
            {
                case 0: d[k].prenume=v[j]; break;
                case 1: d[k].nume=v[j]; break;
                case 2: d[k].salariu=stoull(v[j]); break;
                case 3: d[k].varsta=stoull(v[j]); break;
                case 4: d[k].functie=v[j]; break;
                case 5: d[k].numar=v[j]; break;
                case 6: d[k].email=v[j]; break;
            }
        k++;
    }
    cin>>p>>c;
    stable_sort(d,d+k,comp);
    for(int i=0;i<k;i++)
        cout<<d[i].prenume<<" "<<d[i].nume<<" "<<d[i].salariu<<" "<<d[i].varsta<<" "<<d[i].functie<<" "<<d[i].numar<<" "<<d[i].email<<'\n';
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2736 Baza De Date

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2736 Baza De Date de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!