•mimarcel
Strain
Karma: 0
Deconectat
Mesaje: 10
|
 |
« Răspunde #25 : Aprilie 05, 2009, 14:53:24 » |
|
Cine imi poate spune, va rog, de ce nu imi compileaza corect sursa #294972  ? Acasa merge... si inca bine (cred). http://infoarena.ro/job_detail/294972
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #26 : Aprilie 05, 2009, 16:40:55 » |
|
Cred ca "operator" e cuvant rezervat, mai nou, in pascal. Incearca sa-i zici functiei "is_operator" sau ceva de genul.
|
|
|
Memorat
|
|
|
|
•mimarcel
Strain
Karma: 0
Deconectat
Mesaje: 10
|
 |
« Răspunde #27 : Aprilie 06, 2009, 18:03:30 » |
|
Cred ca "operator" e cuvant rezervat, mai nou, in pascal. Incearca sa-i zici functiei "is_operator" sau ceva de genul.
Da! Mersi pentru ajutor  . Abia acum am downloadat Free Pascalul si am observat; pana acum aveam un alt Pascal  . Acum mai ramane sa fac un program de 100 de pcte, am primit numai 90 deoarece am rezolvat problema fara sa ma uit peste rezolvarile date.
|
|
« Ultima modificare: Aprilie 26, 2009, 20:51:42 de către Moldovan Ilie Marcel »
|
Memorat
|
|
|
|
•vladtarniceru
|
 |
« Răspunde #28 : Mai 01, 2010, 16:39:48 » |
|
am si eu o intrebare:de cate ori se poate trece prin sir  .sau mai exact care e complexitatea pentru aceasta problema
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #29 : Mai 01, 2010, 16:44:57 » |
|
O(lungimea stringului). Poti sa parcurgi o singura data.
|
|
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #30 : August 21, 2010, 13:59:01 » |
|
foarte frumoasa sursa facuta de Lucian Boca  LE: intrebare: y = eval( x, expr(lev+1), *p++ ); programul intra in expr(lev+1) dupa ce ii trimite *p ca parametru lui eval (p ca parametru nu este incrementat si ca pointer (global) este incrementat) sau expr(lev+1) dupa ce ii trimite *p ca parametru lui eval (p ca parametru nu este incrementat si nici ca variabila) sau expr(lev+1) inainte sa ii trimita *p ca parametru lui eval (deci p global nu este incrementat) multumesc anticipat, sunt nou in ale pointerilor LE2: mda nu imi dau seama deloc!... am facut niste surse in care sa testez si mai mult m am incurcat LE3: int expr( int lev ){ char S[NN],*p=S,op[2][3]={"+-","*/"};
int eval( int a,int b, char op ){ switch ( op ) { case '+' : return a+b; case '-' : return a-b; case '*' : return a*b; case '/' : return a/b; } }
int expr( int lev ){ int x, y; if( lev == LMAX ){ if( *p == '('){ ++p, x = expr( 0 ) ,++p; } else { for( x=0; *p>='0' && *p<='9'; p++ ){ x= x*10 + *p-'0'; } } } else { for( x=expr(lev+1) ; strchr(op[lev],*p) ; x=y){ y= eval(x , expr(lev+1), *p++); } } return x; }
pe linia unde y = eval(..) intra in expr fara ca *p sa fie incrementat. astfel in caz ca este semn si paranteza ex (...+(...) *p indica tot + si intra in eval unde ajunge dupa inca doua autochemari sa fie *p diferit de paranteza si sa intre in forul in care se creaza x dar acolo *p e diferit de [0,..,9] (pt ca a ramas la +) si x ramane cu val 0 dupa care iese din toate si se termina programu fara sa termine de evaluat toata expresia http://infoarena.ro/job_detail/479037?action=view-sourceLE4: pentru testul 2 "(296+(286+891+(82+179+358-(48)*(0/173))-(251)))" programu meu returneaza 296, am mers cu debugu si am gasit problema (am scris mai sus) si nu stiu cum sa o rezolv... si mai ciudat e ca imi da acelasi rezultat gresit si pe celalate surse care folosesc metoda recursiva. insa cand le trimit numai a mea e gresita... si tot la solutiile care folosesc recursivitate (copiate din solutiile oficiale) primesc acest warring "evaluare.cpp:33: warning: control reaches end of non-void function" / are vreo legatura? help va rog !
|
|
« Ultima modificare: August 22, 2010, 01:52:06 de către Barney »
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #31 : August 22, 2010, 00:37:40 » |
|
Asta e sursa ta, am modificat doar citirea ( am folosit fgets in loc de gets , si am luat 100 ) : http://infoarena.ro/job_detail/479050?action=view-source, si faza cu warningul e ca programul nu "stie" ca acea functie ( int val ) o sa se "termine" vreodata, adica cum ai avea functia int abc ( int a ) { if ( a == 2 ) { return 0 ; } } Pe acest cod o sa primesti aceeasi eroare . De ce ? Pentru ca daca a este != 2 , programul nu returneaza nimic. Asa e si aici : Daca programul nu merge pe nici o ramura a lui case, atunci nu o sa returneze nimic, dar sigur o sa mearga pe o ramura, dar programul nu stie asta. Asa ca adaugi un return 0 la sfarsit si ar trebui sa mearga : int eval( int a,int b, char op ){ switch ( op ) { case '+' : return a+b; case '-' : return a-b; case '*' : return a*b; case '/' : return a/b; } return 0 ; }
|
|
« Ultima modificare: August 22, 2010, 01:17:30 de către Simoiu Robert »
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #32 : August 22, 2010, 01:27:10 » |
|
ms frumos :hug: 2 chestii daca ai poti sa la lamuresti.. care e diferenta dintre fgets (vad ca ii dai mai multi parametrii) si gets? ce ar putea face ca sursa asta ( http://infoarena.ro/job_detail/185143?action=view-source ) sa dea reulztatul gresit pe calculatorul meu? 296 in loc de 1841 la testu 2 pe calculatoru meu...
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #33 : August 22, 2010, 01:33:47 » |
|
1. fgets ( S, MAX, stdin ) citeste primele MAX elemente din fisierul stdin ( sau fisier deschis cu FILE ) , in charul S. Fata de gets, el citeste si caracterul de sf. de linie , adica '\n'. S[strlen(S) - 1] o sa fie '\n', pe langa ce la gets acest caracter este ultimul caracter , adica acelasi cu S[strlen(S) - 2]. 2. Nu prea inteleg exact ce vrei sa zici cu aia ...... [LE] Am observat si eu, ma uit sa vad ce are ....
|
|
« Ultima modificare: August 22, 2010, 01:39:10 de către Simoiu Robert »
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #34 : August 22, 2010, 01:48:36 » |
|
si eu am updatat sursa mea cu modificarea pe care ai mentionat o si primesc acelasi rezutlat gresit... daca si tie iti face la fel inseamna ca e ceva dubios primesc acelasi rezultat gresit si pe sursele cu recurenta indirecta... ciudat nu? 1. fgets ( S, MAX, stdin ) citeste primele MAX elemente din fisierul stdin ( sau fisier deschis cu FILE ) , in charul S. Fata de gets, el citeste si caracterul de sf. de linie , adica '\n'. S[strlen(S) - 1] o sa fie '\n', pe langa ce la gets acest caracter este ultimul caracter , adica acelasi cu S[strlen(S) - 2].
greseala din programu meu nu avea legatura cu ultimu caracter... el se termina (ca si restu solutiilor cu recursivitate) dupa primu numar...
|
|
« Ultima modificare: August 22, 2010, 01:56:50 de către Barney »
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #35 : August 22, 2010, 01:57:25 » |
|
Eu am luat 100 cu prima sursa oficiala ( ceva de genu am implementat si eu ) . Si aia imi merge si pe pc. In rest nu stiu .... [LE] Toate sursele imi merg exceptand a doua sursa ( cea mai compacta ) a lui Cotizo. Si de aici rezulta si sursa data de tine, a lui Lucian. Cea cu arbore merge bine ....
|
|
« Ultima modificare: August 22, 2010, 16:31:21 de către Simoiu Robert »
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #36 : August 22, 2010, 20:19:28 » |
|
mie continua sa imi dea gresit... :/ chiar daca pe evaluator primeste 100
|
|
|
Memorat
|
|
|
|
•BitOne
Strain
Karma: -1
Deconectat
Mesaje: 45
|
 |
« Răspunde #37 : August 23, 2010, 07:27:54 » |
|
mie continua sa imi dea gresit... :/ chiar daca pe evaluator primeste 100
Ai pus enter dupa terminarea expresiei ? App: citeste cu fgets, nu cu gets. S[strlen(S) - 1] o sa fie '\n', pe langa ce la gets acest caracter este ultimul caracter , adica acelasi cu S[strlen(S) - 2].
Poate am inteles eu gresit, dar tu spui ca gets si fgets citesc caracterul '\n', dar il pun pe pozitii diferite ? Asta este gresit, gets nu concateneaza delimitatorul, pe cand fgets, da. Scuze daca am inteles eu prost.
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #38 : August 23, 2010, 09:20:53 » |
|
Da, ai inteles gresit . Sa zicem ca avem stringul abcd, citit in S. Daca il citesti cu gets, o sa ai S[strlen(S)-1] = 'd' ( adica S[3] ) . Daca il citesti cu fgets, o sa ai S[strlen(S)-1] = '\n' ( adica S[4] ) . In rest, S[3] = S[3] ( dinainte ) si tot asa. Dar S[4] ( fgets ) != S[4] ( gets ) , adica '/0' != '\n' . [LE] Am gasit o sursa pe ideea asta cu STL ( string ) si merge perfect. Nu stiu care poate fi problema , am tot cautat si nu am gasit nimic.
|
|
« Ultima modificare: August 23, 2010, 10:53:35 de către Simoiu Robert »
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #39 : August 23, 2010, 11:32:29 » |
|
mie continua sa imi dea gresit... :/ chiar daca pe evaluator primeste 100
Ai pus enter dupa terminarea expresiei ? App: citeste cu fgets, nu cu gets. pe sursa asta http://infoarena.ro/job_detail/479201?action=view-source iau 100 de puncte pentru ca am modificat citirea cu fgets. dar mie tot imi da gresit pe exemplu "(296+(286+891+(82+179+358-(48)*(0/173))-(251)))", poate si pe altele. nu inteleg, parca e zona crepusculara.... am pus si enter la sfarsitul expresiei (in fis de intrare) si da tot gresit. raman recunoscator daca imi emplica cineva misteru asta
|
|
|
Memorat
|
|
|
|
•mathboy
|
 |
« Răspunde #40 : August 23, 2010, 11:41:59 » |
|
Evaluarea se face sub linux. Pe windows compilatorul are bug-uri, etc. Tu ai linux ca sa iti dea cum e pe infoarena ? 
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #41 : August 23, 2010, 12:01:15 » |
|
Nu are linux, dar nu pot sa inteleg cum de o sursa cu STL ( care e schimbat doar stringul, adica in loc de char e string ) merge ok ...
|
|
|
Memorat
|
|
|
|
•barneystinson
Strain
Karma: -1
Deconectat
Mesaje: 11
|
 |
« Răspunde #42 : August 23, 2010, 12:20:44 » |
|
Evaluarea se face sub linux. Pe windows compilatorul are bug-uri, etc. Tu ai linux ca sa iti dea cum e pe infoarena ?  nu am linux...
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #43 : August 23, 2010, 13:46:08 » |
|
Nu exista compilator de linux pentru windows ?
|
|
|
Memorat
|
|
|
|
•proxenetu
Strain
Karma: 6
Deconectat
Mesaje: 4
|
 |
« Răspunde #44 : August 23, 2010, 15:32:23 » |
|
Compilator de linux pt windows nu exista. Exista cel mult o portare a lui pe windows. Oricum, treaba nu tine de compilator ci de sistemul de operare. Pe windows newline este \r\n, pe linux e \n, de acolo problema.
|
|
|
Memorat
|
|
|
|
•BitOne
Strain
Karma: -1
Deconectat
Mesaje: 45
|
 |
« Răspunde #45 : August 23, 2010, 16:47:21 » |
|
Pe windows compilatorul are bug-uri, etc.
Ai zis o prostie, compilatoarele sunt aceleasi pentru ambele os-uri gcc, respectiv g++. Se comporta la fel pe ambele os-uri. Incearca citirea cu stream-uri  ? mie imi merge perfect orice ii fac... Folosesti cumva MinGW Developer Studio ?
|
|
« Ultima modificare: August 23, 2010, 17:05:57 de către SAlexandru »
|
Memorat
|
|
|
|
•proxenetu
Strain
Karma: 6
Deconectat
Mesaje: 4
|
 |
« Răspunde #46 : August 23, 2010, 17:05:55 » |
|
Tocmai ti-am explicat mai sus ca difera in functie de sistem. Incearca tu pe orice versiune a compilatorului mingw (portul gcc pe windows) sa afisezi cu %lld de exemplu. Plus ca difera chiar de la distributie de linux la distributie de linux.
|
|
|
Memorat
|
|
|
|
•toni2007
|
 |
« Răspunde #47 : August 23, 2010, 17:22:54 » |
|
Pe windows compilatorul are bug-uri, etc.
Ai zis o prostie, compilatoarele sunt aceleasi pentru ambele os-uri gcc, respectiv g++. Se comporta la fel pe ambele os-uri. Incearca citirea cu stream-uri  ? mie imi merge perfect orice ii fac... Folosesti cumva MinGW Developer Studio ? Mingw, din cate stiu e versiunea gcc pt windows. Teoretic ar trebui sa mearga exact ce merge si pe linux. Daca nu merge, inseamna ca e bug (presupun). Corect, cu streamuri folosesc si eu cand trebuie sa afisez long long sau alte chestii, si sunt pe windows (cam rar, ma rog). Vad ca deviaza rau topicu' in topic de compilatoare.
|
|
|
Memorat
|
|
|
|
•tryfy
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #48 : Martie 16, 2011, 23:21:42 » |
|
daca trebuie sa introduc si functia sin in expresie de ex sa calculeze sin(5)+1+5.... care ma poate ajuta?
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #49 : Martie 17, 2011, 02:10:50 » |
|
Trebuie sa adaugi, cu o prioritate mai mare decat inmultirea, operatia de aplicare a unei functii asupra unei expresii. Incearca sa rezolvi problema apel mai intai.
|
|
|
Memorat
|
|
|
|
|