Cerința
Scrieţi un program care citeşte din fişierul de intrare şiruri de caractere de forma tip#cuvânt
, 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_2.in
conține pe prima linie mai multe şiruri de caractere de forma tip#cuvânt
, separate printr-un spaţiu.
Date de ieșire
Fișierul de ieșire s_p_c_2.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 şi100
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_2.in
S#Ion S#Vasile P#alearga C#repede P#scrie C#incet
s_p_c_2.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_2:
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin ("s_p_c_2.in");
ofstream fout ("s_p_c_2.out");
///sirurile de caractere incep cu indicativul de parte de propozitie
char sub[101][41],pred[101][41],cpl[101][41];///memoram subiect, predicat, complemente in cpl
int s,p,c;///cate subiecte, cate pred....
void sortare(char a[101][41],int n)
{
char aux[41];
for(int i = 1;i <= n-1; i++)
for(int j = i+1;j <= n; j++)
if(strcmp(a[i],a[j]) > 0)
{
strcpy(aux,a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], aux);
}
}
int main()
{
char a[256];
while(fin >> a)
{
if(a[0] == 'S')
{
++s;
strcpy(sub[s], a+2);///copiem pe linia s cuvantul format incepand cu cracterul de indice 2(adica al treilea)
}
else
if(a[0] == 'P')
{
++p;
strcpy(pred[p], a+2);
}
else
{
++c;
strcpy(cpl[c], a+2);
}
}
sortare(sub,s);
sortare(pred,p);
sortare(cpl,c);
for(int i = 1;i <= s; i++)
for(int j = 1;j <= p; j++)
for(int m = 1; m <= c; m++)
fout << sub[i] << " " << pred[j] << " " << cpl[m] << '\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 .
Rezolvarea problemei #1600 s_p_c_2
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1600 s_p_c_2 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!