Slide 1

Documente similare
Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc

Limbaje de Programare Curs 6 – Functii de intrare-iesire

L7

Slide 1

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

SUBPROGRAME

Programarea şi utilizarea calculatoarelor

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

tehnologii web

Slide 1

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Paradigme de programare

Microsoft Word - PCLP2_Curs_4_2019.doc

E_d_Informatica_sp_SN_2014_bar_10_LRO

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word - CarteC.doc

PROGRAMARE ORIENTATA PE OBIECTE

Limbaje de Programare Curs 8 – Fisiere

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Paradigme de Programare

Limbaje de Programare Curs 5 – Siruri de caractere

E_d_Informatica_sp_MI_2015_bar_02_LRO

Laborator 3

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

LUCRAREA NR

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Top

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft Word - O problema cu bits.doc

Declararea variabilelor

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Programarea şi utilizarea calculatoarelor

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Object Oriented Programming

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

PPSD

Gestionarea I/E

PHP (II)

Lab6LCD

Programarea şi utilizarea calculatoarelor

proiectarea bazelor de date

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

-

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

PowerPoint-Präsentation

Microsoft Word - Curs1.docx

Ingineria Sistemelor de Programare

Microsoft Word - c6.doc

Microsoft Word - Lab1a.doc

Microsoft Word - Cuprins_LP.doc

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Diapositive 1

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Proiectarea Sistemelor Software Complexe

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

PCLPII-C16(9)

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft Word - Curs_08.doc

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

PowerPoint Presentation

Ghid privind raportările referitoare la decontarea internalizată conform articolului 9 din regulamentul privind depozitarii centrali de titluri de val

CURS

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

NORMĂ pentru aplicarea Ghidului ESMA privind raportările referitoare la decontarea internalizată conform articolului 9 din regulamentul privind depozi

Laborator 04: Apeluri de funcții

ALGORITHMICS

Tablouri (continuare)

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

SISTEM DE LICENȚIERE A CLUBURILOR DE FOTBAL FMF :SL/ST.11-d.02 Standard de calitate pentru licențiere (ED.2012) Ediția 2 Procedura de păstrare și arhi

PowerPoint-Präsentation

PowerPoint Presentation

Analiză de flux de date 29 octombrie 2012

Laborator 1-Teoria probabilitatilor si statistica matematica Sef lucrari dr.mat. Daniel N.Pop Departamentul de calculatoare si inginerie electrica 1 P

Aggregating Data

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Microsoft Visual C++ (abreviat MSVC) is a commercial integrated development environment (IDE) product engineered by Microsoft for the C, C++, and C++/

Microsoft Word - lab4.doc

Slide 1

Lucrarea nr

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Microsoft Word - Programarea Portului Paralel - IBM-PC. .doc

LUMINIŢA SCRIPCARIU

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Laborator 5 - Paradigme de Programare

Microsoft Word - Curs_07.doc

Transcriere:

CURS 4 Structura generală a unui program C Program - ansamblu de instrucţiuni incluse în una sau mai multe funcţii, care specifică operaţiile ce trebuie efectuate asupra unor date pentru a fi prelucrate în sensul dorit de către utilizator. Program C 0. Documentatie 1. Directive de preprocesare a) Includeri de fişiere cu text sursă b) Macrosubstituiri c) Includeri conditionate 2. Sectiunea de declaratii a) variabile b) tipuri utilizator c) functii... 3. Functia principala int main()... return 0; 4. Definirea functiilor utilizator

0. Documentatie - set de comentarii care conţin numele programului şi alte detalii utile programatorului. Exemple //Program: easycalc //Calculator pentru operatii elementare //Exemplu de folosire a instructiunii switch //Introducerea functiei system //system("c:\\windows\\system32\\calc.exe"); // - apeleaza aplicatia calc.exe

1. Directive de preprocesare a) Includeri de fişiere cu text sursă b) Macrosubstituiri c) Includeri conditionate Preprocesare - prelucrarea unui fişier sursă înainte de a fi supus compilării => un fişier temporar care conţine un cod sursă provenit în urma traducerii directivelor de preprocesare. Preprocesorul C - program separat, invocat de către compilator în prima parte a procesului de compilare a) Includeri de fişiere cu text sursă - se fac cu directiva # include printr-o construcţie de forma : #include <nume_fisier.h> #include "nume_fisier.c nume_fisier = fişier cu text sursă păstrat pe disc

În faza de preprocesare textul fişierului inclus se substituie construcţiei #include şi apoi ia parte la compilare împreună cu textul fişierului în care a fost inclus #include <nume_fisier.h> - se foloseşte pentru includerea fişierelor standard care conţin prototipuri pentru funcţiile de bibliotecă (librării). - instruiesc preprocesorul să trateze fişierele header ca şi cum ar face parte din codul sursă care se compilează. Librăriile sunt coduri gata compilate care se adaugă programului sursă C la compilarea acestuia. Parantezele unghiulare instruiesc compilatorul să caute fişierele care trebuie incluse în directorul cu fişiere antet (de exemplu, C:\BorlandC\include). Exemple: #include <stdio.h> #include <math.h> Construcţia #include "nume_fisier.c" se utilizează la includerea fişierelor nestandard care conţin prototipuri ale eventualelor funcţii definite de către utilizator. Fişierul care trebuie inclus se caută în directorul curent dacă nu este specificată nici o cale. Exemple: # include "factorial.c" # include "C:\\Dev-Cpp\\PERSLIB\\persmat.c"

b) Macrosubstituiri -substituirea unor nume prin succesiuni de caractere şi se fac cu directiva #define sub forma: #define succesiune_de_caractere (vezi constante simbolice). Macroprocesorul poate efectua şi substituţii de argumente în macrodefiniţii. Exemplu: #define max(a,b) (a>b?a:b) #define min(a,b) (a<b?a:b) #define grade_rad (x) ((x)*m_pi/180.0)

Program exemplu: macrodefiniţii #include <stdio.h> #include<conio.h> #define max2(a,b) (a>b?a:b) #define min2(a,b) (a<b?a:b) #define max3(a,b,c)(max2(a,b)>c?max2(a,b):c) #define schimb(a,b) t=a;a=b;b=t; #define moddif(a,b) ((a>b)?(a-b):(b-a)) #define suma(a,b) (a+b) int main() int a,b,t; printf("a= "); scanf("%d",&a); printf("b= "); scanf("%d",&b); printf("\nmaximul este %d",max2(a,b)); printf("\nminimul este %d",min2(a,b)); printf("\nmodulul diferentei este %d",moddif(a,b)); printf("\nsuma numerelor este %d",suma(a,b)); schimb(a,b); printf("\ndupa schimbare valorile a si b sunt %d si %d",a,b); while(!_kbhit()); return 0;

c) Includeri condiţionate - se folosesc pentru includerea unor fişiere numai atunci când este îndeplinită o anumită condiţie Exemplu: #if SYSTEM == MSDOS // daca sistemul de operare este MS-DOS #include <dos.h> // se foloseste headerul <dos.h> #else #include <windows.h> // altfel, se foloseste headerul <windows.h> #endif Includerile condiţionate se mai pot folosi pentru construirea grupurilor condiţionate sub forma: #ifdef MACRO text controlat #endif /* MACRO */ Textul controlat va fi inclus numai dacă este definită macrocomanda MACRO şi acest text poate include directive de preprocesare. Exemplu: #ifdef TURBOC #define INT_SIZE 16 #else #define INT_SIZE 32 #endif // in TurboC valorile intregi // se stocheaza pe 16 biti iar in SO Unix // acestea se stocheaza pe 32 biti // orice includere condiţionată se încheie cu #endif.

2. Sectiunea de declaratii a) variabile b) tipuri utilizator c) functii... În această secţiune se stabilesc numele şi atributele variabilelor, a tipurilor de date utilizator sau ale funcţiilor 3. Functia principala int main()... return 0; 4. Definirea functiilor utilizator

Tipuri de date în C -descriu tipurile valorilor diverselor variabile, constante, funcţii, etc. ale unui program. - fiecare variabilă folosită într-un program C trebuie să fie declarată compilatorului. - declaraţia va conţine numele variabilelor şi tipul acestora. Exemplu:... int zi,luna,an:... zi = 27; luna = 3; //variabilele zi, luna şi an au valori diferite dar au acelaşi tip an = 2019; float medie;... medie = 3; //variabilele luna şi medie au aceeaşi valoare dar tipuri diferite 1) Fiecărui tip de dată îi corespunde o denumire (un cuvânt cheie) care este utilizată pentru crearea în memorie a obiectelor ce vor conţine valori corespunzătoare tipului respectiv. 2) Fiecărui tip de date îi corespunde o anumită mărime a zonei de memorie în care se păstrează valoarea unei date de tipul respectiv. 3) Fiecărui tip de date îi corespunde o anumită gamă de valori, determinată de mărimea locaţiei de memorie corespunzătoare datelor de tipul respectiv.

Tipuri de date de bază (tipuri predefinite) - puse la dispozitie de catre limbajul de programare Tipuri de date derivate (tipuri utilizator) - se construiesc cu ajutorul tipurilor de bază

Tipuri de date de bază - tipurile predefinite in C: char - tip de date ale căror valori sunt reprezentate pe un singur octet (byte) int - tip de date ale căror valori sunt reprezentate pe 2 octeţi float - tip de date reale reprezentate în virgulă mobilă, în simplă precizie double - tip de date reale reprezentate în virgulă mobilă, în dublă precizie În plus, există câţiva calificatori care pot fi aplicaţi acestor tipuri de bază: unsigned, short şi long

Structura functiilor Functii in C - încapsulează una sau mai multe instrucţiuni, variabile şi parametri într-un pachet unificat care poate fi apelat din interiorul programului - împart sarcinile mari de calcul ale unui program în sarcini de complexitate mai mică Definirea functiilor tip nume (listă parametri formali) declaraţii instrucţiuni tip = tip de baza sau tipul void Funcţiile pot returna valori având ca tip: tipuri de bază pointeri structuri pointeri la structuri pointeri la tablouri Funcţiile nu pot returna: tablouri

Parametrii functiilor -o funcţie poate avea unul sau mai mulţi parametri, dar poate de asemenea să nu aibă nici un parametru. - sunt folosiţi pentru a face transferuri de date între funcţii - sunt de două feluri: a) parametri formali - nu reprezintă valori concrete ci ţin doar locul unor valori pentru a se putea exprima procesul de calcul realizat de către funcţie în momentul apelului ei - vor fi înlocuiţi de către cei actuali în momentul apelului funcţiei. b) parametri actuali - parametrii transmişi unei funcţii şi care reprezintă valori concrete cu care sunt apelate funcţiile. - pot fi constante, variabile, expresii - nu este obligatoriu ca numele parametrilor actuali să fie identice cu cele ale parametrilor formali. Transmiterea parametrilor între funcţii

Exemple: char ascii (int valoare) char c; c = (char) (valoare) return c; int cod (char c) int codc; codc = (int) (c) return codc; int cod (char c) return (int) (c); Variabilele din interiorul unei funcţii se numesc variabile locale şi aparţin clasei automatic. - sunt "vizibile" numai în corpul funcţiei în care au fost declarate şi există doar atâta timp cât funcţia în care au fost declarate se află în execuţie - la ieşirea din funcţie valorile lor sunt şterse din memorie (sunt volatile) Exemple: Variabile c este de tip automatic şi va fi alocată în memorie de fiecare dată când se execută funcţia suma. Compilatorul va crea un cod pentru alocarea dinamică a variabilei, pentru iniţializarea ei şi pentru eliminarea ei din memorie la încetarea execuţiei funcţiei suma.

Variabile statice - variabile locale care nu se alocă pe stivă ci într-o zonă specială de memorie, rezervată acestui tip de variabile - trebuie să fie precedate la declarare de cuvântul cheie static - spre deosebire de variabilele automatic ele există tot timpul şi nu numai atunci când este executată funcţia (nu îşi pierd valoarea între două apeluri ale funcţiei în care sunt declarate) Exemplu: static int c; Variabilele globale - variabile declarate în afara oricărei funcţii a programului - sunt iniţializate automat cu zero şi pot fi utilizate de către orice funcţie a programului - sunt variabile externe, adică pot fi utilizate într-o anumită funcţie a programului chiar dacă nu au fost declarate în funcţia respectivă - au tipul static automat. Recomandare: 1. Este recomandabilă folosirea variabilelor locale deoarece acest lucru conduce la urmărirea mai uşoară a codului unei funcţii particulare. 2. Dacă folosirea variabilelor locale conduce la transmiterea multor parametri sau la reproducerea inutilă a mai multor variabile, atunci este recomandabil să fie folosite variabile globale.

Apelul funcţiilor O funcţie se apelează printr-o construcţie de forma: nume (listă parametri efectivi) Parametrii efectivi - argumentele funcţiei (adică parametrii cu care se apelează funcţia) - trebuie să corespundă cu cei formali (folosiţi la declararea funcţiei) în ordine şi tip. - sunt pasati funcţiilor prin valoare, astfel încât funcţia primeşte o copie a argumentului şi deci ea poate modifica argumentul său fără a modifica originalul. Pentru ca o funcţie să poate modifica argumentul original i se va transmite un pointer la acesta. Valorile returnate de către funcţii pot fi folosite ca şi argumente ale altor funcţii # include <stdio.h> int f(int n) return 2*n; int g(int n) return n*n; int main() int m; printf("introduceti o valoare intreaga: "); scanf("%d",&m); printf("f(x)=%d \t f(g(x))= %d", f(m),f(g(m))); printf("\nf(x)=%d \t g(f(x))= %d", f(m),g(f(m))); return 0;

Program exemplu: calculul mediei valorilor unui şir de elemente //exemplu functie avand ca parametru un tablou #include<stdio.h> #include<conio.h> float medie (int n, float sir[]) int i; float m,s=0; for(i=0;i<n;i++) s=s+sir[i]; m=s/n; return m; int main() int n,i; float note[10],med; printf("n= "); scanf("%d",&n); for(i=0;i<n;i++) printf("n%d: ",i); scanf("%f",&note[i]); med=medie(n,note); printf("\nmedia: %.2f",med); return 0; Dimensiunea şirului poate fi omisă în prototipul funcţiei. De asemenea, valoarea primei dimensiuni a unui tablou multidimensional este opţională deoarece compilatorul nu are nevoie de valoarea primei dimensiuni pentru a calcula adresele elementelor tabloului ci numai de dimensiunile următoare. Astfel, dacă avem declaraţia: char Mat[6][8]; Adresa elementului Mat[2][3] va fi adresa lui Mat+2*8+3 deoarece Mat (numele tabloului) este un pointer având ca valoare adresa primului sau element.

Prototipul funcţiilor O funcţie poate fi apelată într-un anumit punct al unui program dacă a fost în prealabil definită în acel program. Totuşi, o funcţie poate fi apelată şi în cazul în care corpul de instrucţiuni urmează apelului ei. In acest caz, în secţiunea de declaraţii a programului trebuie declarat prototipul functiei. Prototipul unei funcţii = antetul ei urmat de ; - se foloseşte pentru declararea unei funcţii înainte de definirea ei - poate conţine doar tipul parametrilor formali ai funcţiei, fără numele lor Compilatorul utilizează datele din prototip pentru a verifica tipul parametrilor de la apel. În cazul în care un parametru efectiv are un alt fel de tip decât cel din prototip compilatorul converteşte automat valoarea parametrului efectiv spre tipul indicat în prototip. Fişierele header sunt fişiere cu astfel de prototipuri de funcţii predefinite ale limbajului.

Exemplu: int main ( ) long n, k, cnk ; double fact (long val); cnk = fact(n)/(fact(k)*fact(n-k)); return 0; // prototip fact // 3 apeluri ale lui fact //exemplu de funcţie factorial mai rapidă decât cele prezentate anterior double fact (long val) long rez=val; // antet fact // corp fact while(--val>1) rez*=val; return rez;

int decidebisect(...) int i;... i=(an%4==0 && an%100!=0) an%400==0); //un an este bisect dacă este divizibil cu 400 //sau dacă este divizibil cu 4 dar nu şi cu 100 //anii de sfârşit de secol nu sunt bisecţi chiar dacă urmează la 4 ani după un an bisect, //cu excepţia celor care sunt divizibili cu 400 //ani bisecţi "obişnuiţi": 1872, 1912, 1960, 1996, 2008... anii divizibili cu 4 //excepţii: 1800, 1900, 2100, 2200... anii de sfârşit de secol divizibili cu 100 //sunt totuşi ani bisecţi: 2000, 2400... anii de sfârşit de secol divizibili cu 400 int b, an; FILE *f; f=fopen("d:\\anibis.dat","w"); for(an=1872;an<=2110;an++) if(an%400==0) b=1; else if(an%100==0) b=0; else if(an%4==0) b=1; else b=0; fprintf(f,"\nan: %d\tbisect: %s",an,b==1? DA : NU );