Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Ajutaţi-mă să înţeleg câteva lucruri vă rog.  (Citit de 3790 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« : Septembrie 28, 2008, 12:19:19 »

Am răsfoit câteva pagini din manualul de a X-a şi cateva documentaţii & articole legate de STL. Sunt destul de bulversat în legătură cu câteva noţiuni care nu le-am înţeles.

1 ) Ce face using namespace std;
2 ) Ce-i un container? Dar un container deque (şi de ce se numeşte aşa)
3 ) Cu ce se mănâncă un iterator ?
4 ) La ce ajută map-ingul în C++ ?
5 ) Ce fac cu typedef ? Dar cu enum ?
6 ) Care este diferenţa dintre cerr şi clog ?
7 ) Care este diferenţa dintre ofstream f;f.open("Jiji.txt"); şi ofstream f("Jiji.txt"); ?
8 ) Ce face cout << 2222 << flush;
9 ) De ce pe compilatorul infoarena există librăriile iostream.h, fstream.h, etc şi pot să folosesc streamuri fără using namespace std; ?
10 ) Ce este un heap şi la ce ajută ?
11 ) Ce este un buffer şi la ce să-l folosesc ?
12 ) Un vector declarat din STL pot sal folosesc exact ca pe unul declarat clasic ?

Mersi Smile .
« Ultima modificare: Septembrie 28, 2008, 17:02:03 de către Harabula Adrian » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #1 : Septembrie 28, 2008, 12:55:27 »

Cam multe intrebari Tongue. Iti voi raspunde eu la prima:

1) In C (ca si in alte limbaje mai vechi) exista un singur univers in care traiesc variabilele si functiile. Daca intr-un proiect foarte mare ai 2 functii cu acelasi nume, vei primi o eroare de compilare. In cazul in care ajungi la foarte multe linii de cod, vei intampina probleme cu alegerea numelor astfel incat sa fie toate distincte. De aici rezulta nevoie de namespace. Practic poti sa-ti creezi mai multe "universuri" in care sa existe variabilele tale. Declaratia este ceva de genul:

Cod:
namespace MyNamespace {
    int i;
    void f() {}
    class A {};
}

Acum, pentru a accesa ceva din ce ai declarat mai sus, trebuie sa procedezi astfel:

Cod:
    MyNamespace::i;
    MyNamespace::f();
    MyNamespace::A a;

Daca doresti sa ai acces direct, trebuie sa declari undeva ca vrei sa folosesti un anumit namespace:

Cod:
    using namespace MyNamespace;

    i;
    f();
    A a;

Toate functiile si clasele din librariile standard C++ se afla in namespace-ul std. Trebuie sa il incluzi daca vrei sa renunti la constructii de genul:

Cod:
    std::cout << "Hello world!" << endl;
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #2 : Septembrie 28, 2008, 13:02:20 »

Mersi.  Brick wall n-a fost chiar aşa greu. Smile. Deci Borland C++ 3.1  for dos (sau cum se numeste) este compilator numai pentru C++ ?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #3 : Septembrie 28, 2008, 13:18:41 »

Borland C++ 3.1 (care este un IDE) are un compilator invechit care nu respecta niciun standard.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #4 : Septembrie 28, 2008, 13:28:48 »

Borland C++ este un compilator de C cu extensii de C++. Programul a fost scos _inainte_ sa se stabileasca standardul C++. De aceea nici nu il respecta.
Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #5 : Septembrie 28, 2008, 14:14:51 »

Păi la olimpiadă(judeţeană) eu scriu algoritmi care nu respectă standardul C/C++ ? Defapt nici manualul care este tipărit în 2008 nu-l respectă cu void main, care este incorect si impropiu zis ca un program să nu aibă exit status.
« Ultima modificare: Septembrie 28, 2008, 14:20:57 de către Harabula Adrian » Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #6 : Septembrie 28, 2008, 14:27:03 »

Borland C++ este un compilator de C cu extensii de C++. Programul a fost scos _inainte_ sa se stabileasca standardul C++. De aceea nici nu il respecta.

Am folosit compilatorul BC 5.5 in linia de comanda si e ok Smile. De cand cu UNIX-u nu mai am nevoie de el.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #7 : Septembrie 28, 2008, 15:34:15 »

La olimpiada nu scrii algoritmi, scrii programe. Si DA, esti obligat sa folosesti un compilator care nu respecta standardul! (nici manualele nu sunt foarte destepte Wink )
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #8 : Septembrie 28, 2008, 15:48:30 »

Citat
Prin participarea la olimpiada judeţeană de informatică eşti de acord să scrii programe care încalcă orice standard existent.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #9 : Septembrie 28, 2008, 15:57:49 »

Păi la olimpiadă(judeţeană) eu scriu algoritmi care nu respectă standardul C/C++ ? Defapt nici manualul care este tipărit în 2008 nu-l respectă cu void main, care este incorect si impropiu zis ca un program să nu aibă exit status.

Poti sa scrii C standard in Borland C++. Pe ala cred ca il respecta Smile
C++ sigur nu e complet. (ex: nu are biblioteci STL, variabilele au alt scope, etc)
Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #10 : Septembrie 28, 2008, 16:05:35 »

Dacă îl respecta atunci int c[9]={0}; era {0,0,0,0,0,0,0,0,0,0} nu {0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #11 : Septembrie 28, 2008, 16:36:40 »

2) Containerul e o clasa capabila sa retina alte tipuri de obiecte. De exemplu, vector <Obj> retine obiecte de tip Obj. Containerul deque este pur si simplu un alt container (deque = double-ended queue).

3) Iteratorii pentru niste containere sunt ca niste pointeri pentru variabilele obisnuite. Astfel, ii poti folosi pentru a traversa tot containerul din element in element si ii poti dereferentia pentru a afla elementul catre care refera.

4) Maparea este folositoare cand ai o corespondenta intre 2 multimi A si B, iar unui element din multimea A ii corespunde doar unul din multimea B.

5) Cu typedef dai tu un alt nume unui tip de date deja existent. Poate vrei sa nu definesti in program variabilele intregi ca int. Si atunci definesti:
Cod:
typedef int Intreg;
Enum e folosit pentru a defini mai multe constante intregi intre care exista o oarecare legatura.
Cod:
enum STARE_PROGRAM {PROGRAM_NEINCEPUT, PROGRAM_IN_EXECUTIE, PROGRAM_TERMINAT};
Acum, folosind o variabila de tip STARE_PROGRAM, tu te referi doar la una din cele 3 stari.

6) cerr e pentru a directiona erorile catre el, clog pentru alte informatii. Nu stiu ce detalii sa-ti dau mai mult.

7) Cu ofstream f; f.open("Jiji.txt"); tu creezi un obiect gol de tip ofstream dupa care ii deschizi un fisier.
Cu ofstream f("Jiji.txt"); deschizi fisierul chiar de la crearea obiectului (deci din constructor)

Intr-adevar multe intrebari. Poate iti mai raspund mai incolo.
Btw, la 8 banuiesc ca vroiai sa scrii flush in loc de flux.
« Ultima modificare: Septembrie 28, 2008, 22:15:07 de către Stefan Istrate » Memorat

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

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #12 : Septembrie 28, 2008, 17:00:32 »

Da, flush. Mersi mult.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #13 : Septembrie 28, 2008, 19:08:21 »

Dacă îl respecta atunci int c[9]={0}; era {0,0,0,0,0,0,0,0,0,0} nu {0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}

Cum poate tipul int sa aibe valoarea NULL?
Poate am inteles eu gresit ce vrei sa zici. Oricum, initializarea corecta este descrisa aici: http://www.eskimo.com/~scs/cclass/notes/sx4aa.html
Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #14 : Septembrie 28, 2008, 20:08:20 »

Am greşit , înloc de NULL e un număr aleator. Pe gcc iniţializează tot vectorul cu valoarea 0.
Memorat
c_sebi
Client obisnuit
**

Karma: 24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #15 : Septembrie 28, 2008, 20:19:47 »

5)
Enum e folosit pentru a defini mai multe constante intregi intre care exista o oarecare legatura.
Cod:
enum STARE_PROGRAM {PROGRAM_NEINCEPUT, PROGRAM_IN_EXECUTIE, PROGRAM_TERMINAT};
Acum, folosind o variabila de tip STARE_PROGRAM, tu te referi doar la una din cele 3 stari.

Respectivele constante iau in ordine valorile 0, 1, 2, ...
sau poti sa le dai tu alte valori
Cod:
enum STARE_PROGRAM {PROGRAM_NEINCEPUT = 10, PROGRAM_IN_EXECUTIE = 100, PROGRAM_TERMINAT = 500};

Asa poti sa-ti creezi un tip boolean
Cod:
enum {FALSE, TRUE};
sau sa lucrezi cu lunile anului
Cod:
enum {IAN = 1, FEB, MAR, APR };
Try it!
Memorat
rEbyTer
Vorbaret
****

Karma: -85
Deconectat Deconectat

Mesaje: 154



Vezi Profilul
« Răspunde #16 : Septembrie 28, 2008, 20:25:18 »

Good point. Încă un motiv să-mi uimesc colegii la tablă ...
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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