Rezolvare simulare BAC 2019 Informatica (MI) – Subiectul al III-lea problema 2
Mai jos puteti gasi rezolvarea problemei 2 de la subiectul al III-lea din simularea pentru examenul de bacalaureat (mate-info) din anul 2019.
Rezolvare:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string.h> | |
using namespace std; | |
#define NUMAR_CUVINTE 4 | |
/** | |
* Functie ce verifica daca un cuvant | |
* p este prescurtat - pe ultima pozitie | |
* este '.'. Intoarce 1 daca este prescurtat | |
* si 0 altfel. | |
*/ | |
int verifica_daca_prescurtat(char *p) { | |
return p[strlen(p) - 1] == '.'; | |
} | |
int main() { | |
char *cuvinte[4] = {"COLEGIUL", "LICEUL", "NATIONAL", "TEORETIC"}; | |
char delim[] = " \n", *p; | |
char text[51], text_afisat[100000]; | |
int i; | |
cin.getline(text, 51); | |
p = strtok(text, delim); | |
text_afisat[0] = '\0'; | |
// iau cuvant cu cuvant din text | |
while (p != NULL) { | |
// daca este prescurtat | |
if (verifica_daca_prescurtat(p)) { | |
// scap de '.' de la sfarsit | |
// pentru a putea compara | |
p[strlen(p) - 1] = '\0'; | |
// iau fiecare cuvant din cele 4 ce pot fi prescurtate | |
// si verific daca p este o prescurtare a unuia dintre | |
// ele | |
for (i = 0; i < NUMAR_CUVINTE; i++) { | |
// daca p e prescurtate a cuvantului cuvinte[i] | |
if (strstr(cuvinte[i], p) == cuvinte[i]) { | |
// fac p egal cu cuvinte[i] si ies | |
// din for | |
p = cuvinte[i]; | |
break; | |
} | |
} | |
} | |
// pun p in text_afisat | |
if (text_afisat[0] == '\0') { | |
strcpy(text_afisat, p); | |
} else { | |
strcat(text_afisat, " "); | |
strcat(text_afisat, p); | |
} | |
// iau urmatorul cuvant | |
p = strtok(NULL, delim); | |
} | |
// afisez cuvantul | |
cout << text_afisat << endl; | |
return 0; | |
} |
Spor la lucru! Daca aveti intrebari nu ezitati sa le lasati in comentarii, va vom raspunde cat de repede putem
Multumiri !!!
cine vrea o varianta fara strtok
#include
#include
using namespace std;
void m(char *npro){
char *cuvinte[4] = { “LICEUL”, “NATIONAL”, “TEORETIC”,”COLEGIUL” };
for (int b=0;b<strlen(*cuvinte);b++){
if (strstr(cuvinte[b], npro)) {cout<<cuvinte[b]<<" ";break;}
}
}
int main()
{
char prop[100], npro[100];
int c=0,i,o;
cin.getline(prop,100);
for(i=0;i<strlen(prop);i++){
if (prop[i]!=' '){
if (prop[i]!='.')
npro[c]=prop[i]; else { m(npro);
c=-1; npro[0]=0 ;o=i;
}
c++;
}
}
cout<<strcpy(prop, prop+o+2);
}
#include
#include
using namespace std;
int main()
{
char cc[]=”COLEGIUL”, cl[]=”LICEUL”, cn[]=”NATIONAL”, ct[]=”TEORETIC”, s[51],a[101]={‘\0’};
int i,n,k,j,l;
cin.get(s,51);
n=strlen(s);
k=0;
for(i=0;i<n;i++)
{
if(s[i]==' '|| i==n-1)
{
if(s[i-1]=='.')
{if(s[k]==cc[0]) strcat(a,cc);
else if(s[k]==cl[0]) strcat(a,cl);
else if(s[k]==cn[0]) strcat(a,cn);
else if(s[k]==ct[0]) strcat(a,ct);
strcat(a," ");}
else
{
l=strlen(a);
for(j=k;j<=i;j++)
{a[l]=s[j]; l++;}
}
k=i+1;
}
}
cout<<a;
return 0;
}
#include
#include
using namespace std;
int main()
{
int i,ok;
char sir[51],sirNou[51];
cin.get(sir,51);
char prescurtare[5][3]={“CO”,”LI”,”NA”,”TE”};
char neprescurtat[5][9]={“COLEGIUL”,”LICEUL”,”NATIONAL”,”TEORETIC”};
char *cuvant=strtok(sir,” “);
while(cuvant)
{
ok=0;
i=0;
while(ok==0 && i<4) // testez daca cuvantul spart de functie incepe cu CO,LI,NA,TE
{
if(strstr(cuvant,prescurtare[i])-cuvant==0)
ok=1;
else
i++;
}
if(ok==1) // daca gasesc strstr prescurtat adaug cuvantul neprescurtat in noul sir
strcat(sirNou,neprescurtat[i]);
else strcat(sirNou,cuvant); // linia asta nu este executata niciodata
strcat(sirNou," ");
cuvant=strtok(NULL," ");
}
cout<<sirNou;
}