Sunteți pe pagina 1din 5

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 5

FUNCII DE INTRARE IEIRE PENTRU CARACTERE I IRURI DE CARACTERE 1. Funcii de intrare (citire)
1.1. int getc(FILE *stream); - citete un caracter dintr-un fiier deschis pentru citire sau de la dispozitivul standard de intrare (stdin de obicei asociat tastaturii) i incrementeaz indicatorul de poziie al fiierului pentru a adresa urmtorul caracter - are prototipul n STDIO.H; - returneaz n caz de succes, caracterul citit (convertit n int fr extensie de semn) sau EOF pentru end-of-file sau eroare. 1.2. int getchar(void); - citete un caracter de la stdin (dispozitiv standard de intrare); - are prototipul n STDIO.H; - este o macrodefiniie (definit ca getc(stdin)) care returneaz urmtorul caracter de la stdin; - n caz de succes, getchar() returneaz caracterul citit, dup ce l-a convertit ntr-un int fr extensie de semn. Pentru end-of-file (sfrit de fiier) sau eroare, returneaz EOF (definit n STDIO.H ca -1). Caracterul CTRL-Z (0x1A) este interpretat ca EOF i convertit n -1 ; - funcia lucreaz bufferat (line buffered), adic nu putem prelucra caracterele citite pn cnd nu s-a tastat Enter; caracterele introduse sunt memorate intr-un buffer i abia dup ce se tasteaz Enter, funcia le citete de acolo. 1.3. char *fgets(char *s, int n, FILE *stream); - citete un ir de caractere dintr-un fiier deschis pentru citire sau de la tastatur n cazul n care stream este stdin; - are prototipul in STDIO.H;

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 5

- funcia un ir de caractere terminat cu Enter de la tastatur sau o linie dintr-un fiier. Citirea se oprete la sfritul liniei sau la citirea a n-1 caractere (se ia n considerare prima condiie ndeplinit). Funcia pstreaz n ir caracterul \n, dup care adaug \0. - irul citit se stocheaz n s - funcia returneaz adresa irului de caractere citit n caz de citire corect, valoarea 0 (zero) la citirea sfritului de fiier i n caz de eroare. - spre deosebire de funcia gets (a crei descriere urmeaz), funcia fgets controleaz i lungimea irului de caractere, nepermind depirea lungimii specificate de programator. Din acest motiv se recomand folosirea acestei funcii i nu a funciei gets.

2. Funcii de ieire (scriere)


2.1. int putc(int c, FILE *stream); - scrie un caracter intr-un flux (stdout sau un fiier deschis n scriere); - are prototipul n STDIO.H; - returneaz caracterul c pentru succes, altfel EOF. 2.2. int putchar(int c); - trimite un caracter la stdout (dispozitiv standard de iesire); - are prototipul n STDIO.H; este definit ca: putc(c, stdout); - returneaz caracterul c pentru succes, EOF pentru eroare. 2.3. int fputs(const char *s, FILE *stream) Funcia are prototipul n STDIO.H; Aceast funcie scrie un ir de caractere terminat cu '\0' ntr-un fiier (sau pe monitor dac fiierul indicat (stream) este stdout). Se presupune c irul are deja n componen caracterul '\n'. Funcia returneaz ultimul caracter scris, iar n caz de eroare returneaz EOF. 2.4. int puts(const char *s); - trimite un ir de caractere la stdout; - are prototipul n STDIO.H; - funcia copie irul s (terminat cu '\0') la stdout, adugnd un newline (linie nou \n); - returneaz o valoare pozitiva pentru succes, iar n caz contrar EOF.

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 5

3. Funcii pentru clasificarea caracterelor


n continuare sunt prezentate cteva macrodefiniii din CTYPE.H, care ne ajut sa difereniem ntre ele caracterele. (a) int isalpha(int c); returneaz un ntreg diferit de zero, dac c este liter (a ... z sau A ... Z). (b) int isascii(int c); returneaz un ntreg diferit de zero dac octetul inferior al lui c este n intervalul 0 ... 127 (0x00 ... 0x7F) (c) int iscntrl(int c); returneaz un ntreg diferit de zero dac c este caracterul Del (0x7F) sau un caracter de control obinuit ce are codul ASCII n gama 0x00 ... 0x1F (d) int isdigit(int c); returneaz un ntreg diferit de zero dac c este o cifr zecimal (0 ... 9) (e) int islower(int c); returneaz un ntreg diferit de zero dac c este liter mic (a ... z). (f) int isspace(int c); returneaz un ntreg diferit de zero dac c este spaiu( ), tab(\t), carriage return(\r), new line(\n), vertical tab(\v) sau form feed(\f). (g) int isupper(int c); returneaz un ntreg diferit de zero dac c este liter mare (A ... Z). (h) int isxdigit(int c); returneaz un ntreg diferit de zero dac c este cifr hexazecimal (0 ... 9, a ... f, A ... F).

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 5

TEMA 1
Problema 1.1 Scriei un program care numr apariiile unui anumit caracter ntr-o secvena de caractere citit de la tastatur. Proiectul trebuie s conin o funcie care primete ca parametru caracterul care trebuie numrat i returneaz numrul de apariii ale caracterului indicat. Problema 1.2 S se scrie un program care contorizeaz toate apariiile vocalelor (fiecare n parte) dintr-o secven citit de la tastatura. Se va include posibilitatea relurii programului la cerere. Problema 1.3 Scriei un program care folosete dou funcii proprii care convertesc textul dintr-un fiier n litere mari sau litere mici dup cum se indic prin dialog de la tastatur. Se vor scrie dou funcii de conversie care vor fi apelate prin intermediul instruciunii switch. Nu se va face apel la funciile de conversie din bibliotec. Textul se citete linie cu linie i se afieaz, dup conversie, pe monitor. Numele fiierului va fi citit de utilizator de la tastatur. Problema 1.4 S se scrie un program care afieaz lungimile cuvintelor dintr-o secvena citita de la tastatura, secvena ncheiata cu Enter. Se consider c orice cuvnt se termin la primul caracter alb. Nu se vor folosi funciile de bibliotec pentru lungimea unui ir.

TEMA 2
Problema 2.1 S se scrie o funcie care are un parametru de tip unsigned long care reprezint un numr dat n baza 10 i care calculeaz reprezentarea valorii parametrului funciei n baza 16 i depune rezultatul ntr-un ir de caractere dat ca al doilea parametru al funciei (irul de caractere va ncepe cu 0x sau 0X). S se testeze funcia scris ntr-un program care citete un numr ntreg de la tastatur i afieaz irul de caractere corespunztor reprezentrii n baza 16. (Nu se vor folosi eventualele funcii de conversie existente n bibliotecule mediului).

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 5

Problema 2.2 Se citete de la tastatur un text format din mai multe linii pn la ntlnirea combinaiei de taste CTRL/Z (Windows) sau CTRL/D (Linux). Stabilii numrul de litere, cifre, numrul de separatori, numrul de cuvinte, numrul de propoziii (o propoziie se termin cu '.') i numrul de aliniate (un aliniat ncepe cu un TAB).. De asemenea, se vor afia numrul total de caractere i procentele de litere i cifre din numrul total de caractere. Cuvintele sunt separate prin caractere albe, punct, virgul, dou puncte, punct virgul i cratim. La sfritul fiecrei propoziii avem un punct utmat de un spaiu, iar un aliniat este terminat cu punct urmat de sfrit de linie. Indicaie: Textul se citete caracter cu caracter i se va prelucra pe msur ce se face citirea (nu se vor folosi tablouri de caractere).. Caractere albe sunt spaiu, TAB, Enter. Nu se vor folosi alte funcii de bibliotec dect cele pentru citire i scriere. Problema 2.3 S se scrie o funcie care are un parametru de tip unsigned long care calculeaz reprezentarea numrului n baza 16 i depune rezultatul ntr-un ir de caractere dat ca al doilea parametru al funciei. S se scrie un program care citete de la tastatur un numr ntreg fr semn, folosete funcia de mai sus i afieaz rezultatul pe monitor (reprezentarea n baza 16 va respecta formatul unei constante hexazecimale existent n limbajul C, adic va ncepe cu grupul de caracter 0x).

S-ar putea să vă placă și