SlideShare a Scribd company logo
1 of 14
Download to read offline
Cuprins
Gândirea algoritmică ..............................................................1
Problema căutării.............................................................................................................1
Problema intrării într-un cabinet medical..................................................................... 2
Structura unui program şi a unei funcţii C............................4
Reprezentarea numărului în binar................................................................................. 5
Transmiterea parametrilor în cadrul unei funcţii.......................................................... 6
Construcţiile de bază ale limbajului C................................... 7
Caracterele .......................................................................................................................7
Identificatorii ...................................................................................................................7
Cuvinte cheie....................................................................................................................7
Tipuri de date.................................................................................................................. 8
Tipuri aritmetice .............................................................................................................8
Tipul întreg...................................................................................................................... 9
Tipul flotant..................................................................................................................... 9
Tipul caracter .................................................................................................................. 9
Constante şi variabile.....................................................................................................10
Comentarii...................................................................................................................... 11
Operatori ........................................................................................................................12
Operatori aritmetici .......................................................................................................12
Operatorul de conversie explicită (cast)........................................................................12
Operatorul dimensiune (sizeof).....................................................................................13
Operatorul condiţional ..................................................................................................14
Structuri de date ...................................................................15
Lista liniară simplu înlănţuită .......................................................................................15
Structura de tip stivă (LIFO Last In First Out).............................................................19
Structura de tip coadă................................................................................................... 23
Instrucţiuni C.......................................................................26
Instrucţiunea vidă......................................................................................................... 26
Instrucţiunea de atribuire............................................................................................. 26
Instrucţiunea compusă ................................................................................................. 26
Instrucţiunea if.............................................................................................................. 26
Instrucţiunea while....................................................................................................... 28
Cel mai mare divizor comun ....................................................................................28
Instrucţiunea do while ..................................................................................................28
Instrucţiunea for ...........................................................................................................29
Programul C care calculează n!................................................................................29
Instrucţiunea return......................................................................................................29
O funcţie care returnează maximul a 2 numere......................................................30
Numărul de elemente ale unei şir............................................................................30
Comparaţia celor 2 şiruri ......................................................................................... 31
Concateneare............................................................................................................ 31
Instrucţiunea break....................................................................................................... 31
Funcţia exit....................................................................................................................32
Instrucţiunea continue..................................................................................................32
Numerarea cifrelor existente într-un şir .................................................................33
Instrucţiunea goto.........................................................................................................33
Instrucţiunea switch......................................................................................................34
Pointeri C ............................................................................. 35
Operatori specifici pointerilor ...................................................................................... 35
Pointeri şi tablouri.........................................................................................................36
Pointeri la funcţii...........................................................................................................38
Tipuri structurate de date .............................................................................................39
Structuri....................................................................................................................39
Câmpuri de biţi.........................................................................................................39
Uniuni.......................................................................................................................40
Enumerări................................................................................................................. 41
Funcţii de bibliotecă ............................................................ 42
Funcţia printf.................................................................................................................42
Funcţia scanf .................................................................................................................43
Funcţii de conversie ......................................................................................................44
Funcţii generatoare de numere aleatoare................................................................45
Funcţii pentru operaţii cu caractere şi şiruri de caractere......................................45
Operaţii cu fişiere ................................................................ 47
Calcul Matriceal................................................................... 49
Produsul a două matrici................................................................................................49
Inversa unei matrici ......................................................................................................50
Metoda lui Gauss........................................................................................................... 53
Metode de sortare................................................................ 55
Sortare ordinară............................................................................................................ 55
Sortare prin selecţie (Selection Sort).............................................................................57
Sortarea prin inserţie directă (Direct Insertion Sort).................................................. 58
Sortare prin inserţie binară (Binary Insertion Sort)....................................................60
Sortare prin inserţie directă folosind o santinelă ........................................................ 62
Sortarea prin metoda bulelor (Bubble Sort) ................................................................ 64
Sortare rapidă (Quick Sort) .......................................................................................... 65
Sortare prin interclasare (Merge Sort)......................................................................... 67
Recursivitate ........................................................................70
Calculul valorii n!..........................................................................................................70
Algoritmul lui Euclid recursiv ...................................................................................... 70
Să se genereze primele n numere din şirul lui Fibonacci .............................................71
Metoda backtracking ........................................................... 72
Permutările ................................................................................................................... 72
Problema aranjamentelor............................................................................................. 73
Problema combinărilor................................................................................................. 74
Problema reginelor ........................................................................................................75
Problema labirintului.................................................................................................... 76
Problema calului ........................................................................................................... 79
Problema mingii.............................................................................................................81
Metoda Divide et Impera.....................................................84
Suma elementelor unui şir............................................................................................ 84
Problema “Turnurilor din Hanoi” ................................................................................ 85
Elementul maxim într-un şir........................................................................................86
Problema căutării binare .............................................................................................. 87
Grafuri neorientate ..............................................................88
Implementarea parcurgerii în lăţime pentru un graf neorientat ................................88
Implementarea parcurgerii în adâncime pentru un graf neorientat...........................89
Drumuri într-un graf .....................................................................................................91
Grafuri ponderate ......................................................................................................... 92
Graful hamiltonian........................................................................................................ 94
Grafuri euleriene........................................................................................................... 96
Implementarea unui graf utilizând matricea de adiacenţă ......................................... 97
Implementarea unui graf utilizând pointeri ................................................................ 99
Drumul optim într-un graf ......................................................................................... 100
1
Gândirea algoritmică
Problema căutării
Există şi cazul care, pentru o aceeaşi problem putem prezenta două soluţii, în care
una este mai rapidă ca alta. De pildă, fie un şir de numere natural oarecare, de
exemplu 4,2,10,1,8,15,7. Vream să testăm dacă un număr dat (să zivem numărul 8) se
află în această secvenţă sau nu.
O astfel de căutare, prin parcurgerea de a stânga la dreapta a întregii secvenţe de
numere, până se găseşte numărul dorit sau se epuiează toate elementele din secvenţă,
se numeşte căutarea secvenţială. Dacă avem un şir S de n elemente (notat S[1..n]),
atunci căutarea secvenţială a lui x în S se descrie prin:
Căutare_secventială(x,S[1..n]) înseamnă
Început
Fie elemental_curent = primul_element;
Atăt timp cât (elemental_curent <> x) si (pozitia elementului current <= pozitia
ultimului element (n)) execută
Început
Dacă elemental_curent = x atunci mesaj("găsit")
Altfel treci la următorul element
Sfârşit
Sfârşit.
În continuare să presupunem că numerele erau déjà ordonate crescător 1, 2, 4, 7, 8,
10, 15. În acest caz particular, căutarea secvenţială a unui număr cum este 8 nu este
prea eficientă, deoarece 8 se află în a doua jumătate a secvenţei, deci ar fi de preferat
să nu-l căutăm în prima jumătate. Acest procedeu este mai rapid:
 Dacă numărul din mijloc este mai mic decât numărul căutat, atunci căutăm a doua
jumătate;
 Dacă numărul din mijloc este mai mare ca numărul căutat, atunci căutăm în
prima jumătate;
 Dacă numărul din mijloc este egal cu numărul căutat, înseamnă că am găsit
numărul în cauză şi trebuie să oprim căutarea.
Căutarea în jumătatea aleasă se face tot la fel, deci se va înjumătăţi şi această zonă…
Procedeul anterior se numeşte căutare binară, deoarece, de fiecare dată, o secvenţă
de numere este divizată în două jumătăţi. Putem descrie căutarea binară a unui
număr x într-o secvenţă S[1..n] astfel.
2
Căutarea_binară(x, S[1..n]) înseamnă
Început
Stabileste elemental_curent ca fiind elemental din mijlocul secventei;
Dacă n=1 atunci
Dacă x = elemental_curent atunci mesaj("găsit")
Altfel mesaj("negăsit")
Altfel
Început
Împarte secventa în cele două jumătăti (S[1..mijloc] si S[mijloc+1..n]);
Dacă elemental_curent = x atunci mesaj("găsit")
Altfel
Dacă elemental_curent < x atunci Căutare_binară(x,S[mijloc+1..n])
Altfel căutarea_binară(x.S[1..mijloc])
Sfârşit
Sfârşit.
Problema intrării într-un cabinet medical
Dacă un om vrea să intre pentru consult la un medic, atunci, mai întâi va bate la uşă:
dacă medicul răspunde prin „poftim!”, atunci va intra, atlfel va aştepta până când
pacientul dinăuntru va ieşi; abia după ce cabinetul va fi liber, va intra.
Intrare_la_medic înseamnă
Început
Bate la_uşă;
Dacă răspunsul = "poftim!" atunci
Întră_în_cabinet;
Altfel
Început
Atât timp cât cabinetul_este_ocupat_de_alt_pacient execută
Citeste_un_ziar;
Sfârşit
Sfârşit.
O intrucţiune compusă este formată dintr-o secvenţă de intrucţiuni, încadrate de
cuvinte început şi sfârşit, care pot conţine, la rândul lor, blocuri de alternativă şi
repetiţie.
Programarea este tehnica realizării de algoritmi descrişi prin proceduri şi programe.
Ea devine o artă, atunci când se folosesc cele trei elemente de structurate şi se
numeşte programare structurată. Pentru a vedea ce ar însemna programare
nestructurată, să reconsiderăm procedura de intrare în cabinetul medical:
3
Intare_la_medic înseamnă
Început
Bate_la_uşă;
Dacă răspunsul = "poftim!" atunci intră_în_cabinet;
Altfel Început
Atât timp cât cabinetul_este_ocupat_de_alt_pacient execută
Citeste_un_ziar;
Întră_în_cabinet
Sfârşit
Sfârşit.
26
Instrucţiuni C
Instrucţiunile C implementează structurile de bază ale programării structurate:
 structura secvenţială (instrucţiunea compusă)
 structura alternativă (instrucţiunea if)
 structura repetitivă condiţionată anterior (instrucţiunea while) şi condiţionată
posterior (instrucţiunea do while)
Toate instrucţiunile limbajului C se termină cu ‘;’ excepţie făcând instrucţiunile care
se termină cu } (instrucţiunea compusă şi instrucţiunea switch) după care nu se pune
‘;’.
Instrucţiunea vidă
Instrucţiunea vidă se reduce la caracterul ; şi se foloseşte în acele construcţii în care
este necesară prezenţa unei instrucţiuni fără a fi nevoie să se realizeze anumite
operaţii.
Instrucţiunea de atribuire
Instrucţiunea de atribuire se obţine punând ; după o expresie de atribuire. Deci o
expresie devine o instrucţiune dacă este urmată de ; (punct şi virgulă).
Instrucţiunea compusă
Instrucţiunea compusă este o succesiune de declaraţii urmate de instrucţiuni,
succesiune care se include între acolade. Dacă există declaraţii atunci ele definesc
variabile care sunt valabile numai în cadrul instrucţiunii compuse respective.
Instrucţiunea if
În limbajul C, instrucţiunea condiţională de bază este instrucţiunea if. Formatul
general al instrucţiunii if este:
if (expresie) instrucţiune1;
else instrucţiune2;
27
Efectul acestei instrucţiuni este următorul: se evaluează expresia din paranteze. Dacă
valoarea este adevărat (diferită de 0) atunci se execută instrucţiune1 altfel se execută
instrucţiune2, apoi în ambele situaţii se trece la instrucţiunea următoare instrucţiunii
if.
Deoarece instrucţiunea if testează valoarea numerică a unei expresii, următoarele
construcţii sunt echivalente:
if(expresie!=0) …
if(expresie) …
Exemplu:
if(x)
if(y)
printf("1");
else
printf("2");
În acest caz, ramura else care tipăreşte valoarea 2 este legată de instrucţiunea if(y).
if(x)
{
if (y) printf("1");
}
else
printf("2");
În acest caz, datorită instrucţiunii compuse, ramura else care tipăreşte valoarea 2
aparţine instrucţiunii if(x).
Orice instrucţiune de atribuire închisă între parantezele expresiei din cadrul
instrucţiunii if este de fapt o expresie, a cărei valoare de adevăr este egală cu valoarea
atribuită.
Exemplul:
if(i=0) printf("Variabila i are valoarea 0");
else printf("variabila i are o valoare diferită de 0");
este greşit deoarece în loc să se folosească operatorul == se foloseşte operatorul de
atribuire iar în acest caz valoarea de adevăr a expresiei de atribuire este 0 (fals), deci
întotdeauna se va afişa mesajul “variabila i are o valoare diferită de 0” indiferent de
valoarea iniţială a lui i.
55
Metode de sortare
Sortare ordinară
Cel mai simplu algoritm de sortare (dar şi cel mai ineficient) se bazează pe următorul
principiu: un şir este sortat dacă prin parcurgerea lui de la început până la sfârşit,
fiecare element este mai mic decât succesorul. Dacă această condiţie nu este
îndeplinită, inversăm cele 2 elemente. Sortarea se încheie în momentul în care
parcurgerea şirului se face fără a fi necesară nici o inversare (fiecare element este mai
mic decât succesorul său).
3 7 4 9 2 8
3 4 7 9 2 8
3 7 4 2 9 8
i=1; inversam a[1]=7 cu a[2]=4; k=1
i=3; inversam a[3]=9 cu a[4]=2; k=1
i=4; inversam a[4]=9 cu a[5]=8; k=1
3 7 4 2 8 9
k<>0 deci pornim un nou ciclu;
i=1 inversam a[1]=7 cu a[2]=4; k=1
3 4 7 2 8 9 i=2; inversam a[2]=7 cu a[3]=2; k=1
3 4 2 7 8 9
k<>0 deci pornim un nou ciclu;
i=1 inversam a[1]=4 cu a[2]=2; k=1
3 2 4 7 8 9
k<>0 deci pornim un nou ciclu;
i=0 inversam a[0]=3 cu a[1]=2; k=1
2 3 4 7 8 9
k ramane 0 (nu facem nici o inversare)
deci sirul este sortat
56
#include<stdio.h>
#include<conio.h>
void sortare_ordinara(int a[], int n)
{
int i,j,k,elem;
do
{
for(i=0,k=0;i<n-1;i++)
//la fiecare început de parcurgere a şirului, k este iniţializat cu 0
if(a[i]>a[i+1])
//dacă elementul curent este mai mare decât succesorul este necesară inversarea
//lor; atenţie: dacă punem mai mare sau egal şi avem 2 elemente egale, vom
//ajunge la ciclu infinit
{
elem=a[i];
a[i]=a[i+1];
a[i+1]=elem;
k=1;
//k diferit de 0 indică faptul că s-a făcut o inversare
}
} while(k);
//sortarea se încheie în momentul în care k a rămas 0 (deci nu s-a făcut nici o
//inversare de elemente
}
void main(void)
{
int n,a[100],i;
printf("Introd dim sirului:");
scanf("%d",&n);
printf("Introd elem sirului:n");
for(i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",a+i);
}
sortare_ordinara(a,n);
printf("Sirul sortat este: ");
for(i=0;i<n;i++) printf("%d ",a[i]);
putchar('n');
getch();
}
84
Metoda Divide et Impera
Suma elementelor unui şir
Să se calculeze suma elementelor unui şir folosind Divide et Impera.
#include<stdio.h>
#include<conio.h>
int a[20];
int divide(int ls, int ld)
{
int mijloc,d1,d2;
if(ls!=ld)
{
mijloc=(ls+ld)/2;
d1=divide(ls,mijloc);
d2=divide(mijloc+1,ld);
return(d1+d2);
}
else
return(a[ls]);
}
void main(void)
{
int I,n;
printf("Introd nr de elem ale sirului:");
scanf("%d",&n);
for(I=0;I<n;I++)
{
printf("a[%d]=");
scanf("%d",a+I);
}
printf("Suma elem este: %dn",divide(0,n-1));
getch();
}
85
Problema “Turnurilor din Hanoi”
Legenda acestei probleme spune că Brahma a fixat pe Pământ trei tije de diamante şi
pe una din ele a pus în ordine crescătoare 64 de discuri de aur de dimensiuni diferite,
cu discul cel mai mare jos. Singura operaţiune permisă călugărilor era mutarea a câte
unui singur disc de pe o tijă pe alta, astfel încât niciodată să nu se pună un disc mai
mare peste unul mai mic. Legenda spune că atunci când călugării vor muta toate cele
64 de discuri respectând regulile de maa sus, atunci va veni sfârşitul lumii.
Presupunând că în fiecare secundă se mută un disc, lucrând fără întrerupere, cele 64
de discuri nu pot fi mutate nici în 500 de miliarde de ani de la începutul acţiunii!
Vom considera trei tije verticale notate Stânga, Mijloc, Dreapta. Pe tija Stânga se
găsesc aşezate n discuri de diametre diferite, în ordinea descrescătoare a diametrelor,
privind de jos în sus. Iniţial, tijele Mijloc şi Dreapta sunt goale. Să se afişeze toate
mutările prin care discurile de pe tija Stânga se mută pe tija Mijloc, în aceeaşi ordine,
respectând următoarele reguli:
 la fiecare mişcare se mută un singur disc
 un disc mai mare nu poate fi plasat peste un disc cu diametrul mai mic
 un disc mai mare nu poate fi plasat peste un disc cu diametrul mai mic
#include<stdio.h>
#include<conio.h>
int n;
void scrie(char a, char b)
{
printf("Muta discul de pe %c pe %cn",a,b);
}
void muta(int n, char a, char b, char c)
{
if (n==1)
{
scrie(a,b);
return;
}
else
{
muta(n-1,a,c,b);
scrie(a,b);
muta(n-1,c,b,a);
}
}
86
void main(void)
{
printf("Introd nr de turnuri:");
scanf("%d",&n);
muta(n,'S','M','D');
getch();
}
Elementul maxim într-un şir
Se citeşte un şir de n elemente numere întregi. Să se găsească maximul elementelor
acestui şir utilizând metoda divide et impera.
#include<stdio.h.h>
int a[10],n;
int max(int i ,int j)
{
int a,b;
if (i==j)
return a[i];
else
{
a=max(i, (i+j)/2), b=max((i+j)/2+1,j);
if (a>b)
return(a);
else
return(b);
}
}
void main(void)
{
int i;
printf("n="); scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("maximul este %dn",max(0,n-1));
}

More Related Content

What's hot

020 ovidiu bufnila cruciada lui moreaugarin v 1.0
020 ovidiu bufnila   cruciada lui moreaugarin v 1.0 020 ovidiu bufnila   cruciada lui moreaugarin v 1.0
020 ovidiu bufnila cruciada lui moreaugarin v 1.0 Ion Maria
 
Matematici pentru incepatori, vol i
Matematici pentru incepatori, vol iMatematici pentru incepatori, vol i
Matematici pentru incepatori, vol iNina Libidov
 
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackManual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackQuickmobile
 
Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1Oxana Ghenciu
 
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicativeIolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicativestipcovicimaria
 
Pendulul invers - analiza, proiectare, implementare
Pendulul invers - analiza, proiectare, implementarePendulul invers - analiza, proiectare, implementare
Pendulul invers - analiza, proiectare, implementareAnamaria Lupu
 
Dreptul muncii-2011
Dreptul muncii-2011Dreptul muncii-2011
Dreptul muncii-2011exodumuser
 
2011 curtea-de-conturi-standarde-de-audit
2011 curtea-de-conturi-standarde-de-audit2011 curtea-de-conturi-standarde-de-audit
2011 curtea-de-conturi-standarde-de-auditCarmen Havreliuc
 
37677751 dreptul-securitatii-sociale
37677751 dreptul-securitatii-sociale37677751 dreptul-securitatii-sociale
37677751 dreptul-securitatii-socialeexodumuser
 
17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-socialeexodumuser
 
The holy bible in romanian
The holy bible in romanianThe holy bible in romanian
The holy bible in romanianWorldBibles
 
81591504 curs-drept-institutional-european
81591504 curs-drept-institutional-european81591504 curs-drept-institutional-european
81591504 curs-drept-institutional-europeanexodumuser
 
42919806 ghidul-cetateanului
42919806 ghidul-cetateanului 42919806 ghidul-cetateanului
42919806 ghidul-cetateanului exodumuser
 
Chartier jean pierre. introducere in psihanaliza lui s.freud
 Chartier jean pierre. introducere in psihanaliza lui s.freud Chartier jean pierre. introducere in psihanaliza lui s.freud
Chartier jean pierre. introducere in psihanaliza lui s.freudkomygy
 
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-201186576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011exodumuser
 
Totul despre miel
Totul despre mielTotul despre miel
Totul despre mielBiro Bela
 

What's hot (20)

020 ovidiu bufnila cruciada lui moreaugarin v 1.0
020 ovidiu bufnila   cruciada lui moreaugarin v 1.0 020 ovidiu bufnila   cruciada lui moreaugarin v 1.0
020 ovidiu bufnila cruciada lui moreaugarin v 1.0
 
Matematici pentru incepatori, vol i
Matematici pentru incepatori, vol iMatematici pentru incepatori, vol i
Matematici pentru incepatori, vol i
 
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-blackManual instructiuni-sony-ericsson-u8i-vivaz-pro-black
Manual instructiuni-sony-ericsson-u8i-vivaz-pro-black
 
Management de proiect editia ii v1
Management de proiect editia ii   v1Management de proiect editia ii   v1
Management de proiect editia ii v1
 
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicativeIolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
 
Pendulul invers - analiza, proiectare, implementare
Pendulul invers - analiza, proiectare, implementarePendulul invers - analiza, proiectare, implementare
Pendulul invers - analiza, proiectare, implementare
 
Dreptul muncii-2011
Dreptul muncii-2011Dreptul muncii-2011
Dreptul muncii-2011
 
2011 curtea-de-conturi-standarde-de-audit
2011 curtea-de-conturi-standarde-de-audit2011 curtea-de-conturi-standarde-de-audit
2011 curtea-de-conturi-standarde-de-audit
 
37677751 dreptul-securitatii-sociale
37677751 dreptul-securitatii-sociale37677751 dreptul-securitatii-sociale
37677751 dreptul-securitatii-sociale
 
Modele(7)
Modele(7)Modele(7)
Modele(7)
 
17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale17711612 dreptul-securitatii-sociale
17711612 dreptul-securitatii-sociale
 
The holy bible in romanian
The holy bible in romanianThe holy bible in romanian
The holy bible in romanian
 
Drept+fiscal
Drept+fiscalDrept+fiscal
Drept+fiscal
 
81591504 curs-drept-institutional-european
81591504 curs-drept-institutional-european81591504 curs-drept-institutional-european
81591504 curs-drept-institutional-european
 
42919806 ghidul-cetateanului
42919806 ghidul-cetateanului 42919806 ghidul-cetateanului
42919806 ghidul-cetateanului
 
Chartier jean pierre. introducere in psihanaliza lui s.freud
 Chartier jean pierre. introducere in psihanaliza lui s.freud Chartier jean pierre. introducere in psihanaliza lui s.freud
Chartier jean pierre. introducere in psihanaliza lui s.freud
 
Curs Sctr2009
Curs Sctr2009Curs Sctr2009
Curs Sctr2009
 
Nuca
NucaNuca
Nuca
 
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-201186576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
86576063 dreptul-proprietatii-intelectuale-curs-id-iunie-2011
 
Totul despre miel
Totul despre mielTotul despre miel
Totul despre miel
 

Similar to carte-informatica-limbajul-c

Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.doc
Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.docKarma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.doc
Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.docssuserd4af4f1
 
Carte bucate
Carte bucateCarte bucate
Carte bucaterelu27
 
carte-de-bucate(1)
carte-de-bucate(1)carte-de-bucate(1)
carte-de-bucate(1)Geta Enache
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueQuickmobile
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue8qisfgvs
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueQuickmobile
 
77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romaneLivia Moldovan
 
Manual utilizare lg_gd510_ro
Manual utilizare lg_gd510_roManual utilizare lg_gd510_ro
Manual utilizare lg_gd510_roQuickmobile
 
Flora medicinala a Romaniei vol. I
Flora medicinala a Romaniei vol. IFlora medicinala a Romaniei vol. I
Flora medicinala a Romaniei vol. Itarzan1a
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redQuickmobile
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redQuickmobile
 
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013IMI PQ NET Romania
 
Manual instructiuni-blackberry-9800-torch-slider-black-wkl
Manual instructiuni-blackberry-9800-torch-slider-black-wklManual instructiuni-blackberry-9800-torch-slider-black-wkl
Manual instructiuni-blackberry-9800-torch-slider-black-wklQuickmobile
 
49318825 criminologie-generala
49318825 criminologie-generala 49318825 criminologie-generala
49318825 criminologie-generala exodumuser
 
Chartier jean pierre. introducere in psihanaliza lui s.freud
 Chartier jean pierre. introducere in psihanaliza lui s.freud Chartier jean pierre. introducere in psihanaliza lui s.freud
Chartier jean pierre. introducere in psihanaliza lui s.freudIon Popovici
 
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdf
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdfHP manual, cunoastere, exploatare, remedierea deranjamentelor.pdf
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdfssuser65ff8a
 
Bit defender businessclient_userguide_ro
Bit defender businessclient_userguide_roBit defender businessclient_userguide_ro
Bit defender businessclient_userguide_ropaulbth
 
The holy bible_in_romanian
The holy bible_in_romanianThe holy bible_in_romanian
The holy bible_in_romanianWorldBibles
 

Similar to carte-informatica-limbajul-c (20)

Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.doc
Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.docKarma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.doc
Karma -Gloria-Chadwick-Descoperirea-Vietilor-Trecute.doc
 
Carte bucate
Carte bucateCarte bucate
Carte bucate
 
SeniorERP structura
SeniorERP structuraSeniorERP structura
SeniorERP structura
 
Carte C 2003
Carte C 2003Carte C 2003
Carte C 2003
 
carte-de-bucate(1)
carte-de-bucate(1)carte-de-bucate(1)
carte-de-bucate(1)
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blueManual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
Manual instructiuni-sony-ericsson-xperia-arc-lt15i-blue
 
77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane77997067 metodica predari_lb_si_lit_romane
77997067 metodica predari_lb_si_lit_romane
 
Manual utilizare lg_gd510_ro
Manual utilizare lg_gd510_roManual utilizare lg_gd510_ro
Manual utilizare lg_gd510_ro
 
Flora medicinala a Romaniei vol. I
Flora medicinala a Romaniei vol. IFlora medicinala a Romaniei vol. I
Flora medicinala a Romaniei vol. I
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-red
 
Manual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-redManual instructiuni-sony-ericsson-mt15i-neo-red
Manual instructiuni-sony-ericsson-mt15i-neo-red
 
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013Suport de curs instruire utilizatori IMI PQ ianuarie 2013
Suport de curs instruire utilizatori IMI PQ ianuarie 2013
 
Manual instructiuni-blackberry-9800-torch-slider-black-wkl
Manual instructiuni-blackberry-9800-torch-slider-black-wklManual instructiuni-blackberry-9800-torch-slider-black-wkl
Manual instructiuni-blackberry-9800-torch-slider-black-wkl
 
49318825 criminologie-generala
49318825 criminologie-generala 49318825 criminologie-generala
49318825 criminologie-generala
 
Chartier jean pierre. introducere in psihanaliza lui s.freud
 Chartier jean pierre. introducere in psihanaliza lui s.freud Chartier jean pierre. introducere in psihanaliza lui s.freud
Chartier jean pierre. introducere in psihanaliza lui s.freud
 
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdf
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdfHP manual, cunoastere, exploatare, remedierea deranjamentelor.pdf
HP manual, cunoastere, exploatare, remedierea deranjamentelor.pdf
 
Bit defender businessclient_userguide_ro
Bit defender businessclient_userguide_roBit defender businessclient_userguide_ro
Bit defender businessclient_userguide_ro
 
The holy bible_in_romanian
The holy bible_in_romanianThe holy bible_in_romanian
The holy bible_in_romanian
 

Recently uploaded

Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...
Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...
Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...bdngeorge11
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăBibliotecaMickiewicz
 
Igiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aIgiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aCMB
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10CrciunAndreeaMaria
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCori Rus
 
Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11CMB
 
Strategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxStrategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxMoroianuCristina1
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiAndr808555
 

Recently uploaded (8)

Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...
Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...
Ghidului privind tehnica și tactica ventilării operaționale la incendii – ISU...
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba română
 
Igiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-aIgiena sistemului digestiv , biologi clasa 11-a
Igiena sistemului digestiv , biologi clasa 11-a
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptx
 
Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11
 
Strategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptxStrategii-pentru-educatia-remedială-ppt.pptx
Strategii-pentru-educatia-remedială-ppt.pptx
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantului
 

carte-informatica-limbajul-c

  • 1.
  • 2. Cuprins Gândirea algoritmică ..............................................................1 Problema căutării.............................................................................................................1 Problema intrării într-un cabinet medical..................................................................... 2 Structura unui program şi a unei funcţii C............................4 Reprezentarea numărului în binar................................................................................. 5 Transmiterea parametrilor în cadrul unei funcţii.......................................................... 6 Construcţiile de bază ale limbajului C................................... 7 Caracterele .......................................................................................................................7 Identificatorii ...................................................................................................................7 Cuvinte cheie....................................................................................................................7 Tipuri de date.................................................................................................................. 8 Tipuri aritmetice .............................................................................................................8 Tipul întreg...................................................................................................................... 9 Tipul flotant..................................................................................................................... 9 Tipul caracter .................................................................................................................. 9 Constante şi variabile.....................................................................................................10 Comentarii...................................................................................................................... 11 Operatori ........................................................................................................................12 Operatori aritmetici .......................................................................................................12 Operatorul de conversie explicită (cast)........................................................................12 Operatorul dimensiune (sizeof).....................................................................................13 Operatorul condiţional ..................................................................................................14 Structuri de date ...................................................................15 Lista liniară simplu înlănţuită .......................................................................................15 Structura de tip stivă (LIFO Last In First Out).............................................................19 Structura de tip coadă................................................................................................... 23 Instrucţiuni C.......................................................................26 Instrucţiunea vidă......................................................................................................... 26 Instrucţiunea de atribuire............................................................................................. 26 Instrucţiunea compusă ................................................................................................. 26 Instrucţiunea if.............................................................................................................. 26 Instrucţiunea while....................................................................................................... 28
  • 3. Cel mai mare divizor comun ....................................................................................28 Instrucţiunea do while ..................................................................................................28 Instrucţiunea for ...........................................................................................................29 Programul C care calculează n!................................................................................29 Instrucţiunea return......................................................................................................29 O funcţie care returnează maximul a 2 numere......................................................30 Numărul de elemente ale unei şir............................................................................30 Comparaţia celor 2 şiruri ......................................................................................... 31 Concateneare............................................................................................................ 31 Instrucţiunea break....................................................................................................... 31 Funcţia exit....................................................................................................................32 Instrucţiunea continue..................................................................................................32 Numerarea cifrelor existente într-un şir .................................................................33 Instrucţiunea goto.........................................................................................................33 Instrucţiunea switch......................................................................................................34 Pointeri C ............................................................................. 35 Operatori specifici pointerilor ...................................................................................... 35 Pointeri şi tablouri.........................................................................................................36 Pointeri la funcţii...........................................................................................................38 Tipuri structurate de date .............................................................................................39 Structuri....................................................................................................................39 Câmpuri de biţi.........................................................................................................39 Uniuni.......................................................................................................................40 Enumerări................................................................................................................. 41 Funcţii de bibliotecă ............................................................ 42 Funcţia printf.................................................................................................................42 Funcţia scanf .................................................................................................................43 Funcţii de conversie ......................................................................................................44 Funcţii generatoare de numere aleatoare................................................................45 Funcţii pentru operaţii cu caractere şi şiruri de caractere......................................45 Operaţii cu fişiere ................................................................ 47 Calcul Matriceal................................................................... 49 Produsul a două matrici................................................................................................49 Inversa unei matrici ......................................................................................................50 Metoda lui Gauss........................................................................................................... 53
  • 4. Metode de sortare................................................................ 55 Sortare ordinară............................................................................................................ 55 Sortare prin selecţie (Selection Sort).............................................................................57 Sortarea prin inserţie directă (Direct Insertion Sort).................................................. 58 Sortare prin inserţie binară (Binary Insertion Sort)....................................................60 Sortare prin inserţie directă folosind o santinelă ........................................................ 62 Sortarea prin metoda bulelor (Bubble Sort) ................................................................ 64 Sortare rapidă (Quick Sort) .......................................................................................... 65 Sortare prin interclasare (Merge Sort)......................................................................... 67 Recursivitate ........................................................................70 Calculul valorii n!..........................................................................................................70 Algoritmul lui Euclid recursiv ...................................................................................... 70 Să se genereze primele n numere din şirul lui Fibonacci .............................................71 Metoda backtracking ........................................................... 72 Permutările ................................................................................................................... 72 Problema aranjamentelor............................................................................................. 73 Problema combinărilor................................................................................................. 74 Problema reginelor ........................................................................................................75 Problema labirintului.................................................................................................... 76 Problema calului ........................................................................................................... 79 Problema mingii.............................................................................................................81 Metoda Divide et Impera.....................................................84 Suma elementelor unui şir............................................................................................ 84 Problema “Turnurilor din Hanoi” ................................................................................ 85 Elementul maxim într-un şir........................................................................................86 Problema căutării binare .............................................................................................. 87 Grafuri neorientate ..............................................................88 Implementarea parcurgerii în lăţime pentru un graf neorientat ................................88 Implementarea parcurgerii în adâncime pentru un graf neorientat...........................89 Drumuri într-un graf .....................................................................................................91 Grafuri ponderate ......................................................................................................... 92 Graful hamiltonian........................................................................................................ 94 Grafuri euleriene........................................................................................................... 96 Implementarea unui graf utilizând matricea de adiacenţă ......................................... 97 Implementarea unui graf utilizând pointeri ................................................................ 99 Drumul optim într-un graf ......................................................................................... 100
  • 5. 1 Gândirea algoritmică Problema căutării Există şi cazul care, pentru o aceeaşi problem putem prezenta două soluţii, în care una este mai rapidă ca alta. De pildă, fie un şir de numere natural oarecare, de exemplu 4,2,10,1,8,15,7. Vream să testăm dacă un număr dat (să zivem numărul 8) se află în această secvenţă sau nu. O astfel de căutare, prin parcurgerea de a stânga la dreapta a întregii secvenţe de numere, până se găseşte numărul dorit sau se epuiează toate elementele din secvenţă, se numeşte căutarea secvenţială. Dacă avem un şir S de n elemente (notat S[1..n]), atunci căutarea secvenţială a lui x în S se descrie prin: Căutare_secventială(x,S[1..n]) înseamnă Început Fie elemental_curent = primul_element; Atăt timp cât (elemental_curent <> x) si (pozitia elementului current <= pozitia ultimului element (n)) execută Început Dacă elemental_curent = x atunci mesaj("găsit") Altfel treci la următorul element Sfârşit Sfârşit. În continuare să presupunem că numerele erau déjà ordonate crescător 1, 2, 4, 7, 8, 10, 15. În acest caz particular, căutarea secvenţială a unui număr cum este 8 nu este prea eficientă, deoarece 8 se află în a doua jumătate a secvenţei, deci ar fi de preferat să nu-l căutăm în prima jumătate. Acest procedeu este mai rapid:  Dacă numărul din mijloc este mai mic decât numărul căutat, atunci căutăm a doua jumătate;  Dacă numărul din mijloc este mai mare ca numărul căutat, atunci căutăm în prima jumătate;  Dacă numărul din mijloc este egal cu numărul căutat, înseamnă că am găsit numărul în cauză şi trebuie să oprim căutarea. Căutarea în jumătatea aleasă se face tot la fel, deci se va înjumătăţi şi această zonă… Procedeul anterior se numeşte căutare binară, deoarece, de fiecare dată, o secvenţă de numere este divizată în două jumătăţi. Putem descrie căutarea binară a unui număr x într-o secvenţă S[1..n] astfel.
  • 6. 2 Căutarea_binară(x, S[1..n]) înseamnă Început Stabileste elemental_curent ca fiind elemental din mijlocul secventei; Dacă n=1 atunci Dacă x = elemental_curent atunci mesaj("găsit") Altfel mesaj("negăsit") Altfel Început Împarte secventa în cele două jumătăti (S[1..mijloc] si S[mijloc+1..n]); Dacă elemental_curent = x atunci mesaj("găsit") Altfel Dacă elemental_curent < x atunci Căutare_binară(x,S[mijloc+1..n]) Altfel căutarea_binară(x.S[1..mijloc]) Sfârşit Sfârşit. Problema intrării într-un cabinet medical Dacă un om vrea să intre pentru consult la un medic, atunci, mai întâi va bate la uşă: dacă medicul răspunde prin „poftim!”, atunci va intra, atlfel va aştepta până când pacientul dinăuntru va ieşi; abia după ce cabinetul va fi liber, va intra. Intrare_la_medic înseamnă Început Bate la_uşă; Dacă răspunsul = "poftim!" atunci Întră_în_cabinet; Altfel Început Atât timp cât cabinetul_este_ocupat_de_alt_pacient execută Citeste_un_ziar; Sfârşit Sfârşit. O intrucţiune compusă este formată dintr-o secvenţă de intrucţiuni, încadrate de cuvinte început şi sfârşit, care pot conţine, la rândul lor, blocuri de alternativă şi repetiţie. Programarea este tehnica realizării de algoritmi descrişi prin proceduri şi programe. Ea devine o artă, atunci când se folosesc cele trei elemente de structurate şi se numeşte programare structurată. Pentru a vedea ce ar însemna programare nestructurată, să reconsiderăm procedura de intrare în cabinetul medical:
  • 7. 3 Intare_la_medic înseamnă Început Bate_la_uşă; Dacă răspunsul = "poftim!" atunci intră_în_cabinet; Altfel Început Atât timp cât cabinetul_este_ocupat_de_alt_pacient execută Citeste_un_ziar; Întră_în_cabinet Sfârşit Sfârşit.
  • 8. 26 Instrucţiuni C Instrucţiunile C implementează structurile de bază ale programării structurate:  structura secvenţială (instrucţiunea compusă)  structura alternativă (instrucţiunea if)  structura repetitivă condiţionată anterior (instrucţiunea while) şi condiţionată posterior (instrucţiunea do while) Toate instrucţiunile limbajului C se termină cu ‘;’ excepţie făcând instrucţiunile care se termină cu } (instrucţiunea compusă şi instrucţiunea switch) după care nu se pune ‘;’. Instrucţiunea vidă Instrucţiunea vidă se reduce la caracterul ; şi se foloseşte în acele construcţii în care este necesară prezenţa unei instrucţiuni fără a fi nevoie să se realizeze anumite operaţii. Instrucţiunea de atribuire Instrucţiunea de atribuire se obţine punând ; după o expresie de atribuire. Deci o expresie devine o instrucţiune dacă este urmată de ; (punct şi virgulă). Instrucţiunea compusă Instrucţiunea compusă este o succesiune de declaraţii urmate de instrucţiuni, succesiune care se include între acolade. Dacă există declaraţii atunci ele definesc variabile care sunt valabile numai în cadrul instrucţiunii compuse respective. Instrucţiunea if În limbajul C, instrucţiunea condiţională de bază este instrucţiunea if. Formatul general al instrucţiunii if este: if (expresie) instrucţiune1; else instrucţiune2;
  • 9. 27 Efectul acestei instrucţiuni este următorul: se evaluează expresia din paranteze. Dacă valoarea este adevărat (diferită de 0) atunci se execută instrucţiune1 altfel se execută instrucţiune2, apoi în ambele situaţii se trece la instrucţiunea următoare instrucţiunii if. Deoarece instrucţiunea if testează valoarea numerică a unei expresii, următoarele construcţii sunt echivalente: if(expresie!=0) … if(expresie) … Exemplu: if(x) if(y) printf("1"); else printf("2"); În acest caz, ramura else care tipăreşte valoarea 2 este legată de instrucţiunea if(y). if(x) { if (y) printf("1"); } else printf("2"); În acest caz, datorită instrucţiunii compuse, ramura else care tipăreşte valoarea 2 aparţine instrucţiunii if(x). Orice instrucţiune de atribuire închisă între parantezele expresiei din cadrul instrucţiunii if este de fapt o expresie, a cărei valoare de adevăr este egală cu valoarea atribuită. Exemplul: if(i=0) printf("Variabila i are valoarea 0"); else printf("variabila i are o valoare diferită de 0"); este greşit deoarece în loc să se folosească operatorul == se foloseşte operatorul de atribuire iar în acest caz valoarea de adevăr a expresiei de atribuire este 0 (fals), deci întotdeauna se va afişa mesajul “variabila i are o valoare diferită de 0” indiferent de valoarea iniţială a lui i.
  • 10. 55 Metode de sortare Sortare ordinară Cel mai simplu algoritm de sortare (dar şi cel mai ineficient) se bazează pe următorul principiu: un şir este sortat dacă prin parcurgerea lui de la început până la sfârşit, fiecare element este mai mic decât succesorul. Dacă această condiţie nu este îndeplinită, inversăm cele 2 elemente. Sortarea se încheie în momentul în care parcurgerea şirului se face fără a fi necesară nici o inversare (fiecare element este mai mic decât succesorul său). 3 7 4 9 2 8 3 4 7 9 2 8 3 7 4 2 9 8 i=1; inversam a[1]=7 cu a[2]=4; k=1 i=3; inversam a[3]=9 cu a[4]=2; k=1 i=4; inversam a[4]=9 cu a[5]=8; k=1 3 7 4 2 8 9 k<>0 deci pornim un nou ciclu; i=1 inversam a[1]=7 cu a[2]=4; k=1 3 4 7 2 8 9 i=2; inversam a[2]=7 cu a[3]=2; k=1 3 4 2 7 8 9 k<>0 deci pornim un nou ciclu; i=1 inversam a[1]=4 cu a[2]=2; k=1 3 2 4 7 8 9 k<>0 deci pornim un nou ciclu; i=0 inversam a[0]=3 cu a[1]=2; k=1 2 3 4 7 8 9 k ramane 0 (nu facem nici o inversare) deci sirul este sortat
  • 11. 56 #include<stdio.h> #include<conio.h> void sortare_ordinara(int a[], int n) { int i,j,k,elem; do { for(i=0,k=0;i<n-1;i++) //la fiecare început de parcurgere a şirului, k este iniţializat cu 0 if(a[i]>a[i+1]) //dacă elementul curent este mai mare decât succesorul este necesară inversarea //lor; atenţie: dacă punem mai mare sau egal şi avem 2 elemente egale, vom //ajunge la ciclu infinit { elem=a[i]; a[i]=a[i+1]; a[i+1]=elem; k=1; //k diferit de 0 indică faptul că s-a făcut o inversare } } while(k); //sortarea se încheie în momentul în care k a rămas 0 (deci nu s-a făcut nici o //inversare de elemente } void main(void) { int n,a[100],i; printf("Introd dim sirului:"); scanf("%d",&n); printf("Introd elem sirului:n"); for(i=0;i<n;i++) { printf("a[%d]=",i); scanf("%d",a+i); } sortare_ordinara(a,n); printf("Sirul sortat este: "); for(i=0;i<n;i++) printf("%d ",a[i]); putchar('n'); getch(); }
  • 12. 84 Metoda Divide et Impera Suma elementelor unui şir Să se calculeze suma elementelor unui şir folosind Divide et Impera. #include<stdio.h> #include<conio.h> int a[20]; int divide(int ls, int ld) { int mijloc,d1,d2; if(ls!=ld) { mijloc=(ls+ld)/2; d1=divide(ls,mijloc); d2=divide(mijloc+1,ld); return(d1+d2); } else return(a[ls]); } void main(void) { int I,n; printf("Introd nr de elem ale sirului:"); scanf("%d",&n); for(I=0;I<n;I++) { printf("a[%d]="); scanf("%d",a+I); } printf("Suma elem este: %dn",divide(0,n-1)); getch(); }
  • 13. 85 Problema “Turnurilor din Hanoi” Legenda acestei probleme spune că Brahma a fixat pe Pământ trei tije de diamante şi pe una din ele a pus în ordine crescătoare 64 de discuri de aur de dimensiuni diferite, cu discul cel mai mare jos. Singura operaţiune permisă călugărilor era mutarea a câte unui singur disc de pe o tijă pe alta, astfel încât niciodată să nu se pună un disc mai mare peste unul mai mic. Legenda spune că atunci când călugării vor muta toate cele 64 de discuri respectând regulile de maa sus, atunci va veni sfârşitul lumii. Presupunând că în fiecare secundă se mută un disc, lucrând fără întrerupere, cele 64 de discuri nu pot fi mutate nici în 500 de miliarde de ani de la începutul acţiunii! Vom considera trei tije verticale notate Stânga, Mijloc, Dreapta. Pe tija Stânga se găsesc aşezate n discuri de diametre diferite, în ordinea descrescătoare a diametrelor, privind de jos în sus. Iniţial, tijele Mijloc şi Dreapta sunt goale. Să se afişeze toate mutările prin care discurile de pe tija Stânga se mută pe tija Mijloc, în aceeaşi ordine, respectând următoarele reguli:  la fiecare mişcare se mută un singur disc  un disc mai mare nu poate fi plasat peste un disc cu diametrul mai mic  un disc mai mare nu poate fi plasat peste un disc cu diametrul mai mic #include<stdio.h> #include<conio.h> int n; void scrie(char a, char b) { printf("Muta discul de pe %c pe %cn",a,b); } void muta(int n, char a, char b, char c) { if (n==1) { scrie(a,b); return; } else { muta(n-1,a,c,b); scrie(a,b); muta(n-1,c,b,a); } }
  • 14. 86 void main(void) { printf("Introd nr de turnuri:"); scanf("%d",&n); muta(n,'S','M','D'); getch(); } Elementul maxim într-un şir Se citeşte un şir de n elemente numere întregi. Să se găsească maximul elementelor acestui şir utilizând metoda divide et impera. #include<stdio.h.h> int a[10],n; int max(int i ,int j) { int a,b; if (i==j) return a[i]; else { a=max(i, (i+j)/2), b=max((i+j)/2+1,j); if (a>b) return(a); else return(b); } } void main(void) { int i; printf("n="); scanf("%d",&n); for (i=0;i<n;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } printf("maximul este %dn",max(0,n-1)); }