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

Tipuri de date, variabile, constante, functii de I/E



Tipuri de date, variabile, constante, functii de I/E

Structura unui program C++

Limbajul C, aparut la inceputul anilor 70, a fost creat de Denis Ritchie si Brian Keringhan si are urmatoarele caracteristici:

Este dotat cu un set puternic de operatori (inclusiv operatori de acces la nivel de bit);

Efectueaza controale sumare asupra atribuirilor, executand de cele mai multe ori si conversiile necesare;



Permite folosirea numai a subprogramelor de tip functie, dar o functie poate fi apelata la fel ca o procedura;

Este orientat pe pointeri

Imbina caracteristicile limbajelor de ansamblare cu cele ale limbajelor de nivel inalt.

Limbajul C++, creat de Bjarne Stroustrup, poate fi privit ca o extensie a limbajului C++ care permite programarea pe obiecte.

Un program C++ este alcatuit exclusiv din functii, dintre care una este principala si are numele main. Deci, fiecare program contine cel putin o functie si anume functia main. Spre exemplu, programul urmator afiseaza textul inclus intre ghilimele:

#include <stdio.h>

void main()


Prima linie a programului indica faptul ca se va apela o functie, printf (afiseaza o informatie), care se gaseste in fisierul stdio.h. Un astfel de fisier se numeste fisier header (de aici si extensia .h). Fisierele header grupeaza prototipurile functiilor inrudite care pot fi apelate in C++. Spre exemplu fisierul header stdio.h contine prototipurile functiilor de citire/scriere. Cuvantul rezervat void din fata numelui functiei main indica faptul ca functia nu returneaza nici un rezultat. Deoarece, o functie contine cel putin o instructiune bloc (sau instructiune compusa) este obligatoriu includerea unei perechi de acolade. Fiecare instructiune dintr-un program C++ trebuie sa se termine cu caracterul punct si virgula (;).

In procesul de transformare a textului sursa in program executabil apare o faza noua, numita preprocesare, care se executa inaintea compilarii. In faza de preprocesare fisierele header precizate sunt incluse in textul sursa.

Din punct de vedere sintactic, un program C++ este o secventa de caractere ASCII, format din unitati lexicale separate prin spatii. Unitatile lexicale pot fi grupate astfel:

Cuvinte cheie - cuvinte care au un rol bine stabilit; ele nu pot fi folosite in alt context.

Identificatori - se folosesc pentru a denumi variabilele, functii etc. Identificatorii se formeaza cu ajutorul literelor mari si mici ale alfabetului (inclusiv liniuta de subliniere) si a cifrelor. Trebuie sa inceapa cu o litera si sa nu corespunda unui cuvant rezervat. Limbajul face deosebirea dintre literele mari si mici folosite intr-un identificator. Un identificator poate avea un numar nelimitat de caractere dar numai primele 32 caractere sunt semnificative.

Constante

Operatori

Un program poate contine si comentarii, care pot fi plasate oriunde in textul sursa, respecatand urmatoarele reguli:

Pentru a crea un comenatriu care sa ocupe una sau mai multe linii, se incadreaza textul intre perechile de caractere '/*' si '*/'. Spre exemplu:

/* Acesta este o linie de comentariu */

Pentru a introduce un comentariu intr-o linie de program, la sfarsitul acesteia, se plaseaza in fata textului caracterele '//'.

printf("Rezultatul"); // Comentariu pe linia de program

Tipuri de date

Una din primele intrebari pe care trebuie sa ni le punem in legatura cu un limbaj de programare, se refera la tipurile de date utilizabile pentru reprezentarea obiectelor ce intervin in problemele pe care le rezolvam. Aceste obiecte pot fi de complexitate diferita, pornind insa intordeauna de la elemente simple, de baza (numere, caractere, valori de adevar), care pot fi organizate in structuri din ce in ce mai complexe. De aceea raspunsul la intrebarea noastra va contine doua parti: cea referitoare la tipurile de date predefinite in limbaj si cea privind mecanismele ce ne sunt oferite pentru reprezentarea valorilor unor obiecte de alta natura decat cele direct reprezentabile prin intermediul tipurilor predefinite.

Principalele tipuri de date predefinite in limbajul C++ sunt tipurile aritmetice: intregi si reale. Aceasta optiune se bazeaza pe faptul ca entitatile de alta natura (caractere, valori de adevar, culori, stari etc.) pot fi codificate numeric, iar operatiile specifice lor pot fi reprezentate prin prelucrari, simple sau compuse, efectuate asupra codurilor numerice adoptate. Astfel, pentru reprezentarea valorilor logice se recurge la o conventie foarte simpla si clara: fals se codifica prin valoarea intreaga 0, iar adevarat - printr-o valoare intreaga nenula (in cazul evaluarii unei expresii relationale sau logice, aceasta valoare este 1).

Limbajul C++ are o deosebita putere de reprezentare, datorita mecanismelor pe care le ofera pentru declararea de tipuri derivate, pornind de la cele fundamentale. Astfel, pot fi declarate:

Tipuri structurate - tablouri, structuri, uniuni;

Tipuri functie; un tip functie este caracterizat atat prin tipul rezultatului furnizat, cat si prin numarul si tipul argumentelor necesare pentru obtinerea rezultatului;

Tipuri pointer; ofera posibilitatea de adresare indirecta la entitati de diferite tipuri, deoarece o valoare de tip pointer reprezinta adresa unei entitati definite in program.

Declaratii de tip

Tratarea corecta a unei entitati presupune cunoasterea tipului sau. Daca, in cazul constantelor explicite, tipul poate fi dedus din modul in care sunt precizate, in cazul entitatilor identificate prin nume simbolice (variabile, functii, constante simbolice), tipul lor trebuie precizat anterior primei utilizari printr-o declaratie sau definitie corespunzatoare.

Declaratiile de variabile sunt de cele mai multe ori, definitii, deoarece determina si alocarea spatiului de memorie necesar pastrarii valorilor. Definitia unei variabile poate fi completata prin specificarea unei valori initiale. Momentul initializarii variabilelor este conditionat de clasa de memorare in care este inclus variabila. Astfel, variabilele declarate extern sau static, se initializeaza o singura data, inaintea inceperii executiei programului, cu valoarea declarata sau, in absenta acesteia, cu valoarea implicita zero. Variabilele din clasa automatic (locale functiilor) sunt initializate numai daca s-a cerut explicit, ea facandu-se la fiecare apel al functiei.

O declaratie se poate referi la una sau mai multe variabile, precizand urmatoarele elemente: clasa de memorare, tipurile, identificatorii si eventual valorile initiale ale acestora, folosind urmatoarea sintaxa:

[clasa_memorare] tip variabila [=valoare] [,variabila [=valoare] . ]

O declaratie C++ se poate referi la variabile de tipuri diferite, insa derivate din acelasi tip de baza. Spre exemplu,

extern char c='A', *p, s[10]

se refera la trei variabile externe, de tipuri diferite: caracterul c, pointerul p si tabloul de cel mult 10 caractere s.

Tipuri aritmetice

Printr-un tip de data se intelege un ansamblu format din trei elemente:

O multime de valori;

O modalitate de reprezentare a acestora in memoria interna;

Un set de operatii permise cu valorile respective.

Un tip de date este predefinit daca este recunoscut de limbaj, deci nu este necesara descrierea lui de catre utilizator.

In C++ exista urmatoarele tipuri de date predefinite:

  1. Tipuri intregi (se folosesc pentru reprezentarea numerelor intregi):

unsigned char (caracter fara semn) - ocupa 8 biti si ia valori cuprinse intre 0 si 255;

char (caracter) - ocupa 8 biti si poate lua valori intre -128 si 127;

unsigned int (intreg fara semn) - ocupa 16 biti si ia valori intre 0 si 65535;

short int (intreg scurt) - ocupa 16 biti si ia valori intre -32768 si 32767;

int (Intreg) - ocupa de regula 16 biti (lungimea poate diferi de la o implementare la alta) si ia valori intre -32768 si 32767;

unsigned long (intreg lung fara semn) - ocupa 32 de biti si ia valori intre 0 si 4294967295;

long (intreg lung cu semn) - ocupa 32 biti si ia valori intre -2147483648 si 2147483647.

  1. Tipuri reale (se folosesc pentru reprezentarea numerelor reale):

float (virgula mobila simpla precizie) - ocupa 32 biti si ia valori intre 3.4x10-38 si 3.4x1038;

double (virgula mobila dubla precizie) - ocupa 64 biti si ia valori intre 1.7x10-308 si 1.7x10308;

long double (virgula mobila extinsa) - ocupa 80 biti si ia valori intre 3.4x10-4932 si 1.1x104932.

Observatie Caracterele sunt considerate tot numere, deoarece ele sunt reprezintate, in memorie, prin valorile numerice ale codului ASCII.

Tipuri enumerare

Tipurile enumerare reprezinta cazuri particulare ale tipurilor intregi. Ele se folosesc pentru a realiza o reprezentare comoda si sugestiva a obiectelor ale caror valori se pot identifica printr-un numar finit de nume simbolice. De exemplu, unitatea de masura pentru un produs poate fi: metrul, litrul, gramul, bucata; mijlocul de transport pentru o deplasare poate fi: trenul, avionul, autocarul, autoturismul etc. Valorile constante identificate prin nume simbolice specifice problemei trebuie codificate prin entitati admise de limbajul de programare, deci prin constante numerice. Dar prin utilizarea directa a codificarii numerice se pierde din claritatea asigurata de folosirea numelor simbolice. Solutia acestor probleme este oferita de tipurile enumerare, care in esenta, declara constante simbolice carora li se asociaza coduri numerice de tip intreg. Ca efect al unei declaratii de forma:

enum nume_tip

compilatorul asociaza fiecarei constante enumerate un cod intreg, incepand de la 0. Astfel ca efect al declaratiei:

enum unitate ;

constantelor tipului enumerare unitate li se asociaza valori intre 0 (pentru litru) si 3 (pentru bucata).

Constante

In limbajul C++ exista mai multe tipuri de constante, dar in continuare se vor prezenta doar cele corespunzatoare tipurilor definite.

  1. Constante intregi. Ele se clasifica astfel:

Zecimale

Octale (in baza 8). Se declara precedand numarul de un 0 nesemnificativ. Spre exemplu, 0143 reprezinta constanta octala 143.

Hexazecimale (in baza 16). Ele sunt declarate prin plasarea in fata numarului a caracterelor 0X sau 0x, spre exemplu, 0x7FA este constanta hexazecimala 7FA.

Observatie O constanta intreaga este pozitiva. Daca se foloseste semnul - in fata unei constante, avem o expresie constanta (- este un operator unar), care este evaluata.

Constanta este memorata dupa un mecanism implicit (fara interventia programatorului) sau explicit. Mecanismul implicit tine cont de valoarea constantei. Spre exemplu, valorile cuprinse intre 0 si 32767 sunt memorate folosind tipul int, in timp ce valorile cuprinse intre 32768 si 2147463647 sunt memorate folosind tipul long int.

Mecanismul explicit consta in a forta ca o anumita constanta sa fie memorata intr-un anumit tip de data intreaga folosind un sufix. Spre exemplu, daca vrem ca valoarea 234 sa fie mmorata intr-un tip intreg lung, se va folosi sufixul L sau l, adica se va scrie 234L.

  1. Constante caracter. Constantele de tip caracter se incadreaza intre doua apostrofuri. Spre exemplu, 'A', '5' etc. Constantele caracter pot fi declarate si folosind o secventa escape. Secventa escape incepe cu caracterul backslash (), si se foloseste in urmatoarele cazuri:

Atunci cand vrem sa folosim codul ASCII octal sau hexazecimal al caracterului. Spre exemplu, litera 'a' are codul ASCII 97(10), 141(8) si 61(16) si deci printr-o secventa escape, constanta 'a' poate fi scrisa sub forma 141 sau x61 (in cazul folosirii sistemului hexazecimal, valoarea este precedata de caracterul 'x'.

In cazul caracterelor care nu au simboluri grafice. Spre exemplu, caracterul newline (codul 10(10)) poate fi declarat 12 sau xA. Pentru anumite caractere, in C++ exista si notatii speciale sub forma unei secvente escape. De exemplu, constanta newline se poate scrie si sub forma n.

  1. Constante sir de caractere. Se compun dintr-o succesiune de mai multe caractere incluse intre ghilimele. Sirul nul este sirul de caractere fara nici un caracter. Constantele sir de caractere pot contine si secvente escape.
  2. Constante reale. Ele se memoreaza implicit folosind tipul double. Pentru a forta memorarea intr-un tip float se foloseste sufixul F sau f, iar pentru tipul long double sufixul L sau l.

Declararea variabilelor si a constantelor cu nume

Intr-un program, pe langa datele constante, se folosesc si date variabile, care isi modifica valorile pe timpul executiei programului. Cel mai simplu mod de referire a unei date variabile este acela de a denumi data respectiva. Numele datei permite accesul la valoarea ei si schimbarea valorii atunci cand este necesar.

In cazul in care o data nu are legaturi cu alte date (de exemplu, legaturi de ordine), se spune ca ea este o data izolata. Numele datei izolate se spune ca reprezinta o variabila simpla.

Unei date izolate ii corespunde un tip. In cursul executiei programului se pot modifica valorile unei variabile simple, dar nu si tipul ei. Corespondenta dintre numele unei date variabile si tipul ei se defineste printr-o declaratie.

Declararea variabilelor simple

Declararea unei variabile simple se realizeaza respectand urmatoarea sintaxa:

tip_data nume1 [ constanta][, nume2[ constanta]] .

unde:

tip data - este tipul de data al variabilelor;

nume1, nume2 . - numele variabilelor;

constanta - valoarea initiala a variabilei.

Exemple:

int x, y=1; S-au declarat variabilele x si y de tip intreg. Variabila x nu este initializata, in timp ce variabila y este initializata cu 1;

char ok='D', lit = 65; S-au declarat doua variabile de tip caracter ok si lit. Prima variabila este initializata cu codul caracterului D, iar a doua cu valoarea 65.

float pi=4.1415; Variabila pi de tip real simpla precizie a fost initializata cu valoarea 3.1415.

Observatii

La declararea variabilelor, in locul constantelor de initializare se pot folosi expresii constante (expresii formate din constante si operatori);

Limbajul C++ nu are variabile de tip logic. In general o expresie este considerata adevarata daca ia o valoare diferita de 0 si falsa in caz contrar.

Declararea variabilelor structurate

De foarte multe ori, intr-un program este necesar sa prelucram grupe de date. Gruparea datelor se poate realiza in mai multe moduri.

Tablouri

Cel mai simplu mod de grupare a datelor il constituie considerarea datelor de acelasi tip ca formand o multime ordonata de elemente, care pot fi referite folosind indici. O astfel de grupa se spune ca formeaza un tablou, caruia i se poate asocia un nume. Tipul comun al elementelor unui tablou este si tipul tabloului. Spre exemplu, o multime ordonata de intregi, reprezinta un tablou de intregi.

Atunci cand elementele care se grupeaza intr-un tablou sunt ele insele tablouri, sunt necesari mai multi indici pentru referirea lor. Daca se foloseste un singur indice pentru referirea la elementele unui tablou, se spune ca tabloul este unidimensional. In cazul cand se folosesc mai multi indici, se spune ca tabloul este n-dimensional.

Tablourile unidimensionale se mai numesc si vectori, in timp ce tablourile cu doua dimensiuni se numesc matrici.

Un tablou, ca orice variabila simpla, trebuie declarat inainte de a fi utilizat. Declaratia de tablou trebuie sa contina tipul comun elementelor sale, numele tabloului si limitele superioare pentru fiecare indice, incluse intre paranteze drepte. Deci declaratia de tablou trebuie sa fie de forma:

tip_comun nume_tablou limita1 limita2 limitaN

unde:

tip_comun - specifica tipul comun al elementelor tabloului.

nume_tablou - indica numele tabloului.

limitaI - reprezinta numarul maxim de elemente de pe dimensiunea I; adica al I-lea indice poate lua valorile 0, 1, 2, . , limitaI-1. Limitele superioare sunt expresii constante.

Exemple

int vect[10]; - defineste tabloul vect de 10 elemente de tip int. In memorie, acestei variabile i se aloca 20 bytes (10 * 2 bytes). vect este un simbol a carei valoare este adresa primului sau element, adica adresa lui vect[0]. Deci vect[0] are ca valoare valoarea primului element al tabloului, iar vect are ca valoare adresa acestui element.

double dmat[10][20]; - defineste un tablou bidimensional de tip double. El reprezinta o matrice de 10 linii si 20 coloane fiecare si ocupa 800 bytes (10 * 20 * 4 bytes).

Referirea la elementele unui tablou se face folosind o variabila cu indici, care se compune din numele tabloului urmat de valorile indicilor, fiecare indice fiind reprezentat printr-o expresie inclusa intre paranteze drepte.

Atentie Valoarea inferioara a indicilor este egala cu 0, iar cea superioara este mai mica cu o unitate fata de limita superioara definita.

Deci, in cazul primului exemplu, elementele vectorului se vor referi prin: vect[0], vect[1], . , vect[9]. In cazul celui de-al doilea exemplu (care este o matrice) referirea se va face astfel: dmat[0][0], care este primul element al matricii, dmat[0][1], . , dmat[0][19], dmat[1][0], . , dmat[9][0], dmat[9][1], . , dmat[9][19].

Initializarea tablourilor

Declararea unui tablou poate fi insotita de initializarea sa, caz in care se foloseste un declarator de forma:

nume_tablou limita1 limitaN valoare_initiala

unde:

valoare_initiala este formata din lista valorilor initiale ale elementelor sale, separate prin virgule si inchise intre acolade. Expresiile folosite pentru initializare trebuie sa fie expresii constante.

Exemple

Declaratorul int vect[5] = ; indica un tablou de 5 intregi si initializeaza elementele acestuia cu valorile precizate.

Declaratorul int matrix[3][3] = , , }; indica o matrice si initializeaza elementele lui. Fiecare pereche de acolade din interior inchide lista valorilor initiale ale unei linii.

Observatii

Daca dimensiunea tabloului este precizata, iar in partea de initializare sunt mai puteine valori decat elementele tabloului, atunci restul elementelor sunt initializate cu 0 (toti bitii sunt pusi pe 0), dar interpretarea depinde de tipul de baza al tabloului.

Daca in lista sunt mai multe valori decat numarul de elemente al tabloului se produce o eroare la compilare (se afiseaza mesajul de eroare "Too many initializers").

Un caz aparte este cel al tablourilor de caractere, care se pot initializa cu siruri de caractere incluse intre ghilimele. In acest caz fiecare element al sirului, inclusiv caracterul '0' (terminatorul de sir atasat automat de compilator) initializeaza cate un element al tabloului. Spre xexemplu,

char tabCh[] = "Buna";

este echivalent cu

char tabCh[5]="'B','u','n','a','0');

Structuri

Un alt mod de a grupa datele este acela care ia in considerare prezenta unei relatii intre datele care se grupeaza. In acest caz datele ce se grupeaza formeaza o structura. Datele dintr-o structura pot fi de tipuri diferite.

Prin structura intelegem o multime ordonata de elemente "inrudite"; ordonarea elementelor este definita de utilizator cu scopul de a simplifica utilizarea respectivei grupe de date. Unei structuri i se asociaza un nume. De asemenea, fiecarei componente a structurii i se asociaza un nume, ce se vor folosi la referirea acestora. Un exemplu simplu de structura este data calendaristica, care este o grupa compusa din trei date inrudite: zi, luna si an. Aceste trei date nu trebuie sa fie neaparat de acelasi tip. Spre exemplu, ziua si anul pot fi intregi (tipul int), in timp ce luna poate fi de tip nenumeric, daca ea se reprezinta prin denumire.

Pentru declararea unei date structurate se foloseste urmatorul format:

struct nume_sablon


unde:

nume_sablon  - reprezinta numele tipului de data.

descriere_membru_i  - reprezinta declaratia variabilelor care fac parte din structura.

Spre exemplu, pentru a declara o structura corespunzatoare datelor calerandistice se poate utiliza urmatoarea declaratie;

struct data_calendar

;

Numele structurii se comporta ca un tip special de declarator, definit de utilizator. El nu impune rezervarea de memorie interna, dar permite declararea ulterioara a unor variabile apartinand acestui tip, variabile carora li se va rezerva spatiul de memorie necesar.

Pentru a declara variabile apartinand unui tip structura se foloseste unul din urmatoarele formate:

struct data_calendar data1, data2;

sau

data_calendar data1, data2;

Alocarea unei variabile de tip structura se poate face concomitent cu declararea tipului astfel:

struct data_calendar

data1, data2;

Memoria ocupata de o variabila de tip structura se determina pe baza tipului membrilor si a unor eventuale cerinte de aliniere in memorie. Atunci cand este necesara cunoasterea spatiului ocupat de o variabila de tip structura este indicat sa se foloseasca functia sizeof(), deoarece lungimea structurii poate fi mai mare sau cel putin egala cu suma dimensiunilor componentilor.

Accesul la un membru al unei variabile de tip structura se face dupa urmatorul model:

variabila membru

Spre exemplu, data1.luna desemneaza luna, iar data1.zi desemneaza ziua din variabila structurata data1.

O variabila de tip structura poate fi declarata si ca tablou; tablourile de structuri sunt asociate in general cu conceptul de fisier in memorie, deoarece un element contine un articol, iar intregul tablou, un fisier.

De exemplu, definirea:

struct persoana

elev[21];

aloca spatiul necesar pentru stocarea informatiilor (numele si cel mult 7 note) pentru 21 de elevi.

O constructie de forma elev[15].nume desemneaza numele celui de-al 16-elev, in timp ce elev[2].note[1] desemneaza a doua nota a celui de-al treilea elev.

Un membru al unei structuri poate fi el insasi o structura. Structurile incluse pot fi descrise in interiorul structurii de baza sau inaintea acesteia. Spre exemplu, structura

struct persoana

adresa; // numele de membru in structura exterioara

char studii[15];

} prof;

poate fi scris si sub forma:

struct domiciliu

// variabila adresa nu mai apare

struct persoana

prof;

Initializarea structurilor

Declaratia unei variabile de tip structura poate fi insotita si de specificarea unie valori initiale. Valoarea initiala a unei structuri se precizeaza printr-o lista de valori initiale, cate una pentru fiecare camp al structurii, separate prin virgule. Lista se inchide intre acolade.

Exemple

Considerand urmatoarea structura:

struct persoana


atunci

Initializarea unei variabile simple se poate realiza astfel:

struct persoana pers =

;

Initializarea unui tablou se paote face astfel:

struct persoana grup[] =

,

,

};

Declararea constantelor simbolice

Pentru a declara constante cu nume (constante simbolice) se foloseste urmatoarea sintaxa:

const [tip_data] nume valoare

unde:

tip_data - reprezinta tipul constantei; daca este absent constanta este considerata ca fiind de tip intreg.

nume - reprezinta numele asociat constantei;

valoare - reprezinta valoarea constantei.

Nota Cuvantul cheie const este numit modificator, deoarece are rolul de a modifica un enunt care, initial, are un alt sens.

Exemple

const n = 50;

const float pi = 3.1415;

const ok = 'D';

Clase de memorie

Clasele de memorie sunt asociate variabilelor pentru a evidentia momentul alocarii, tipul memoriei folosite, durata de viata si domeniul de vizibilitate. Limbajul C++ are urmatoarele clase de memorie: automatic, static, extern si register.

Clasa automatic corespunde variabilelor comune si se defineste implicit (cand nu este precizata o alta clasa) sau explicit prin cuvantul cheie auto. Variabilele din aceasta clasa se definesc numai in interiorul unui bloc. Nu sunt initializate implicit de catre calculator, deoarece ele se aloca pe timpul executiei in memoria dinamica. Variabilele automatice sunt recunoscute doar in blocul unde sunt definite, iar spatiul ocupat de ele este eliberat la iesirea din bloc. Pot fi initializate explicit la definire, dar initializarea se va face la fiecare intrare in blocul respectiv.

Clasa static corespunde variabilelor permanente pentru un bloc sau functie. Ele sunt alocate in memoria statica si se initializeaza automat la compilare cu 0, pastrandu-si continutul intre revenirile succesive in blocul respectiv. Clasa static este implicita pentru unele categorii de date (tablouri cu initializari, variabile globale, siruri de caractere) sau explicit prin cuvantul cheie static. Cand sunt definite in afara oricarui bloc, variabilele au caracter global. Cand sunt definite in interiorul unui bloc, domeniul de vizibilitate se reduce la acel bloc, desi variabilele exista si dupa iesirea din bloc. Variabilele statice se pot initializa si explicit, spre exemplu, static double t = 5.6; dar acest lucru se face tot o singura data, la compilare.

Clasa extern se defineste in raport cu impartirea unui program in mai multe fisiere si functii, compilabile separat. De regula variabilele din aceasta clasa sunt definite intr-un fisier si folosite in alt fisier. Se face distinctie intre definirea si declararea variabilelor din aceasta clasa. Pentru a fi vazute in alte functii, variabilele se definesc obligatoriu in afara oricarei functii. Utilizarea lor inainte de definire presupune ca ele sa fie in prealabil declarate prin cuvantul cheie extern. Aceasta declaratie determina ca identificarea efectiva a variabilei sa se faca in faza de linkeditare, cand sunt reunite toate fisierele. Deci, variabila externa apare intotdeauna in doua ipostaze: la definire, cand nu poarta specificatorul extern si la utilizare, cand poarta specificatorul extern. Declaratia extern pentru variabile poate apare:

in interiorul unui bloc, caz in care ele sunt recunoscute numai acolo;

in afara oricarei alte functii, caz in care ele sunt recunoscute din acel bloc pana la sfarsitul fisierului sursa.

Clasa register determina ca variabilele sa fie alocate in registrele calculatorului. Aceasta clasa se poate asocia variabilelor de tip intreg, caracter sau pointer (adresa). Cuvantul cheie prin care se indica apartenenta la aceasta clasa de memorie este register.

Intrari - iesiri standard

In C++ se foloseste foarte des notiunea de stream. Stream-ul este un concept abstract, prin care se intelege orice flux de date de la o sursa la o destinatie. Stream-ul poate fi de intrare (sursa este un fisier oarecare si destinatia este memoria) sau de iesire (sursa este memoria si destinatia este un fisier oarecare).

Exista doua cazuri speciale: cand datele sunt afisate pe monitor se scrie intr-un fisier standard numit stdout; cand datele sunt preluate de la tastatura se considera ca ele sunt citite din fisierul standard stdin. Cele doua fisiere sunt asignate automat oricarui program C++. Ele sunt deschise automat la lansarea in executie a programului si sunt inchise la terminarea executiei programului.

Aceste doua fisiere sunt considerate ca fiind fisiere de caractere (fisiere text) si din acest motiv sunt necesare anumite conversii pentru a adapta formatul extern de reprezentare al datelor la formatul intern si invers. Conversiile sunt efectuate sub controlul unor specificatori de format.

Functia printf

Afisarea pe monitor (scrierea in fisierul stdout) se realizeaza prin apelarea functiei printf. Prototipul functiei se gaseste in fisierul header stdio.h. Sintaxa apelului functiei este:

printf(format lista argumente

unde:

format - reprezinta un sir de caractere care defineste textul si formatul datelor de afisat;

lista argumente - este format din una sau mai multe expresii separate prin virgula, ale caror rezultat se va afisa.

Parametrul format contine textul care se va afisa ca atare in pozitiile indicate si specificatorii de format care definesc conversiile datelor din formatul intern in formatul extern.

Functia printf executa urmatoarele:

Accepta un sir de argumente;

Aplica fiecarui argument specificatorul de format continut in argumentul format;

Afiseaza pe ecran data formatata.

Un specificator de format are urmatoarea forma:

indicatori lungime precizie tip

unde:

Componenta

Ce controleaza sau specifica

indicator

Parametru optional. Specifica alinierea, semnul numerelor, prefixele octale si hexazecimale. Ca indicatori se pot folosi urmatoarele caractere:

Rezultatul este aliniat la stanga, completandu-se cu spatii la dreapta. In mod prestabilit alinierea se face la dreapta, completandu-se la stanga cu spatii sau zerouri.

Valorile numerice vor fi precedate intodeauna de semnul + sau minus.

spatiu Daca valoarea nu este negativa, se lasa un spatiu in locul semnului; iar valorile negative sunt precedate de semnul minus.

Indica faptul ca argumentul este convertit intr-un format alternativ. Caracterele folosite in aceasta situatie sunt:

c s d i u Fara efect

0 Adauga 0 la un argument diferit de zero

x or X Adauga 0x (sau 0X) la argument

e E f Rezultatul contine intodeauna marca zecimala, chiar daca dupa ea nu urmeaza cifre diferite de 0. In mod normal, marca zecimala apare in aceste rezultate numai daca dupa ea urmeaza o cifra.

g G Acelasi ca si E; zerourile de la urma nu sunt eliminate.

lungime

Parametru optional. Acest parametru poate fi specificat prin una din urmatoarele procedee:

direct, prin intermediul unui sir de cifre zecimale:

n Vor fi afisate cel putin n caractere. Daca valoarea de iesire are mai putin de n caractere, este completata cu spatii (la dreapta daca se foloseste indicatorul "-", la stanga in caz contrar).

0n Vor fi afisate n caractere. Daca valoarea de iesire are mai putin de n caractere, se va completa la stanga cu zerouri.

indirect, prin intermediul unui astersic (*). Daca se foloseste asteriscul drept specificator, urmatorul argument din apel (care trebuie sa fie un intreg) specifica lungimea minima a campului de iesire.

. precizie

Parametru optional. Specifica numarul maxim de caractere pentru valorile numerice intregi si numarul minim de cifre la partea zecimala pentru valorile numerice reale. Precizia prestabilita este urmatoarea:

1 pentru tipurile d,i,o,u,x,X;

6 pentru tipurile e, E, f;

toate cifrele semnificative pentru tipurile g, G;

primul caracter diferit de null pentru tipurile s;

nu are efect pentru tipul c.

Valorile acestui argument pot fi:

Pentru tipurile d,i,o,u,x, precizia este stabilita la valoarea predefinita, iar pentru tipurile e,E,f nu se afiseaza punctul zecimal;

.n Sunt afisate n caractere sau n cifre zecimale. Daca valoarea are mai mult de n caractere, ea poate fi trunchiata sau rotunjita, in functie de parametrul tip;.

Indica faptul ca lista de argumente furnizeaza precizia (la fel ca si in cazul paramterului lungime).

tip

Parametru obligatoriu. Specifica conversia de tip (vezi tabelul urmator).

Conversiile ce se realizeaza la afisarea datelor sunt definite de catre ultima sau ultimile litere ale specificatorului de format (parametrul tip). Literele care se pot utiliza pentru conversie sunt prezentate in tabelul urmator:

Caracterul de tip

Tipul intrarii

Formatul iesirii

Numerice

d

Intreg

Intreg in zecimal cu semn

i

Intreg

Intreg in zecimal cu semn

o

Intreg

Intreg octal fara semn

u

Intreg

Intreg octal fara semn

x

Intreg

Intreg hexazecimal fara semn (cu a, b, c, d, e, f) 

X

Intreg

Intreg hexazecimal fara semn (cu A, B, C, D, E, F) 

f

Real

Valoare cu semn in format [-]dddd.dddd.

e

Real

Valoare cu semn in format [-]d.dddd sau e[+/-]ddd 

g

Real

Valoare cu semn in format e sau f, in functie de valoarea si precizia data. Zerourile de la sfarsit si punctul zecimal sunt afisate daca este necesar.

E

Real

Acelasi ca si e; avand E pentru exponent.

G

Real

Acelasi ca si g; cu E pentru exponent daca este folosit formatul e.

Caractere

c

Caractere

Un singur caracter

s

Pointer sir

Afiseaza caracterele pana la intalnirea unui caracter null sau pana la precizia stabilita.


fara

Afiseaza caracterul procent (%)

Pointeri

n

Pointer la

un intreg

Stocheaza (in locatia referita prin argumentul de intrare) un contor al caracterelor scrise pana in momentul respectiv.

p

Pointer 

Afiseaza argumentul de intrare ca un pointer; formatul depinde de modelul de memorie folosit; care poate fi XXXX:YYYY sau YYYY (numai offset-ul).

Conventiile care se aplica unora dintre specificatorii de format ai functiei printf sunt urmatoarele:

Conversia %e sau %E Argumentul este convertit pentru a corespunde stilului

[-] d.ddde[+/-]ddd

unde:

o  O cifra precede punctul zecimal;

o  Numarul cifrelor de dupa punctul zecimal este egal cu argumentul precizie din specificatorul de format;

o  Exponentul contine intotdeauna cel putin doua cifre.

Conversia %f Argumentul este convertit la notatia zecimala in stilul [-] ddd.ddd unde numarul de cifre de dupa punctul zecimal este egal cu argumentul precizie (daca s-a transmis o precizie diferita de zero)

Converisa %g sau %G Argumentul este afisat in stil e, E sau f, cu numarul de cifre de dupa punctul zecimal specificat de precizie. Zerourile de la sfarsit sunt eliminate din rezultat, iar punctul zecimal apare numai daca este necesar. Argumentul este afisat in stil e sau f (cu anumite limitari) cand caracterul de conversie este g. Stilul e este utilizat numai daca exponentul care rezulta din conversie este fie mai mare decat precizie fie mai mic ca -4. Argumentul este afisat in stil E cand G este caracterul de conversie.

Converisa %x sau %X Pentru converisiile x, in iesire apar literele a, b, c, d, e si f. Pentru converisiile X, in iesire apar literele A, B, C, D, E si F.

Exemple

Fie declaratia: int x = -12;

Atunci:

printf("x = %dn", a); afiseaza: x = -12 si trece la linia urmatoare, deorece in parametru format al apelului de functie s-a folosit secventa escape newline (n);

printf("x=%10.7dn", x); afiseaza x=bb-0000012 (prin b am notat spatiul) si trece la linia urmatoare.

printf("x=%3.7dn", x); afiseaza x=-0000012 (argumentul lungime, 3, este ignorat, deoarece data este de tip intreg) si trece la linia urmatoare;

printf("x=%xn", x); afiseaza x=fff4;

Nota Numarul x este negativ si in memorie este reprezentat in cod complementar pe 2 bytes. Pentru a-l reprezenta pe -12 in hexazecimal se efectueaza diferenta dintre 216=1000(16) si 12=C(16) si se obtine astfel FFF4.

printf("x=%Xn", x); afiseaza x=FFF4;

printf("x=%un", x); afiseaza x=66524;

Nota Numarul reprezentat in memorie este considerat pozitiv si FFF4(16) convertit in zecimal da 66524 (15 x 163 + 15 x 162 + 15 x 16 + 4).

Fie declaratiile:

char a = 12, b = 'a';

unsigned char c=12, d=-12, e='x';

Atunci:

printf("%d %c %d %xn", a,b,b,b); afiseaza -12 a 97 61. Ultimele doua valori au aparut deoarece am solicitat sa se afiseze variabila b ca valoare zecimala (argumentul %d din specificatorul de format), care este 97 (codul ASCII al literei b) si ca valoare hexazecimala.

printf("%d %d %c %d", c,d,e,e); afiseaza 12 244 x 120, fara a trece la linie noua. -12 reprezentat pe un byte are valoarea zecimala egala cu 244, iar litera x are codul zecimal ASCII egal cu 120.

Fie declaratiile:

float a=67.87; double b=-98.9;

long double c=32.7; long int d=100000;

Atunci in urma executarii urmatoarei secvente de instructiuni:

printf("a=%+5.1f   nb=%lfn", a,b);

printf("c=%2Lfn",c);

printf(" d=%ldn",d);

se va afisa:

a=+67.8

b=-98.900

c=32.70

d=100000

Fie instructiunea printf("a un sirbt"); La executie se va emite un sunet scurt (secventa escape a), se va afisa textul " un sir", se va sterge caracterul 'r' (secventa escape b) si se va afisa in locul lui caracterul 't', ramanand afisat textul " un sit".

Functiile din C++ pot fi apelate atat folosind sintaxa apelului de procedura (cum au fost apelate in exemplele anterioare) cat si utilizand sintaxa apelului de functie. Atunci cand functia printf este apelata ca functie, ea returneaza numarul de caractere scrise. Spre exemplu, urmatorul program:

#include <stdio.h>

void main()


va afisa:

673


prima linie este afisata de apelul printf(" %d,a), transmis ca argument, iar dupa executie se afiseaza al doilea rand (4), care reprezinta numarul de caractere afisat.

Functia scanf

Se foloseste pentru a citi din fisierul stdin. Prototipul functie se gaseste in fisierul header stdio.h. Sintaxa apelului de functie este:

scanf(format lista_argumente

unde:

format - reprezinta un sir de caractere ce contine textul de afisat si specificatorii de format (asemanatori celor pentru functia printf);

lista_argumente - este formata dintr-unul sau mai multe argumente separate prin virgule. Fiecare argument din lista reprezinta adresa zonei de memorie unde se va transfera data citita. Adresa zonei de memorie se specifica, de regula, printr-o constructie de forma:

&nume_zona_memorie

Functia scanf executa urmatoarele operatii:

Scaneaza, caracter cu caracter, o succesiune de campuri de intrare[1];

Formateaza fiecare camp in concordanta cu specificatorul de format corespunzator, transmis prin argumentul format;

Transfera intrarea formatata in zona de memorie a carei adresa a fost transmisa ca argument dupa format.

Un specificator de format are urmatoarea forma:

lungime [F|N] [h|l|L] tip

unde:

Componenta

Ce este/ce executa


(Optional) Suprima atribuirea urmatorului camp de intrare. Daca dupa caracterul procent (%) in specificatorul de format urmeaza un asterisc (*), urmatorul camp de intrare este scanat dar nu este atribuit urmatorului argument de adresa. Data de intrare suprimata este presupusa a fi de tipul specificat de caracterul tip ce urmeaza caracterului asterisc.

lungime

(Optional) Specifica numarul maxim de caractere de citit; pot fi citi mai putine caractere daca functia scanf intalneste un "caracter alb"[2] sau neconvertibil.

F|N

(Optional) Modifica modul de interpretare implicita a adresei argumentului: N = pointer apropiat; F = pointer indepartat.

h|l|L

(Optional) Modifica tipul prestabilit al argumentului adresei astfel:

h - short int;

l - long int, daca tip specifica o conversie la un intreg;

l - double, daca tip specifica o conversie la un real

L - long double, admis numai cu conversie la un real.

tip

(Obligatoriu) Caracterul tipului de conversie (vezi tabelul urmator).

Intr-un specificator de format pentru conversie se pot folosi urmatoarele caractere:

Nota Informatiile din tabelul urmator se bazeaza pe presupunerea ca in specificatorul de format nu este inclus decat caracterul tipului de conversie.

Caracterul de tip

Intrarea asteptata

Tipul argumentului

Numeric

d

Intreg zecimal

Pointer la un intreg (int *arg)

D

Intreg zecimal

Pointer la un intreg lung (long *arg)

e,E

Real

Pointer la un real (float *arg)

f

Real

Pointer la un real (float *arg)

g,G

Real

Pointer la un real (float *arg)

o

Intreg octal

Pointer un intreg (int *arg)

O

Intreg octal

Pointer un intreg lung (long *arg)

i

Intreg zecimal, octal sau hexazecimal

Pointer la un intreg (int *arg)

l

Intreg zecimal, octal

sau hexazecimal

Pointer la un intreg lung (long *arg)

u

Intreg zecimal

fara semn

Pointer la un intreg fara semn (unsigned int *arg) 

U

Intreg zecimal

fara semn

Pointer la un intreg lung fara semn (unsigned long *arg)  

x

Intreg hexazecimal

Pointer la un intreg (int *arg)

X

Intreg hexazecimal

Pointer la un intreg (int *arg)

Caracter

s

Sir caractere

Pointer la un tablou de caractere (char arg[]) 

c

W

Caracter

Pointer la un caracter (char *arg) daca impreuna cu caracterul de tip este data si o lungime de camp (cuma ar fi, %5c). Pointer la un tablou de W caractere (char arg[W])


Caracterul %

Nu se executa nici o conversie; se stocheaza caracterul %.

Pointer (adresa)

n


Pointer la un intreg (int *arg). Numarul de caractere citite corect pana la %n este pastrat in acest intreg.

p

Format hexazecimal

YYYY:ZZZZ sau ZZZZ

Pointer la un obiect (far* sau near*). %p converteste dimensiunea implicita a adresei la modelul memoriei.

Conventiile care se aplica unora dintre specificatorii de format prezentati in tabelul anterior sunt:

Conversia unui singur caracter (%c): aceasta specifica citirea caracterului ce urmeaza, inclusiv un "caracter alb". Pentru a sari un "caracter alb" si a citi urmatorul caracter diferit de "caracterul alb", se foloseste %1s;

Conversia tabloului de caractere (%[W]c): adresa argumentului este un pointer catre un tablou de caractere (char arg[W]). Tabloul contine W elemente;

Conversia unui sir (%s): Adresa argumentului este un pointer catre un tablou de caractere (char arg[]). Marimea tabloului trebuie sa fie de cel putin (n+1) bytes, unde n este lungimea, in caractere, a sirului s. Un spatiu sau un caracter newline termina campul de intrare. Un terminator null este adaugat automat la sir si stocat ca ultim element in tablou;

Converisa realului (%e, %E, %f, %g si %G): Numerele reale din campul de intrare trebuie sa fie conform urmatorului format generic: [+/-] ddddddddd [.] dddd [E|e] [+/-] ddd, unde constructia [element] indica faptul ca elementul este optional, iar ddd reprezinta cifre (zecimale, octale sau hexazecimale). In plus, +INF, -INF, +NAN si -NAN sunt recunoscute ca numere reale (semnul (+ sau -) si scrierea cu majuscule sunt obligatorii).

Converisa tipurilor fara semn (%d, %i, %o, %x, %D, %I, %O, %X, %c, %n): un pointer catre un caracter fara semn, intreg fara semn sau intreg lung fara semn poate fi utilizat in orice conversie unde este permis un pointer catre un caracter, intreg sau intreg lung.

Converisa setului de cautare (%[], %[^]): Setul de caractere dintre parantezele drepte pot fi inlocuite cu tipul s de caractere. Adresa argumentului este un pointer catre un tablou de caractere (char arg[]). Parantezele drepte incadreaza un set de caractere care definesc sirul de cautare. Daca primul caracter din parantezele drepte este simbolul ^, setul de cautare este inversat pentru a include toate caracterele ASCII exceptand pe cele specificate intre parantezele drepte. Campul de intrare este un sir nedelimitat de "caractere albe". Functia scanf citeste campul de intrare corespunzator pana la intalnirea primului caracter care nu apare in setul de cautare (sau in inversul setului de cautare)

Exemple

%[abcd] Cauta in campul de intrare unul din caracterele a, b, c si d

%[^abcd] Cauta in campul de intrare orice caracter diferit de a, b, c si d

Setul de caractere poate fi specificat si sub forma unui domeniu de litere sau numerale, folosind o constructie de forma [prmul-ultimul]

Exemple

Pentru a "captura" toate cifrele zecimal, puteti defini setul de cautare fie sub forma %[0123456789] fie sub forma %[0-9]

Pentru a "captura" caracterele alfanumerice puteti folosi una din urmatoarele formate:

%[A-Z] "Captureaza" toate literele mari;

%[0-9A-Za-z] "Captureaza" toate cifrele si toate literele;

%[A-FT-Z] "Captureaza" literele mari dintre A si F si dintre T si Z;

La stabilirea setului de cautare folosind domenii de caractere se va avea in vedere urmatoarele reguli:

Caracterul din fata liniutei de unire (-) trebuie sa fie lexical mai mic decat cel de dupa semn.

Liniuta de unire nu trebuie sa fie primul semn sau ultimul in setul de cautare.

Caracterele de pe oricare parte a liniutei de unire trebuie sa fie capete ale domeniului si nu parti ale unui alt asemenea domeniu.

O functie scanf poate opri scanarea unui camp de intrare particular inainte de intalnirea caracterului final normal (spatiul alb) sau ea se poate termina in intregime.

Oprirea si trecerea la urmatorul camp de intrare

Functia scanf opreste scanarea, stocheaza campul de intrare curent si trece la urmatorul camp de intrare daca se intalneste una din urmatoarele situatii:

In specificatorul de format apare un caracter de suprimare a atribuirii (*) dupa caracterul %, caz in care campul curent este scanat dar nu este stocat;

Au fost citite numarul de caractere specificat prin argumentul lungime;

S-a intalnit un caracter care nu poate fi convertit sub formatul curent (spre exemplu, o litera A cand formatul este zecimal);

In campul de intrare s-a intalnit un caracter care nu apare in setul de cautare (sau apare in setul de cautare inversat).

Cand functia scanf opreste scanarea campului de intrare curent pentru unul dintre motivele prezentate mai sus, aceasta presupune ca urmatorul caracter este necitit si este fie un caracter al urmatorului camp de intrare fie primul caracter dintr-o noua operatie de citire

Terminarea citirii

Functia scanf se va termina in urmatoarele conditii:

Urmatorul caracter din campul de intrare este in conflict cu caractererul corespunzator diferit de "spatiul alb" din sirul de formatare;

Urmatorul caracter din campul de intrare este EOF;

Sirul de formatare (argumentul format) s-a terminat.

Exemple

Fie declaratiile int a,b;

Atunci:

scanf("%d, &a); citeste variabila a;

scanf("%1d", &a); citeste prima cifra a numarului tastat. Deci daca se tasteaza 4562, variabila a retine doar 4.

scanf("%1d %*1d %1d, &a, &b); citeste prima si a treia cifra a numarului introdus. Astfel daca se introduce 357, variabila a va retine 3, iar variabila b va retine 7. Cifra 5 este citita dar nu este memorata.

Fie declaratiile: char a,b;

Atunci:

Secventa

scanf("%c", &a);

printf("%c %dn", a, a);

va afisa:

a 97

daca s-a introdus caracterul a; si


daca s-a introdus 0. Functia printf afiseaza de doua ori variabila a, prima data caracterul, iar a doua oara codul caracterului introdus.

scanf("%c %c", &a, %b); Sa consideram ca se introduc caracterele obbbbbj, unde prin b s-a notat prezenta unui spatiu, atunci dupa executarea citirii variabila a va retine caracterul 'o', iar variabila b va retine caracterul 'j'. Spatiile din campul de intrare sunt sarite, deoarece cele doua formate de citire sunt separate prin spatiu (caracter alb) si la citire se sar toate spatiile intalnite.

scanf("%c%c", &a,&b); Presupunand ca se introduc caracterele obbbbbj, atunci a va retine caracterul 'o', iar b va retine caracterul ' ' (spatiu). Cele doua formate de citire nu sunt separate printr-un spatiu, si deci primul caracter spatiu din campul de intrare este retinut; celelalte caractere din campul de intrare sunt ignorate.

scanf("1%c",&a); Daca, campul de intrare contine caracterele 12, atunci a va retine cifra 2 (caracterul 1 este cel asteptat si este sarit), iar daca se introduce 21, atunci a nu se citeste, intrucat primul caracter asteptat este 1 si intrarea contine 2.

Fie decalaratiile float a; double b; long double c;

Atunci:

scanf("%f %lf %LF",&a,&b,&c); Daca se tasteaza 2.5 2.7 4.3, a va retine 2.5, b va retine 2.7 si c va retine 4.3.

scanf("%f%lf",&a,&b); Daca se introduc valorile 2 si 3, atunci a retine 2.0 si b retine 3.0;

scanf(%3f",&a); Daca se tasteaza 1.25, a retine 1.2;

scanf("%f 1 %lf, &a,&b); Daca se tasteaza valorile 1.2 1 -1.7, a retine 1.2 si b retine -1.7; iar daca se tasteaza 1.2 7.8, atunci se citeste numai a.

Alte functii de intrare/iesire

Functia getchar

Are rolul de a citi un caracter din stdin si se apeleaza folosind sintaxa:

getchar();

Citirea propriu-zisa are loc dupa apasarea tastei Enter. Functia getchar returneaza caracterul citit, dupa convertirea acestuia intr-un intreg fara semn.

Functia putchar

Are rolul de a scrie un caracter in stdout. Functia returneaza caracterul scris, o valoare de tip intreg. Sintaxa de apelare a functiei este:

putchar(variabila

Nota Desi le-am numit functii, putchar si getchar sunt macrocomenzi si sunt definite in fisierul header stdio.h..

Functia clreol

Functia are prototipul in fisierul header conio.h si are rolul de sterge caracterele ce se gasesc pe linia curenta (linia in care se afla cursorul) incepand din pozitia cursorului. Dupa stergere, pozitia cursorului nu se modifica. Functia nu returneaza nici o valoare. Sintaxa apelului functiei este:

clreol();

Functia clrscr

Functia are prototipul in fisierul header conio.h si are rolul de a sterge ecranul. Supa stergere, cursorul se pozitioneaza in coltul din stanga sus (in prima coloana a primei linii - coordonatele 1,1). Functia nu retirneaza nici o valoare. Sintaxa apelului functiei este:

clrscr();

Functia gotoxy

Functia are prototipul in fisierul header conio.h si are rolul de a pozitiona cursorul in punctul de coordonate specificat prin argumente (primul argument reprezinta coloana, iar al doilea reprezinta linia). Daca coordonatele sunt incorecte (in afara ferestrei), functia nu realizeaza nimic. Functia nu returneaza nici o valoare. Sintaxa apelului functiei este:

gotoxy(coloana linie

Functiile wherex si wherey

Functiile au prototipul in fisierul header stdio.h. Functia wherex returneaza o valoare intreaga din intervalul 1 la 80 care reprezinta coordonata x (coloana) a pozitiei curente a cursorului (din fereastra curenta de text), iar functia wherey returneaza o valoare intreaga din intervalul 1 la 25, 1 la 43 sau 1 la 50 (in functie de parametrii stabiliti ai ecranului) care reprezinta coordonata y (linia) a pozitiei curente a cursorului. Sintaxa de apel a functiilor este urmatoarea:

wherex()

wherey()

Functiile getch si getche

Prototipurile functiilor se gasesc in fisierul header conio.h. Aceste functii au rolul de a citi un caracter introdus de la tastatura. Caracterul este citit imediat ce a fost tastat (nu se asteapta apasarea tastei Enter). Deosebirea dintre ele contsa in faptul ca functia getch citeste caracterul fara ecou (caracterul tastat nu apare pe ecran), in timp ce functia getche citeste caracterul cu ecou. Sintaxa de apel a functiilor este:

getch()

getche()



Intr-o functie scanf, una din urmatoarele este considerat ca fiind camp de intrare:

Toate caracterele pana la urmatorul "caracter alb" (fara a-l include);

Toate caracterele pana la primul care nu poate fi convertit folosind specificatorul de format curent (cum ar fi o cifra 8 sau 9 in formatul octal);

Toate cele n caractere, unde n este lungimea specificata a camoului.

"caracter alb" (whitespace) - caracterele spatiu (' '), tab orizontal (t), tab vertical (v), newline (n) si retur de car (r) sunt considerate "caractere albe", deoarece nu au reprezentare grafica.

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 }