Laborator 10 PCLP

Documente similare
Microsoft Word - CarteC.doc

Limbaje de Programare Curs 6 – Functii de intrare-iesire

SUBPROGRAME

Limbaje de Programare Curs 5 – Siruri de caractere

L7

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

Microsoft Word - PCLP2_Curs_4_2019.doc

Object Oriented Programming

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

Slide 1

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

Limbaje de Programare Curs 8 – Fisiere

Paradigme de Programare

LUCRAREA NR

Paradigme de programare

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

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

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

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

PRELEGERE XIII PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE Noţiunea de funcţie - continuare VI. Funcţii recursive O funcţie se poate activa n

Microsoft Word - CarteC.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

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

E_d_Informatica_sp_MI_2015_bar_02_LRO

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Laborator 3

Slide 1

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

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word _POO_Lab_1_Modificari_v01.htm

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

Programarea şi utilizarea calculatoarelor

E_d_Informatica_sp_SN_2014_bar_10_LRO

PHP (II)

Slide 1

Microsoft Word - c6.doc

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Microsoft Word - O problema cu bits.doc

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

Top

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

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

Diapositive 1

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

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

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

Gestionarea I/E

tehnologii web

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare

Lucrarea 10

-

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

proiectarea bazelor de date

Subiectul 1

Declararea variabilelor

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

Programarea şi utilizarea calculatoarelor

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

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

Microsoft Word - CarteC.doc

C++ Probleme

ALGORITHMICS

Creational design patterns

Lab6LCD

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

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Proiectarea Sistemelor Software Complexe

LUMINIŢA SCRIPCARIU

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

OPERATII DE PRELUCRAREA IMAGINILOR 1

/*

Analiză statică Analiza fluxului de date 23 octombrie 2014

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Aggregating Data

CURS

PCLPII-C16(9)

Ingineria Sistemelor de Programare

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

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

Laborator 04: Apeluri de funcții

Fişiere 11 ianuarie 2004 Utilizarea şi programarea calculatoarelor. Curs 13 Marius Minea

Matematici aplicate științelor biologie Lab06 MV

Facultatea de Automatică și Calculatoare

PROGRAMARE ORIENTATA PE OBIECTE

L4. TEOREMELE ALGEBREI BINARE. FUNCȚII LOGICE ELEMENTARE. OPERAȚII LOGICE PE BIT. SINTEZA FUNCȚIILOR LOGICE DIN TABELE DE ADEVĂR 1. Obiective Prin par

Rezolvare model de subiect practic P2 Programarea Calculatoarelor sesiunea iunie 2017

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

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

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Analiză de flux de date 29 octombrie 2012

Microsoft Word - 2 ES RO.doc

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

Introducere în limbajul JavaScript

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Mr

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

Atestat 2007

Transcriere:

Pointeri BREVIAR TEORETIC: FUNCȚII CU NUMĂR VARIABIL DE PARAMETRI Prin intermediul acestui tip de funcție avem posibilitatea de a transmite un num ăr variabil de parametri reali, în momentul apelului func ției. Acest număr de parametru reali poate varia de la un apel la altul, în cadrul aceluia și program. O funcție de acest gen va conține în lista parametrilor formali și simbolul elipsis (...). Declarația va fi asemănătoare cu cea prezentată în continuare. DECLARARE: Declararea unei astfel de funcții va arăta astfel: #include <stdarg.h> [tip_fct] <id_functie>( [lista_par_fix],... ); DEFINIREA FUNCȚIEI Macrodefinițiile utilizate în operarea funcțiilor cu număr variabil de argumente: void va_start( va_list ap, lastfix ); <type> va_arg( va_list ap, <type> ); void va_end ( va_list ap ); Aceste macrouri dau posibilitatea utilizatorului de a accesa argumentele unei func ții ce nu are un număr constant (fix) de argumente după cum urmează: va_start) - setează variabila ap de tip va_list la primul argument ce este transmis funcției; va_args() - transformă argumentul curent din lista la tipul type și îl întoarce, după care trece la următorul argument din listă; va_end() - ajută funcția să efectueze un return normal (să golească stiva înainte de întoarcere). Parametrul lastfix al funcției va_start() este de fapt numele ultimului parametru fix transmis funcției. USV 1

void modelfunctie( int a,... ) int x; * Tipul de data "va_list" va_list va; * Macrodefiniția "va_start()" va inițializa lista de parametri suplimentari * cu următorul parametru de după ultimul parametru FIX. va_start( va, a ); * Macrodefiniția "va_arg()" va extrage următorul parametru de tip "int" * din lista. x = va_arg( va, int ); * Eliberează lista de parametri suplimentari va_end( va ); APELUL FUNCȚIEI int main( void ) int vara;... * apeluri functie modelfunctie( vara ); modelfunctie( vara. 2, 3, 1, 0 );... BREVIAR TEORETIC: POINTERI Simplist privind un pointer este o variabil ă întreagă care stochează o adresă de memorie, adresă care poate indica o altă variabilă sau chiar un alt pointer. Toate operațiunile pe pointeri sunt efectuate prin intermediul a doi operatori noi: * (star) și & (ampersand): & este un operator unar care returnează adresa de memorie a unei variabile; * este complementar operatorului & și întoarce valoarea depozitată la o locație de memorie, adresă stocata într-un pointer și nu numai. USV 2

* poate fi interpretat - ca motto - la adresa în timp ce & poate fi interpretat prin adresa. DECLARAREA POINTERILOR Sintaxa declarației unui pointer de date este: <tip> *<identificator_pointer>; unde: identificator_pointer este numele unei variabile pointer; tip este tipul variabilei a cărei adresă o va conține. UTILIZAREA POINTERILOR Pointerii de tipuri similare pot fi utilizați în expresii de atribuire, după cum se arată mai jos, dar pentru pointerii de tipuri diferite va trebui să se specifice prin operatorul cast conversia dorită. TRANSMITEREA PARAMETRILOR PRIN REFERINȚĂ Pentru ca o funcție C să poată modifica valoarea unei variabile indicate ca parametru efectiv, trebuie declarat un parametru formal de tip pointer, iar la apelare trebuie să i se ofere explicit adresa variabilei. Declarația unei funcții de acest tip este următoarea: void Inversare( int *a, int *b ); iar prototipul este: void Inversare( int *a, int *b ) int t; t = *a; *a = *b; *b = t; USV 3

apelul fiind de forma: int x=2, y=3; Inversare( &x, &y ); Observație: Un parametru de tip pointer este echivalent cu un parametru de tip șir pentru o funcție. POINTERI LA FUNCȚII Declararea unui parametru de tip pointer la func ție se face astfel: int (*p_functie)( int, float ); Acest pointer nu poate conține decât adresa unei funcții ce are un prototip identic cu cel al pointerului: int functie( int a, float b ) * corpul functiei void main( void ) p_functie = functie; Se face observația ca numele funcției reprezintă adresa funcției. Apelul unei funcții prin intermediul unui pointer la funcție se face: p_functie( 23, 45.6 ); APLICAȚII PROIECT ÎN C Această tehnică va fi utilizată atunci când suntem în situa ția de a construi un fișier executabil pe baza a mai multor fi șiere sursă C sau biblioteci. Pentru a crea un proiect C, pe baza mai multor fi șiere-sursă C va trebui să respectăm următoarele reguli: Aplicația poate fi divizată doar la nivel de funcție; nu putem împ ărți o funcție între doua fișiere-sursă C. Declarațiile de variabile globale, cât și de funcții, vor fi făcute în fișiere cu extensia.h (fișiere header), fișiere ce vor fi incluse, prin directiva #include în orice fișier-sursă C ce folosește cel puțin una din declarații. În proiect vor fi incluse doar fișiere-sursă C, ASM, fișiere-bibliotecă (.lib) sau fișiere codobiect (.obj). Fișiere header (.h) nu vor fi incluse în proiect. USV 4

CREAREA UNUI PROIECT ÎN BORLAND C 3.1 Paragraful următor arată modul în care construim un proiect C, format din doua fi șieresursa C (fișierul ce va conține funcția main(), cat și fișierul ce va conține restul funcțiilor din proiect), împreună cu un fișier header (de declarații). Problema propusă are un caracter didactic. 1. Crearea fișierului main.c : #include <stdio.h> #include <stdlib.h> #include "functii.h" //Variabilă globală - externă int sir[ 100 ]; int main( void ) int N; //Variabilă locală clrscr( ); printf( "Introdu numarul de elemente: " ); scanf ( "%d", &N ); //Citirea elementelor din șir fcitire( N ); //Afișarea sumei elementelor șirului printf( "\nsuma elementelor: %d", fsuma( N ) ); return 0; 2. Crearea fișierului funcții.c : #include <stdio.h> #include "functii.h" void fcitire( int n ) int i; printf( "\nintrodu cele %d elemente ale sirului!\n", n ); printf( "S(%d) = ", i ); scanf ( "%d", &sir[ i ] ); int fsuma( int n ) int i, suma = 0; suma += sir[ i ]; USV 5

return suma; 3. Crearea fișierului funcții.h : //Declarații variabile externe extern int sir[]; // Declarații funcții void fcitire( int n ); int fsuma( int n ); 4. Crearea fișierului proiect suma.prj : Pentru a realiza etapa finală, proiectul în Borland C 3.1, se vor parcurge urm ătorii pași: A) Deschiderea unui nou proiect, din meniu, op țiunea Project: B) Stabilirea numelui proiectului - suma.prj: C) Adăugarea celor două fișiere sursa C în proiectul suma.prj: USV 6

D) Rularea proiectului suma.prj, asemănător cu rularea unei aplicații simple: E) Vizualizarea rezultatelor ob ținute, prin tastarea combinației Alt + F5: PROBLEME REZOLVATE 1. Sortarea matricilor utilizând indec și (pointeri): #include <stdio.h> #include <stdlib.h> #define DEBUG 1 * 2, 0, 17 int *idx[100]; * "Vasile POPESCU\", "... " char tbl[100][100]; * Citeste matricea - textul int fcitestetabela( void ) int i = 0; printf( "\nintrodu inregistrarile...\n" ); do printf( ">" ); // afișează un prompter fflush( stdin ); // golește bufferul de tastatură USV PROBLEME REZOLVATE 7

gets( tbl[ i++ ] ); while( strlen( tbl[ i-1 ] )!= 0 ); return i; * Initializeaza sistemul de index void fstabilireindex( int n ) int i, flag; char *tmp; * INITIALIZAREA idx[ i ] = tbl[ i ]; * Sortarea Bubble-Sort do flag = 0; for( i = 0; i < n-1; i++ ) if( strcmp( idx[ i ], idx[ i+1 ] ) > 0 ) tmp = idx[ i ]; idx[ i ] = idx[ i+1 ]; idx[ i+1 ] = tmp; flag = 1; while( flag ); * Afisarea tabelei INDEXATE void fafisareidx( char *mat[], int n ) int i; printf( "\n%s", mat[ i ] ); * Afisarea tabelei ORIGINALE void fafisaretbl( char mat[][100], int n ) int i; printf( "\n%s", mat[ i ] ); * Functia MAIN int main( void ) int N; USV PROBLEME REZOLVATE 8

system( "cls" ); printf("[start]\n"); // clrscr(); if( DEBUG ) printf( "\n[citeste] Matricea (tabela)" ); * Citește "tabela virtuala" N = fcitestetabela(); * Indexează matricea if( DEBUG ) printf( "\n[index] Creare pe (tabela)" ); fstabilireindex( N ); * Afișează conținutul "tabelei" if( DEBUG ) printf( "\n[afisare] (tabela) originala" ); fafisaretbl( tbl, N ); * Afișarea conținutului "tabelei" după index if( DEBUG ) printf( "\n[afisare] (tabela) indexata" ); fafisareidx( idx, N ); getch(); return 0; PROBLEME PROPUSE SPRE REZOLVARE 1. Dezvoltați funcția myprintf( char *,... ), prezentată în cadrul cursului, astfel încât să poată opera cu toate tipurile fundamentale din C. În acela și timp, funcția va fi capabilă să accepte un minim de formatare ( %4d, %5.1f,... ). 2. Creați o funcție ce va primi ca și parametru adresa unei funcții, pentru care va calcula integrala pe un domeniu specificat. Se va folosi no țiunea de pointer la funcție. 3. Aplicația rezolvată în cadrul laboratorului va fi construit ă sub forma de proiect, în mediul Borland C++ 3.1. 4. Modificați aplicația din cadrul laboratorului, astfel încât în matrice să putem memora, separat, numele și prenumele unei persoane, iar indexarea să se poată realiza după ambele câmpuri. USV PROBLEME PROPUSE SPRE REZOLVARE 9