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
UNIX, Linux, Programare, Scripting, Retele / Cursuri / [Curs] C - Lectia 02 - Primul program  
Autor
Mesaj Pagini: 1
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
Interesting

Mai am de asteptat pana ajungi la un curs mai util pentru mine

Keep up!


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
zamolxe
Newbi

Inregistrat: acum 18 ani
Postari: 12
Poate facem si noi o colaborare in legatura cu cursurile.
Poate te mai completez eu, poate tu pe mine. Ar fi buna o colaborarea zic eu


_______________________________________
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
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
[abacus@ asus tmp]$ nano l.c
[abacus@ asus tmp]$ cc l.c -o l
[abacus@ asus tmp]$ ls
l  l.c
[abacus@ asus tmp]$ ./l
Hello, world!
[abacus@ asus tmp]$
nice
ps: sunt doritori tu fa acolo cursu


_______________________________________
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
ok... m-ai convins... incep maine sa scriu urmatoarea lectie

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
zily
Newbi

Inregistrat: acum 18 ani
Postari: 2
da cat timp iti ia pana o termini ?

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
andoseg
Newbi

Inregistrat: acum 18 ani
Postari: 32
doh ! cred ca trebuie sa invatz mai intai operatorii si datele ! apoi sa invatz sa le asez in ordine cum zici tu oper. si cand ma gandesc sa deschid iar "cartea cartzilor" arrrrrrrrrrrrrrr    . oper mi s-a parut muly mai bine lectiile mai scurte . de fapt eu le`am intzeles mai bine. p.s am windows. mai rpd cu shell`ul ala cine`a zis ca le face gratis pt "elevi" ? . uitasem sa specific ceva de unde interesul meu pentru c++ . acum nu stiu cat timp , am luat un program de pe net .l`am instalat mi`a mers , mi`a placut mi se pare ca era un ceas clock timer ma rog, nu mi`a mers apoi ,  l`am dezinst. l`am reinst. si a doua oara nu se mai instaleaza ci mi se deschide o fereastra mica si incep ca curga niste caractere multe pct si virgule , mi se parea ca recunosc asta , cand vad la sfarsit , compiled with c++ sau visual basic  ori pascal? sa le ia drac cred ca una din primele variante . si am inceput sa visez ce misto ar fi sa fac si eu asa ceva ... daca ar fi .... si m-`am trezit

_______________________________________
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
Ei... relax... daca te pui putin pe treaba nu-ti ia mai mult de 2-3 luni sa poti face programele din alea dragute

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
Sad_Dreamer
Membru

Inregistrat: acum 18 ani
Postari: 57
in visual basic poti face chestii "dragutze" dar...dupa ce il inveti..ceva din el nu stai sa faci chestii "dragutze"..il abandonezi :-) sau te apuci sa creezi virushi/troieni/hack tools :-)) ca mine :-D...lucrez la un troian :-)

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
andoseg
Newbi

Inregistrat: acum 18 ani
Postari: 32
da da bravo sad cu ce-l faci ?

_______________________________________
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

andoseg a scris:

da da bravo sad cu ce-l faci ?

Il face in Visual Basic


_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
andoseg
Newbi

Inregistrat: acum 18 ani
Postari: 32
banuiam eu

_______________________________________
Portal SkullBox
SkullBox Forum
IP Finder and web browser details revealer


pus acum 18 ani
   
Pagini: 1  

Mergi la