Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Un designer artist: Raymond Loewy

ATS din contactor modular

Parere apartament ~150k

Limitare la 100mb/s
 Altercație

Cartonașe și stickere t...

Ciobanesc german - zgarda electro...

Ce este instalatia asta? (Valea B...
 BD-R Verbatim 25gb salvare Fisier

Lupte WW2

Achizitie SUV, buget 17k euro

Gps traker pentru animale
 Aplicatii terte pentru IPTV, OTT,...

Drept trecere cu “carulR...

Sunt noile generatii care se nasc...

Butuc pedalier
 

[TEMA] Lungimea medie a cuvintelor

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

#1
Ciupacabra14

Ciupacabra14

    New Member

  • Grup: Candidate Members
  • Posts: 4
  • Înscris: 21.06.2021
Salutare, am si eu o problema de facut in care trebuie sa calculez lungimea medie a cuvintelor din propozitia introdusa de la tastatura.
  • Sirul va conține maxim 100 de caractere.
  • Șirul va conține litere mari și mici precum și semne de punctuație
  • Un cuvânt este definit ca una sau mai multe litere aflate pe poziții consecutive
  • În cazul în care șirul nu conține cuvinte, lungimea medie este 0
Ideea estre ca am nevoie de 100 de pct sa rezolv problema si am ajuns abia pana la 25 de puncte cu acest cod.
Codul pe care l- am scris pana acum :
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
int este_litera(char c) {
  if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
return 1;
  return 0;
}
bool este_spatiu(char c){
if(c==' ')
return true;
return false;
}
double numar_cuvinte(char sir[101]) {
  double n = strlen(sir);
  double am_cuvant = 0;
  double numar_cuvinte = 0;
  for (int i = 0; i < n; ++i) {
if (este_litera(sir[i])) {
  am_cuvant = 1;
}
else if (am_cuvant == 1) {
  ++numar_cuvinte;
  am_cuvant = 0;
}
  }
  if (am_cuvant == 1) {
++numar_cuvinte;
  }
  return numar_cuvinte;
}
double numar_litere(char sir[101]) {
  int m = strlen(sir);
double numar_litere=0;
  for (int j = 0; j < m; ++j) {
  if(este_spatiu(sir[j])==false){
  numar_litere +=1;
  }
  }
  return numar_litere;
}
void removeSpaces(char *sir){
int count = 0;
for (int i = 0; sir[i]; ++i)
if (sir[i] != ' ')
sir[count++] = sir[i];
sir[count] = '\0';
}
int  main() {
  char sir[101];
  char zero='0';
  cin.getline(sir, 101);
  double average_lenght_words = numar_litere(sir)/ numar_cuvinte(sir);
  if(average_lenght_words > 0){
  cout << fixed << setprecision(2) <<  average_lenght_words;
  } else {
  for(int i=0; i<1;++i)
  cout << zero;
  }
}

#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
Șirul va conține litere mari și mici precum și semne de punctuație

In cazul tau semnele de punctuatie trebuie tratate ca spatiu

https://www.cplusplu...ference/cctype/

Edited by MarianG, 21 June 2021 - 10:58.


#3
Ciupacabra14

Ciupacabra14

    New Member

  • Grup: Candidate Members
  • Posts: 4
  • Înscris: 21.06.2021
Si banuiesc ca trebuie sa le consider cuvinte ca sa fie luate in considerare in momentul in care se vor calcula lungimile, nu?

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
Semnele de punctuatie nu sunt cuvinte
Un cuvânt este definit ca una sau mai multe litere aflate pe poziții consecutive

#5
YalFa

YalFa

    Member

  • Grup: Members
  • Posts: 618
  • Înscris: 02.05.2020

View PostCiupacabra14, on 21 iunie 2021 - 10:51, said:

Si banuiesc ca trebuie sa le consider cuvinte ca sa fie luate in considerare in momentul in care se vor calcula lungimile, nu?
Intai totul pleaca de la strategie.Pana cand nu ai cap formulata strategia, o sa te incurci in programul redactat si o sa obosesti, scade randamentul, incepi sa te enrvezi, etc.
Hai sa gandim ca un programator in paradigma OOP.
Propozitia =  colectie de obiecte sintactice.
Un obiect sintactic = poate fi un cuvant sau un token, iar un token este orice in fara de cuvant.
Attached File  propozitie.PNG   1.92K   14 downloads
Observam ca de fapt colectia aceasta de obiecte sintactice este de fapt formata din doua subcolectii:
a)colectia de obiecte sintactice clasificate a fi cuvinte
b)colectia de obiecte sintactice clasificate a fi tokenuri

iar elementele acestor subcolectii sunt disitribuite intr-un patern unic: sunt distribuite alternant.
Asta inseamna ca daca punem colectiei de mai sus un contor (i), ei bine vom avea:
a) cand restul impartirii lui i la 2 este zero, vei avea un obiect sintactic de tip cuvant
b)cand restul impartirii lui i la 2  nu este zero, vei avea un obiect sintactic de tip token.

Intrebari la care trebuie sa raspundem:
Care este diferenta dintr-un cuvant si un token ? Difera prin lungimea lor ? Intotdeauna un cuvant va fi mai mare decat un token sau nu?
Avem cazuri particulare sau nu ? Daca da ,cateva exemple.
Din gruparea de token-uri, care este tokenul cu lungimea cea mai mica ? Are vreo implicatie cea mai mica lungimea a unui token ?

Exemple de analizat in continuare.
1)Ana are mere.
2)Ana are mere...
3)Are Ana mere ?
4)De ce Ana are mere ?!
5)Ano, vine-o odata, ca s-au terminat merele.
6) In limba romana, "mere" si "pere" difera de mere si pere in functie de context.

Daca in cazurile 1, 3 regula ar fi ca un token  = semn de punctuatie(adica lungimea sa este egala cu 1), in cazul 2 avem  cele trei puncte de suspensie care fac un token(lungimea maxima token egala cu 3), in cazul 4 deja avem semnul interbari urmat de cel al exclamarii (deci lungime maxima token =2)

Insa intersant este cazul 6, unde ai guparea virgula, spatiu-ghilimele care formeaza cel mai mare token(de lungime 3)
Sau cazul 5 , unde ai cratima ca token exact in  "mijlocul" cuvantului.

Edited by YalFa, 21 June 2021 - 11:54.


#6
Ciupacabra14

Ciupacabra14

    New Member

  • Grup: Candidate Members
  • Posts: 4
  • Înscris: 21.06.2021
Pai bun, si ce ar trebui sa fac cu semnele de punctuatie?

#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
Sa nu le consideri litera

#8
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,988
  • Înscris: 24.04.2013
Urmareste cu un depanator ce se intampla in functia numar_cuvinte(), ca am impresia ca e total aiurea. Fara a fi executat codul, cred ca tot a doua litera a aceluiasi cuvant e numarata drept cuvant separat si cuvinte de o singura litera sunt omise, exceptie daca e la sfarsit de tot. In numar_litere() excluzi spatiul din multimea literelor, dar orice alt semn de punctuatie sau cifra le numeri ca litere.

Edited by sags, 21 June 2021 - 12:25.


#9
Ciupacabra14

Ciupacabra14

    New Member

  • Grup: Candidate Members
  • Posts: 4
  • Înscris: 21.06.2021

View Postsags, on 21 iunie 2021 - 12:25, said:

Urmareste cu un depanator ce se intampla in functia numar_cuvinte(), ca am impresia ca e total aiurea. Fara a fi executat codul, cred ca tot a doua litera a aceluiasi cuvant e numarata drept cuvant separat si cuvinte de o singura litera sunt omise, exceptie daca e la sfarsit de tot. In numar_litere() excluzi spatiul din multimea literelor, dar orice alt semn de punctuatie sau cifra le numeri ca litere.
Imi da bine, 3 cuvinte. pe exemplul ana are mere.
Nu vad sa fie o  problema acolo.

#10
mykero

mykero

    Member

  • Grup: Members
  • Posts: 813
  • Înscris: 09.01.2010

View PostYalFa, on 21 iunie 2021 - 11:50, said:

Intrebari la care trebuie sa raspundem:
Care este diferenta dintr-un cuvant si un token ? Difera prin lungimea lor ? Intotdeauna un cuvant va fi mai mare decat un token sau nu?
Avem cazuri particulare sau nu ? Daca da ,cateva exemple.
Din gruparea de token-uri, care este tokenul cu lungimea cea mai mica ? Are vreo implicatie cea mai mica lungimea a unui token ?

Solutia propusa de tine este eleganta si as avea doar o mica precizare/raspuns la toate intrebarile tale: se considera cuvant cel care incepe si se termina cu o litera (poate fi si aceeiasi).
De aici incolo, sunt doar linii de cod, strategia o ai deja de la YalFa.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

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