Decodificare

Ca si orice alta activitate, programarea depinde mult de factorul uman. Hai sa vedem ce ne face pe noi sa butonam.

Decodificare

Postby eric56 » 13 Jan 2012, 18:35

Salutare! Puteți să-mi dați niște indicații la problema asta ? Vă rog mult!

Epică problema.

Nici măcar nu am învățat șiruri de caractere.

Ideea este ca 2 prieteni și-au codificat limbajul și au pus înaintea și după fiecare cuvânt vocala și litera ”T”.

Exemplu : ATANATA ATARETE METERETE înseamnă ANA ARE MERE.


!
Cum le citesc?
Cum elimin vocala și caracterul ”T” în C++


Orice idee este binevenită!!!
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Decodificare

Postby Cosmin_NTG » 13 Jan 2012, 19:35

Well, daca nu ai cunostintele necesare, nu ar fi bine sa abordezi astfel de probleme. Nu e foarte mare diferenta intre lucrul cu vectori si lucrul cu siruri de caractere dar totusi, in cazul sirurilor, sunt niste functii pe care trebuie sa le cunosti. Eu am reusit sa implementez o rezolvare dar nu cred ca vei intelege mare lucru din ea.
P.S. Ce problema e? Poti pune un link catre problema? Asta daca e de pe un site.
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Decodificare

Postby eric56 » 13 Jan 2012, 20:21

Este de la o olimpiada de sector, problema se numeste Decodificare 28 - 29 februarie
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Decodificare

Postby ionutatl » 13 Jan 2012, 21:55

eu nu am inteles: ATANATA ATARETE METERETE , la ultimul cuvant ar trebui eliminate primele si ultimele 2 litere, si ramane TERE, nu? Ori nu am inteles eu , ori nu ai explicat tu bine.
0,0p / 0 votes
User avatar
ionutatl
Bit
 
Joined: 13 Jan 2012
Status: 0

Re: Decodificare

Postby andreiandreiq » 13 Jan 2012, 22:04

@ionutatl: Nu ai inteles tu bine, eric56 a spus clar: ATANATA ATARETE METERETE înseamnă ANA ARE MERE.
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Decodificare

Postby ionutatl » 13 Jan 2012, 22:12

andreiandreiq wrote:@ionutatl: Nu ai inteles tu bine, eric56 a spus clar: ATANATA ATARETE METERETE înseamnă ANA ARE MERE.

pai la ultimul cuvant daca elimini primele si ultimele 2 litere, ce ramane? :)
0,0p / 0 votes
User avatar
ionutatl
Bit
 
Joined: 13 Jan 2012
Status: 0

Re: Decodificare

Postby andreiandreiq » 13 Jan 2012, 22:35

@ionutatl: Nu trebuie sa elimini primele si ultimele 2 litere, uitate la sir cum e format si poate iti dai seama. Incearca sa rezolvi si tu problema ca sa nu fie atâtea discuți pe aici "off-topic".
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Decodificare

Postby eric56 » 14 Jan 2012, 13:56

Cum am ajuns eu cu problema asta probabil că vă întrebați .
Doamna profesoară ne-a dat în jur de 25 de probleme din ce în ce mai grele.
Le-am luat pe toate la rând și le-am rezolvat , cele pe care nu le știam lăsându-le în urma. Acum asta e ultima problemă...
Cosmin_Ntg , îmi arăți te rog frumos cum se lucrează la problema asta cu șiruri de caractere?
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0

Re: Decodificare

Postby serj » 14 Jan 2012, 15:21

Cred ca ar fi trebuit sa pui enuntul complet. Mie,cel putin,mi se pare foarte ambiguu ce ai scris tu acolo.Din ce am inteles eu ,mai mult din exemplu..

Exista un text codificat,format din mai multe cuvinte. Pentru a decodifica acest text,trebuie sa cautam si sa inlaturam din fiecare cuvant perechile 'vocala + T' si 'T + vocala',sirul de caractere INAINTE, INTRE, sau DUPA pereche fiind considerat valid.Daca am inteles bine,atunci..
Intre pereche poate aparea si T,nu ? Se complica un pic,pentru ca atunci trebuie sa te uiti pe la vecini.Apoi, se garanteaza ca intr-un cuvant exista doar o asemenea pereche ?
0,0p / 0 votes
Image
User avatar
serj
Bit
 
Joined: 12 Oct 2011
Status: 0

Re: Decodificare

Postby cata45 » 14 Jan 2012, 16:01

Nu exista grupul vocala-T ci doar T-vocala si acest grup (dupa cum poti vedea in exemplu) este eliminat doar daca are in fata o vocala.
deci daca avem cuvantul VTVCCVTVCTV dupa eliminare ramane VCCVCTV [unde cu V am notat vocalele, cu C consoanele si cu T litera T)
Am scris mai jos un cod in c++. (L-am pus off pentru ca poate este cineva care doreste sa nu vada codul)
Offtopic
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Decodificare

Postby Cosmin_NTG » 14 Jan 2012, 16:18

Allright, sa va explic cum am inteles eu problema (asta doar din exemplu, neavand alta sursa concreta): ATANATA ATARETE METERETE. Eu am observat ca inaintea fiecarei vocale se pune vocala si T. In exemplul dat, am boldat cuvantul ce trebuie sa-l descifram si am subliniat adaugirile (adica vocala si T): ATANATA. Deci este boldat ANA. ATARETE - ARE si METERETE adica mere.
  1. #include#includeusing namespace std; int main() {   char x[100], y[100], voc[6]; voc[0]='A'; voc[1]='E'; voc[2]='I'; voc[3]='O'; voc[4]='U';     int cnt=0;     cout<<"Introduceti sirul: ";     cin.getline(x,  100);     for(int i=0; x[i]; i++)     {         for(int j=0; voc[j]; j++)         {             if((x[i]==voc[j])&&(x[i+1]=='T')&&(x[i+2]==voc[j]))             {x[i]='T'; x[i+1]='T';}           }     }     for(int i=0; x[i]; i++)     {         if(x[i]!='T')         {             y[cnt]=x[i];             cnt++;         }       }     y[cnt]=NULL;     coutcontorul vectorului principal (i). Dupa terminarea acestui pas, trebuie stabilit sfarsitul noului sir format (y) prin atribuirea ultimului element al acestuia valoarea NULL care indica sfarsitul unui sir. Daca nu realizam aceasta operatie, la afisare aparea sirul corect + niste fantome (niste chestii ramase prin memorie). Note: 1-Acolo unde am scris "vector" se refera la un sir de caractere care se declara [code=text]char nume_sir[dimensiune_sir]
. Am scris "vector" pentru ca m-am gandit ca denumirea iti este familiara. 2- Nu sunt sigur de faptul ca asta e solutia optima. Neavand datele concrete ale problemei, nu ma pot pronunta in acest sens. 3-Dupa cum observi, nu este chiar asa greu. In acest caz, nu a fost nevoie de functii specifice sirurilor (cu exceptia lui cin.getilne(sir, dimensiune_sir)) dar vor exista cazuri in care va trebui sa folosesti functii (strstr, strcmp, strset, strrev...and many others) carora trebuie sa le cunosti parametrii si valorile pe care le returneaza in diverse cazuri. Good luck! -- 14 Jan 2012, 15:14 -- @cata45: Imi da erori la compilare. Cred ca ai uitat sa pui #include<cstring>.
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Decodificare

Postby cata45 » 14 Jan 2012, 16:20

Cosmin_NTG wrote:@cata45: Imi da erori la compilare. Cred ca ai uitat sa pui #include<cstring>.

La mine merge struna :)
Ce da programul tau pentru: BITIBLIOTOTETECATA?
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Decodificare

Postby Cosmin_NTG » 14 Jan 2012, 16:28

E facut praf. Am dar un double-post si s-a terminat. Vroiam sa iti spun ca eu nu vad in codul tau #include<cstring> - ceea ce e necesar. Nu e exclus sa am fantome prin PC sau sa nu mai vad eu bine :)).
Anyway, asta e codul:
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int main()
  5. {   char x[100], y[100], voc[6]; voc[0]='A'; voc[1]='E'; voc[2]='I'; voc[3]='O'; voc[4]='U';
  6.     int cnt=0;
  7.     cout<<"Introduceti sirul: ";
  8.     cin.getline(x,  100);
  9.     for(int i=0; x[i]; i++)
  10.     {
  11.         for(int j=0; voc[j]; j++)
  12.         {
  13.             if((x[i]==voc[j])&&(x[i+1]=='T')&&(x[i+2]==voc[j]))
  14.             {x[i]='5'; x[i+1]='5';}
  15.  
  16.         }
  17.     }
  18.     for(int i=0; x[i]; i++)
  19.     {
  20.         if(x[i]!='5')
  21.         {
  22.             y[cnt]=x[i];
  23.             cnt++;
  24.         }
  25.  
  26.     }
  27.     y[cnt]=NULL;
  28.     cout<<y;
  29.     return (0);
  30. }
  31.  
. Asta daca textul are doar litere. Daca ai cunostintele necesare, imi poti spune ce complexitate are programul meu si de ce? E cumva O(n*n)?
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: Decodificare

Postby serj » 14 Jan 2012, 16:36

Vad ca fiecare a 'descifrat' o metoda de rezolvare :)) .
Asta spuneam cand ma refeream la perechi.Poate ca m-a dus gandul la asta pentru ca se spunea in enunt ceva de ''inainte'' si ''dupa''.


ATANATA ATARETE METERETE
0,0p / 0 votes
Image
User avatar
serj
Bit
 
Joined: 12 Oct 2011
Status: 0

Re: Decodificare

Postby cata45 » 14 Jan 2012, 16:36

Nu este O(n*n).
Este O(n*m) unde n este numarul de caractere din sirul nedecodificat si m este numarul de vocale. Exte O(5*n)...in concluzie se apropie de O(n) insa ai folosit memorie suplimentara pentru memorarea sirului decodificat.
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Decodificare

Postby eric56 » 15 Jan 2012, 15:27

Programul lui COSMIN_NTG merge strună.
Acum mai trebuie doar să-l înțeleg ! L-am ales pe al lui pentru că cel al lui cata45 nu-l înțeleg (nu am învățat noțiunile)
0,0p / 0 votes
Respecta si vei fi respectat
User avatar
eric56
Bit
 
Joined: 19 Dec 2011
Status: 0


Return to Discutii despre programare

Who is online

Users browsing this forum: No registered users and 0 guests

cron