You are on page 1of 29

INTRODUCERE N

PROGRAMAREA
CALCULATOARELOR
ntlnirea 2
08-11-2008
Tipuri definite de utilizator
Tipul structur
Limbajul C ofer structura pentru a grupa
informaii care au tipuri diferite, dar sunt
relaionate din punct de vedere logic
O structur este definit utiliznd urmtorul
tipar:
struct nume_structura {
tip1 camp1;
tip2 camp2;
...
tipN campN;
} var1, ..., varN;
Structuri - exemplu

struct student{
int numar; /* Numarul de identificare */
char nume[26]; /* Numele studentului */
int varsta; /* Varsta studentului */
float nota; /* Nota studentului */
};
Structuri
Definirea unei structuri nu aloc memorie
pentru acea structur ci doar definete un
nou tip de dat
n continuare pot fi declarate variabile de
acest nou tip astfel:

student student1, student2;
Structuri
Pentru a accesa membrii unei variabile de
tip structur se folosete operatorul .

student1.numar = 1234;
strcpy(student2.nume, Fred Bloggs);
Structuri - exemplu
(struct.cpp)
Informaiile despre o anumit persoan (nume,
adres, vrst, telefon) sunt reinute ntr-o
structur
Se creaz un tablou de astfel de structuri
Se execut diverse operaii asupra acestui tablou
adugare persoane
listarea tuturor persoanelor
cutarea unei persoane
tergerea unei persoane
modificarea informaiilor despre o anumit persoan)
Gestionarea fiierelor n C
Fiiere
Aceast seciune descrie modul n care se
poate lucra cu fiierele n limbajul C
Comunicarea cu fiierele se face n C prin
intermediul unui nou tip de dat (definit
n stdio.h): FILE
Pentru a accesa fiierul se declar un
pointer de acest tip:
FILE *f;
Fiiere
De obicei, cnd se lucreaz cu fiiere, se
parcurg urmtorii trei pai:

1. se deschide fiierul (se creeaz un
canal de comunicare ntre program
i fiier)
2. se citete din fiier sau se scrie n el
3. se nchide fiierul

Deschiderea unui fiier fopen
Pentru a putea utiliza un fiier, acesta
trebuie mai nti deschis
Funcia fopen, folosit n acest sens,
returneaz un pointer de tipul FILE
Dac din anumite motive fiierul nu poate
fi deschis, funcia va returna valoarea
NULL

FILE *fopen(const char *numefisier,
const char *mod);
Deschiderea unui fiier fopen
fopen are dou argumente, ambele iruri
de caractere:
primul este numele fiierului care se dorete a
fi deschis (inclusiv calea, dac este necesar)
al doilea este un caracter de acces, care de
obicei e unul din urmtoarele:
r deschiderea fiierului pentru citire
w deschiderea fiierului pentru scriere
a deschiderea fiierului pentru adugare
dup caracterul de acces (n cadrul aceluiai
ir de caractere) putem avea t pentru fiier
de tip text i b pentru fiier binar
Deschiderea unui fiier fopen
Semnificaia argumentului mod
r deschiderea unui fiier de tip text pentru citire
w crearea unui fiier de tip text pentru scriere
a adugarea ntr-un fiier de tip text
rb deschiderea unui fiier binar pentru citire
wb deschiderea unui fiier binar pentru scriere
ab adugarea ntr-un fiier binar
r+ deschiderea unui fiier text pentru citire i scriere
w+ crearea unui fiier text pentru citire i scriere
a+ adugarea la un sau crearea unui fiier text pentru citire i
scriere
r+b deschiderea unui fiier binar pentru citire i scriere
w+b crearea unui fiier binar pentru citire i scriere
a+b adugarea la un fiier binar (deschis pentru citire i scriere)
Deschiderea unui fiier fopen
De obicei funcia fopen se folosete astfel:

FILE *f;

if ((f=fopen(file_name.txt, w))==NULL){
printf(Cannot open %s\n, file_name);
return;
}

nchiderea unui fiier fclose
Funcia fclose este folosit pentru a
distruge legtura care exist ntre
programul n C i fiier
Acest lucru se face de obicei pentru a
putea folosi n continuare pointer-ul de tip
FILE la accesarea unui alt fiier
Exist o limit de fiiere care pot fi
deschise simultan, deci e bine ca un fiier
care nu mai e folosit s fie nchis
nchiderea unui fiier fclose
Prototipul funcie fclose este urmtorul:
int fclose(FILE *f);
f este pointer-ul returnat de funcia fopen
fclose returneaz:
0 dac nchiderea s-a realizat cu succes
-1 n caz contrar
Dac la ieirea dintr-un program mai
exist fiiere deschise, acestea vor fi
nchise automat
Cu toate acestea e bine ca fiierele s fie nchise explicit
n cadrul programului
Citirea i scrierea

Avnd deschis un fiier, probabil se
dorete citirea din el sau scrierea n acel
fiier
Limbajul C ofer n acest un set de funcii
Acestea sunt foarte asemntoare cu
funciile folosite pentru citirea de la
tastatur i scrierea pe ecran
Citirea i scrierea caracterelor
Este realizat utiliznd funciile fgetc i
fputc (echivalente cu getch i putch)
Fiecare din ele are ns un parametru n
plus prin intermediul cruia este
identificat fiierul folosit pentru citire,
respectiv scriere
int fgetc(FILE *f);
int fputc(int c, FILE *f);
Funciile returneaz constanta EOF dac
apare o eroare
Citirea i scrierea unei linii
Sunt folosite funciile fgets i fputs
(echivalente cu gets i puts)
char *fgets(char *s, int n, FILE *f)
citete maxim n-1 caractere (sau pn la
ntlnirea lui \n) din fiierul f
returneaz adresa irului de caractere s sau
NULL (dac apare o eroare)
int fputs(const char *s, FILE *f)
scrie un ir de caractere s n fiierul f
returneaz EOF n caz de eroare
Citirea i scrierea cu format
Se folosesc funciile fprintf i fscanf
Acestea sunt similare cu printf i scanf
exceptnd faptul c primesc n plus ca
argument pointer-ul de tip fiier din care
citesc, respectiv n care scriu

int fprintf(FILE *f, const chat *format [, args])
int fscanf(FILE *f, const chat *format [, adr])
Prelucrarea fiierelor exemple
Exemplul 1 (file1.cpp)
Se consider un fiier text care conine numere
separate prin spaiu
Se citesc aceste numere, se face media lor
aritmetic i se afieaz rezultatul
De asemenea rezultatul este scris ntr-un fiier
Exemplul 2 (file2.cpp)
Dintr-un fiier se citesc prenumele i numele
de familie ale unor persoane
Se tipresc aceste informaii pe ecran
Repoziionarea indicatorului n fiier
Se realizeaz utiliznd funcia

int fseek(FILE *f, long offset, int whence)

noua poziia a indicatorului va fi offset+whence
whence poate avea urmtoarele valori:
SEEK_SET = 0 nceputul fiierului
SEEK_CUR = 1 poziia curent
SEEK_END = 2 sfritul fiierului
Fiiere header
Fiierele header conin definiii de funcii
i de variabile care pot fi incluse n orice
alt program C prin folosirea directivei pre-
procesor #include
Fiierele header standard sunt oferite o
dat cu compilatorul i acoper o vast
arie de lucru: funcii pentru prelucrarea
irurilor de caractere, funcii matematice,
funcii de conversie, funcii pentru citire i
tiprire
Fiiere header
#include <stdio.h>
#include "myheader.h

Folosirea semnelor <> informeaz
compilatorul c trebuie s caute n
directorul INCLUDE pentru a gsi fiierul
header specificat
Folosirea ghilimelelor "" spune
compilatorului s caute n directorul
curent
Fiiere header exemplu
n primul rnd trebuie creat fiierul care
conine prototipurile funciilor:

MyMath.h
float MyAdd(float a, float b);
int MySum(int n);
Header files - Example
n al doilea pas se creeaz fiierul care conine
implementarea funciilor:

MyMath.cpp
#include MyMath.h"
float MyAdd(float a, float b){
return a+b;
}
int MySum(int n){
int i, s=0;
for(i=0;i<n;i++)
s=s+i;
return i;
}
Header files - Example
Apoi se poate scrie o aplicaie care s
foloseasc funciile din biblioteca definit:

MyApp.cpp
#include <stdio.h>
#include MyMath.h"
void main(void){
printf(%f,MyAdd(3.5,4.2);
printf(%d,MySum(10);
}
Fiiere header rularea unui program


E nevoie s existe o legtur ntre aplicaie
(MyApp.cpp) i fiierul care conine
implementarea funciilor (MyMath.cpp)
Acest lucru se realizeaz printr-un proiect
(project).

Fiiere - exemplu
(persprog.cpp)
Se consider un fiier care conine informaii
despre persoane (id, nume, vrsta)
Asupra acestui fiier se pot face urmtoarele
operaii:
Adugare persoane
Listarea coninutului fiierului
Cutare persoane
Modificarea informaiilor despre o persoan
Datele din fiier sunt manipulate prin
intermediul unor variabile de tip structur

You might also like