•stef2n
|
 |
« : Februarie 20, 2009, 01:47:45 » |
|
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•Omega91
Strain
Karma: 0
Deconectat
Mesaje: 36
|
 |
« Răspunde #1 : Martie 31, 2009, 11:06:07 » |
|
Vad ca asta este o problema destul de veche: "ce e mai bine sa folosim? functiile scanf/printf din C sau fstream-uri din C++ ?" Inainte credeam ca sunt mai rapide cele din C si se pare ca aceasta este parerea multora. Am vazut acum insa, ca la problema maxsecv obtin timpi mai mici de executie folosind un ifstream decat cu scanf. Pe de alta parte, la problema tije, este mai rapid printf decat ofstream. Asta ar insemna ca atunci cand sunt multe date, citirea trebuie facuta cu un ifstream, iar afisarea cu printf.
|
|
« Ultima modificare: Martie 31, 2009, 11:11:12 de către Nicodei Eduard »
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #2 : Martie 31, 2009, 12:34:08 » |
|
In G++ 4 au devenit streamurile ceva mai rapide, dar cred ca tot parsarea ramane sfanta  Pe de alta parte, functiile de i/o din cstdio genereaza warninguri multe, deci e mai comod sa folosesti streamuri. (stie cineva vreun flag pentru compilator ca sa ignore acele warninguri, in afara de "-w" care le scoate pe toate?  )
|
|
|
Memorat
|
|
|
|
•tvlad
|
 |
« Răspunde #3 : Aprilie 02, 2009, 17:10:28 » |
|
In G++ 4 au devenit streamurile ceva mai rapide, dar cred ca tot parsarea ramane sfanta  Pe de alta parte, functiile de i/o din cstdio genereaza warninguri multe, deci e mai comod sa folosesti streamuri. (stie cineva vreun flag pentru compilator ca sa ignore acele warninguri, in afara de "-w" care le scoate pe toate?  ) In GCC -Wno-unused-value scoate warningurile alea de care zici tu. Edit: daca compilezi cu optimizari (-Ox) pare sa ignore -Wno-unused-value, n-am idee de ce 
|
|
« Ultima modificare: Aprilie 02, 2009, 17:20:41 de către Tataranu Vlad »
|
Memorat
|
|
|
|
•drrzvn
Strain
Karma: 3
Deconectat
Mesaje: 1
|
 |
« Răspunde #4 : Noiembrie 30, 2009, 15:00:04 » |
|
In cazul pontului #3, imbunatatirea vine din cauza prefetch-ului pe care il facea procesorul(mai putin probabil)(prefetch-ul de date e mai putin uzual, ci cel de cod) sau din cauza modului de acces linear la memorie in a 2-a varianta care presupunea un calcul mai simplu al adresei urmatorului element(incrementarea adresei dintr-un registru de adrese al procesorului, in loc de un calcul mai complicat repornind de la adresa de baza a tabloului cum era in cazul in care se facea parcurgerea pe coloane si nu pe linii); daca compilatorul e suficient de destept si cand se trece de la la t[ i ][ j ] la t[ i+1 ][ j ],, modificarea registrului de adrese poate presupune doar adaugarea unui offset; dar offsetul nu 1, deci trebuie pastrat intr-un registru, deci depinde si de capabilitatile CPU-ului, nr-ul de registrii disponibili etc.
|
|
« Ultima modificare: Noiembrie 30, 2009, 15:18:12 de către Paul-Dan Baltescu »
|
Memorat
|
|
|
|
•Marius
|
 |
« Răspunde #5 : Decembrie 02, 2009, 22:05:50 » |
|
@drrzvn Interesant de știut! 
|
|
|
Memorat
|
Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
|
|
|
•miculprogramator
|
 |
« Răspunde #6 : Decembrie 29, 2009, 16:23:50 » |
|
Stiu ca nu a mai scris nimeni de mult, dar am si eu o intrebare, poate raspunsul va fi util si celorlalti.  La pontul #2 : eu am auzit ca macro-urile sunt mai rapide decat functiile si sunt mai bune. E adevarat ? Si de ce s-ar incurca in ele ? A doua chestie care ma nelamureste ... E mai bine sa folosesc goto sau continue cand vreau sa "sar" ?
|
|
|
Memorat
|
|
|
|
•blasterz
|
 |
« Răspunde #7 : Ianuarie 08, 2010, 21:08:49 » |
|
Stiu ca nu a mai scris nimeni de mult, dar am si eu o intrebare, poate raspunsul va fi util si celorlalti.  La pontul #2 : eu am auzit ca macro-urile sunt mai rapide decat functiile si sunt mai bune. E adevarat ? Si de ce s-ar incurca in ele ? A doua chestie care ma nelamureste ... E mai bine sa folosesc goto sau continue cand vreau sa "sar" ? Sunt preferabile functiile inline decat macrourile. uite de ce te pot incurca: #define sqr(x) ((x) * (x)) int a = 2; int c = sqr(++a); compilatorul va transforma in int c = (++a) * (++a) ; ... se incrementeaza de 2 ori... Continue e bun pt a sari.... goto cred ca e depricated (dar e ok)
|
|
|
Memorat
|
|
|
|
•pauldb
|
 |
« Răspunde #8 : Ianuarie 08, 2010, 22:38:50 » |
|
In plus, daca ai ceva de genul #define min(a,b) ((a) < (b) ? (a) : (b)) ... min(f(), g())
atunci functiile f si g se apeleaza de doua ori. In plus, daca cu functiile acestea modifici variabile, acestea se modifica de doua ori si pot propagana probleme serioase in tot programul. Iar daca folosesti bucata de cod de mai sus intr-o functie de tip divide et impera, complexitatea timp creste. Eu nu sunt neaparat impotriva folosirii define-urilor, dar trebuie sa le stapanesti bine inainte sa le utilizezi.
|
|
|
Memorat
|
Am zis 
|
|
|
•toni2007
|
 |
« Răspunde #9 : Ianuarie 09, 2010, 00:59:28 » |
|
#define min(x,y) (((aux1=x) > (aux2=y)) ? aux1 : aux2)
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #10 : Ianuarie 09, 2010, 01:56:26 » |
|
Eu personal am renuntat de ani buni la macrouri, chiar si pentru constante folosesc const int. In afara de presupusa viteza mai mare de rulare, nu vad niciun avantaj fata de functiile inline.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•miculprogramator
|
 |
« Răspunde #11 : Ianuarie 09, 2010, 08:51:01 » |
|
Multumesc pentru raspunsuri, m-am lamurit acum. 
|
|
|
Memorat
|
|
|
|
•sima_cotizo
|
 |
« Răspunde #12 : Ianuarie 09, 2010, 10:46:03 » |
|
#define min(x,y) (((aux1=x) > (aux2=y)) ? aux1 : aux2)
Trebuie sa declari aux1 si aux2... prea multa bataie de cap, mai bine un inline 
|
|
|
Memorat
|
|
|
|
•alexstefyhr
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #13 : Februarie 04, 2010, 02:16:37 » |
|
chestia cu bc pt calcularea unei puteri mari ,imi puteti spune si mie cum se foloseste ,dar pe inteles de clasa a 9-a
|
|
|
Memorat
|
|
|
|
•toni2007
|
 |
« Răspunde #14 : Februarie 04, 2010, 14:29:43 » |
|
Daca ai linux, scrii "bc" in terminal, si o sa ti se deschida un program in care o sa poti face calcule. E un fel de calculator ca cel de pe windows doar ca fara interfata grafica, fiind mult mai rapid.
|
|
|
Memorat
|
|
|
|
•laserbeam
Strain
Karma: 1
Deconectat
Mesaje: 5
|
 |
« Răspunde #15 : Aprilie 02, 2010, 19:37:51 » |
|
Cum se poate afla in windows memoria folosita de program? In linux ma folosesc frumos de time, ca stie si asta (sincer nu stiu exact parametrii... ii dau -v (verbose-u default) si acolo stiu ce caut), dar in windows n-am nici o idee cum se face (in cazul in care sunt la concursuri inainte de ONI si se intampla sa am restrictii de memorie). Observatie pentru cei care nu stiau ca time iti da si memoria - in Ubuntu (nu stiu daca si in alte distributii) programul time original este mutat in /usr/bin/ si ce se acceseaza simplu cu time nu permite alte optiuni (precum -v). In loc de time folositi:
|
|
|
Memorat
|
|
|
|
•alexandru92
|
 |
« Răspunde #16 : Aprilie 03, 2010, 17:04:07 » |
|
Poti folosi cygwin, dar ma indoiesc ca la un concurs il pune la dispozitie. Ori faci calcule de mana ( estimezi pe cel mai rau caz cat ar consuma ) ori iti faci un program pentru asa ceva read this 
|
|
|
Memorat
|
|
|
|
•gedica
Strain
Karma: -7
Deconectat
Mesaje: 7
|
 |
« Răspunde #17 : Martie 17, 2014, 19:18:50 » |
|
|
|
|
Memorat
|
|
|
|
•dr_personality
Strain
Karma: -3
Deconectat
Mesaje: 10
|
 |
« Răspunde #18 : Aprilie 24, 2014, 21:27:27 » |
|
|
|
|
Memorat
|
|
|
|
•S7012MY
|
 |
« Răspunde #19 : Septembrie 24, 2014, 23:48:01 » |
|
9b mi se pare o prostie si consider ca ar trebui sters din articol. Vad o gramda de programatori care folosesc acest "smen" si nu vad de ce e mai bun decat (1<<29) sau (1<<30).
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #20 : Septembrie 25, 2014, 01:07:37 » |
|
Singurul avantaj e ca merge combinat cu memset(). Dar putem folosi fill(), deci e cam inutila chestia.
|
|
|
Memorat
|
|
|
|
•mathboy
|
 |
« Răspunde #21 : Septembrie 25, 2014, 10:16:46 » |
|
Eu am pierdut o data 50 de puncte la o problema pt ca am pus cu un 3f mai putin.  Good practice e sa nu va obfuscati codul atunci cand nu e nevoie.
|
|
|
Memorat
|
|
|
|
|
•PlayLikeNeverB4
|
 |
« Răspunde #23 : Septembrie 25, 2014, 14:01:56 » |
|
Nu vad care e problema daca nu acoperi tot int-ul. Si daca folosesti std::numeric_limits<int>::max() risti sa faci overflow in unele cazuri.
|
|
|
Memorat
|
|
|
|
•klamathix
|
 |
« Răspunde #24 : Septembrie 25, 2014, 14:13:56 » |
|
Nu știu de ce, dar mă gândeam la valori potrivite cu care să inițializezi minime, nu la infinituri în general. În fine, chestiile astea nu prea se pot trata complet independent de contextul problemei. Cel mai bine e să-ți între în reflex ce faci în fiecare caz, nu să ai constantele pregătite în template.
|
|
|
Memorat
|
|
|
|
|