Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
O smecherie pe care nu o inteleg

Balcon parter fara acte

unde gasesc un speed bag in bucur...

Programe TV cu altfel de sporturi
 Laptop "bun la toate" max...

navigatie noua vw tiguan

ctfmon.exe - System Error (in Saf...

Ați prins vremurile cand 120 Volț...
 Whatsapp nu afișeaza numele ...

Medii admitere Politehnica Bucure...

Se extinde Baza de la Kogalniceanu

Politist mutilat de caine in curt...
 Trotineta- cat rezista?

Windows 11 si inregistrare de pe ...

Cont Facebook spart

Accesare Plex prin webstation
 

Cuvinte care contin cel putin "k" vocale

- - - - -
  • Please log in to reply
3 replies to this topic

#1
popescubianca27

popescubianca27

    New Member

  • Grup: Candidate Members
  • Posts: 5
  • Înscris: 29.07.2022
Se dă un număr k și un text aflat pe mai multe linii. Să se afișeze toate cuvintele care conțin cel puțin k vocale. Considerăm că un cuvânt este o succesiune continuă de litere.
Date de intrare
De pe prima linie se va citi numărul k, iar de pe următoarele linii se va citi textul.
Date de ieșire
Pe ecran se vor afișa cuvintele care conțin cel puțin k vocale. Cuvintele vor fi afișate câte unul pe o linie
Restricții
Textul va conține maxim 260 de caractere
Exemplu
Date de intrare Date de ieșire
3
Anamaria
ia nota buna la...bacalaureat Anamaria
bacalaureat


Eu am incercat sa rezolv problema in felul urmator:
Am creat o functie ce imi returneaza "1" in cazul in care caracterul citit este o litera, 0 in sens contrar.
Intr-o structura repetitiva "while" citesc toate cuvintele dintr-un fisier text.
Am delimitat lungimea fiecarui cuvant folosind functia strlen.
Intr-un "for" iau fiecare element din cuvantul citit si verific daca este sau nu o litera.
Daca este litera, o variabila de tip flag ia valoarea 1. In cazul in care nu este o litera, variabila ia valoarea 0.
Daca este o litera, aflu daca este sau nu o vocala si contorizez numarul lor.
In caz ca nu este o litera, resetez contorul vocalelor. Daca se termina cuvantul printr-un spatiu, resetez de asemenea contorul vocalelor.
Eu doresc sa salvez in 2 variabile pozitia de inceput si sfarsit al cuvantului cautat de mine. Atunci cand gasesc un caracter non-litera, sa fac parcurgerea de la inceput pana la sfarsit al cuvantului si daca are cel putin "k" vocale, sa afisez acel cuvant. Nu reusesc sa fac delimitarea propriu zisa...am incercat cu foaia si pixul, dar pur si simplu am un blocaj de cateva zile deja la aceasta problema.

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;
int este_litera(char s) {
if (('a' <= s && s <= 'z') || ('A' <= s && s <= 'Z')) {
    return 1;
  }
  return 0;
}

int main(){
ifstream fin("date.in");
const int LIM = 261;
const int LIMV = 11;
char vocale[LIMV] = "aeiouAEIOU";
char s[LIM];
int k;
cin >> k;
int start = 0;
int nrVocale = 0;
int finish = 0;
int contor = 0;
int cuvant = 0;
while (fin >> s) {
    int n = strlen(s);
    int am_cuvant = 0;
    for (int i = 0; i < n; ++i) {
  if (este_litera(s[i])) {
    am_cuvant = 1;
    if(contor == 0) {
    start = i;
    }
    if (strchr(vocale,s[i])){
    ++nrVocale;
    }
    cout <<s[i]; //Aici m-am verificat daca delimitez corect cuvintele, separandu-le de semnele de punctuatie "...".
  } else if (am_cuvant == 1) {
  start = 0;
  nrVocale = 0;
  am_cuvant = 0;
  contor = 0;
  cout <<"\n";
  }
    }
    cout << "\n";
    contor = 0;
    nrVocale = 0;
}
return 0;
}

#2
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 19,960
  • Înscris: 24.02.2006
- din ce C mai stiu eu, chestia asta te face sa sari primul caracter din text:
for (int i = 0; i < n; ++i)

pentru ca ++i incrementeaza variabila inainte de a o folosi (probabil ca vroiai sa folosesti i++)

- variabila contor nu vad sa fie setata cu 1 nicaieri (si din cauza asta o sa tot resetezi si variabila "start")

#3
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,294
  • Înscris: 26.01.2019

View Post_Smiley_, on 05 decembrie 2022 - 08:31, said:

pentru ca ++i incrementeaza variabila inainte de a o folosi (probabil ca vroiai sa folosesti i++)

Singura diferenta dintre "++i" si "i++" este valoarea intoarsa (ambele constructii incrementeaza valoarea variabilei); insa valoarea intoarsa de a 3-a componenta a unui ciclu "for" nu are niciun impact (este ignorata).
Deci ambele forme produc acelasi efect in acest caz...

P.S. A doua componenta a "for" ("i < n") nu foloseste valoarea intoarsa de a 3-a componenta, ci valoarea variabilei "i" dupa executia completa a componentei 3 (si ignorarea valorii intoarse de aceasta executie).
Ar fi fost o diferenta daca a doua componenta ar fi fost "++i < n" vs. "i++ < n"; pentru aceasta forma, (mai) corect era "++i < n" deoarece "asteptarea" este ca valoarea variabilei la inceputul executiei corpului "for" sa respecte conditia.

Edited by darkangel2, 05 December 2022 - 09:21.


#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,360
  • Înscris: 10.08.2005

Quote

Eu doresc sa salvez in 2 variabile pozitia de inceput si sfarsit al cuvantului cautat de mine. Atunci cand gasesc un caracter non-litera, sa fac parcurgerea de la inceput pana la sfarsit al cuvantului si daca are cel putin "k" vocale, sa afisez acel cuvant. Nu reusesc sa fac delimitarea propriu zisa...am incercat cu foaia si pixul, dar pur si simplu am un blocaj de cateva zile deja la aceasta problema.


citeste (propozitie)
pentru fiecare cuvant din propozitie
daca numara_vocale(cuvant) mai mare decat numar_arbitrar afiseaza cuvant


-----------------------------------
numara_vocale(cuvant)
pentru fiecare literea din cuvant
creste contor daca esteVocala

Edited by MarianG, 05 December 2022 - 11:10.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate