Ai intrebari legate de IT sau mai putin ?
20Daca unii dintre voi au nelamuriri,sau considera ca unele idei legate de informatica sunt neclare,dar nu gasesc un articol potrivit unde sa discute despre asta , atunci aici este locul.Orice intrebari care sunt legate de IT si nu numai pot fi dezbatute aici.Nu va temeti sa intrebati pentru ca noi suntem prea buni si experienta noastra nu are limite,nu este asa,din intrebarile voastre noi va trebui in anumite situatii sa ne documentam si noi mai departe si sa venim cu explicatii si vom avea de invatat cu totii.Pentr asta suntem aici, sa va invatam si sa invatam si noi o data cu voi. 🙂
Care sunt regulile aici?
Nu exista reguli, tot ce trebuie sa facem este sa raspundem frumos intrebarilor si neclaritatilor ridicate de altii.Daca doresti sa fii respectat respectai pe ceilalti e regula principala si singura de altfel.Informatiile se doresc a fi cat mai scurte si a nu se intra in detaliu decat daca cel ce pune intrebarea doreste lamuriri suplimentare.
Cine e urmatorul? 😀
Bravo, e mult mai bine asa. B-)
Buun, Adrain ia-ti scaunul si vino aici. :)) Urmatoarea intrebare a mea este legata de C. De ce unii prefera sa programeze in C si altii in C++. Tine tot de stilul propriu faptul ca eu lucrez cu fisierele cu ifstream si Andrei cu fopen ? 🙂
Hmm, nu stiu daca se poate numi o intrebare.Eu am argumente solide spre exemplu.Citirea in C++ pe anumite procesoare mananca timp mai mult.Eu in general nu am un exemplu concret si spun cu tarie ca folosesc C sau doar C++. In general combin ceea ce este optim si ma avantajeaza de la una cu ceea ce ma avantajeaza si este „mai bun” de la cealalta.Spre exemplu,sortarea vectorilor.
Se poate face manual un QuickSort bazat sa spunem pe doua valori.In timpul concursului nu este indicat de fiecare data sa facem asta.De aceea exista STL`ul care cu un „pair” si IntroSort ne rezolva toata bataia de cap in vreo 3-4 randuri.
Ce inseamna framework? De ex: un framework php …
http://unthought.net/c++/c_vs_c++.html
Aici prezinta destul de bine (zic eu) o paralela intre C si C++.
De exemplu pentru problemele de algoritmica, este mult mai indicat sa folosesti C++. Numai STL-ul cat face. Pe langa sortarea foarte rapida se mai gasesc si alte elemente foarte folositoare gen set si map (Red-Black trees care in practica sunt chiar anevoios de implementat), priority_queue (decat sa faci toate operatiile pe heap, upheap, downheap si altele, parca mai bine scrii H.insert(x); sau H.pop() :D)
@dage : O definitie sumara si nu prea exacta ar fi : Un framework este o inlantuire de clase ce pot fi accesate dintr-un obiect global.Un exemplu de Framework PHP este ZEND, acesta are inglobat o sumedenie de clase si module ce au un scop comun : usurarea programarii web si depasirea unor pasi care sunt clasici si au devenit pasi nu prea importanti intr-un proiect. 🙂
Intrebare 2: La directive, in #define se poate declara orice valoare? De exemplu:
#define max 10000000000000000000000000000000000000(si multe alte zerouri…)
? Sau exista o limita? 🙂
Sa spunem ca ar merge,tipurile de date nu ne permit procesarea valorilor respective.Nu ne ajuta la nimic?Nu putem declara un vector de asemenea dimensiuni, practic nu putem face mai nimic. 🙂
Defapt define-ul defineste max ca fiind 10000..00. Dar, in program, el cand intalneste max il inlocuieste cu 1000..000. Si din ce stiu, numerele naturale sunt declarate standard int. Deci cel mai probabil vei avea overflow :D.
Nu exista un raspuns unic la intrebarea: de ce unii folosesc C++ si altii folosesc C ?
Depinde mult de tipul proiectului … de exemplu, in dezvoltarea de software embedded, se prefera, de obicei, limbajul C.
Avantaje C:
– disponibilitatea compilatoarelor C++ pentru procesoare embedded. Exista destule procesoare embedded pentru care producatorii nu livreaza compilatoare C++, doar C
– simplitate. Limbajul C este mic si simplu. C++ nu e nici una nici alta
– adevarul este ca codul C inca tinde sa fie mai portabil decat codul C++, desi s-au facut progrese majore din parte producatorilor de compilatoare de a se alinia cat mai mult cu standardul C++. Mai exact, daca vrei ca codul tau C++ sa fie portabil intre diverse compilatoare, probabil ca vei munci mai mult decat daca ai fi folosit C
– optimizari
Limbajul C e mult mai simplu, din punct de vedere al implementatorilor de tool-uri (compilatoare, debuggere, profilere) decat C++.
Limbajul C are o istorie mai indelungata, a fost folosit in productie mult mai mult timp decat C++.
Din acest motiv, tehnicile de optimizare a codului C, aplicate de catre implementatorii de compilatoare C, au o traditie mai lunga, au avut mai mult timp sa fie perfectionate.
– traditie
Anumite proiecte au fost incepute in anii ’80-’90, scrise in C. Dezvoltarea lor este continuata si in zilele noastre, tot in C.
Anumite genuri de proiecte sunt scrise, in mod traditional in C, si nu in C++:
– sisteme de operare (in 99% din cazuri sunt scrise in C si ASM). Exista si cazuri de sisteme de operare in care s-a folosit (cu succes) si C++
– drivere, module de kernel
– compilatoare
– stive de comunicatii
– aplicatii software embedded
– etc
Avantaje C++:
– C++ e un limbaj multiparadigma. Accepta programarea procedurala, obiect orientata si programare generica
C e un limbaj procedural.
Poti aplica principii ale obiect orientarii si intr-un limbaj procedural precum C, dar e mult mai simplu si mai natural sa folosesti un limbaj obiect orientat (precum C++) si sa folosesti direct facilitatile puse la dispozitie de acel limbaj obiect orientat
– C++ are suport mult imbunatatit pentru type-safety. Multe erori de programare pot fi detectate la compile-time
– notiunea de destructor permite aplicarea de tehnici superioare privind managementul automat al resurselor. In special, riscul de aparitie al memory leak-urilor este redus
– programarea generica folosind template-uri permite aplicarea de tehnici imposibil de aplicat in C. In special, e posibil sa se implementeze containere si algoritmi pe tipuri generice si in acelasi timp sa se asigure si suport pentru type-safety, ceea ce in C era practic imposibil (se utilizau de obicei pointeri la void)
– disponibilitatea compilatoarelor C++
Cel putin in domeniul programarii desktop, nu o sa ai probleme in a gasi un compilator conformant cu standardul C++ ’98, pe orice sistem de operare major.
In cazul sistemelor embedded, situatia se schimba (vezi considerentele de la limbajul C)
– aplicarea unor tehnici folosind template-uri poate permite compilatorului C++ sa genereze un cod mai rapid (desi de dimensiuni mai mari), decat un compilator de C, in anumite situatii. Totusi, aplicarea de astfel de tehnici necesita o cunoastere buna a limbajului C++
In cazul practic enuntat: sa folosim stream-uri C++ sau FILE *:
– folosirea solutiei C (FILE *) duce la generarea de cod putin mai rapid, pe majoritatea compilatoarelor, fata de cazul in care se folosesc stream-uri C++. Diferentele nu sunt mari (in afara cazurilor in care se foloseste un compilator C++ vechi)
– folosirea stream-urilor C++ imbunatateste suportul de type-safety in operatiile IO. Un avantaj major in proiectele mari, tinand cont ca erorile de tip „format string” sunt unele din cele mai comune in proiectele C (ducand de obicei la posibilitate aplicarii de exploit-uri si la compromiterea securitatii)
– stream-urile C++ sunt obiecte, poti sa iti scrii propriile clase pentru stream-uri si sa de bucuri din plin de avantajele polimorfsmului
Am priceput, mutumesc pentru raspunsuri celor 3 predecesori ! 😀
Edit: eu nu pricep titlul articolului, cum adica „Ai intrebari legat de IT sau mai putin? ” ?
Am o noua intrebare…De ce nu s-a gasit un tip si pentru numerele foarte mari? 🙂
P.S: Cred ca au inceput sa-mi placa…:))
Poi e evident, operatiile cu numere de sute de cifre s-ar face foarte greu „tot odata”.Oricum, fara astfel de operatii mi se pare mai dragut,mai ai un lucru de invatat, cum se face operatiile de baza pe numere :>
La un algoritm ce lucreaza cu long long int deja operatiile au loc muult mai greu decat cele cu int, iti dai seama ce diferenta ar fi la cele cu sute de cifre.
Asa-i, m-am prins acum.
🙂
3..2..1.. Happy blogday!!! http://colaholicu.ro/blog/tudei-iz-blog-dei-iei/ . asa „e” regulile. kip in taci!
Am eu o intrebare:
De ce md5 este o functie ireversibila? 🙂
Hmm, voi incerca sa explic pornind de la ceva mai simplu.
Spre exemplu ne propunem urmatoarea problema : incercam sa stocam 10 miliarde de numere usor si sa putem afla daca numarul x exista,eventual sa-l stergem din lista noastra.
Abordarea clasica presupune a verifica lista si stergerea numarului daca exista sau returnarea TRUE sau FALSE in cazul in care acesta nu exista.Aceasta este destul de lenta pentru ca la 10 miliarde de numere, se va misca cam greu calculatorul.
O abordare inteligenta ar fi in crearea unei chei ce va reduce numerele acestea la valori micute.In aceasta situatie cheia trebuie sa fie intre 2 puteri ale lui 2 si cat mai departe de acestea pentru a fi sigur ca vom genera foarte putine coliziuni.Astfel vom pune valorile acestea intr-o lista la pozitia x%cheie.De asemenea,stim sigur ca restul impartirii unui numar la altul poate sa fie acelasi in doua situatii diferite(coliziunile),insa putem sti ca datorita faptului ca acea cheie este suficient de mare acest lucru se va intampla foarte rar sau aproape deloc.Din pacate noi am reusit sa generam cheia acelui numar, insa nu vom putea in 99% din cazuri sa putem genera acel numar inapoi, de ce? Pentru ca procesul modulo este un proces ireversibil.
Exemplu concret :
Fie numerele 10,15,20,22 si cheia 3.Informatiile vor fi stocate : 1,0,2,1. Datorita faptului ca avem o cheie foarte slaba numarul de coliziuni a fost mare(avem 2 coliziuni).Insa de la aceste coliziuni nu putem afla cu exactitate care dintre ele a fost numarul 10 initial si care 22.Si de asemenea nu vom putea sti ca x%3=2 => x=20 si nici ca daca x%3=0 avem neaparat x=15 , deoarece putem avea si 18 si 21 care vor genera aceasta cheie.Practic aceasta functie este ireversibila,insa din pacate nu ofera prea multe coliziuni.
Funtia md5() se comporta similar, cu precizarea faptului ca incearca sa reduca atat cat se poate numarul de coliziuni, pastrandu-si ireversibilitatea.
Practic operatia modulo e functia ce va genera cheia, iar cheia este valoarea ce va reduce acel numar.
Imi amintesc ca am scris la un moment dat un articol despre hashing, poate te ajuta. Cauta prin arhiva de la articole. 😀
Te pricepi la MySQL? Am sa-ti adresez o intrebare din domeniul asta.
Salut, astept intrebarea. 🙂
Am doua tabele:
Filme
– id
– film
…
Subtitrari
-id
-titlu
-filmid
–
Am acest cod:
SELECT * FROM filme
LEFT JOIN subtitrari ON (filme.id=subtitrari.filmid)
GROUP BY filme.id
ORDER BY subtitrari.id DESC LIMIT 7
Cu acest cod, vreau sa afisez pe prima pagina ultimele 7 filme pentru care s-au adaugat subtitrari. Dupa cum vezi in cod, legatura intre tabele se face prin `filmid` din tabelul subtitrari.
Care este problema? Acel ORDER BY subtitrari.id este ca si inexistent, filmele imi sunt ordonate descrescator dupa id-ul tabelului filme, nu dupa subtitrari.id.
Cum ar trebui sa procedez?