Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 12 ponturi pentru programatorii C/C++  (Citit de 26031 ori)
0 Utilizatori şi 2 Vizitatori pe acest subiect.
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« : Februarie 20, 2009, 01:47:45 »

Comentarii la articolul 12 ponturi pentru programatorii C/C++
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
Omega91
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 36



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« 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 Very Happy

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?  Confused)
Memorat
tvlad
De-al casei
***

Karma: 63
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« 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 Very Happy

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?  Confused)

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 Confused
« Ultima modificare: Aprilie 02, 2009, 17:20:41 de către Tataranu Vlad » Memorat
drrzvn
Strain


Karma: 3
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #5 : Decembrie 02, 2009, 22:05:50 »

@drrzvn  Interesant de știut!  Thumb up
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« 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. Smile

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
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« 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. Smile

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
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #8 : Ianuarie 08, 2010, 22:38:50 »

In plus, daca ai ceva de genul
Cod:
#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 Mr. Green
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #9 : Ianuarie 09, 2010, 00:59:28 »

Cod:
#define min(x,y)    (((aux1=x) > (aux2=y)) ? aux1 : aux2)
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #11 : Ianuarie 09, 2010, 08:51:01 »

Multumesc pentru raspunsuri, m-am lamurit acum. Smile
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #12 : Ianuarie 09, 2010, 10:46:03 »

Cod:
#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 Smile
Memorat
alexstefyhr
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« 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 Deconectat

Mesaje: 5



Vezi Profilul
« 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:

Cod:
/usr/bin/time -v program
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« 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  Smile
Memorat
gedica
Strain


Karma: -7
Deconectat Deconectat

Mesaje: 7



Vezi Profilul
« Răspunde #17 : Martie 17, 2014, 19:18:50 »

Ce sunt macro-urile?
Multumes  Ok  Banana Banana Banana Banana Banana
Memorat
dr_personality
Strain


Karma: -3
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #18 : Aprilie 24, 2014, 21:27:27 »

Un drum pe wikipedia rezolva tot.....
http://en.wikipedia.org/wiki/Macro_(computer_science)
Memorat
S7012MY
Nu mai tace
*****

Karma: 26
Deconectat Deconectat

Mesaje: 648



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« 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
Moderatori infoarena
Nu mai tace
*****

Karma: 150
Deconectat Deconectat

Mesaje: 259



Vezi Profilul
« 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. Smile
Good practice e sa nu va obfuscati codul atunci cand nu e nevoie.
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #22 : Septembrie 25, 2014, 13:43:25 »

Da, nu recomand nici eu infinitul respectiv. (1 << 30) nu e bun fiindcă nu acoperă tot int-ul.
Probabil cel mai bine e să folosiți http://www.cplusplus.com/reference/limits/numeric_limits/.
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« 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
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« 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
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines