Rezolvare completă PbInfo #1494 s_p_c

Cerința

Scrieţi un program care citeşte din fişierul de intrare şiruri de caractere de forma cuvânt#tip, unde cuvânt este un şir oarecare de litere iar tip poate fi una din literele S, P sau C, semnificaţia fiind subiect, predicat sau complement. Programul va afişa, în ordine lexicografică (după subiect, predicat, complement), toate propoziţiile având structura subiect predicat complement ce pot fi formate cu ajutorul cuvintelor citite.

Date de intrare

Fișierul de intrare s_p_c.in conține pe prima linie mai multe şiruri de caractere de forma cuvânt#tip, separate printr-un spaţiu.

Date de ieșire

Fișierul de ieșire s_p_c.out va conține toate propoziţiile având structura descrisă mai sus, câte una pe linie.

Restricții și precizări

  • sunt cel mult 100 de subiecte, 100 de predicate şi 100 de complemente
  • fiecare cuvânt are cel mult 40 de caractere, litere mari şi mici ale alfabetului englez
  • în fişier există cel puţin un subiect, cel puţin un predicat şi cel puţin un complement.

Exemplu:

s_p_c.in

Ion#S Vasile#S alearga#P repede#C scrie#P incet#C

s_p_c.out

Ion alearga incet
Ion alearga repede
Ion scrie incet
Ion scrie repede
Vasile alearga incet
Vasile alearga repede
Vasile scrie incet
Vasile scrie repede

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 s_p_c:

#include <fstream>
#include <cstring>

using namespace std;

typedef char m_cuvinte[100][100];

//--------------------------------------------------------------------------------------------
void interschimbare(char sir1[], char sir2[]) {
    char aux[100];
    strcpy(aux, sir1);
    strcpy(sir1, sir2);
    strcpy(sir2, aux);
}

//--------------------------------------------------------------------------------------------
void sortare(m_cuvinte M, unsigned numarElem) {
    for(size_t i = 0; i < numarElem - 1; i++)
        for(size_t j = i + 1; j < numarElem; j++)
            if(strcmp(M[i], M[j]) == 1)
                interschimbare(M[i], M[j]);
}

int main(void) {

    ifstream fin("s_p_c.in");
    ofstream fout("s_p_c.out");

    char str[105];

    m_cuvinte subiect, predicat, complement;

    unsigned numarSubiecte = 0, numarPredicate = 0, numarComplemente = 0;

    while(fin >> str) {
        char tip = str[strlen(str) - 1];

        str[strlen(str) - 2] = '\0';

        if(tip == 'S')
            strcpy(subiect[numarSubiecte++], str);
        else if(tip == 'P')
            strcpy(predicat[numarPredicate++], str);
        else
            strcpy(complement[numarComplemente++], str);

    }

    sortare(subiect, numarSubiecte);
    sortare(predicat, numarPredicate);
    sortare(complement, numarComplemente);

    for(size_t i = 0; i < numarSubiecte; i++)
        for(size_t j = 0; j < numarPredicate; j++)
            for(size_t k = 0; k < numarComplemente; k++)
                fout << subiect[i] << ' ' << predicat[j] << ' ' << complement[k] << endl;

    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 #1494 s_p_c

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1494 s_p_c 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!