QReferate - referate pentru educatia ta.
Referatele noastre - sursa ta de inspiratie! Referate oferite gratuit, lucrari si proiecte cu imagini si grafice. Fiecare referat, proiect sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Referate informatica

Crearea unui proiect in Microsoft Visual Studio 2008




Crearea unui proiect in Microsoft Visual Studio 2008

Visual Studio 2008 este mediul de dezvoltare integrat (IDE - Integrated Development Environment) pe care il vom folosi pentru scrierea programelor C++. El permite dezvoltarea de aplicatii in mai multe limbaje de programare, de diverse tipuri. In cadrul laboratorului vom scrie programe C++ de tip consola. Pentru a scrie un program in VS2008, la inceput trebuie sa cream un proiect.


Pentru a crea un proiect:

Pornim VS2008



In meniul principal, mergem la File → New → Project . ca in figura:

Fig. 1 Creare proiect nou


In fereastra New Project, in stanga avem casuta Project types. Alegem Other languages → Visual C++ :

Fig. 2 Fereastra New Project


In partea dreapta avem casuta Templates. Alegem Win32 Console Application.

In partea de jos avem casutele Name si Location. Alegem un nume pentru proiect. La Location selectam un director creat de noi in C:/temp sau D:/temp dupa caz. (vezi fig. 2)

Apasam OK.

Apare fereastra "Welcome to the Win32 Application Wizard". Apasam Next, NU Finish!

Fig. 3 Fereastra Welcome .


In fereastra aparuta, rubrica Additional options, bifam "Empty project". Lasam celelalte setari neschimbate:

Fig. 4 Fereastra Application Settings


Apasam Finish.

Proiectul este creat si deschis in VS. Ar trebui sa vedem urmatoarele ferestre:

Solution explorer - in partea stanga. De aici se pot crea sau deschide fișierele proiectului. Initial proiectul nu contine nici un fisier.

Start Page - in restul ecranului. Nu ne este de mare folos, putem sa o inchidem.

Mediul de dezvoltare va arata in felul urmator:

Fig. 5 Proiect proaspat creat


Adaugarea unui fișier la proiect

Ca sa putem scrie cel mai simplu program in VS2008, trebuie sa adaugam un fisier sursa. Pentru aceasta, urmati urmatorii pasi:

In Solution Explorer, click dreapta peste grupul Source Files → Add → New Item .

Fig. 6 Adaugare fisier sursa

Apare fereastra "Add New Item".

In casuta templates alegem C++ File (.cpp)

La name alegem numele fisierului. De obicei vom numi fisierul care contine functia  main() dupa regula <numeProiect>Main. In cazul nostru - salutMain:

Fig. 7 Adaugare fisier sursa - partea 2

Apasam Add. Noul fisier este creat si deschis in editor.


Scrierea primului program

Sa scriem un program simplu care afiseaza un mesaj la consola, dupa care asteapta apasarea unei taste:

Fig. 8 Scrierea codului sursa

Observam in dreptul numelui fisierului - salutMain.cpp, o steluta (*). Aceasta inseamna ca fisierul contine modificari nesalvate. Liniile modificate sunt marcate cu galben in stanga editorului. Apasam Ctrl+S pentru a salva fisierul. Observam cum steluta a disparut.

Functia _getch() la sfarsitul programului este echivalentul lui getch() din borland C. Ea asteapta apasarea unei taste fara sa o afiseze pe ecran.

In Visual Studio codul este identat in mod automat atunci cand il scriem. Chiar daca programul nu este identat asa cum ne dorim, putem sa reformatam codul in orice moment apasand Ctrl+A, apoi Ctrl +K, Ctrl +F. Este o practica buna sa avem codul tot timpul formatat. Formatarea ne ajuta sa intelegem programul si sa detectam mai usor erorile. Urmatorul experiment ilustreaza facilitatea reformat in practica:

In dreptul apelului printf() apasam tab pentru a-l identa in mod eronat la dreapta:

Fig. 9 Exemplu de cod neformatat

Apasam Ctrl+A pentru a selecta tot textul.

Apasam Ctrl +K, apoi Ctrl +F. Observam cum codul este formatat inapoi in mod corect.


Compilarea și rularea proiectului. Detectarea erorilor.

Pentru a compila proiectul apasam Ctrl + Shift + B, sau din meniul principal selectam Build → Build Solution.

Daca sunt detectate erori de compilare, in partea de jos a ecranului va aparea fereastra Error List. Sa introducem intentionat o eroare pentru a vedea facilitatile acestei ferestre.

De exemplu, putem inlocui linia "return 0" cu "return x". La compilare, compilatorul considera ca x este o variabila nedefinita si afiseaza fereastra error list cu urmatorul mesaj:

Fig. 10 Mesaj de eroare

Daca dam dublu-click peste mesajul de eroare, cursorul se va deplasa la linia de cod continind eroarea. Utilizarea unei variabile fara sa fie declarata este una din cele mai comune erori de programare. In VS2008 aceasta poate fi detectata si corectata foarte usor. Alte erori insa pot duce la mesaje de eroare mult mai obscure. si chiar linia de cod a erorii poate fi detetata gresit.

In general s-a observat urmatoarea regula - eroarea trebuie cautata ori pe linia afisata in error list, ori cu o linie mai sus. De exemplu, stergeti simbolul ; la sfarsitul uneia dintre linii. Veti vedea ca mesajul de eroare ne duce cu o linie mai jos.

Sa corectam programul si sa il compilam din nou. Chiar daca fereastra error list nu s-a ridicat dupa compilare, trebuie sa o verificam, pentru ca aceasta nu se ridica atunci cand programul are doar warning-uri. De cele mai multe ori warning-urile sunt si ele erori de program.

Pentru a executa programul apasam F5. Se deschide o fereastra - consola in care ruleaza programul.

Scriere / citire cu ajutorul cin si cout

In C++ s-a elaborat o modalitate mai simpla de scriere/citire la consola comparativ cu functiile scanf/printf din C. La inceputul executiei fiecarui program sunt instantiate automat 2 variabile globale speciale - cin si cout. Ele sunt folosite pentru citire, respectiv scriere la consola.

Pentru a citi o variabila de la consola, se foloseste urmatoarea sintaxa:

int a;

cin >> a;

Operatorul >> are un rol special pentru variabila cin. Expresia

cin >> a;

semnifica faptul ca de la consola este citita o valoare si depozitata in variabila a. Tipul variabilei din dreapta poate fi de orice tip simplu - int char float double sau sir de caractere - char*. Pentru fiecare tip citirea se va face in mod corect.

Pentru a scrie o variabila la consola, folosim sintaxa:

char str[] = 'abc'

cout << str;

In mod similar, operatorul << are o semnificatie speciala pentru variabila cout Expresia

cout << str;

semnifica faptul ca variabila str este scrisa la consola. Variabilele scrise pot fi de aceleasi tipuri ca si cele citite cu cin

Observati ca in exemplul de mai sus a fost scrisa la consola o variabila de tip char[], tip care nu a fost mentionat in lista de tipuri suportate pentru operandul dreapta. Totusi, utilizarea lui a fost posibila intr-o expresie cu cout. De ce?

Variabilele cin si cout sunt definite in header-ul <iostream>. Pentru ca sa le putem folosi, trebuie sa includem la inceputul programului urmatoarele linii:

#include <iostream>

using namespace std;


Aceste variabile speciale fac parte din categoria "obiecte". Obiectele vor fi studiate in detaliu incepand cu laboratorul urmator.

Iata un exemplu complet folosind noile facilitati de scriere/citire:

// exemplu: cin si cout

#include<conio.h>

#include <iostream>

using namespace std;


int main()

Introduceti un numar: 12

Si un sir de caractere: abc

Numarul este: 12

Sirul este: abc





Un aspect nou este cuvantul endl. Acesta este o variabila globala tip sir de caractere cu valoarea 'n' (sfarsit de linie).

Propozitia:

cout << endl;

este echivalenta cu

cout << 'n'

dar are avantajul ca este mai lizibila.

Atat expresiile cu cin cat si cele cu cout pot fi inlanțuite. Expresia

cout << a << ' ' << b;

este echivalenta cu

cout << a;

cout << ' ';

cout << b;


Comparativ cu functiile printf / scanf din C, expresiile cu cin si cout sunt mai simple si mai usor de inteles. Nu mai este nevoie de specificatori de format. Dezavantajul este ca nu putem face afisari formatate pe un anumit numar de caractere. O afisare de genul

printf('%7.2f', f);

nu are echivalent folosind cout

De aceea, folosind cout nu vom putea afisa o matrice sau un vector de structuri sub forma de tabel, asa cum am facut in C. Pentru astfel de afisari vom folosi printf

Operatorii new si delete

In C++, lucrul cu memoria dinamica este facilitat de doi operatori speciali - new si delete

Alocarea dinamica de memorie se face cu operatorul new. El returneaza un pointer catre inceputul blocului de memorie proaspat alocat. Sintaxa operatorului este urmatoarea:

TIP *p, *pvector;

p = new TIP;

pvector = new TIP[nr_elemente];


De exemplu, pentru pointeri la variabile simple:

int *pi;

pi = new int;

char *pch;

pch = new char;

Si pentru pointeri la vectori:

int *vi;

vi = new int[10];

char *psir;

psir = new char[80];

Atunci cand nu mai avem nevoie de o variabila alocata dinamic, aceasta trebuie dealocata. Memoria dealocata devine disponibila pentru noi cereri de alocare. Pentru dealocari se folosesc operatorii delete - pentru variabile simple, si delete[] - pentru vectori. Exemplu:

delete vi;

delete[] psir;


Un program mai complex

In continuare vom scrie un program mai complex, care va exemplifica facilitatile C++ de lucru cu consola si cu memoria dinamica. Programul citeste de la consola un vector de n siruri de caractere, aloca pentru ele spatiul de memorie strict necesar si le sorteaza in ordine crescatoare. Este una din problemele de la PC / P1 din semestrul trecut, dar rezolvata folosind facilitati C++.

IIn Visual Studio puteti crea o solutie noua (o solutie reprezinta o multime de proiecte deschise simultan). Sau puteti adauga un proiect nou in cadrul solutiei existente. Creati un proiect nou si adaugati la el 3 fișiere - SortareSiruri.h, SortareSiruri.cpp, SortareSiruriMain.cpp. Codul sursa este mai jos.

SortareSiruri.h

#ifndef _SortareSiruri_

#define _SortareSiruri_

#pragma warning(disable : 4996)


char **citireVSiruri(int n);

void sortareVSiruri(char ** vsiruri, int n);

void afisareVSiruri(char **vsiruri, int n);

void dealocareVSiruri(char **vsiruri, int n);


#endif


SortareSiruri.cpp

#include<iostream>

#include<string.h>

#include'SortareSiruri.h'

using namespace std;


char **citireVSiruri(int n)

return vsiruri;



void sortareVSiruri(char ** vsiruri, int n)

}

}



void afisareVSiruri(char **vsiruri, int n)



void dealocareVSiruri(char **vsiruri, int n)

delete[] vsiruri;



SortareSiruriMain.cpp

#include<iostream>

#include<conio.h>

#include'SortareSiruri.h'

using namespace std;


int main()

Compilati, testati si analizati programul.

Acest program contine cateva elemente noi:

In fișierul SortareSiruri.h, apare directiva de preprocesare

#pragma warning(disable : 4996)

Aceasta este o directiva specifica Visual Studio, care dezactiveaza warning-urile cu codul 4996. Este necesar sa le dezactivam pentru a putea folosi funcțiile cunoscute din limbajul C fara warning-uri inutile.

In fisierul SortareSiruri.cpp, functia citireVSiruri(), avem linia

cin.ignore(100, 'n');

Acest apel este necesar inainte sa putem apela functia cin.getline(), care citeste o linie de caractere de la consola. Rolul acestul apel este sa ignore caracterele sfarsit de linie citite anterior. Vedeti documentatia acestei functii pentru detalii. Functia este necesara din acelasi motiv ca si fflush(stdin) in C.

In aceeasi functie, mai jos avem apelul

cin.getline(buffer, 100);

Functia cin.getline() citeste o linie de la consola, sub forma unui sir de caractere, si o depune in buffer. Al 2-lea parametru - 100 - este numarul maxim de caractere citit. Functia este echivalenta cu fgets() din C.

A fost necesar sa utilizam aceste functii noi, in loc de fflush() fgets() din C, pentru ca nu este bine sa amestecam functiile de lucru cu consola din C cu cele din C++. La utilizarea lor mixta pot aparea incompatibilitati.


Debug

Debug este facilitatea oferita de mediile de dezvoltare de a analiza procesul de executie a unui program in scopul de a detecta erorile. Este posibil de a rula programul instructiune cu instructiune, urmarind valoarea unor variabile dupa fiecare instructiune. Sau este posibil de a stabili anumite linii de cod la care dorim ca programul sa se opreasca, si sa vizualizam valoarea variabilelor alese de noi doar in acele puncte din program. Aceste linii in care dorim sa intrerupem executia programului se numesc puncte de oprire (breakpoint).

De exemplu, sa presupunem ca in programul SortareSiruri afisarea este gresita - o eroare foarte comuna. Vom dori sa verificam in primul rand daca citirea si alocarea memoriei a fost facuta corect, si in caz afirmativ, daca sortarea a fost corecta. Pentru aceasta, vom plasa 2 breakpoint-uri in functia main() - unul dupa functia de citire si unul dupa functia de sortare. Pentru a plasa un breakpoint, ducem cursorul la linia de cod unde dorim breakpoint-ul, si apasam F9. Tot cu F9 se poate scoate un breakpoint. In partea dreapta a editurului de text va aparea o bulina rosie pentru fiecare breakpoint:

Fig 11. Breakpoint-uri

Acum apasam F5 pentru a rula programul in mod debug. Vom observa ca programul isi incepe executia normal, ne cere datele de intrare, iar dupa ce le introducem consola se blocheaza. In acel moment ne intoarcem in Visual Studio si observam ca aranjamentul ferestrelor s-a schimbat, iar in dreptul primului breakpoint a aparut o sageata:

Fig 12. Oprirea executiei la un breakpoint


Sageata indica instructiunea la care s-a oprit executia programului.

Atentie! Instructiunea la care se afla sageata inca nu s-a executat, dar instructiunea anterioara a fost executata!

Acum, putem sa vizualizam valoarea unor variabile. In mod evident, ne va interesa valoarea celor 2 variabile definite in main() n și vsiruri. Pentru a le vedea, mergem in meniul principal → Debug → Windows → Watch → Watch 1

Apare fereastra Watch 1 in partea de jos. In aceasta fereastra dam click pe coloana name si intruducem numele variabilelor ce dorim sa le vedem - intai n, apasam enter, pe urma vsiruri, enter:

Fig 13. Fereastra Watch

In cea de-a 2-a coloana - Value, va fi afisata valoarea variabilelor, iar in cea de-a 3-a - Type - tipul. La variabila n valoarea este un numar pe care il putem vedea. Insa la vsiruri valoarea este de tip pointer la pointer, si forma in care il afiseaza IDE-ul nu ne este de folos.

Fereastra watch ne permite insa sa vizualizam nu doar variabile, ci si orice expresie. Putem sa vizualizam elementele vectorului vsiruri, pe care VS va sti sa le afiseze intr-o forma mai relevanta:

Fig 14. Vizualizarea elementelor unui vector

Observam ca de data aceasta fiecare sir de caractere este afisat corect, si putem vedea continutul lui.

Citirea s-a facut asa cum ne asteptam. Pana in acest punct programul este corect. Apasam F5 pentru a continua executia programului pana la urmatorul breakpoint. Vom vedea urmatoarele:

Fig 15. Breakpoint dupa sortare

Ordinea elementelor in vsiruri s-a schimbat, si acum elementele sunt sortate crescator, așa cum ne aseptam. Unele dintre elementele schimbate sunt afisate cu rosu. Atat citirea cat si sortarea sunt corecte. Mai apasam odata F5 pentru a rula programul pana la sfarsit. Executia ajunge la instructiunea _getch() care asteapta apasarea unei taste. Se va activa fereastra consola. In consola apasam o tasta si programul se termina.

Explorati meniul debug in timp ce va aflati intr-un breakpoint pentru a afla si alte facilitati de debug.

Mai jos sunt sumarizate combinatiile de taste utile in VS.


Combinatia de taste

Efect

Ctrl + C

Copy

Ctrl + V

Paste

Ctrl + A

Select all

Ctrl + K, F

Format selected

Ctrl + A, K, F

Format all

Ctrl + Shift + B

Build all

F5

Debug, continue after breakpoint

F9

Insert / remove breakpoint


Documentatie

Sursa recomandata de documentatie este situl https://www.cplusplus.com/ . In particular:

https://www.cplusplus.com/reference/clibrary/ - documentatia completa a tuturor header-elor din C, si a functiilor din ele. Vedeti meniul din stanga. Similar cu documentatia din Borland C.

https://www.cplusplus.com/reference/iostream/ - documentatia claselor ce realizeaza lucrul cu fisierele. Inclusiv obiectele cin și cout

https://www.cplusplus.com/doc/tutorial/ - un material didactic alternativ despre limbajul C++.


Exercitii

Introduceti in mod intentionat o eroare in program: comentati linia

suntPerm = 1;

din functia sortareVSiruri()

Testati programul cu o intrare de 5 siruri si verificati ca la al 2-lea breakpoint sirurile nu sunt sortate corect.

Sa incercam sa detectam eroarea, presupunand ca nu stim unde este. Localizati prima linie de cod care se executa dupa ce se detecteaza ca 2 siruri trebuie inversate. Intruduceti un breakpoint pe acea linie. Vizualizati toate variabilele locale, si cele 2 siruri care urmeaza sa fie inversate. Ce expresii veti introduce in watch pentru cele 2 siruri? De cate ori ar trebui sa se intample inversarea sirurilor si de cate ori are loc in realitate? Ce puteti spune despre comportamentul programului?

Introduceti un breakpoint pe linia while, si demonstrati cu ajutorul lui ca bucla while se executa doar o data in programul eronat.

Corectati eroarea in program. Numarati de cate ori se executa bucla while si de cate ori are loc inversarea a 2 siruri consecutive, in functia de sortare.


Nu se poate descarca referatul
Acest referat nu se poate descarca

E posibil sa te intereseze alte referate despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi referatele, proiectele sau lucrarile afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul referat pe baza referatelor de pe site.
{ Home } { Contact } { Termeni si conditii }