M2G Posted August 5, 2013 Report Posted August 5, 2013 1.1 Getting startedInca din prima propozitie, capitolul incepe cu un sfat pe care l-as da si eu oricui m-ar intreba cum poate sa invete programare sau un limbaj nou. Adica, sa scrie efectiv programe in limbajul respectiv.Poate ca multi dintre voi au fost descurajati de acest capitol deoarece se trece destul de repede la chestii putin mai complicate dar acest capitol este doar pentru a arata posibilitatile si pentru ca voi sa aveti o imagine mai clasa asupra ce inseamna programarea in C. Declaratiile de variabile, functiile, structurile de control si de repetitie sunt explicate mai detaliat in capitolele urmatoare.Programul clasic atunci cand inveti un nou limbaj este afisarea pe ecran a frazei "Hello World!".#include <stdio.h>main(){ printf("hello, world\n");}Intrucat cartea este veche, acest cod nu mai corespunde cu standardul C din zilele noastre asa ca o implementare corecta din punctul de vedere al standardului actual este:#include <stdio.h>int main(){ printf("hello, world\n"); return 0;}Aflam ca fiecare program este format din funtii si variabile. Unde functiile reprezinta instructiuni care trebuie executate de catre procesor iar variabilele retin date care urmeaza a fi procesate cu ajutorul instructiunilor.Fiecare program trebuie sa aiba un punct de start (un punct de unde codul incepe sa se execute). Acest punct de start il reprezinta functia main. Functia main poate sa contina declaratii de variabile sau apelauri catre alte functii. Sa fac o mica comparatie: Pentru un program funtia main este ca si punctul de plecare intr-un traseu montan. Pleci dintr-un loc bine stiut si definit si poti sa ajungi in mai multe locuri(prin trasee alternative) in functie de deciziile pe care le iei pe parcurs. Dupa care te intorci la punctul de plecare pentru a pleca spre cabana. Cam asta se intampla si cu functia main. Se definesc instructiunile care urmeaza sa fie executate de procesor, se fac apeluri la alte functii care inglobeaza instructiuni iar la final se ajunge tot in functia main la secventa de cod return 0; care reprezinta incheierea cu succes a programului.Prima linie de cod din exemplul de mai sus reprezinta includerea fisierului stdio.h in programul nostru. Acest fisier este un fisier de librarie si contine functiile necesare pentru afisarea pe ecran al mesajului nostru(pe langa asta contine numeroase alte functii cu care se pot realiza operatii de input/output - I/O ).Pentru a afisa in mesaj pe ecran, se face un apel la functia prinf. apelul functiilor se face folosind numele lor si o lista de argumente. Functia va afisa pe ecran mesajul introdus si va returna numarul de caractere care au fost scrise cu succes pe ecran. Puteti sa va ganditi la apelul unei functii ca la un storcator de fructe. Lista argumentelor reprezinta inputul (fructele care le pui in stocator) iar iesirea reprezinta sucul (rezultatul procesarii datelor de intrare).Urmatorul program prezentat este un convertor de grade celsius - fahrenheit. Acesta este mai complicat intrucat foloseste variabile si instructiuni de control cum este bucla while. Acestea vor fi discutate ulterior, dupa cum am mai spus.#include <stdio.h>/* print Fahrenheit-Celsius tablefor fahr = 0, 20, ..., 300 */main(){ int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; }}In momentul prezentarii acestui exemplu aflam ce sunt comenturile in cod si ca acestea sunt ignorate de catre compilator in momentul compilarii. Sunt doar notite pentru programator.Tot aici aflam ca pentru a folosi o variabila aceasta trebuie declarata (in general la inceputul unei functii).Declarea se face folosind tipul variabilei si un nume.Exemplu:int variabilaTipIntregfloat variabilaTipVirgulaMobilachar variabilaTipCaracterAlegerea tipului variabilelor depinde de datele care urmeaza sa fie stocate in ele.(Numere intregi, numere cu virgula, caractere)Se mai specifica cateva lucruri despre functia printf si modul in care aceasta se foloseste.printf("%d\t%d\n", fahr, celsius);Functia printf este o functie care printeaza pe ecran text formatat astfel ca primul parametru este un sir de caractere care specifica cum anume textul afisat sa fie formatat.Se folosesc sintaxele speciale %d - pentru a printa un numar intreg (d vine de la decimal), %f - pentru a printa un numar cu firgula (f vine de la float), %c pentru a printa un caracter.De asemenea se poate si "aranja" modul in care textul este afisat.printf("%3d %6d\n", fahr, celsius);%3d reprezinta afisarea variabilei fahr pe un spatiu(latime) de 3 caractere pe cand %6d printeaza variabila celsius pe o latime de 6 caractere.argumentele care vin dupa sirul de caractere pentru formatare reprezinta variabilele ale caror valori vreti sa fie afisate. Ordinea in care acestea sunt scrise este importanta, primul caracter %d va fi inlocuit de valoarea primei variabile, urmatoare aparitie a %tip_formatare va corespunde celui de al treilea parametru al functiei(al doilea parametru dupa stringul de formatare) si asa mai departe.In continuare sunt prezentate cateva lucrui despre aritmetica care nu o sa le descriu aici pentru ca sunt destul de clare.Instructiunea repetitiva for (descrisa in capitolul 3)Aflam ceva interesant despre define-uri si "magic numbers" (numere care apar in cod ca si numere, nu ca si variabile - asta ingreuneaza intretinerea codului si poate produce buguri).Se specifica macroul #define (Mai multe despre acesta in capitolele viitoare).Ideea unui #define este ca defineste ceva existent ca un concept nou.Exemplu:// defineste pi ca fiind 3.14#define pi 3.14//se poate folosii ca:float piPlusUnu = pi + 1; // Aici se cauta pi, se determina ca este 3.14 si se inlocuieste in expresie// echivalent cu:float piPlusUnu = 3.14 + 1;Mai departe se vorbeste despre functia getchar si EOF si se dau exemple despre cum acestea pot sa fie folosite pentru a identifica numarul de caractere, cuvine sau linii citite.Se mai dau exemple de folosire a unor multimi (array) si functii. Nu intru in detalii, se vor clarifica mai tarziu.In subcapitolul 1.8 aflam despre call by value si ca variabilele transmise functiilor sunt transmise prin valoare, adica este transmisa functiei valoarea stoca in variabila respectiva iar orice modificare asupra variabilei respective in corpul functiei nu va afecta valoarea variabilei din exteriorul funtiei. Cu alte cuvine, se ia valoarea variabilei, se creaza o copie a ei si se foloseste in functie fara a afecta valoarea variabilei originale.Nota: Aici pot sa intervina probleme de performata daca se executa multe apeluri de functii prin valoare intrucat se copiaza de fiecare data valorile intr-o alta zona de memorie.In subcapitolul 1.9 se explica cum se pot forma sirusi de caractere folosind multimi de char - caractere independente. Este si un desen care exemplifica destul de bine cum aceste siruri de caractere se formeaza. Discutam ulterior daca nu va e clar.In capitolul 1.10 sunt explicate variabilele externe si vizibilitatea acestora in raport cu functiile din program.Ca un scurt overview, variabilele care sunt declarate intr-un bloc de cod sunt vizibile in blocul respectiv si in toate blocurile de cod care sunt incluse in acel bloc.Exercitiile care sunt propuse la sfarsitul capitoluli mi se par cam grele pentru cat s-a parcurs in acest capitol, poate revenim la ele mai tarziu.Bun, cine continua cu review la capitolele 2 si 3? Quote