Sunteți pe pagina 1din 26

C+

Curs 1

OO

1.

Redactarea programelor C
1.1. Generaliti

Mediul Borland C a fost extins la Visual C i C++ Builder, adaptate programrii orientate obiect i interfeei grafice Windows 95. Limbajul C a fost extins la C++ permind aplicarea conceptelor programrii prin abstractizarea datelor i programrii orientate spre obiecte. Limbajul C++ ofer n plus fa de limbajul C unele faciliti noi. Un avantaj important l constituie noiunea de clas (prin care se definete un TAD), iar acestea pot forma o ierarhie, deci putem vorbi de o programare orientat obiect. Fiierele surs pot avea extensia C, CP, CPP, H.

1.2.

Structura unui program

Un program C este conine o funcie principal (main) i eventual alte funcii secundare, apelate de ctre funcia principal, situate la acelai nivel (far imbricare). Structura unui program este urmtoarea: Directive de procesare, # Declaraii de date globale, Declaraii de funcii, sau doar [ Antete de funcii (prototipuri) ; ] Funcia principal; [ Descrierea funciilor (implementri) ] Se observ c descrierea funciilor se poate face fie n ntregime naintea funciei main fie doar prototipul nainte, iar corpul dup aceasta. Exemplu:
# include class Inele { }; class Sarpe { }; void main (void) { Sarpe S( 5, 8, 'O',200, 0, 0, 1); { Sarpe A(40, 8, 'A', 0, -35, +20), P(70, 8, 'P', 0, +35, +20), Q(40, 8, 'Q', 0, +35, -20), O(70, 8, 'O', 0, -35, -20); } char Rasp; randomize(); do { while (!kbhit() && !S.Bara() ) S.Tara(); if (!S.Bara()) { Rasp=toupper(getche()); if (Rasp!=0x1b) { S.Coteste(Rasp); S.Tara (); } if (S.Lungime()<180) { S.Creste (); S.Viteza(); } } } while ( (Rasp!=0x1b) && (!S.Bara()) ) ; getche(); closegraph(); }

24.02.08

C+

Curs 1

OO

Dac n limbajul C declaraiile erau scrise nainte de instruciuni, n C++ ele pot fi scrise oriunde. Comentariile se scriu ntre caracterele /* i */ : /* Comentariu */ sau la nivelul unui rnd dup caracterele // : ... // Comentariu

nainte de compilare, un program este precompilat, de ctre un preprocesor, care permite includerea unor fiier surs, definirea i apelul unror macrouri, precum i o compilare condiionat. Includerea unui fiier surs (*.h sau *.cpp) se realizeaz prin directiva include astfel: sau Exemplu: #include <stdio.h>; #include <iostream.h>; #include <conio.h>; // Standard Input Output Header // Input & Output Stream // Console Input, Console Output # include specificator_fiier # include <specificator_fiier> // pentru fiiere utilizator // pentru fiiere standard

(Crt)

Constantele simbolice se definesc cu ajutorul directivei define astfel: #define Nume_constant ir_caractere Exemplu: #define Pi 3.141592 // nlocuiete Pi cu 3.141592 O constant simbolic poate fi redefinit sau anulat (#undef Nume_constant). // fr =

24.02.08

C+

Curs 1 1.3. Funcii

OO

O funcie este format dintr-un antet i un bloc (corp). Ea poate fi apelat dac a fost definit n ntregime sau doar antetul su. Antetul unei funcii are urmtorul format: Tip Nume (List_parametri_formali) unde:

Tip este tipul valorilor funciei (codomeniul); Nume este un identificator (liter urmat eventual de alte litere sau cifre); List_parametri_formali conine parametrii formali separai prin , (virgul).

Exemplu: int Min (int a, int b) { if (a<b) return a; else return b; } Observaie. Prototipul unei funcii este antetul acesteia urmat de ; . Corpul unei funcii are urmtoarea structur: { Declaraii Instruciuni } Exemple: int Cmmdc(int a, int b) { if (b= =0) return a; else return Cmmdc(b,a % b); } int cmmdc(int a, int b) { int rest; do { rest=a%b; a=b; b=rest; } while (rest!=0); return a; } // Cmmdc(a,b)

// Cmmdc(b,a Mod b); // cmmdc(a,b)

// rest 0; sau while (rest) ;

24.02.08

C+

Curs 1 1.4. Elementele limbajului

OO

Alfabetul limbajului C este format din litere mari i mici, cifre i caractere speciale (\n=CrLf, \t=Tab). Identificatorii sunt formai din liter_ urmat eventual de litere_ sau cifre (caracterul _ poate fi utilizat pe post de liter). Exist cuvinte cheie care pot fi utilizate doar n contextul definit (de exemplu case, float, int, long, return, short, static, structure, switch, union, unsigned, void). Tipurile predefinite sunt urmtoarele:

int (Z [-215,215-1]), short (Z [-215,215-1]), long (Z [-231,231-1]), unsigned (N [0,216-1]), float (Q* [-3.410-38, 3.41038]), double (Q* [-1.710-308, 1.710308]), char (cod ASCII).

Constantele numerice pot fi zecimale (123, 123Long, 111long), octale (077), hexa (0xabba, 0XBABA), sau flotante (2.71828, 6.023e23, 6.023E23). Constantele de tip caracter pot fi afiabile ('A', '0', '"') sau funcionale ('\b'=Backspace, '\r'=Return, '\n'=Newline, '\''=Apostrof, '\\'=Backslash, '\v'=Verticaltab, '\f'=Salt de pagin, '\0'=Null. Constantele de tip ir de caractere se scriu ntre ghilimele ("Mesaj"). Declararea variabilelor simple se face astfel: Tip List_identificatori_de_variabile; Exemplu: int i, j; float x,y; char c;

Declararea unui tablou se realizeaz astfel: Tip Nume_Tablou [d1] [d 2] ... [di] ... [dn]; Exemple: float x[100]; int a[2][2]; x[0]=1; ... x[99]=100; a[0][0]=1; a[1][0]=3; a[0][1]=2; a[1][1]=4; // x este pointer la primul element // a conine adresa tabloului // indicele ki: 0 ki<di

24.02.08

C+

Curs 1

OO

2.

Variabile
Variabilele pot fi statice sau dinamice, locale sau globale.

2.1.

Variabile globale

Declararea unei variabile globale se face la nceputul unui fiier surs (n afara tuturor funciilor) i poate fi referit pn la sfritul programului (n orice funcie). Utilizarea lor din alte fiiere surs se poate face doar dac acestea sunt declarate (acolo) ca variabile externe: extern declaraie_variabil Exemplu: VExterne.Cpp: #include <stdio.h>; #include "Fs.h"; float Pi=3.14; // variabil global void main (void) { float r; printf(" Dati raza cercului : "); scanf("%f",&r); printf(" Lungimea cercului = %f \n",LungC(r)); scanf ("\n"); } Fs.h: float LungC (float r) { extern float Pi; return 2*Pi*r; }

// variabil extern

2.2.

Variabile locale

O variabil local este utilizabil (vizibil) doar n modulul sau n funcia n care a fost definit, putnd fi alocat dinamic (variabil automatic, alocat pe stiv) sau static (variabil static, alocat n zona de memorie a programului). Implicit o variabil local este automatic, iar dac dorim ca aceasta s fie static, declaraia ei trebuie s fie precedat de cuvntul cheie static: static declaraie_variabil Funciile au implicit atributul extern, deci pot fi apelate din alte fiiere surs, dar dac dorim ca acest apel s nu fie permis, atunci se vor declara statice prin scrierea cuvntului cheie static naintea antetului acesteia ( static antet_funcie ).

24.02.08

C+

Curs 1

OO

Exemplu: VLocale.Cpp: #include <stdio.h>; #include "Sursa.h"; void main (void) { int n; printf(" Dati un numar < 256 : "); scanf("%d",&n); printf(" Valoarea in Hexa este "); Print_Hexa(n); // Print_Byte(n/256); Print_Byte(n%256); !? scanf ("\n"); } Sursa.h: static int Cifra_Hexa (int s) { static int c; if (s<10) c=s+'0'; else c=s+'A'-10; // c=s+'0'+7 return c; } static void Print_Byte(int b) { static int H = b / 16; static int h = b % 16; printf("%c%c",Cifra_Hexa(H),Cifra_Hexa(h)); } void Print_Hexa(int z) { static int HH = z / 256; Print_Byte(HH); static int hh = z % 256; Print_Byte(hh); }

2.3.

Variabile de tip registru

Exist posibilitatea ca ntr-un registru liber s fie alocat o variabil care este utilizat frecvent, penntru a mri viteza de execuie. n registrii se pot memora parametri funciilor sau variabile automatice de tip int, char sau pointer. Pentru ca o variabil s fie memorat ntr-un registru, declaraia ei trebuie s fie precedat de cuvntul cheie register: register declaraie_variabil Exemplu: float f ( register int i ); { register int n; register char c; ... }

24.02.08

C+

Curs 1 2.4. Iniializarea variabilelor

OO

Variabilele simple se iniializeaz printr-o declaraie de forma: Tip Identificator_de_variabil = Expresie Exemple: float f ( int n ); { int i=1; int m=n/2; ... }

Tablourile se iniializeaz printr-o declaraie de forma: Tip Ident_tablou [n] = {Expresie1, Expresie2,..., Expresiem} unde mn, iar dac n este omis, atunci n=m. Exemple: int X [13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int Y [ ] = {1,2,3,4,5,6,7}; int A[3][ ] = { {1,2,3},{4,5},{6} }; // {{1,2,3},{4,5,?},{6,?,?}}

irurile de caractere se iniializeaz astfel: char Ident_string [n] = "ir_caractere" iar n poate fi este omis. Exemple: char Mesaj [100] = " Zarurile vor fi aruncate ..."; char Alt_Mesaj [] = {"...Zarurile sunt aruncate ... !"}; char Ult_Mesaj [] = " Zarurile au fost aruncate ! " ;

24.02.08

C+

Curs 1

OO

3.

Expresii

O expresie este format din operanzi, operatori i paranteze pentru prioritate, i are o valoare i un tip. Asocierea operatorilor se face de la stnga la dreapta, cu excepia operatorilor unari i de atribuire, care se asociaz de la dreapta la stnga. Operanzii pot fi: constante, constante simbolice, variabile simple sau structurate (tablouri, structuri, sau elemente ale acestora), funcii sau apeluri de funcii.

3.1.

Operatori

Operatorii, n ordinea descresctoare a prioritii sunt urmtorii:


] ! ~ ++ (tip) sizeof

(unar) + (unar) * / + << >> < <= == != & ^ | && || ?: (ternar) = *= ,

* (unar) & (unar) %

>=

>

/=

%=

+=

= <<= >>= &=

^=

|=

Operatorii aritmetici sunt urmtorii: + , , * , / , % (mod), pentru adunare, scdere, nmulire, ct (mprire), rest. Exemple: int i, j ; int cat = i / j; int rest = i % j; float a=5,b=2; float c=a/b; // 13 / 5 = 2 // 13%5 = 3 // 5 / 2 = 2.5

24.02.08

C+

Curs 1
Operatorii relaionali sunt urmtorii:

OO

< , <= , > , >= , == , != , pentru < , , > , , = , , rezultatul (valoarea expresiei relaionale) fiind 1 pentru adevrat, iar 0 pentru fals. Exemple: int i=1; int j=2 ; ... i<=j ... ... i==j ... Operatorii logici sunt: ! (Not) , && (And) , | | (Or). Exemplu: Xor = !x&&y || x&&!y // x Xor y = Not x And y Or x And Not y Deoarece nu exist tipul boolean, valoarea fals este reprezentat prin 0, iar adevrat prin orice valoare diferit de 0. Operaii pe bii se pot realiza utiliznd urmtorii operatori: ~ (complementul fa de FFFF, schimb fiecare bit), << (deplasare la stnga), >> (deplasare la dreapta), & (And bit cu bit), ^ (Xor bit cu bit), | (Or bit cu bit). Exemplu: // ASCII #include <stdio.h>; #include <conio.h>; int Cifra(int c) // cifra hexa: 01...9AB...F { if (c<10) return c | '0'; else return (c-9) | '@'; } int c; void main (void) { textbackground(BLUE); textcolor(WHITE); clrscr(); do { printf(" Dati un caracter #Esc : "); c=getch(); printf(" ... Hexa = %c%c \n",Cifra(c>>4),Cifra(c&0xF)); } while (c!=0x1B); } // == 1 // == 0

24.02.08

C+

Curs 1
Operaia de atribuire se realizeaz astfel: Var = Expresie; // expresie de atribuire cu tipul Var Exist posibilitatea realizrii de atribuiri multiple prin expresii de forma: Varn = ... = Var2 = Var1 = Expresie; Mai exist o facilitate utiliznd o operaie de atribuire de forma: Var = Expresie; // unde

OO

{+, , *, /,%, &, ^, | , <<, >>}

avnd semnificaia: Var = Var Exemple: v = e = 2.7181828; x += dx; y = dy; n <<= k; // v = (e = 2.7181828); // x = x+dx; y = y dy; // n = n*2k Expresie;

Operatorii de incrementare / decrementare sunt ++ respectiv prin care se mrete, respectiv se micoreaz, valoarea operandului cu unu. Acetia pot fi utilizai:

n forma prefixat: ++ operand ; respectiv operand ; respectiv operand ; // valoarea expresiei, dup aplicarea lor // valoarea expresiei, nainte de aplicare n forma postfixat: operand ++;

Exemple: a = ++b; a = b ; // b=b+1; // a=b; a=b; b=b1;

Operatorul de conversie explicit (expresie cast) realizeaz conversia unui operand ntr-un tip precizat astfel: (Tip) operand ; Exemplu: int a=12; int b=5; float c=a/b; printf(" a Div b = %5.2f \n", c); c=(float)a/b; printf(" a / b = %5.2f \n", c); // a Div b = 2.00 // a / b = 2.40

24.02.08

10

C+

Curs 1
Conversiile implicite (realizate automat) se fac astfel:
a) charint, b) floatdouble, c) (double,*)(double,double)=double, d) (long,*)(long,long)=long, e) (unsigned,*)(unsigned,unsigned)=unsigned.

OO

Dac n C conversia explicit se poate efectua prin (tip) expresie, n C++ se poate realiza i prin tip (expresie). Exemplu:
#include <stdio.h>; #include <conio.h>;

#include <iostream.h>;
void main (void) {

char c; cout << " Dati c : "; cin >> c; cout << " Car. c = " << c << endl; cout << " Val. c = " << (int) c << endl; cout << " Val. c = " << int (c) << endl; void *p; p=&c; cout << " Val. c = " << *(int *) p << endl; typedef int * Pint; cout << " Val. c = " << * Pint (p)<< endl; getch();

// Coninutul adresei // la care se afl un ntreg

Operatorul pentru dimensiune (sizeof) determin lungimea n octei a unei variabile simple sau structurate, precum i a unui tip de dat: sizeof (Data) ; Exemplu: int a; printf(" SizeOf int = %d \n", sizeof(a)); // SizeOf int = 2 printf(" SizeOf short = %d \n", sizeof(short)); // SizeOf short =2 Operatorii condiionali ?

: sunt utilizai n construcii de forma: : Expresie3


;

Expresie1 ? Expresie2

Valoarea expresiei rezultat este Expresie2 dac Expresie1 este nenul, altfel este Expresie3 . Exemplu: Max = a>b ? a : b; // Dac a>b Atunci Max=a Altfel Max=b;

24.02.08

11

C+

Curs 1

OO

Operatorul virgul permite gruparea mai multor expresii ntr-una singur, aceasta avnd valoarea ultimei expresii: Expresie1 , Expresie2 , ... Exemplu: float x0,y0,r, x, y; printf(" Dati C(x0,y0,r) = "); scanf("%f %f %f",&x0,&y0,&r); // Cercul C printf(" Dati P(x,y) = "); scanf("%f %f", &x, &y ); // Punctul P printf(" %s",((x-=x0, y-=y0, x*=x, y*=y, x+y)==r*r) ? "P e pe C" : "P nu e pe C"); Operatorul de rezoluie (::) se utilizeaz cnd dorim s referim o variabil global redefinit ntr-o funcie, astfel:

, Expresien ;

:: Variabil
Exemplu:
#include <conio.h>; #include <iostream.h>;

unsigned x; char y[10]; int i=99; void main (void) { unsigned x; int y; cout << " Dati cout << " Cele cout << " Cele cout << " Cele

// Variabile Globale (::)

clrscr(); // Variabile Locale doua doua doua doua numere numere numere numere : = = = "; cin >> ::x " << ::x << ' " << ++::x << ' " << ::x << ' >> x; ' << x << endl; ' << --x << endl; ' << x << endl;

cout << " Dati nume,varsta : "; cin >> ::y >> y; cout << " Numele si varsta = " <<

::y << ',' <<

y << endl; getche();

for (int i=11; i<::i; ::i-=11) cout << i <<"::"<< ::i << endl; }

24.02.08

12

C+

Curs 1

OO

4.

Operaii de intrare/ieire

n limbajul C nu exist instruciuni de intrare/ieire, aceste operaii ralizndu-se prin funcii aflate n bibliotecile standard. Implicit, unui program i se ataeaz fiierele stdin (intrare standard), stdout (ieire standard), stderr (ieire standard pentru erori), stprn (ieire pentru imprimant), stdoux (intrare/ieire serial).

4.1.

Funcia Printf

Aceast funcie realizeaz afiarea dup un ablon, avnd urmtorul format: int printf (Control [, List_Expresii]);
.

unde Control este ablonul (formatul) scris sub forma unui ir de caractere care conine mesaje i specificatori de format corespunztori valorile expresiilor din list. Un specificator de format se descrie astfel:
% [] [m[.n] ] [l]

[f]

unde: [] [m] [.n] [l] [f]

- determin alinierea la stnga, implicit fiind la dreapta, - precizeaz lungimea cmpului,


- precizeaz lungimea prii zecimale, respectiv numrul de caractere,

- conversia se va efectua din format intern long, - determin tipul conversiei precizat prin unul din urmtoarele caractere:

d o x X u c s f e E g G

- int zecimal extern, - int octal extern, - int hexa extern (0...9,a...f), - int Hexa extern (0...9,A...F), - unsigned zecimal extern (fr semn), - binar intern caracter (char), - string (ir de coduri ASCII terminat cu \0=NUL) ir de caractere, - float sau double zecimal extern [m[.n] ], implicit n=6, - float sau double zecimal extern forma exponenial (b*10e), - float sau double zecimal extern forma exponenial (b*10E), - se alege dintre variantele f sau e reprezentarea minim, - se alege dintre variantele f sau E reprezentarea minim.

Funcia printf returneaz numrul de octei afiai dac operaia a decurs corect, iar n caz contrar -1 (EOF): if (EOF = = printf (Control , List_Expresii)) ... eroare ... ;

24.02.08

13

C+

Curs 1

OO

Exemplu: short Zi=1; char Luna[]="Ianuarie"; unsigned An=2003; float Ina=1.8; printf(" Zi:%d, Luna:%3.3s., An:%u \n",Zi,Luna,An); // Zi:1, Luna:Ian., An:2003 printf(" Inaltime(m):%4.2f \n",Ina); // Inaltime(m):1.80

4.2.

Funcia Scanf
int scanf (Control , List_Adrese_de_Variabile );

Aceast funcie realizeaz citirea datelor dup un ablon, avnd urmtorul format:
.

unde Control este ablonul (formatul) scris sub forma unui ir de caractere care conine eventual texte (obligatorii la intrare) i specificatori de format corespunztori tipurilor variabilelor din list. Specificatorii de format sunt asemntori celor prezentai la funcia printf, realiznd ns conversiile inverse:

% [*] [m] [l]

[ f ] , unde:

[*] [m] [l] [f]

- un caracter opional, - precizeaz lungimea maxim a cmpului, - conversia se va efectua din format intern long, - determin tipul conversiei precizat prin unul din urmtoarele caractere:

d o x X u c s f

- int zecimal extern, - int octal extern, - int hexa extern (0...9,a...f), - int Hexa extern (0...9,A...F), - unsigned zecimal extern (fr semn), - binar intern caracter (char), - string ir de caractere terminat la spaiu sau dimensiunea m, - float flotant extern.

Adresele variabilelor de intrare sunt date prin operatorul de adrese & plasat naintea identificatorului fiecrei variabile (simple!): [&] Variabil(nu este necesar pentru tablouri). Exemplu: short Zi; char Luna[13]; unsigned An; float Ina; scanf(" %d %s %u %f ", &Zi, Luna, &An, &Ina);
// 1 Ianuarie 2003 1.80

Funcia scanf returneaz numrul de cmpuri citite corect. Sfritul de fiier (Ctrl/Z) poate fi verificat prin valoarea returnat EOF: if (EOF = = scanf (Control , List_Expresii)) ... Sfrit ... ; Exemplu: if (EOF==scanf(" %d %s %u %f", &Zi, Luna, &An, &Ina)) printf("Ctrl/Z"); else { printf(" Zi:%d, Luna:%3.3s., An:%u \n",Zi,Luna,An); printf(" Inaltime(m):%4.2f \n",Ina); }

24.02.08

14

C+

Curs 1 4.3. Funcia PutChar

OO

Aceast funcie realizeaz tiprirea unui caracter al crui cod ASCII este precizat printr-o expresie: putchar (Expresie);

4.4.

Funcia GetChar

Aceasta, returneaz codul ASCII al caracterului citit (pentru Ctrl/Z EOF=-1): getchar ( ); Exemplu: char c; do putchar (((c=getchar())>'Z')? c^' ' : c); while (c!='.');
Litere mici in Litere MARI ! LITERE MICI IN LITERE MARI ! Se termina la . (Punct) SE TERMINA LA . getchar putchar getchar putchar // Litere mici LITERE MARI // se termin cu .

4.5.

Funcia GetChe

Funcia returneaz codul caracterului citit direct i l afieaz (n ecou): int getche ( ); Exemplu: do putchar (((c=getche())>'Z')? c^' ' : c); while (c!='.');
L L iI tT e E r Re E mMiI cC iI i In N L L iIt T eE r Re E M MA A RRI I . . // se termin cu .

4.6.
afiat:

Funcia GetCh

Aceast funcie returneaz codul caracterului citit (direct) fr ca acesta s mai fie int getch ( ); Exemplu:
int ReadKey() { int car=getch(); if (car) return car; else return getch(); }

// a fost apsat o tast functional (0,cod ASCII)

24.02.08

15

C+

Curs 1 4.7. Funcia KbHit

OO

Aceast funcie returneaz starea tastaturii (ne indic daca a fost apsat o tast): int kbhit ( ); Exemplu:
# include <conio.h> # include <stdlib.h> # include <stdio.h> # include <iostream.h>

void main () { char c[8],i=-1; cout << " Password : "; do {while (!kbhit()) { putchar(random(27)+'A'); putchar('\b'); } if ((c[++i]=getch())!='\r') putchar('*'); else putchar(' '); } while (c[i]!='\r'); c[i]=0; cout << " Password = " << c; }

kbh // kbhiiittt()=KeyPrresssed kbh KeyPressed KeyPes ed

getch();

4.8.
string:

Funciile PutS, GetS

Acestea citesc (inclusiv spaiile i taburile pn la Enter), respectiv tipresc un char *gets (char *s); Exemplu:
#include <stdio.h>
#include <conio.h>

int puts (const char *s);


#include <iomanip.h>

void main () { puts(" Dati o propozitie ... <Cr> "); char s[100]; gets (s); int i=0; do cout <<hex<<setw(3)<<int(s[i]); while (s[++i]); }

#include <iostream.h>

clrscr(); getche();

Dati o propozitie ... <Cr> I/E pt. str. 20 49 2f 45 9 70 74 2e 20 73 74 72 2e 9 20 20

4.9.

Stream-uri

Dispozitivelor standard de intrare-ieire li s-au ataat streamurile (flux de date) standard cin (pentru stdin) i respectiv cout (pentru stdout), care permit efectuarea operaiilor de intrare-ieire aplicnd operatorul >> streamului cin, respectiv << streamului cout. Ierarhiile necesare sunt n fiierul iostream.h . Exemplu:
#include <iostream.h>
void main (void)
#include <stdio.h>; #include <conio.h>;

{ int i;

cout cout char s[10]; cout cout

<< << << <<

" " " "

Dati Val. Dati Sir.

i i s s

: = : =

"; cin >> i; " << i+1 << endl; "; cin >> s; " << s << endl;

// endl=<Cr> getch();

24.02.08

16

C+

Curs 1

OO

5.

Instruciuni
n limbajul C instruciunile se termin cu ; mai puin cele care se termin cu }.

5.1.

Instruciunea Vid

Aceast instruciune se utilizeaz n situaia n care este nescerar prezena unei instruciuni i care nu trebuie s execute nimic:
.

5.2.

Instruciunea Expresie

Instruciunea are formatul general: . Exemple: y = (x+1)*(x-1); f(x,y); c++; --c;


// Atribuire: v=Expresie; // Apel de funcie: f(p1, p2,..., pn); // Incrementri/Decrementri (Pre/Post fixate)

Expresie

5.3.

Instruciunea Compus

Aceasta este format dintr-o succesiune de declaraii (proprii) i instruciuni, incluse ntre acolade:

{
Declaraii Instruciuni

}
Exemplu: { int i;
// Variabil local instruciunii; // i se poate utiliza doar n aceast instruciune compus; // Dup } nu se pune ;

f (i); } ;

24.02.08

17

C+

Curs 1 5.4. Instruciunea If


. if (expresie) instructiune1; [ else instructiune2; ]

OO

Structura alternativ cu una sau dou ramuri poate fi scris astfel:

Exemplu: { P(x,y) I-ul Cadran (Dac x sau y este negativ se schimb semnul) float x, y; printf(" Dati P(x,y) = "); scanf("%f %f", &x,&y); // Punctul P if (x>0) if (y<0) y=-y; // C4 else_; (instruciunea vid) else { x=-x; // C2 sau C3 (x) if (y<0) y=-y; // C3 (y) } printf(" x=%5.2f, y=%5.2f \n", x,y) ; } // trebuie pus pentru C1 instruciunea vid: else_;

5.5.

Instruciunea Switch

Pentru structura alternativ cu mai multe ramuri Case (Select) se utilizeaz instruciunea Switch: switch (expresie)
{ case c1 : secven instructiuni 1 case c2 : secven instructiuni2
...

[ break; ] [ break; ]

case cn : secven instructiunin [ break; ] [ default : secven instructiuni n+1 ]


}

Instruciunea break realizeaz saltul la sfritul instruciunii switch, iar n absena ei se vor executa i urmtoarele secvene de instruciuni. Exemplu: while (scanf("%d %c %d",&o1,&o,&o2)!=EOF) { switch (o & 0XFF) { case '+' : v=o1+o2; break; case '-' : v=o1-o2; break; case '*' : v=o1*o2; break; case '/' : v=o1/o2; break; default : printf (" Op. necunoscut!%c\n",o); } printf ("%d%c%d = %d\n",o1,o,o2,v); }
// O1 o O2

// Ctrl/Z

24.02.08

18

C+

Curs 1

OO

Exemplu:
#include <iostream.h> #include <conio.h> void main (void) { int l,a; cout << " Dati anul : "; cin >> a; cout << " Numar de zile ... " << endl; for (l=1; l<=12; l++) { cout << l << " : "; switch (l) { case 2 : cout << (a&3 ? 28 : 29); break; case 4 : case 6 : case 9 : case 11 : cout << 30 ; break; default : cout << 31 ; } cout << endl; } }

// Nr.Zile / lun \\

// break; getche();

5.6.

Instruciunea While
while (expresie) instructiune;

Structura repetitiv pretestat poate fi scris astfel: Exemplu: // Program Exemplu While #include <stdio.h>; int i,n; long f; // f:=n! void main (void) { printf("\n Dati n : "); scanf ("%d", &n); i=(f=1)+1; while (i<=n) f*=i++; printf(" %d! = %u \n",n,f); i=(f=1); while (i< n) f*=++i; printf(" %d! = %u \n",n,f); scanf("\n"); }

5.7.

Instruciunea Do_While
do instructiune while (expresie);

Structura repetitiv posttestat poate fi scris astfel: Exemplu: do { r=a%b; a=b; b=r; } while (r); cmmdc=a; if (b) do r=a%b, a=b, b=r; while (b); cmmdc=a;// // b!=0 !!! sau

24.02.08

19

C+

Curs 1 5.8. Instruciunea For

OO

Structura repetitiv Pentru (!) poate fi descris astfel: for (expresie1; expresie2; expresie3) instructiune ; Instruciunea are acelai efect ca i: expresie1; while (expresie2) { instructiune; expresie3 ; } i invers (vezi while): for (;expresie;) instructiune ; Structura Repet secv._instr. PanCnd(cond): for ( ; ; ) {
secv._instr if (cond) break ;

} Exemplu: int i,n; long f; printf("\n Dati n : "); scanf ("%d", &n); f=1; for ( i=1 ; i<=n; i++) f*=i; f=1; for ( i=1 ; i<=n; ++i) f*=i; f=i=1; for ( ; i<=n; i+=1) f*=i; for (f=i=1; i<=n; ) f*=i++; // f:=n! printf(" %d! = %u \n",n,f); printf(" %d! = %u \n",n,f); printf(" %d! = %u \n",n,f); printf(" %d! = %u \n",n,f);

5.9.

Instruciunea Break
break;

Aceast instruciune se folosete pentru a termina o structur repetitiv: Exemplu: for ( ; ; ) if (expr) break; { ...
... }

5.10. Instruciunea Continue


Aceast instruciune realizeaz saltul la sfritul unei structuri repetitive (pentru while sau do_while la reevaluarea expresiei, iar pentru for la expresie3), avnd formatul: continue; Exemplu: for (... ;... ; expr3) if (expr) continue; { ...
... }

24.02.08

20

C+

Curs 1 5.11. Instruciunea GoTo

OO

Aceast instruciune realizeaz saltul necondiionat i fr revenire la instruciunea ce poart eticheta specificat, avnd formatul: goto etichet ; Exemplu: while (expr1) if (expr2) goto et;
...

{ ...
... }

et: ...

// instruciune

24.02.08

21

C+

Curs 1

OO

6.

Bibliografie

1. Dan Roman, Ingineria programrii obiectuale, Editura Albastr, Cluj_Napoca, 1996; 2. Dorin & Ioan Mircea Popovici, Iustin Tanase, Tehnologia orientat pe obiecte. Aplicaii, Editura Teora, Bucureti, 1996; 3. Ellis Horowitz, Sartaj Sahni, Dinesh Metha, Fundamentals of data structures in C++, Computer Science Press, New York, 1995; 4. Liviu Negrescu, Limbajele C i C++ pentru nceptori, Editura Albastr, Cluj_Napoca, 1997; 5. Thomas A. Standish, Data Structures, Algorithms & Software Principles in C, Addison-Weslay, California, 1995; 6. Vasile Cioban, Zsolt Darvay, Metode evoluate de programare, UBB-Mate_Info, 1999;

24.02.08

22

C+ 1.

Curs 1

OO

Se dau dou iruri de maxim 254 caractere coninnd cifre reprezentnd dou numere scrise ntr-o baz p16. Se cere irul cifrelor sumei i modulul diferenei numerelor date. Exemplu : 17A3 + 6B 180E

2.

Se dau dou iruri de numere reale a0,...,an i b0,...,bm reprezentnd coeficienii a dou polinoame A i B. Se cere : a) irul c0,...,cp reprezentnd coeficienii polinomului sum (C=A+B); b) irul d0,...,dq reprezentnd coeficienii polinomului diferen (D=A-B); c) irul p0,...,pt reprezentnd coeficienii polinomului produs (P=AB); d) s se calculeze A(x), B(x), C(x), D(x) i P(x), pentru un numr real x dat.

3.

S se scrie un program Pascal care s rezolve problemele de tipul:: Mutnd un singur b de chibrit, facei ca egalitatea s fie adevrat!

Exemplu : Pentru 3+6=14 obinem 9+5=14 S se scrie un program care arat orele cnd limbile unui ceas formeaz un unghi de 900. Exemplu :

4.

Se cunosc notele la m discipline pentru n ani de studiu. Plecnd de la o disciplina dat d1, se cere s se ajung la o alt disciplin cunoscut dn alegnd din anul urmtor doar una din disciplinele vecine (di+1 { di-1,di,di+1 } astfel nct media notelor s fie maxim. Exemplu :
6 7 8 9 8 6 10 7 9 7 7 7 8 10 8 8 7 9 7 10 7 9 9 7 7

5.

Pentru notele din tabelul de mai sus, plecnd de la disc. 3 i ajungnd la disc. 2, trecem prin 4,4,3 pentru a realiza maximul. Media obinut este media notelor la disc. 3,4,4,3,2.

24.02.08

23

C+

Curs 1

OO

5. // Note / Discipline Dinamic \\ # include <Conio.h> # include <FStream.h> # include <IoManip.h> # define Max_Disc 21 # define Max_Ani 13 int Max (int a, int b) { return a > b ? a : b; } int Max3(int a, int b, int c) { return Max(Max(a,b),c); } void main () { textbackground(BLUE); textcolor(WHITE); clrscr(); ifstream f("Note.Txt"); int m,n, i,j, a[Max_Disc+1][Max_Ani+1], c[Max_Disc+2][Max_Ani+1], d[Max_Ani+1]; f >> m >> n; for (i=0; i<=m+1; i++) for (j=1; j<=n; j++) if (i*(i-m-1)) f >> a[i][j]; else c[i][j]=0; f >> d[1] >> d[n]; f.close(); for (i=1; i<=m; i++) for (j=1; j<=n; j++) { gotoxy(j*3+2,i+3); cout << setw(3) << a[i][j]; } j=1; for (i=1; i<=m; i++) if (i-d[1]) c[i][j]=0; else c[i][j]=a[i][j]; for (j=2; j<=n; j++) for (i=1; i<=m; i++) c[i][j]=Max3(c[i-1][j-1],c[i][j-1],c[i+1][j-1])+a[i][j]; for (i=1; i<=m; i++) for (j=1; j<=n; j++) { gotoxy(j*3+42,i+3); cout << setw(3) << c[i][j]; } for (j=n; j>2; j--) { i=d[j]; if (c[i][j]==c[i-1][j-1]+a[i][j]) d[j-1]=i-1; else if (c[i][j]==c[i ][j-1]+a[i][j]) d[j-1]=i ; else /*if (c[i][j]==c[i+1][j-1]+a[i][j])*/ d[j-1]=i+1; // else Err. } for (j=1; j<=n; j++) { i=d[j]; gotoxy(j*3+42,i+3); cout << setw(3) << -c[i][j]; gotoxy(j*3+ 5,i+3); cout << '*'; } float s=0; for (j=1; j<=n; j++ ) s+=a[d[j]][j]; gotoxy(5,m+5); cout << " Suma = " << s; gotoxy(5,m+6); cout << " Media= " << setprecision(2) << s/n; getche(); }

24.02.08

24

C+
5.

Curs 1

OO

// Note / Discipline BackTracking \\ <Conio.h> <FStream.h> <IoManip.h> Max_Disc 21 Max_Ani 13 a[Max_Disc+1][Max_Ani+1], x[Max_Ani], d[Max_Ani+1], y[Max_Ani], o[Max_Ani+1], Max=0; void Maxim() { for (int s=a[d[1]][1], j=1; j<n; j++) { d[j+1]=d[j]+x[j]; s+=a[d[j+1]][j+1]; } if (s>Max) { Max=s; for (j=1; j<n; j++) { o[j]=d[j]; y[j]=x[j]; } } } int Cc(int k) { for (int i=d[1], j=1; j<=k; j++) i+=x[j]; if ((i<1)||(i>m)) return 0; else return (i-n+k+1<=d[n]) && (d[n]<=i+n-k-1); } void Bt(int k) { for (int v=-1; v<=+1; v++) {x[k]=v; if (Cc(k)) if (k==n-1) Maxim(); else Bt(k+1); } } void main () { textbackground(BLUE); textcolor(WHITE); clrscr(); ifstream f("Note.Txt"); int i,j; f >> m >> n; for (i=1; i<=m; i++) for (j=1; j<=n; j++) f >> a[i][j]; f >> d[1] >> d[n]; f.close(); for (i=1; i<=m; i++) for (j=1; j<=n; j++) { gotoxy(j*3+2,i+3); cout << setw(3) << a[i][j]; } Bt(1); char Sens[]="/-\\"; // { -1,0,1 } { , , } for (j=1; j<n; j++) { i=o[j]; gotoxy(j*3+ 5,i+3); cout << Sens[y[j]+1]; // { 0,1,2 } { / , - , \ } } float s=0; o[n]=d[n]; for (j=1; j<=n; j++ ) s+=a[o[j]][j]; gotoxy(5,m+5); cout << " Suma = " << s; gotoxy(5,m+6); cout << " Media= " << setprecision(2) << s/n; getche(); } # include # include # include # define # define int m,n,

24.02.08

25

C+

Curs 1

OO

7.
1.

Cuprins
pag. Redactarea programelor C ............................................................ 1
1.1. 1.2. 1.3. 1.4. Generaliti ........................................................................................... 1 Structura unui program......................................................................... 1 Funcii ................................................................................................... 3 Elementele limbajului........................................................................... 4

2.
2.1. 2.2. 2.3. 2.4.

Variabile........................................................................................... 5
Variabile globale................................................................................... 5 Variabile locale..................................................................................... 5 Variabile de tip registru ........................................................................ 6 Iniializarea variabilelor........................................................................ 7

3.
3.1.

Expresii ............................................................................................ 8
Operatori ............................................................................................... 8

4.
4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9.

Operaii de intrare/ieire .............................................................. 13


Funcia Printf..................................................................................... 13 Funcia Scanf ..................................................................................... 14 Funcia PutChar ................................................................................. 15 Funcia GetChar................................................................................. 15 Funcia GetChe .................................................................................. 15 Funcia GetCh..................................................................................... 15 Funcia KbHit ..................................................................................... 16 Funciile PutS, GetS ........................................................................... 16 Stream-uri ........................................................................................... 16

5.
5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11.

Instruciuni .................................................................................... 17
Instruciunea Vid.............................................................................. 17 Instruciunea Expresie ....................................................................... 17 Instruciunea Compus ...................................................................... 17 Instruciunea If................................................................................... 18 Instruciunea Switch .......................................................................... 18 Instruciunea While............................................................................ 19 Instruciunea Do_While..................................................................... 19 Instruciunea For................................................................................ 20 Instruciunea Break............................................................................. 20 Instruciunea Continue........................................................................ 20 Instruciunea GoTo ............................................................................. 21

6. 7.

Bibliografie .................................................................................... 22 Cuprins........................................................................................... 26

24.02.08

26

S-ar putea să vă placă și