LIMBAJ DE PROGRAMARE C
Acest limbaj de programare cu cel mai scurt nume posibil, a fost creat in 1972 de catre Dennis Ritchie si Brian Kernigham pentru dezvoltaea sistemului de operare UNIX. Istoria sa merita mentionata deoarece este relevanta pentru caracterizarea limbajului.
Asadar, se punea problema conceperii unui sistem de operare universal, care sa poata functiona, teoretic, pe orice tip de masina sistemul UNIX. Pentru aceasta era nevoie de un limbaj care sa exploateza toate posibilitatile unei masini, dar care nu putea fi limbajul de asamblare, deoarece el este specific masinii o noua implementare presupunea rescrierea integrala a sistemului. Din aceasta dilema s a putut iesi construind un limbaj de nivel inalt (initial limbajul B, ulterior C ) care introducea si concepte de nivel scazut, hardware ( registru, adresa, locatie de memorie absoluta etc.).
Mai bine de 90 % din sursele primului sistem de operare UNIX ( implementat pe o masina PDP 7 ) au fost scrise utilizand limbajul C, iar pentru restul modulelor, s a apelat la limbajul de asamblare. Sistemul astfel obtinut a fost distribuit impreuna cu codul sursa si cu descrierea noului limbaj folosit, cu intentia vadita de a l transforma intr un sistem de operare universal. Succesul nu a sosit imediat, dar era asigurat de noua metoda de lucru. Programatorii au fost incitati sa dezvolte acest sistem, extinzandu l cu noi module si sa il implementeze pe alte masini prin rescrierea acelei minime parti ( sub 10 % ) in limbaj de asamblare C devenea un limbaj de referinta.
Dupa acest scurt preambul, iata care sunt principalele caracteristici ale limbajului:
Limbaj structural de nivel inalt;
Poseda concepte de nivel scazut, ceea ce permite exploatarea portabila a caracteristicilor intime ale unei masini.
Spre exemplu, o variabila foarte des utilizata poate fi declarata register (registru ) si atunci ea va fi memorata intr un registru al microprocesorului, nu intr o locatie din memoria interna, marind ( uneori considerabil ) viteza de executie.
Rutine de conversie a datelor foarte evoluate ( conversii implicite, intrari, iesiri, conversii in memorie );
Tipuri de date ce pot fi definite de catre utilizator;
Gestionarea elaborata a datelor de tip dinamic;
Definirea unor noi functii;
Adresari indirecte ale datelor, variabilelor ( pointeri );
Recursivitate
Set complet de functii matematice etc.;
Functii pentru realizarea de grafica elementara 2D;
Functii de apel la servicii DOS;
Posibilitatea folosirii metodei overlay pentru un program;
Si nu in ultimul rand, concizie deosebita a limbajului ( set de operatori si instructiuni foarte concise).
Compilatorul C ofera programatorului o flexibilitate mai mare in scrierea programelor decat alte limbaje. De aceea, programarea in C e mai expusa la erori decat in Pascal. Varianta numita C++ imbina calitatile limbajului C cu avantajele programarii orientate pe obiecte ( POO ).
Asadar, iata un limbaj care suplimenteaza limbajul Pascal si poate pretinde pe drept cuvant suprematia in randul limbajelor structurate de uz general. Pentru versiunile standard ale implementarilor limbajului C, exista medii de programare de tip turbo ce apartin, dupa cum ne am obisnuit, firmelor : Microsoft produsul Quick C si Borland produsul Turbo C.
Borland C++4.0 este un mediu de programare ce permite crearea de aplicatii Windows ireprosabile din punct de vedere al prezentarii grafice si al functionarii. Sistemul Windowd poate fi manipulat in intimitatea sa cu Borland C++4.0, acest lucru insemnand ca stapanirea produsului nu este tocmai facila, ci necesita un efort deosebit in privinta studiului. Ca facilitate deosebita, mentionam posibilitatea realizarii unui multitasking cooperant.
Cum se scrie un program (in C) ?
Programele sunt scrise pentru a instrui masinile sa lucreze cu taskuri specifice sau sa resolve 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: bc ex1.c sau tcc ex1.c
iar pentru unele sisteme UNIX: cc ex1.c
Daca nu sunt erori in ex1.c, atunci aceasta comanda produce fisierul executabil asociat (ex1.exe).
Acum acesta poate fi rulat (executat) cu numele sau (ex1 sau ex1.exe).
In continuare, vom preciza trei dintre trasaturile procesului de compilare (mentionam ca asupra acestor notiuni, vom reveni cu detalii interesante intr-un capitol viitor):
1. invocarea preprocesorului;
2. invocarea compilatorului;
3. invocarea incarcatorului.
Preprocesorul modifica o copie a codului sursa prin includerea altor fisiere si facand alte schimbari. Compilatorul traduce aceasta in cod obiect folosit de incarcator pentru producerea fisierului executabil final. Fisierul care contine codul obiect se numeste fisier obiect. Fisierele obiect, spre deosebire de fisierele sursa, nu se pot intelege asa usor. Cand spunem deci compilare, de fapt invocam preprocesorul, compilatorul si apoi incarcatorul. Dupa ce scriem un program, acesta trebuie compilat si testat. Daca sunt necesare modificari, atunci codul sursa trebuie editat din nou. Asadar, partea proceselor de programare consta din ciclul:
editare ---> compilare ---> executie
Un prim program
O sa incepem cu un exemplu de program C necesar pentru tiparirea unui sir pe ecran.
#include <stdio.h>
main()
Folosind un editor de texte, presupunem ca am scris si salvat acest fisier numit 'ex1.c'. Cand programul este compilat si rulat atunci va apare pe ecran sirul:
azi am inceput laboratoarele de C.
Explicatii:
#include <stdio.h>
Liniile care incep cu '#' se numesc directive de preprocesare (precompilare). Acestea comunica cu preprocesorul. Aceasta directiva '#include' determina preprocesorul sa includa o copie a fisierului header 'stdio.h' in acest punct al codului. Parantezele unghiulare din '<stdio.h>' indica ca acest fisier se gaseste in biblioteca C (pentru compilatorul Borland 3.1 pentru MS-DOS, 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.
Primul 'printf' contine la sfarsit un spatiu.
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;
2. calculeaza numarul de ore si memoreaza-l intr-o variabila;
3. calculeaza numarul de minute si memoreaza-l intr-o variabila;
4. afiseaza numarul de zile, ore si minute pe ecran.
Urmatorul program scris in C reprezinta implementarea algoritmului precedent:
#include <stdio.h>
main()
Cand compilam si rulam acest program, pe ecran va apare mesajul:
O saptamana are 168 ore, 10080 minute.
Explicatii:
1. Linia
int zile, ore, minute;
reprezinta o declaratie de variabile. Variabilele zile, ore, minute sunt declarate de tip 'int', unul dintre cele mai importante tipuri din C. O variabila de tip 'int' poate lua o valoare intreaga intre-32678 si 32677. Toate variabilele dintr-un program trebuie declarate inainte de a fi utilizate.Declaratiile, la fel ca si instructiunile, au la sfarsit ';'.
2. Linia
zile=
reprezinta o instructiune de atribuire (sau asignare). Semnul '=' este operatorul de asignare de baza
in C. Valoarea expresiei din partea dreapta a simbolului '=' este atribuita variabilei din partea
stanga
3. Instructiunea
printf('O saptamana are %d ore, %d minute.n',ore, minute);
este similara celei prezentate in exemplul precedent, dar are trei argumente. Primul argument,intotdeauna un sir de caractere, se numeste sir de control. Aici, intalnim specificarea de conversie(care se mai numeste format) '%d'. Formatele '%d' determina tiparirea valorilor expresiilor corespunzatoare (al doilea si al treilea argument) in formatul intregilor zecimali. Asadar, primul format '%d' corespunde cu valoarea variabilei 'ore', iar cel de-al doilea format '%d' cu valoarea variabilei 'minute'.
In C, toate variabilele trebuie declarate inainte de a fi utilizate in expresii si instructiuni. Forma generala a unui program simplu este:
directive de precompilare
main()
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 devariabile.
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
Un exemplu de utilizare a variabilelor de tip float
#include <stdio.h>
main()
Pe ecran se va afisa
Suma dintre x si y este 3.000000.
AVANTAJE ALE LIMBAJULUI C
Cod mai eficient pentru operatiile de intrare/ iesire pe disc;
Modulul Vision contine mai putine erori de fabricatie decat cel din Pascal
Este de mentionat ca, in general, 99% din presupusele erori se datoreaza programatorului si numai 1 % sunt erori reale. O metoda sigura de a depista cine se inseala este de a intra cu un depanator in executabilul produs si de a analiza codul la nivelul de limbaj de asamblare.
Libertate de exprimare sporita, dar siguranta de functionare diminuata;
Concizie seducatoare a exprimarii
Programele sursa circula de regula in limbajul C.
In dictionarul de informatica, limbajul C este definit astfel:
Limbaj de programare dezvoltat de catre americanul Dennis Ritchie in cadrul laboratoarelor Bell in anul 1972.
Limbajul C pune la dispozitia programatorilor tipuri fundamentale de date : caractere,, numere intregi, numere reale. Pot fi create si tipuri derivate ca tablourile sau structurile. Tipul asresa ( sau pointer0 care corespunde notiunii de adresa a unui obiect, ofera numeroase posibilitati, indeosebi pentru operarea cu tablouri sau functii. Posibilitatea de a efectua compilari separate precum si existenta unei biblioteci de proceduri standard faciliteaza scrierea modulara a programelor. Conceptul initial ca un limbaj de nivel jos, C se caracterizeaza printr o sintaxa relariv flexibila ( mai ales datorita unei incadrari mai putin rigide a variabilelor in tipuri precum si datorita conversiilor implicite intre tipuri ) si prin notatii relativ ezoterice uneori ( care vizeaza concizia scrierii, dar ingreuneaza lectura). Limbajul C isi datoreaza notorietatea faptului ca prima sa utilizare a fost rescrierea completa a versiunii de referinta a sistemului de operare Unix. Astazi C este limbajul de referinta in mediul Unix.
C++ . Limbaj de programare conceput de Bjarne Stroustrup si formalizat prima oara in 1983.
C++ corecteaza unele neajunsuri ale limbajului C ( indeosebi prin introducerea unei rigurozitati crescute in cazul tipurilor ) si introduce posibilitatea folosirii notiunii de date abstracte precum si pe acea a programarii structurate pe obiect. Implementarea conceptelor de clasa, instanta si functii virtuale, existenta unor functii particulare atasate claselor ( constructorii si distructorii ), posibilitatea de control fin pentru dreptul de acces la obiecte prin notiunea de prieteni, posibilitatea de supraincarcare a operatorilor, plus existenta mecanismului de mostenire ( simplu sau multiplu ) au facut din C++ un limbaj foarte popular. C++ poate fi considerat un succesor al limbajului C.
BIBLIOGRAFIE
PC MANUALUL INCEPATORULUI DE DAN MARINESCU, GEORGE DIMITRIU SI MIHAI TRANDAFIRESCU, EDITURA TEORA
DICTIONAR DE INFORMATICA, EDITURA NICULESCU
INFORMATICA, MANUAL PREPARATOR PENTRU CLASA A IX a DE RODICA CHERCIU. MARCEL A. HOMORODEAN. SIMONA PETRESCU SI ROXANA BUTUROIU, EDITURA NICULESCU
|