Ma puteti ajuta va rog la o problema de pe pbinfo?
Problema suna asa:
Se dă un şir de caractere reprezentând o propoziţie formată din litere mici ale alfabetului englez şi spaţii.
Cerinţa
Determinați numărul de perechi de vocale consecutive din propoziție.
Date de intrare
Programul citeşte de la tastatură propoziţia dată.
Date de ieşire
Programul afişează pe ecran numărul de perechi de vocale consecutive.
Restricţii şi precizări
şirul de caractere citit conţine cel mult 255 de caractere
se consideră vocale caracterele din mulțimea {a,e,i,o,u}.
Am scris deja un cod, dar nu stiu din ce cauza imi da numai 70p pe problema:
<code>
#include<iostream>
#include<ctype.h>
#include<string.h>
using namespace std;
char s[255];
bool vocala(char a){ return strchr("aeiou",a);}
int nrperechi(char s[255])
{ int nr=0,n; n=strlen(s);
for(int i=1;i<n;i++)
if(vocala(s[i])&&vocala(s[i-1]))
nr++;
return nr;
}
void afisare(){
cout<<nrperechi(s);
}
int main()
{ cin.get(s,255);
afisare();
return 0;
}
</code>
AntiEaglesDavids:
vocale consecutive in ce sens? de ex: ae sunt vocale c. dar ai nu .... sau se refera doar la pozitie?
Răspunsuri la întrebare
Răspuns de
12
Ce urmeaza sa citesti sunt doar niste sfaturi, feel free to ignore if want ;)
Așa...
Deci codul tau are mici scapari (nu sunt grave dar uneori pot dauna fara ca tu sa-ti dai seama mai tarziu). De ex: ai declarat global 's' iar mai apoi ai folosit 's' ca argumentul unei functii ceea ce e inutil deoarece 's' este prezent peste tot el fiind declarat global. La functia 'int perechi(char s[255])' , 255 ala este in plus. Pur si simplu declara char s[] -> e mai simplu iar daca cumva limita este marita nu va trebui sa schimbi in functie numarul. Altceva ar fi: n; n=strlen(s); -> acelasi lucru ca si: int n = strlen(s) :D (stiu ma iau de niste lucruri cam nesemnificative dar daca tot scriem cod, de ce sa nu il facem si elegant si eficitent :) ). Functia afisare nu isi are rostu. Poti foarte bine sa introduci cout<<nrperechi(s); in main ca tot acelasi lucru face + ca reduce white spaces. Iar in cele din urma #include<ctype.h> e useless iar string.h inlocuieste-l mai bine cu cstring pt vizibilitate ;)
Aici e algoritmul tau dar un pic modificat, daca nu-ti merge sa-mi spui link-ul de la problema ca sa te ajut, ok?
#include<iostream>
#include<cstring>
using namespace std;
const int NMAX = 260;
char s[NMAX];
bool vocala(char a){ return strchr("aeiou", a); }
int nrperechi()
{
int nr = 0, n = strlen(s);
for(int i=0; i < n - 1; i++) {
if(s[i+1] == ' ') { i++; continue; }
if(vocala(s[i]) != NULL && vocala(s[i+1]) != NULL)
nr++;
else if(vocala(s[i]) == NULL && vocala(s[i+1]) == NULL)
i++;
}
return nr;
}
int main()
{
cin.get(s, NMAX);
cout << nrperechi() << '\n';
return 0;
}
Așa...
Deci codul tau are mici scapari (nu sunt grave dar uneori pot dauna fara ca tu sa-ti dai seama mai tarziu). De ex: ai declarat global 's' iar mai apoi ai folosit 's' ca argumentul unei functii ceea ce e inutil deoarece 's' este prezent peste tot el fiind declarat global. La functia 'int perechi(char s[255])' , 255 ala este in plus. Pur si simplu declara char s[] -> e mai simplu iar daca cumva limita este marita nu va trebui sa schimbi in functie numarul. Altceva ar fi: n; n=strlen(s); -> acelasi lucru ca si: int n = strlen(s) :D (stiu ma iau de niste lucruri cam nesemnificative dar daca tot scriem cod, de ce sa nu il facem si elegant si eficitent :) ). Functia afisare nu isi are rostu. Poti foarte bine sa introduci cout<<nrperechi(s); in main ca tot acelasi lucru face + ca reduce white spaces. Iar in cele din urma #include<ctype.h> e useless iar string.h inlocuieste-l mai bine cu cstring pt vizibilitate ;)
Aici e algoritmul tau dar un pic modificat, daca nu-ti merge sa-mi spui link-ul de la problema ca sa te ajut, ok?
#include<iostream>
#include<cstring>
using namespace std;
const int NMAX = 260;
char s[NMAX];
bool vocala(char a){ return strchr("aeiou", a); }
int nrperechi()
{
int nr = 0, n = strlen(s);
for(int i=0; i < n - 1; i++) {
if(s[i+1] == ' ') { i++; continue; }
if(vocala(s[i]) != NULL && vocala(s[i+1]) != NULL)
nr++;
else if(vocala(s[i]) == NULL && vocala(s[i+1]) == NULL)
i++;
}
return nr;
}
int main()
{
cin.get(s, NMAX);
cout << nrperechi() << '\n';
return 0;
}
Alte întrebări interesante
Engleza,
9 ani în urmă
Engleza,
9 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Chimie,
9 ani în urmă
Matematică,
9 ani în urmă