Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
LakeSide 11 Straulesti

arii

Sapa peste pardoseala

Smart phone pentru auz deficitar
 Manager transport marfa. Pareri. ...

BIOS F.24 pentru HP Pavilion g7-2...

Meta Quest 3 512 gb

Father's Day
 Clipboard files copy/paste, filen...

Boardgame-uri despre cuvinte

Care-i treaba cu Reddit-ul? (nu m...

Diferente diferentiale
 Finala Eurovision 2024

De ce nu mai sunt proteste?

Etanșare intre cada perete b...

Back-up box Fronius ?
 

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: 20,082
  • Î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,383
  • Î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,487
  • Î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

Bun venit pe Forumul Softpedia!

1 user(s) are reading this topic

0 members, 1 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