Notiuni Introductive

Bibliografie

 

Ion Smeureanu, Marian Dardala, „Programarea in limbajul C/C++”, Editura CISON, Bucuresti 2001

 

Ion Smeureanu, Marian Dardala, „Programarea orientata obiect in limbajul C++”, Editura CISON, Bucuresti 2002

 

 

Tutorial C++: http://www.cplusplus.com/doc/tutorial/index.html

 

Bruce Eckel, „Thinking in C++, 2nd Edition”, Prentice Hall 2000

http://mindview.net/Books/TICPP/ThinkingInCPP2e.html

 

Bartosz Milewski, „C++ In Action: Industrial Strength Programming Techniques”, Addison Wesley, 2001

http://www.relisoft.com/book/index.htm

Crearea unui proiect

Visual Studio 6.0

  1. Creare proiect: File->New
    1. Tip proiect: Win32 Console Application
    2. Se completeaza: Project Name si Location
    3. Se alege Empty Project
  2. Adaugare de fisiere in proiect: Project->Add To Project->New
    1. Se selecteaza C++ Source File
    2. Se completeaza numele fisierului (extensia cpp este optionala)

Visual Studio .Net 2002/2003

  1. Creare proiect: File->New->Project
    1. Se alege: Visual C++ Projects->Win32 Project
    2. Se completeaza Name si Location
    3. Se aleg optiunile:

                                                               i.      Application type: Console Application

                                                             ii.      Additional options: Empty project

  1. Adaugare de fisiere in proiect: Project->Add New Item
    1. Se selecteaza C++ File
    2. Se completeaza numele fisierului (extensia cpp este optionala)

 

Exemplu de program C++

Pentru testare se poate folosi urmatorul program:

 

// include obiectele standard

// pentru intrari/iesiri cu consola

#include <iostream>

 

// permite folosirea obiectelor standard

// fara calificativul 'std::'

using namespace std;

 

// functia principala a programului

void main()

{

      // afiseaza textul si un sfarsit de linie

      cout << "Cel mai simplu program." << endl;

}

 

Intrari/Iesiri in C++ (pentru consola)

Pentru citirea datelor de la tastatura se foloseste obiectul cin (declarat in biblioteca standard iostream) si operatorul >> (numit extractor).

 

Sintaxa folosita este:

 

cin >> nume_variabila;

 

nume_variabila reprezinta o variabila de oricare din tipurile standard (char, int, long, float, double, …).

 

Exemplu:

 

      // declarare variabile

      int nr;

      char nume[100];

 

      // citire date de la tastatura

      cin >> nr;       

      cin >> nume;

 

Se pot citi mai multe valori intr-un singur pas folosind:

cin >> variabila_1 >> variabila_2 >> ... >> variabila_n;

 

In acest caz, variabilele vor fi citite in ordine de la stanga la dreapta. Valorile introduse pot fi separate prin spatiu, tab sau linie noua.

 

Pentru citirea sirurilor de caractere care contin spatii se poate folosi metoda getline a obiectului cin:

 

cin.getline(variabila_sir, dimensiune_maxima);

 

Exemplu:

 

      char denumire[120];

      cin.getline(denumire, 120);

 

 

Afisarea datelor pe monitor se face utilizand obiectul cout si operatorul << (numit inserter).

 

Sintaxa folosita este:

 

cout << element_1 << element_2 << ... << element_n;

 

element_n poate fi:

·        un nume de variabila

·        o constanta (Ex: 7.3, "un text", …)

·        un manipulator (Ex: endl, dec, hex, …)

 

Manipulatorii sunt functii speciale incluse in lantul de operatori << si folosite pentru specificarea informatiilor de formatoare. Cei mai folositi manipulatori sunt:

 

Manipulator

Efect

endl

Rand nou

setw(int n)

Stabileste latimea zonei de afisare

setprecision(int n)

Stabileste numarul de cifre zecimale ale unui numar real

scientific

Reprezentarea unui real in format stiintific

fixed

Reprezentarea unui real in format fix

showpoint

Afisarea punctului zecimal chiar daca numarul nu are cifre zecimale semnificative

ws

Elimina spatiile din stream.

 

Efectul manipulatorilor (cu exceptia setw si endl) se manifesta pana la o noua setare. De exemplu, daca s-a folosit manipulatorul scientific, toate variabilele de tip real vor fi afisate in format stiintific pana la revenirea la formatul normal prin utilizarea manipulatorului fixed.

 

Exemplu de utilizare:

 

#include <iostream>

#include <iomanip>

 

using namespace std;

 

void main()

{

       int n = 10;

       char nume[] = "Popescu";

       double f1 = 6.5, f2 = 27.35333, f3 = 8;

 

       // afisare variabile si constante

       // si folosirea manipulatorului de sfarsit de linie

       cout << "Numarul este " << n << endl;

       cout << "Numele este '" << nume << "'" << endl;

 

       // afisare numere reale in formatul implicit

       cout << "Format implicit (fix): " << f1 << " " << f2 << endl;

 

       // afisare numere reale in formatul stiintific

       cout << "Format stiintific: " << scientific << f1 << endl;

 

       // manipulatorul 'scientific' actioneaza in continuare

       // pana la revenirea la formatul fix prin utilizarea

       // manipulatorului 'fixed'

       cout << "Tot format stiintific: " << f2 << endl;

 

 

       // fortare afisare numere reale cu trei zecimale

       cout << fixed << showpoint << setprecision(3)

              << "Trei zecimale:" << f1 << " " << f2 << " " << f3 << endl;

 

       // afisare tabel cu aliniere la dreapta

       // manipulatorii 'fixed', 'showpoint'

       // si setprecision(3) au in continuare efect

       cout

              << setw(10) << f1 << endl

              << setw(10) << f2 << endl

              << setw(10) << f3 << endl;

}

 

Rezultatul obtinut este:

 

Numarul este 10

Numele este 'Popescu'

Format implicit (fix): 6.5 27.3533

Format stiintific: 6.500000e+000

Tot format stiintific: 2.735333e+001

Trei zecimale:6.500 27.353 8.000

     6.500

    27.353

     8.000

Aplicatie

 

Pentru un student se cunosc notele si numele. Se cere:

·        sa se defineasca un articol care sa permita stocarea datelor referitore la un student si calculul ulterior al mediei

·        sa se scrie functia pentru citirea de la tastatura a datelor unui student si initializarea cu 0 a mediei

·        sa se scrie functia pentru afisarea pe monitor a datelor corespunzatoare unui student

·        sa se exemplifice utilizarea functiilor create

 

Rezolvare:

 

Pentru definirea structurii vom folosi doua constante pentru specificarea numarului maxim de note si a dimensiunii maxime a numelui studentului. Declaratia structurii asticolului este:

 

// numarul maxim de note pentru un student

const int DIM_MAX_NOTE = 20;

 

// dimensiunea maxima a numelui

const int DIM_MAX_NUME = 100;

 

// declaratie structura

struct Student

{

       // numele studentului

       char Nume[DIM_MAX_NUME];

 

       // notele obtinute

       int NumarNote;

       int Note[DIM_MAX_NOTE];

 

       // media notelor

       float Media;

};

 

Functia de citire a datelor va crea o variabila de tip Student, va citi datele corespunzatoare si va returna stuctura astfel initializata apelantului:

 

Student CitireStudent()

{

       // declarare variabila de tip structura

       Student stud;

 

       // citire nume

       // se foloseste functia getline pentru

       // a se putea introduce un nume care

       // contine spatii

       cout << "Nume:";

       cin >> ws; // elimina eventualele spatii

       cin.getline(stud.Nume, DIM_MAX_NUME);

 

       // citire numar note

       cout << "Numar note:";

       cin >> stud.NumarNote;

 

       // citire note

       for (int i = 0; i < stud.NumarNote; i++)

       {

              cout << "Nota " << i+1 << ": ";

              cin >> stud.Note[i];

       }

 

       // initializare medie

       stud.Media = 0;

 

       // intoarcere rezultat

       return stud;

}

 

Functia de citire primeste ca parametru un articol de tip Student si afiseaza datele corespunzatoare folosind obiectul cin si manipulatorii prezentati anterior:

 

void AfisareStudent(Student student)

{

       // afisare nume aliniat la stanga

       cout << setw(DIM_MAX_NUME) << setiosflags(ios::left) << student.Nume;

      

       // afisare medie (daca a fost calculata)

       if (student.Media > 0)

              // se folosesc manipulatorii fixed, showpoint

              // si 'setprecision' pentru a forta afisarea

              // mediei cu 2 zecimale

              cout << fixed << showpoint

                     << setprecision(2) << student.Media << " ";

 

       // afisare note

       cout << "Note:";

       for (int i = 0; i < student.NumarNote; i++)

              cout << " " << student.Note[i];

       cout << endl;

}

 

Pentru exemplificarea utilizarii functiilor create vom scrie programul principal pentru citirea datelor corespunzatoare unui student si afisarea lor pe monitor:

 

void main()

{

      // creare student si initializare prin

      // citire de la tastatura

      Student s = CitireStudent();

 

      // afisarea datelor citite

      AfisareStudent(s);

}

 

Codul sursa complet:

 

#include <iostream>

#include <iomanip>

using namespace std;

 

// numarul maxim de note pentru un student

const int DIM_MAX_NOTE = 20;

 

// dimensiunea maxima a numelui

const int DIM_MAX_NUME = 20;

 

// declaratie structura

struct Student

{

       // numele studentului

       char Nume[DIM_MAX_NUME];

 

       // notele obtinute

       int NumarNote;

       int Note[DIM_MAX_NOTE];

 

       // media notelor

       float Media;

};

 

Student CitireStudent()

{

       // declarare variabila de tip structura

       Student stud;

 

       // citire nume

       // se foloseste functia getline pentru

       // a se putea introduce un nume care

       // contine spatii

       cout << "Nume:";

       cin >> ws; // elimina eventualele spatii

       cin.getline(stud.Nume, DIM_MAX_NUME);

 

       // citire numar note

       cout << "Numar note:";

       cin >> stud.NumarNote;

 

       // citire note

       for (int i = 0; i < stud.NumarNote; i++)

       {

              cout << "Nota " << i+1 << ": ";

              cin >> stud.Note[i];

       }

 

       // initializare medie

       stud.Media = 0;

 

       // intoarcere rezultat

       return stud;

}

 

 

void AfisareStudent(Student student)

{

       // afisare nume aliniat la stanga

       cout << setw(DIM_MAX_NUME) << setiosflags(ios::left) << student.Nume;

      

       // afisare medie (daca a fost calculata)

       if (student.Media > 0)

              // se folosesc manipulatorii fixed, showpoint

              // si 'setprecision' pentru a forta afisarea

              // mediei cu 2 zecimale

              cout << fixed << showpoint

                     << setprecision(2) << student.Media << " ";

 

       // afisare note

       cout << "Note:";

       for (int i = 0; i < student.NumarNote; i++)

              cout << " " << student.Note[i];

       cout << endl;

}

 

void main()

{

       // creare student si initializare prin

       // citire de la tastatura

       Student s = CitireStudent();

 

       // afisarea datelor citite

       AfisareStudent(s);

}