UNIX, Linux, Programare, Scripting, Retele
unix, linux, programare, script, hosting, server, retele
|
Lista Forumurilor Pe Tematici
|
UNIX, Linux, Programare, Scripting, Retele | Reguli | Inregistrare | Login
POZE UNIX, LINUX, PROGRAMARE, SCRIPTING, RETELE
Nu sunteti logat.
|
Nou pe simpatie: AlexandraBuc89 la Simpatie.ro
 | Femeie 19 ani Bucuresti cauta Barbat 27 - 65 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
OK, a trecut destul timp si banuiesc ca nu mai sunt intrebari pentru "Lectia 01". Inainte sa trec la "Lectia 02" fac niste presupuneri, si anume: (1) aveti undeva acces la un shell UNIX ca sa puteti testa codurile care le-am pus, (2) ati inteles in mare care e ideea de compilator si (3) v-a placut prima lectie si vreti mai mult  Bun, hai sa incepem... Dupa cum stiti sau v-ati dat seama din lectia anterioara fiecare fisier care contine cod sursa scris in C trebuie sa aiba extensia .c. Acum faceti un fisier l2.c exact asa cum ati facut fisierul l1.c in lectia anterioara si puneti urmatorul continut:
Code:
int main(){
write(1,"Hello, world!n",14);
return 0;
} |
Compilati-l cu comanda "cc l2.c -o l2" si apo rulati-l ( ./l2 ). Ar trebui sa va apara un mesaj de genul "Hello, world!" iar pe linia urmatoare sa vedeti din nou promptul. Bun, acum sa "disecam" programul sa vedem ce inseamna fiecare chestie de acolo:
Primul program Pe prima linie vedeti "int main()". Asta inseamna ca se apeleaza functia main() care returneaza o valoare de tip intreg (va explic mai tarziu ce inseamna asta). Functia main() este cea care face toata treaba intr-un program. Este functia principala, dupa cum ii spune si numele, din care sunt apelate restul functiilor. Cand incepe programul sa ruleze prima, adresa de executie care o primeste este cea la care este gasita functia main(), functie care apeleaza mai tarziu fiecare functie care este "notata" in interiorul ei.
Dupa cum vedeti, tot ce este dupa main pana la sfarsit este cuprins intre acolade. Acoladele sunt echivalentul cuvintelor begin si end din pascal. Adica, o acolada deschisa "{" ne spune "Aici incepe continutul functiei" iar o acolada inchisa "}" ne spune "Aici se termina continutul functiei". Cu alte cuvinte, tot codul corespunzator functiei este trecut intre { si }.
Puteti observa ca functia main() are o singura linie ca si continut si anume: write(1,"Hello, world!n",14);. write() este una din functiile standard din C care ne permite sa scriem ceva, undeva. Functiile din C pot primi parametrii care sunt pusi intre paranteze si sunt separati de virgula. In cazul nostru, functia write a primit ca parametrii: 1, "Hello, world!n" si 14. Ce inseamna parametrii astia ? Fiecare functie este facuta sa raspunda intr-un anumit fel unui parametru care il primeste. In cazul de fata, functia write(), are nevoie de 3 parametrii pentru a functiona. Primul parametru care il asteapta ii spune UNDE sa scrie ceea ce are de scris. Parametru corespunzator este 1 care in cazul de fata inseamna iesirea standard (monitorul sau terminalul pe care ne-am conectat). Al doilea parametru este mesajul care trebuie afisat. Mesajul poate fi scris direct, pus intre ghilimele (cum am facut noi) sau poate fi continut de o variabila si ca parametru trecem variabila. Eu am ales pentru acest exemplu varianta cea mai simpla: un text static pus intre ghilimele. In sfarsit, ultimul parametru (14) ii spune functiei cate caractere sa afiseze. In sfarsit, inainte de a se termina functia main() vedeti linia return 0;. Asta spune programului ca la sfarsit sa returneze sistemului de operare valoarea 0 (daca nu ar fi functia main, valoarea ar fi returnata catre functia apelanta).
Lectia a fost scurta. Ca tema de casa jucati-va putin cu programul. Schimbati mesajul, schimbati numarul de caractere... testati si vedeti ce se intampla. Continuarea lectiei (nu lectia urmatoare) va veni mai tarziu in care mai dau cateva explicatii despre CE si DE CE se intampla.
_______________________________________ Portal SkullBox SkullBox Forum IP Finder and web browser details revealer
|
|
pus acum 18 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
Acum partea a doua a cursului (data viitoare ar trebui sa-l fac separat si sa public tot textul odata). Am observat cum functioneaza in mare un program in C, am si folosit o functie si am inteles ca trebuie sa-i dam niste parametrii functiei write() pentru a functiona normal. Acum sa trecem mai departe sa ne facem viata mai usorara (sau mai grea). C-ul ca limbaj stie foarte putine. Are un set de cuvinte cheie (32) cu care se face toata treaba. Cuvintele cheie sunt urmatoarele:
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
|
Vom vedea mai tarziu la ce sunt bune si cum se folosesc. Pentru a-l extinde putin, s-au facut diferite librarii care au functii si structuri predefinite pentru ca noi sa nu reinventam roata de fiecare data cand ajungem intr-o situatie. Ca sa va dau un exemplu, luam functia write. Pentru a afisa un camp cu date mixate (caractere, numere intregi, numere reale etc) trebuie sa apelam functia de mai multe ori. Ca sa ne fie mai usor putem folosi functia printf() careia ii dam ca parametrii un text formatat + niste caractere predefinite iar dansa apeleaza functia write de cate ori e nevoie si in modul in care trebuie sa o faca. Hai sa facem un exemplu concret. Modificati fisierul l2.c sau creati un fisier l2a.c care contine urmatoarele:
Code:
#include <stdio.h>
int main(){
printf("Afisam un numar (%d), un caracter (%c) si un sir(%s)n",12,'a',"abcd");
return 0;
} |
Bun... ce am facut ? Pe prima linie vedeti ceva nou. E un header. In C headerele se includ cu directiva #include. In cazul nostru am folosit headerul <stdio.h> pentru a putea folosi functia predefinita printf(). Bineinteles, headerul defineste mult mai multe functii si structuri dar pe noi ne intereseaza momentan doar functia printf(). In interiorul functiei main() se poate observa ca am apelat functia printf() cu niste parametrii. Pun mai jos prototipul functiei asa cum apare in manual si expli mai apoi ce inseamna:
printf(const char * restrict format, ...); |
Ce inseamna chestia asta ? Spus pe scurt si sarind peste detalii, functia asteapta o constanta preformatata (un sir de caractere) ca prim parametru iar apoi alte date. In cazul nostru constanta e "Afisam un numar (%d), un caracter (%c) si un sir(%s)n" iar "alte date" sunt 12,'a',"abcd". In sirul preformatat puteti vedea niste caractere prefixate de semnul procent '%'. Caracterele respective sunt caractere de formatare. Fiecarui caracter de formatare trebui sa-i corespunda un parametru al functiei. Adica, primului caracter de formatare intalnit in sir, '%d' ii corespunde primul parametru care apare dupa sirul formatat (adica al doilea parametru al functiei). Celui de-al doilea caracter de formatare, '%c' ii corespunde al doilea caracter de dupa sirul preformatat, adica al treilea parametru al functiei and so on... Ce se intampla de fapt ? Prin caracterele de formatare ii spunem compilatorului ce urmeaza sa-i "dam". Daca am pus in sirul preformatat %d, se asteapta ca acolo sa adaugam un numar intreg. Daca am pus %c se asteapta sa-i dam un caracter, daca am pus %s se asteapta sa-i dam un sir de caractere. Va pun mai jos codurile de formatare care le recunoaste C-ul cu mici explicatii de rigoare:
%d - un numar intreg cu semn %u - un numar intreg fara semn (adica doar numere naturale) %D - un numar intreg mare cu semn (va explic in lectia de variabile ce inseamna asta) %U - un numar intreg mare fara semn %f - un numar real cu semn %F - un numar real fara semn %c - un caracter %s - un sir de caractere
|
Bineinteles, nu sunt astea toate. Pe parcurs cand vom avea nevoie si de alte coduri de formatare voi veni cu explicatiile de rigoare. Ce e important de stiut, e faptul ca aceste caractere nu sunt folosite doar la afisare ci si la conversie. De exemplu, jucati-va putin cu codul prezentat mai sus. Vedeti ce se intampla daca al doilea parametru, care ar trebui sa fie un numar intreg, puneti 'c' (cu tot cu ghilimele). Dupa cum se poate observa, 'c' va fi inlocuit cu codul ASCII corespunzator... la fel puteti face si in cazul in care ii spuneti functiei printf() sa afiseze un caracter ( %c ) iar in loc de caracter puneti un numar (de ex. 64).
Cam atat momentan. Jucati-va putin cu codul de mai sus, faceti si voi alte texte care trebuiesc afisate, schimbati tipurile de date si valorile cu care trebuiesc inlocuite. Astept sa vad ceva coduri diferite de ce am facut mai sus 
Nota: Pentru cei care vor sa se joace ceva mai mult cu formatatul, puteti include in sirul preformatat urmatoarele:
Code:
t - pentru caracterul TAB
n - pentru linie noua |
P.S. Urmeaza inca o lectie introductiva ( "Lectia 3 - Variabile, constante si tipuri definite" ) dupa care ne punem serios pe codat 
_______________________________________ Portal SkullBox SkullBox Forum IP Finder and web browser details revealer
|
|
pus acum 18 ani |
|
zamolxe
Newbi
 Inregistrat: acum 18 ani
Postari: 12
|
|
|
pus acum 18 ani |
|
zamolxe
Newbi
 Inregistrat: acum 18 ani
Postari: 12
|
|
|
pus acum 18 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
Colaborarea ar fi buna... doar ca momentan, dupa cum vezi si tu, nu sunt doritori  Eu fac o pauza sa ma ocup de ale mele si poate peste ceva vreme cand mai intra lumea pe forum sa am cu cine sa fac un curs interactiv ma apuc sa scriu lectiile urmatoare. Se pare ca m-a luat entuziasmul pe sus si nu mi-am dat seama de inutilitatea unui astfel de curs  Oricum, mersi de propunere. Cand va fi cazul, te anunt 
_______________________________________ Portal SkullBox SkullBox Forum IP Finder and web browser details revealer
|
|
pus acum 18 ani |
|
zily
Newbi
Inregistrat: acum 18 ani
Postari: 2
|
|
|
pus acum 18 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
|
pus acum 18 ani |
|
zily
Newbi
Inregistrat: acum 18 ani
Postari: 2
|
|
|
pus acum 18 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
|
pus acum 18 ani |
|
Sad_Dreamer
Membru
Inregistrat: acum 18 ani
Postari: 57
|
|
|
pus acum 18 ani |
|
andoseg
Newbi
Inregistrat: acum 18 ani
Postari: 32
|
|
|
pus acum 18 ani |
|
operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
|
pus acum 18 ani |
|
andoseg
Newbi
Inregistrat: acum 18 ani
Postari: 32
|
|
|
pus acum 18 ani |
|