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:

#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 🙂

4 Replies to “Rezolvare simulare BAC 2019 Informatica (MI) – Subiectul al III-lea problema 2”

  1. Multumiri !!!

    Reply

  2. 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);

    }

    Reply

  3. #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;
    }

    Reply

  4. ovidiu nu mai este sef June 26, 2019 at 12:59 pm

    #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;
    }

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *