Programare Procedurală Lab1

11
Programare Procedurală (Citire/Scriere/Instructiuni) Funcţiile de citire şi scriere în C 1. Scrierea pe ecran Pentru scrierea datelor pe ecran se utilizează funcţia: int printf(format, expresie_1, expresie_2,..., expresie_n); Această funcţie returnează o valoare întreagă care reprezintă numărul de caractere afişate. Parametrul format este un şir de caractere care poate conţine specificatori de format. Specificatorii de format sau descriptorii indică faptul că, în locul în care se află va fi afişată valoarea unei expresii (sau variabile) al cărei tip este dat de către specificatorul de format. Un specificator de format începe cu % şi conţine o literă care indică tipul variabilei. Exemplu: %d, %f expresie_1, expresie_2,..., expresie_n reprezintă expresiile a căror valoare va fi inserată în şirul de caractere format la poziţiile indicate de către specificatorii de format. Corespondenţa între specificatorii de format şi expresii se face în ordine, de la stânga la dreapta. Numărul de specificatori de format trebuie să fie egal cu numărul de expresii a căror valoare se doreşte afişată. Prototipul funcţiei printf se găseşte în fişierul antet stdio.h care trebuie inclus la începutul programului. Exemplu: Afişarea a două numere unul real şi unul întreg şi a sumei lor #include<stdio.h> void main()

description

da da da

Transcript of Programare Procedurală Lab1

Page 1: Programare Procedurală Lab1

Programare Procedurală (Citire/Scriere/Instructiuni)

Funcţiile de citire şi scriere în C

1. Scrierea pe ecran

Pentru scrierea datelor pe ecran se utilizează funcţia:

int printf(format, expresie_1, expresie_2,..., expresie_n);

Această funcţie returnează o valoare întreagă care reprezintă numărul de caractere afişate.

Parametrul format este un şir de caractere care poate conţine specificatori de format.

Specificatorii de format sau descriptorii indică faptul că, în locul în care se află va fi afişată valoarea unei expresii (sau variabile) al cărei tip este dat de către specificatorul de format. Un specificator de format începe cu % şi conţine o literă care indică tipul variabilei.

Exemplu: %d, %f

expresie_1, expresie_2,..., expresie_n reprezintă expresiile a căror valoare va

fi inserată în şirul de caractere format la poziţiile indicate de către specificatorii de format.

Corespondenţa între specificatorii de format şi expresii se face în ordine, de la stânga la dreapta. Numărul de specificatori de format trebuie să fie egal cu numărul de expresii a căror valoare se doreşte afişată.

Prototipul funcţiei printf se găseşte în fişierul antet stdio.h care trebuie inclus la începutul

programului.

Exemplu: Afişarea a două numere unul real şi unul întreg şi a sumei lor

#include<stdio.h>void main(){

int a=20; float b=3.14;printf(„Avem a=%d, b=%f si a+b=%f suma lor”,a,b,a+b);

}

/* exemplu printf*/#include <stdio.h>

int main(){

printf ("Characters: %c %c \n", 'a', 65);printf ("Decimals: %d %ld\n", 1977, 650000L);printf ("Preceding with blanks: %10d \n", 1977);

Page 2: Programare Procedurală Lab1

printf ("Preceding with zeros: %010d \n", 1977);printf ("Some different radixes: %d %x %o %#x %#o \n", 100, 100, 100,

100, 100);printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);printf ("Width trick: %*d \n", 5, 10);printf ("%s \n", "A string");return 0;

}

2. Citirea de la tastatură

Pentru citirea datelor de la tastatură se utilizează funcţiaint scanf(format, adresa var_1, adresa var_2,...., adresa

var_n);Funcţia scanf returnează o valoare întreagă reprezentând numărul de variabile citite corect.

Parametrul format conţine o listă de specificatori de format, care indică tipul variabilelor citite.

Adresa unei variabile poate fi accesată utilizând operatorul de referenţiere &.

Prototipul funcţiei scanf se găseşte de asemenea în fişierul antet stdio.h

Exemplu: Citirea unei variabile reale pe 8 octeţi şi a unei variabile întregi:

#include<stdio.h>void main(){

double a;int n;scanf(„%lf %d”, &a, &n );

}

Lista principalilor specificatori de frormat

În continuare sunt listaţi principalii specificatori de format. Pentru informaţii suplimentare şi alţi specificatori vezi curs.

Specificator Semnificaţie

%d Variabilă de tip întreg pe 4 octeţi (int)

%u Variabilă de tip unsigned int

%f Variabilă reală pe 6 octeţi (float)

%lf Variabilă rală pe 8 octeţi (double)

%Lf Variabilă reală pe 10 octeţi

Page 3: Programare Procedurală Lab1

%e sau %E Variabilă reală în formă exponenţială (pe 6 octeţi)

%x Variabilă întreagă în formă hexazecimală (baza 16) în care pentru cifrele hexazecimale 10, 11, 12, 13, 14 se folosesc literele mici a, b, c, d, e

%X Ca şi %x dar se folosesc literele mari în loc de cele mici

%c Variabilă de tip caracter (char) (inclusiv spaţii albe)

%s Variabilă de tip şir de caractere

Observaţii:

Prin utilizarea unui număr după semnul % în specificatorul de format la afişarea cu

printf se poate indica numărul minim n de caractere pe care se realizează afişarea.

Dacă numărul de caractere necesare pentru afişarea valorii expresiei este mai mic decât n, se completează restul de caractere cu spaţii albe. Modul de aliniere este implicit la

dreapta.

Exemplu: printf(„Numerele %4d,%4d,%4d”,a,b,c);

Variabilele a,b,c de tip întreg vor fi afişate pe minim 4 caractere.

Dacă se doreşte afişarea unei variabile reale cu un anumit număr de zecimale, se utilizează pentru aceasta după % un număr real a cărui parte zecimală indică numărul de zecimale afişate (precizia). Dacă numărul de zecimale al variabilei afişate este mai mare decât precizia, atunci numărul afişat se rotunjeşte.

Exemplu: printf(„Numarul real %7.4f”,x);

Variabila x va fi afişată pe minim 7 caractere cu exact 4 zecimale.

Pentru alinierea la stânga a variabilelor afişate, se inserează în specificatorul de format, imediat după semnul % caracterul -.

Exemplu: printf(„Numarul x=%-5.2lf”,x);

Pentru trecerea la următorul rând se foloseşte în şirul de caractere \n

Page 4: Programare Procedurală Lab1

Pentru introducerea caraterului tab se foloseşte \t

/* exemplu scanf */#include <stdio.h>

int main (){

char str [80];int i;

printf ("Enter your family name: ");scanf ("%s",str); printf ("Enter your age: ");scanf ("%d",&i);printf ("Mr. %s , %d years old.\n",str,i);printf ("Enter a hexadecimal number: ");scanf ("%x",&i);printf ("You have entered %#x (%d).\n",i,i);

return 0;}

Page 5: Programare Procedurală Lab1

Matrice

Definiţie

O matrice este un tablou bidimensional cu m linii şi n coloane. Dacă A este o matrice, A[i][j] reprezintă elementul de pe linia i şi coloana j.

A = ; A[i][j] = aij;

O matrice pătratică este o matrice cu acelaşi număr de coloane şi linii (deci m = n). Diagonala principală a unei matrice pătratice este formată din elementele A[i][i], i= ;Diagonala secundară a unei matrice pătratice este formată din elementele A[i][n-i-1], i= ;

Diagonala principală: Diagonala secundară:

Declararea unui tablou

Pentru a declara un tablou avem următoarele forme generale:

tip nume[dim1][dim2];

Exemplu: int matrice[20][20];

Page 6: Programare Procedurală Lab1

Parcurgerea matricilor

Fie matricea mat[][] de dimensiuni m, n (m linii, n coloane). Putem parcurge elementele matricii în două moduri: (a) parcurg pe rând fiecare linie (parcurgerea pe linii), (b) parcurg pe rând fiecare coloană.

Exemple:

(a) Parcurgerea pe linii:

for(i=0;i<m;i++){

for(j=0;j<n;j++)printf(„%5d“, mat[i][j]);

printf(„\n“);}

Acest bloc for afişează pe ecran elementele matricei sub formă de tablou bidimensional.

Parcurgerea matricilor pătratice. Consider m = n, artunci mat[][] este matrice pătratică .

(a) Parcurgerea elementelor de pe diagonala principală:

for (i=0;i<n;i++)instrucţiuni folosind elementul mat[i][i];

(b) Parcurgerea elementelor de pe diagonala secundară:

for (i=0;i<n;i++)instrucţiuni folosind elementul mat[i][n-i-1];

(c) Parcurgerea elementelor de deasupra diagonalei principale (fără elemetele digonalei):

for (i=0;i<n;i++)for (j=i+1;j<n;j++)

printf(„%d”,a[i][j]);

(d) Parcurgerea elementelor de sub diagonala principală (fără elementele diagonalei):

Page 7: Programare Procedurală Lab1

for (i=0;i<n;i++)for(j=0; j < i;j++)

printf(„%d”,a[i][j]);

(e) Parcurgerea elementelor de deasupra diagonalei secundare (fără elementele diagonalei):

for(i=0;i<n-1;i++)for(j=0;j< n-i-1;j++)

printf(„%d”,a[i][j]);

(f) Parcurgerea elementelor de sub diagonala secundară (fără elementele diagonalei):

for (i=1;i<n;i++)for(j=n-i;j< n;j++)

printf(„%d”,a[i][j]);

Page 8: Programare Procedurală Lab1

Tema

1. Citiţi o variabilă de tip int şi verificaţi ce se întâmplă dacă se afişază utilizând diferiţi

specificatori de format (%d, %f, %lf, %c, %x). Verificaţi acelaşi lucru şi pentru o variabilă de tip double utilizând specificatorii de format (%f, %lf, %d, %e).

2. Să se citească de la tastatură o variabilă de tip double. Să se verifice dacă valoarea citită

are partea reală nulă (este de fapt o valoare întreagă).

3. Să se afişeze codul ASCII pentru litere şi cifre. (Observaţie: codul ASCII asociază fiecărui caracter un număr întreg. Pentru literele alfabetului codurile ASCII sunt consecutive!). Preferabil afişare frumoasă sub formă de tablou.

4. Să se citească un şir de litere şi să se ordoneze în ordine lexicografică (de la ‚a‘ la ‚z‘)

5. Se citeşte un şir de variabile de tip char . Să se afişeze câte dintre ele sunt litere.

6. Să se citească un număr de cel puţin 6 cifre şi să se afişeze media aritmetică a cifrelor sale cu o precizie de 4 zecimale.

7. Să se afişeze primele n numere (divizibile cu 3), câte cinci pe linie. Între două cifre pe

aceeaşi linie să fie un tab, iar numerele să fie afişate pe minim 4 caractere.

8. Să se citească o matrice de valori reale. Să se calculeze media aritmetică a elementelor nenule de pe diagonala principală şi să se afişeze în formă exponenţială.

9. Să se calculeze maximele pe linii dintr-o matrice de întregi şi să se afişeze aceste maxime pe o linie, pe minim 4 caractere, despărţite prin tab-uri.