Limbaje de Programare Curs 6 – Functii de intrare-iesire

Documente similare
Limbaje de Programare Curs 5 – Siruri de caractere

Limbaje de Programare Curs 8 – Fisiere

Microsoft Word - CarteC.doc

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

Microsoft Word - PCLP2_Curs_4_2019.doc

Microsoft Word - CarteC.doc

Subiectul 1

E_d_Informatica_sp_SN_2014_bar_10_LRO

Programarea şi utilizarea calculatoarelor

E_d_Informatica_sp_MI_2015_bar_02_LRO

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

SUBPROGRAME

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

L7

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

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

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

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

Slide 1

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

LUCRAREA NR

Microsoft Word - O problema cu bits.doc

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

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

Slide 1

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

PHP (II)

Top

Paradigme de programare

Microsoft Word - CarteC.doc

Analiză de flux de date 29 octombrie 2012

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

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Analiză statică Analiza fluxului de date 23 octombrie 2014

Laborator 3

Paradigme de Programare

Diapositive 1

Slide 1

Microsoft Word - Curs1.docx

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

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

proiectarea bazelor de date

Secţiunea 7-8 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 ID 100 puncte Calculatoarele trebuie să se recunoască în rețeau

PowerPoint-Präsentation

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

-

Microsoft Word - Lab1a.doc

Microsoft Word - c6.doc

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

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

PCLPII-C16(9)

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

Modelarea si Simularea Sistemelor de Calcul

Object Oriented Programming

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

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

Lab6LCD

Programarea şi utilizarea calculatoarelor

Microsoft Word - 2 ES RO.doc

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

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

Microsoft Word - Cuprins_LP.doc

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

Aggregating Data

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

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

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 - Laborator 6 - Expresii Regulate IV.doc

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

Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 Secţiunea 7-8 avansaţi 100 puncte DEMOCRATIE Arpsod are în curtea sa N copaci foarte băt

Logică și structuri discrete Mulțimi Casandra Holotescu

Microsoft Word - Excel_3.DOC

Microsoft Word _POO_Lab_1_Modificari_v01.htm

1. a. Să se scrie un algoritm care să afişeze toate numerele de patru cifre care au cifra sutelor egală cu o valoare dată k, şi cifra zecilor cu 2 mai

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Concurs online de informatică Categoria PROGRAMARE Secţiunea 5-6 avansaţi PROBLEMA puncte DANS De 1 Iunie - Ziua Copilului se organizează un spe

PROGRAMARE ORIENTATA PE OBIECTE

Programarea şi utilizarea calculatoarelor

Slide 1

Declararea variabilelor

Investeşte în oameni

Secţiunea 5-6 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA puncte PERIODIC Se citește un număr natural nenul N. Se ump

1

LUMINIŢA SCRIPCARIU

C++ Probleme

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

Baze de date - Anul 2 Laborator 8 Limbajul de definire a datelor (LDD) (partea I) În general, instrucţiunile LDD sunt utilizate pentru definirea struc

Microsoft Word - Curs_08.doc

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

ALGORITHMICS

Gestiunea serviciilor de recuperare a sănătăţii în sanatorii şi preventorii

Secţiunea 5-6 avansaţi PROBLEMA 1 Concurs online de informatică Categoria PROGRAMARE 100 puncte NR Un număr natural nenul V care se plictisea singur,

Microsoft Word - a5+s1-5.doc

Microsoft Word - cap1p4.doc

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

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

Secţiunea 9-10 avansaţi Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 TEXT 100 puncte Un text este format din una sau mai multe propoz

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

Transcriere:

Limbaje de Programare Curs 6 Funcţii de intrare-ieşire Dr. Casandra Holotescu Universitatea Politehnica Timişoara

Ce discutăm azi... 1 Citire formatată 2 Citirea şirurilor de caractere 3 Citirea unor linii de text 4 Scriere formatată 5 Formatare. Specificatori de format

Citire formatată cu scanf int scanf(const char* format,...); în format putem avea specificatorii: %c char %d întreg decimal cu semn %ld long %u întreg decimal fără semn %x întreg în baza 16 %f real %lf double %p pointer (adresă) %s şir de caractere

Citire formatată cu scanf int scanf(const char* format,...); Restul parametrilor adresele variabilelor în care se citeşte: &nume-variabila Atenţie! variabilele în care se citeşte trebuie să fie de acelaşi tip cu tipul specificat în format! verificarea potrivirii tipurilor este sarcina programatorului! nu rezultă în eroare de compilare! scanf returnează: numărul variabilelor citite (atribuite) (NU valoarea!) sau EOF (pt. eroare de intrare înainte de citirea primei var.)

Citire cu scanf exemple i n t n ; s c a n f ( %d, &n ) ; l o n g x, y, z ; s c a n f ( % l d %l d %l d, &x, &y, &z ) ; f l o a t a [ 4 ] ; s c a n f ( % f, &a [ 2 ] ) ;

scanf returnează: numărul variabilelor citite sau EOF Citire formatată cu scanf rezultatul returnat de scanf se poate folosi pentru a testa dacă s-au citit toate datele dorite i n t n, m; i f ( s c a n f ( %d %d, &n, &m)==2) { / s au c i t i t ambele v a l o r i / } e l s e { / e r o a r e / } Atenţie: Utilizatorul poate introduce orice şi oricât la orice citire, rezultatul returnat trebuie testat!

Citire formatată cu scanf Pe lângă specificatori, şirul de format poate conţine şi caractere obişnuite: la printf: se tipăresc la scanf: trebuie să apară în intrare Exemplu pentru scanf: u n s i g n e d z, l, a ; s c a n f ( %u.%u.%u, &z, &l, &a ) ; // c i t e s t e o data i n format cu punct // de exemplu 1 5. 1 2. 2 0 1 5 cu. scanf citeşte doar cât timp intrarea corespunde formatului!

Citire formatată cu scanf scanf citeşte doar cât timp intrarea corespunde formatului! Când intrarea nu mai corespunde: funcţia returnează nr. de variabile atribuite variabilele rămase necitite nu se mai atribuie caracterele necitite rămân în bufferul de intrare scanf( %d%d, &x, &y); intrare: 123A returnează 1 x=123, y: necitit, intrare: A scanf( %d%x, &x, &y); intrare: 123A returnează 2 x=123, y=0xa (10)

Citire formatată cu scanf Deoarece când intrarea nu mai corespunde: caracterele necitite rămân în bufferul de intrare ele trebuie eliminate din buffer! La eroare trebuie consumată intrarea înainte de a citi din nou! i n t m, n ; p r i n t f ( I n t r o d u c e t i doua numere : ) ; w h i l e ( s c a n f ( %d %d, &m, &n )!= 2) { // c a t timp nu e c o r e c t w h i l e ( g e t c h a r ( )!= \ n ) ; // consuma r e s t u l l i n i e i p r i n t f ( mai i n c e r c a t i o data : ) ; } // dupa i e s i r e a d i n w h i l e putem f o l o s i m s i n

Citirea şirurilor de caractere Citirea mai multor caractere, într-un tablou, nedepăşind limitele tabloului (obligatoriu %lungime în format!): un cuvânt (orice până la spaţiu alb): adaugă \0 la sfârşit, consumă şi ignoră spaţiile albe de la început char t [ 3 3 ] ; s c a n f ( %32 s, t ) ; un număr fix de caractere: orice caractere, inclusiv spaţii albe, nu adaugă \0 la sfârşit char t [ 3 3 ] ; s c a n f ( %33c, t ) ;

Citirea mai multor caractere continuare: Citirea şirurilor de caractere un şir dintr-o mulţime de caractere: %lungime[caract-permise] limitează caracterele permise la un subset (cu - pt. interval) adaugă \0 la sfârşit char t [ 3 3 ] ; s c a n f ( %32[A Za z!? ], t ) ; // l i t e r e mari, m i c i s i!? un şir cu excepţia unor caractere: %lungime[ caract-excluse] orice caracter ce nu e în caract-excluse, \0 la sfârşit char t [ 3 3 ] ; s c a n f ( %32[ˆ0 9.,], t ) ; // f a r a c i f r e, punct sau v i r g u l a

Citirea liniilor cu fgets char *fgets(char *s, int size, FILE *stream); Citeşte: până la linie nouă \n (inclusiv). maxim size-1 caractere pune linia în tabloul s adaugă \0 la sfârşit char tab [ 8 0 ] ; f g e t s ( tab, 80, s t d i n ) ; //maxim 79 de c a r a c t e r e i n c l u s i v \0 Parametrul al treilea: un fişier; pentru a citi de la intrarea standard, folosim identificatorul stdin (din stdio.h)

Citirea liniilor cu fgets Atenţie: fgets returnează NULL dacă n-a citit nimic! (a ajuns la sfârşit de fişier) la succes: returnează chiar adresa primită parametru (deci o adresă validă, nenulă). Testăm rezultatul returnat! (e nul? nenul?) char s [ 8 1 ] ; // c a t timp nu ajunge l a s f a r s i t u l i n t r a r i i w h i l e ( f g e t s ( s, 81, s t d i n ) ) p r i n t f ( % s, s ) ; // l i n i i l e mai l u n g i de 80 c a r a c t. se c i t e s c // s i a f i s e a z a pe b u c a t i

Atenţie! NU folosiţi funcţia gets pentru citirea de şiruri! De ce? Nu se poate specifica lungimea maxim disponibilă se poate depăşi zona de memorie alocată! program abandonat, corupere de memorie, vulnerabilităţi de securitate Din aceleaşi motive, nu folosiţi nici scanf( %s, s) fără a limita numărul maxim de caractere ce pot fi citite! La scanf, lungimea dupa % e obligatorie la citirea de şiruri!

scanf particularităţi formatele numerice şi %s sar peste spaţiile albe iniţiale: %d%f întreg şi real, cu oricâte spaţii albe înainte/între ele formatele %c, %[ ] şi %[ ] nu ignoră spaţiile albe un număr între % şi caracterul de format limitează numărul de caractere citite: %4d întreg din cel mult 4 caractere (spaţiile iniţiale nu contează)

scanf particularităţi un spaţiu alb în format consumă oricâte spaţii albe consecutive din intrare: scanf( ); consumă toate spaţiile albe până la primul caracter diferit %c %c citeşte un caracter oarecare, consumă spaţiile albe, citeşte următorul caracter (diferit de spaţiu alb) %d %f acelaşi efect ca %d%f (spaţiile sunt permise oricum)

Scriere formatată cu printf int printf(const char* format,...); În format putem avea aceiaşi specificatori ca la scanf. Restul parametrilor valorile care se tipăresc (orice expresii) Atenţie! valorile tipărite trebuie să fie de acelaşi tip cu tipul specificat în format! verificarea potrivirii tipurilor este sarcina programatorului! nu rezultă în eroare de compilare! printf returnează: numărul de caractere tipărite

Specificatori pentru scanf %d: întreg zecimal cu semn %i: întreg zecimal, octal (0) sau hexazecimal (0x,0X) %o: întreg în octal, precedat sau nu de 0 %u: întreg zecimal fără semn %x, %X: întreg hexazecimal, precedat sau nu de 0x,0X %c: orice caracter; nu sare peste spaţii (doar %c ) %s: şir de caractere, până la primul spaţiu alb; se adaugă \0 la sfârşit.

Specificatori pentru scanf %a, %A, %e, %E, %f, %F, %g, %G: real (posibil cu exponent) %p: pointer, în formatul tipărit de printf %n: scrie în argument (int *) nr. de caractere citite până în prezent; nu citeşte nimic; nu incrementează nr. de câmpuri atribuite %[...]: şir de caractere din mulţimea indicată între paranteze %[...]: şir de caractere exceptând mulţimea indicată între paranteze %%: caracterul procent

Specificatori pentru printf %d, %i: întreg zecimal cu semn %o: întreg în octal, fără 0 la început %u: întreg zecimal fără semn %x, %X: întreg hexazecimal, fără 0x, 0X la început, cu a-f pt. %x, A-F pt. %X %c: caracter %s: şir de caractere, până la \0, sau numărul de caractere dat ca precizie

Specificatori pentru printf %e, %E: real cu exponent; precizie implicită 6 %f, %F: real fără exponent; precizie implicită 6 %g, %G: real, ca %e, %E dacă exp. < -4 sau > precizia, altfel ca %f, %F %a, %A: real hexazecimal %p: pointer, în format dependent de implementare (tipic: hexazecimal) %n: scrie în argument (int *) nr. de caractere scrise până în prezent; %%: caracterul procent

Formatare: fanioane Directivele de formatare pot avea opţional şi alte componente: %fanion dimensiune. precizie modificator tip Fanioane: * (scanf): câmpul se citeşte, dar se ignoră (printf): aliniere la stânga + (printf): + la număr pozitiv (tip cu semn) spaţiu (printf): spaţiu înainte de nr. pozitiv (tip cu semn) 0 (printf): completează cu 0 până la dimensiunea dată

Formatare: modificatori %fanion dimensiune. precizie modificator tip Modificatori: hh: la formate întregi argumentul e pe un octet (deci char, dar interpretat numeric) h: la formate întregi, argumentul este short, ex: %hd l: la formate întregi argumentul este long, ex. %ld, la formate reale argumentul este double, ex. %lf ll: la formate întregi argumentul este long long L: la formate reale argumentul este long double

Formatare: dimensiune %fanion dimensiune. precizie modificator tip Dimensiunea: la scanf: numărul maxim de caractere citite pentru argumentul respectiv la printf: numărul minim de caractere pe care se scrie argumentul

Formatare: precizie %fanion dimensiune. precizie modificator tip Precizia doar la printf: punct. urmat de un întreg opţional (fără întreg precizie 0): pt. formate întregi: numărul minim de cifre (completate cu 0) pt. formate reale: numărul de cifre zecimale printf( :%7.2f!, 15.234); : 15.23! (2 zecimale, 7 caract. în total) pt. %s: numărul maxim de caractere de tipărit din şir char m[9]= ianuarie ; printf( %.3s, m); ian Obs.: la printf, în locul dimensiunii şi/sau preciziei poate apărea *, caz în care se ia din argumentul următor: printf( %.*s, max, s); //scrie cel mult max caractere