Documente Academic
Documente Profesional
Documente Cultură
Programele sunt scrise pentru a instrui masinile sa lucreze cu taskuri specifice sau sa rezolve
probleme specifice. O procedura (descrisa pas cu pas) asociata unui task se
numeste algoritm. Programarea este activitatea de comunicare (codificare) a algoritmilor in
calculatoare. Procesul de programare are (in general) patru pasi:
1. Specificarea task-ului;
2. Descoperirea unui algoritm pentru solutia sa;
3. Codificarea algoritmului in C;
4. Testarea codului.
Un calculator este o masina electronica digitala compusa din trei componente:
1. procesor (central processing unit sau CPU);
2. memorie;
3. dispozitive de intrare/iesire.
Procesorul lucreaza cu instructiuni care sunt inregistrate in memorie. Pe langa aceste
instructiuni, in memorie sunt pastrate si date. Dispozitivele de intrare/iesire iau informatii de
la agenti externi catre masina si produc informatii pentru acesti agenti.
Dispozitivele de intrare sunt (de obicei):
1. tastatura;
2. discheta;
3. banda;
4. CD-ROM.
Dispozitivele de iesire sunt (de obicei):
1. ecranul terminalului;
2. imprimanta;
3. discheta;
4. banda;
5. CD-ROM.
Sistemul de operare consta intr-o colectie de programe speciale si are doua scopuri principale:
1. coordoneaza resursele (memoria, procesorul, imprimanta) masinii. De exemplu, daca un
fisier este creat pe disc sistemul de operare are grija de detaliile localizarii acestuia si
memoreaza numele, lungimea si data creearii;
2. produce instrumente necesare utilizatorilor, multe dintre ele sunt folositoare utilizatorilor
C. De exemplu, doua dintre acestea sunt un editor de texte si un compilator de C.
Un cod C se numeste cod sursa, iar un fisier ce contine un cod sursa se numeste fisier sursa.
Dupa ce a fost creat un fisier sursa, atunci se invoca un compilator de C. De exemplu, pentru
sistemele MS-DOS se poate da comanda:
indica ca acest fisier se gaseste in biblioteca C (pentru compilatorul Borland 3.1 pentru MSDOS, acesta se gaseste in subdirectorul BC31/INCLUDE). Am inclus acest fisier deoarece
acesta contine informatii despre functia "printf()".
2. main()
Fiecare program are o functie numita "main", care se executa intai. Parantezele ce urmeaza
dupa "main" indica compilatorului ca aceasta este o functie.
3. {
Acolada stanga incepe corpul fiecarei functii. O acolada dreapta corespunzatoare trebuie sa
fie la sfarsitul functiei.
4. printf()
Sistemul C contine o biblioteca standard de functii care poate fi utilizata in programe.
"printf()" este o functie din biblioteca care tipareste pe ecran. Aceasta este o functie descrisa
in biblioteca
"stdio.h" (care se numeste prototipul functiei "printf()").
5. "azi am inceput laboratoarele de C\n"
Un sir constant in C consta dintr-un numar de caractere incadrate intre ghilimele. Acest sir
este un argument al functiei "printf()". Caracterele \n de la sfarsitul sirului (se citesc
"backslash n"), reprezinta, de fapt, un singur caracter numit "newline".
O forma echivalenta a programului de mai sus:
#include
main()
{
printf("azi am inceput ");
printf("laboratoarele de C\n");
}
Observatii:
1. Primul "printf" contine la sfarsit un spatiu.
1.2 Variabile, expresii si asignari
In urmatorul exemplu vom ilustra folosirea variabilelor pentru manipularea valorilor intregi.
Variabilele sunt folosite sa memoreze valori. Din moment ce diferite tipuri de variabile sunt
folosite sa memoreze diferite tipuri de date, tipul fiecarei variabile trebuie specificat.
Pentru a ilustra aceasta idee vom calcula cate ore si minute contin un anumit numar de zile.
Algoritmul ar fi:
1. asigneaza un numar de zile unei variabile;
{
declaratii
instructiuni
}
Un nume de variabila, numit si identificator, consta dintr-o secventa de litere, cifre si
"underscore", dar fara a incepe cu cifra. Cuvintele cheie, numite si cuvinte rezervate, nu pot fi
utilizate ca nume de variabile. Exemple de cuvinte cheie: char, int, float.
Operatorii binari: + - * / %
Sunt folositi pentru adunare, scadere, inmultire, impartire sau modul.
Exemple: 5 % 2 = 1 si 7 % 4 = 3.
Evident, in expresia a % b, b nu trebuie sa fie zero, din moment ce nu se poate face impartirea
cu zero.
1.3 Un exemplu de utilizare a variabilelor de tip float
#include
main()
{
float x, y;
x = 1.0;
y = 2.0;
printf("Suma dintre x si y este %f.\n", x+y);
}
Pe ecran se va afisa:
Suma dintre x si y este 3.000000.
Observatii:
1. Linia: float x, y;
Semnifica declararea variabilelor x si y de tip "float" (deci de tip real). In realitate sunt
numere rationale din intervalul
[-10^{308},-10^{-308}] U [10^{-308},10^{308}].
2. Linia: printf("Suma dintre x si y este %f.\n", x+y);
Are doua argumente si reprezinta o tiparire la ecran. De remarcat, ca spre deosebire de
exemplele precedente (unde foloseam formatul %d), aici folosim formatul pentru numere
reale, care este "%f".
3. Precizarea tipului variabilelor este esential. De exemplu, daca, sa zicem, ca x=7.0 si
y=2.0, sunt declarati ca fiind de tip float, atunci x/y se evalueaza la 3.5. Daca, insa x=7 si
y=2, sunt declarati ca fiind de tip int, atunci x/y se evalueaza la 3 (ramane doar partea
intreaga).
1.4 Initializarea variabilelor
Initializarea variabilelor se poate face si cand se declara acestea. De exemplu, putem scrie:
char c='A';
int i=1;
Putem astfel modifica programul precedent, inlocuind liniile
int zile, ore, minute;
zile=7;
cu
int zile=7, ore, minute;
Observatii:
1. De obicei, pentru initializarea unei variabile se folosesc constante sau expresii constante.
Se pot insa folosi si variabile care au deja valoarea precizata. De exemplu, urmatoarea
secventa de program este corecta:
int zile=7, ore=zile * 24, minute=ore * 60;
1.5 Folosirea directivei #define
Reamintim ca in procesul de compilare a programelor C, intai este invocat preprocesorul. De
exemplu, pot fi incluse fisiere, sau anumite siruri de caractere specificate pot fi modificate in
alte siruri. Directivele de preprocesare incep cu caracterul # (in C traditional, acesta trebuie
pus pe prima coloana, pe cand in ANSI C poate fi precedat de spatii). Se recomanda scrierea
# pe prima coloana, iar a directivelor de precompilare la inceputul programului. Iata cateva
exemple de folosire a directivei "#define":
#define LIMIT 100
#define PI 3.14159
Observatii:
1. Daca aceste directive de preprocesare apar la inceputul fisierului, atunci in momentul
compilarii preprocesorul schimba toate aparitiile identificatorului LIMIT la 100 si a lui PI cu
3.14159. Singurele care raman neschimbate sunt sirurile constante.
De exemplu, preprocesorul va schimba:
printf("PI = %f\n", PI); in printf("PI = %f\n", 3.14159);
Deoarece identificatorul PI se va inlocui peste tot (cu exceptia sirurilor constante) in 3.14159,
atunci acesta se va numi constanta simbolica.
2. Directiva #define poate aparea oriunde in program, dar ea afecteaza numai liniile care
urmeaza acesteia.
Instructiunea while face parte din categoria actiunilor repetitive. Pentru a intelege aceasta
instructiune, vom face un exemplu de adunare a numerelor de la 1 la 10.
Exemplu:
#include
main()
{
int i=1, suma=0;
while (i<=10)
{
suma = suma + i;
i = i + 1;
}
printf("Suma primelor 10 numere este %d\n",suma);
}
Explicatii:
1. La linia: int i=1, suma=0;
Se declara variabilele i si sum de tip int si sunt initializate cu 1 si 0, respectiv.
2. Constructia:
while (i<=10)
{
suma = suma + i;
i = i + 1;
}
Reprezinta o instructiune while (sau iteratie while). Mai intai, se evalueaza expresia i<=10.
Cum valoarea initiala a lui i este egala cu 1, rezulta ca se vor executa instructiunile dintre
acolade. Astfel, variabila suma va fi asignata cu vechea valoare a lui suma la care se adauga
valoarea lui i. Deci, suma se evalueaza la 1. Apoi, variabila I se evalueaza la suma dintre
vechea valoare a lui i (i=1) si 1, deci este egala cu 2. In acest moment, executia revine la
inceput adica evaluam expresia i<=10. Cum valoarea lui i este 2, rezulta ca se va executa iar
corpul lui while. La sfarsitul acestei iteratii, suma este evaluata la 1+2, iar i la 3. Se observa
usor ca i<=10 este tot adevarata, deci se va executa din nou corpul lui while. La sfarsitul celei
de-a treia iteratii, sum este evaluata la 1+2+3, iar i la 4. Procesul continua pana cand valoarea
lui i este 11, care implica falsitatea expresiei i<=10. Astfel se iese din bucla while.
3. Instructiunea:
printf("Suma primelor 10 numere este %d\n", suma);
va afisa mesajul Suma primelor 10 numere este 55.
4. Formatul general al instructiunii while este:
while (expresie)
instructiune
unde instructiune poate fi o singura instructiune sau un grup de instructiuni delimitate prin
{ si } (care se mai numeste si instructiune compusa).
Observatii:
1. Programatorii incepatori uneori cred ca vor "sparge" piata cu stilul lor propriu de redactare
a programelor. Atentie ! Utilizati strategia care este deja in uz.
1.9 Erori de programare frecvente
Mai ales la inceputul invatarii programarii pe calculator, se fac multe erori simple, cum ar fi:
1. neinchiderea sirului cu ghilimele drepte. Cand compilatorul intalneste ghilimeaua stanga,
atunci incepe sa colecteze toate caracterele care urmeaza spre a forma un sir de caractere,
pana intalneste ghilimeaua dreapta. Daca aceasta nu exista, atunci compilatorul da mesajul
de eroare, de tipul:
Unterminated string or character constant
2. scrierea gresita a numelui variabilelor;
3. nedeclararea lor.
In general, compilatorul da un mesaj de eroare potrivit, alteori din cauza interpretarii
separate, nu. De exemplu, scriem gresit "prinf()" in loc de "printf()". Atunci compilatorul va
da un mesaj prin care ne informeaza ca nu gaseste functia "prinf()". Deci, el nu isi da seama
de omiterea unei litere, ci o interpreteaza in mod diferit.
4. daca dorim sa citim o variabila de tip double, atunci in functia "scanf()" trebuie sa
specificam formatul "%lf";
5. faptul ca uneori uitam ca in formatul "%m.nf" pentru afisarea cu virgula mobila, m
semnifica lungimea campului. De exemplu, pentru a specifica doua zecimale la dreapta si
trei la stanga, nu trebuie sa scriem %2.3f, ci %6.3f deoarece se numara si punctul zecimal;
6. poate cea mai frecventa greseala cand se foloseste scanf() este uitarea operatorului de
adresa. Daca, de exemplu, scriem
scanf("%d%d", a, b) in loc de scanf("%d%d", &a, &b)
atunci compilatorul nu se va "prinde" de eroare. Bineinteles, ca vom obtine rezultate eronate
(run-time error) care sunt ceva mai greu de corectat.
1.10 Redirectarea intrarii si iesirii
Putem citi valorile variabilelor dintr-un fisier, nu neaparat de la tastatura. De exemplu, fisierul
nostru executabil se numeste "ex1.exe". Pentru a extrage datele din fisierul de intrare "in.dat",
dam comanda
ex1.exe < in.dat
Putem, de asemenea, sa scriem valorile unor variabile intr-un fisier extern, sa zicem "out.dat".
Astfel dam comanda
ex1.exe > out.dat
Evident, daca se doreste atat citirea unor variabile din fisier, cat si scrierea rezultatelor in alt
fisier, atunci se va da comanda
ex1.exe < in.dat > out.dat
Exemplu:
#include
main()
{
char ch;
while (scanf("%c", &ch) ==1)
{
printf("%c", ch);
printf("%c", ch);
}
}
a_{n+2}=a_{n+1}+a_n, n>=1
Negreanvictor@gmail.com
www.littlemicrosoft.tk
Macroeconomie
COSTURILE
Costul de productie
Costul de oportunitate.
COSTUL DE PRODUCTIE
COSTUL DE OPORTUNITATE
PRODUCTIVITATEA
PRETUL
Preturi
Preturi
Preturi
Preturi
inalt-active
inalt-pasive
joase-active
joase-pasive.