Sunteți pe pagina 1din 6

Şef lucrări Morariu-Gligor Radu PUC – Laborator nr.

2 + 3 1/6
Dacă parametrul este o expresie, la apelarea funcţiei se realizează mai întâi
Laborator nr. 2 + 3: Funcţii de intrare / ieşire evaluarea expresiei, rezultatul trebuie să fie de tip int şi reprezintă codul ASCII al
caracterului pe care dorim să-l afişăm. Funcţia returnează o valoarea care reprezintă codul
Introducere: Această lucrare de laborator îşi propune prezentarea ASCII al caracterului afişat, deci caracterul poate fi utilizat ca şi operand în expresii.
funcţiilor de intrare / ieşire ale limbajului C.
Exemplul nr.1:
După parcurgerea acestui laborator studenţii vor fi capabili
să utilizeze mediul de programare pentru scrierea unor programe de #include <conio.h>
complexitate scăzută. #include <stdio.h>
În acest scop, sunt prezentate funcţiile de intrare / ieşire void main(void)
împreună cu o serie de exemple. { char c;
Pe parcursul desfăşurării laboratorului, studenţii: printf(“\n Introduceti un caracter:”); c = getche();
Obiective: - vor lectura materialul didactic pus la dispoziţie; putch(‘\n’); putch(c); putch(10); putch(c+2);
- vor introduce şi vor rula exemplele prezentate în lucrare; printf(“\n Codul ASCII al car. tastat este: %2d”,c);
- vor identifica erorile de sintaxă din cadrul programelor printf(“\n Apasati o tasta!!!”);
exemplu şi le vor remedia; getch();
- vor rezolva împreună cu cadrul didactic temele propuse. }

Durata studiului individual: 60 minute. Efectul rulării programului este:


Introduceti un caracter: s <Enter>
Limbajul C nu are instrucţiuni pentru introducerea şi extragerea datelor, astfel că s
introducerea şi extragerea datelor din program se realizează cu ajutorul unor funcţii. În u
limbajul C avem funcţii pentru introducerea datelor (intrare): getch(), getche(), gets(), Codul ASCII al car. tastat este: 115
scanf() şi funcţii pentru extragerea datelor (ieşire): putch(), puts() şi printf(). Pe lângă Apasati o tasta!!!
aceste două funcţii mai avem şi două macrouri getchar() şi putchar().
Funcţii de intrare-ieşire pentru caractere Exemplul nr. 2:
a) getch(), getche() – sunt funcţii de intrare pentru caractere.
#include<stdio.h>
Au prototipul în biblioteca de funcţii conio.h.
getch() – citeşte un singur caracter de la tastatură (= get character). Caracterul citit #include<conio.h>
nu este afişat pe ecran, adică citirea nu se face cu ecou. void main(void)
getche() – citeşte un singur caracter de la tastatură, însă citirea se face cu ecou pe { int c1, c2;
ecran (get character with echo). Funcţiile nu au argumente dar returnează o valoare care printf(“\n Actionati o tasta <F1…F12>:\n”);c1=getch(); c2=getch();
reprezintă codul ASCII al caracterului citit. printf(“\n Codurile coresp.: %d si %d”, c1, c2); getch();
b) putch() – este o funcţie de ieşire pentru caractere. Are prototipul în biblioteca }
de funcţii conio.h.
Funcţia are un parametru, acesta poate fi o expresie, o constantă întreagă sau o Efectul rulării programului este:
constantă caracter. Actionati o tasta <F1 ... F12>: F4
Codurile coresp.: 0 si 62
1
Şef lucrări Morariu-Gligor Radu PUC – Laborator nr. 2 + 3 2/6
caractere (adresa primului element). Funcţia returnează aceeaşi adresă de început al
Macrourile getchar() şi putchar() şirului. Deoarece şirurile se păstrează în memorie sub forma unor tablouri
unidimensionale de tip char, parametrul funcţiei va fi numele tabloului.
Macrourile sunt definite în biblioteca stdio.h. b) puts() este utilizată pentru afişarea pe ecran a unui şir de caractere. Are prototipul în
a) getchar() – citeşte de la tastatură un caracter, deosebirea faţă de getch() sau biblioteca stdio.h. În mod asemănător funcţiei gets() putem utiliza numele şirului ca şi
getche() constând în faptul că respectivul caracter nu este citit direct de la tastatură ci dintr-o argument. Funcţia returnează codul ASCII al ultimului caracter din şir şi poate fi utilizată
zonă tampon în care sunt păstrate toate caracterele scrise de utilizator până la apăsarea ca şi operand în expresii.
tastei ENTER. Avantajul constă în faptul că se pot corecta caracterele tastate înainte de
apăsarea tastei ENTER. Macroul getchar() nu are argumente şi returnează codul ASCII al Exemplu nr. 4:
caracetrului citit. Poate citi numai caractere ASCII. #include <stdio.h>
b) putchar() – afişează un caracter pe ecran. Apelul se poate realiza printr-o
#include <conio.h>
instrucţiune de apel sau ca şi operand într-o expresie. Are un parametru a cărui valoare este
codul ASCII al caracterului pe care dorim să-l afişăm pe ecran şi returnează valoarea codului
void main(void)
ASCII al caracterului afişat. { char nume[25], prenume[25];
puts(“ Introduceti numele dvs.:”); gets(nume);
Exemplu nr. 3: puts(“ Introduceti prenumele dvs.:”); gets(prenume);
puts(“ Numele dvs. este: ”); puts(nume);
#include <stdio.h> puts(“ Prenumele dvs. este: ”); puts(prenume);
#include <conio.h> puts(“ Initiala numelui este: ”); putch(nume[0]);
void main(void) puts(“ Initiala prenumelui este: ”); putch(prenume[0]);
{ printf(“\n Introduceti o succesiune de caractere: ”); puts(“ Apasati o tasta pentru terminare!!!”);
putchar(getchar()); printf(“\t este primul caracter introdus \n”); getch();
putchar(getchar()); printf(“\t este al doilea caracter introdus \n”); }
putchar(getchar()); printf(“\t este al treilea caracter introdus \n”);
getch(); } Efectul rulării programului este:

Efectul rulării programului este: Introduceti numele dvs.: Morariu <Enter>


Introduceti prenumele dvs.: Radu <Enter>
Introduceti o succesiune de caractere: test <Enter> Numele dvs. este:
t este primul caracter introdus Morariu
e este al doilea caracter introdus Prenumele dvs. este:
s este al treilea caracter introdus Radu
Funcţiile de intrare – ieşire gets() şi puts() Initiala numelui este:
M
a) gets() este utilizată pentru citirea de la tastatură a unui şir de caractere, în mod Initiala prenumelui este:
asemănător cu getchar(). Citirea începe după apăsarea tastei ENTER, caracterele R
introduse fiind depozitate într-o zonă tampon. Funcţia are prototipul în stdio.h. Funcţia Apasati o tasta pentru terminare!!!
are un parametru care reprezintă adresa de memorie de la care va fi păstrat şirul de
2
Şef lucrări Morariu-Gligor Radu PUC – Laborator nr. 2 + 3 3/6
.precizie : indică precizia de scriere a datei, astfel: pentru %e, %E, %f indică numărul de
Funcţia de ieşire printf( ) zecimale; pentru %d, %i, %u indică numărul minim de cifre pe care va fi reprezentată data
Funcţia printf( ) se utilizează pentru afişarea datelor pe ecran, indiferent de tipul de tip întreg. Dacă data este mai mică se pun cifre 0 (zero) iar dacă data este mai mare se
acestora. Funcţia permite specificarea formatului în care vor fi afişate datele (print with foloseşte un câmp corespunzător; pentru %s indică numărul maxim de caractere care se
format). Are prototipul în biblioteca de funcţii stdio.h şi apelul ei se face sub forma: afişează; pentru %c nu are efect.
Dacă în locul cifrei se plasează * valoarea acestuia se va preciza la execuţie prin
printf( sir_format, lista_de_parametri) intermediul unui parametru din lista de argumente.
unde: lista_de_parametri – este o listă de parametrii, separaţi prin virgulă, prin care se modif : poate fi una din literele h, l, L care determină modul în care se interpretează tipul
indică datele ce vor fi afişate. Este opţională şi poate conţine variabile, constante, expresii datelor, astfel: h + d, i, o, u, x, X -> date de tip short int; l sau L + d, i, o, u, x, X -> date de tip
sau apeluri de funcţii. Fiecărui parametru trebuie să-i corespundă câte un specificator de long int; l sau L + e, f -> date de tip long double.
format; sir_format este o succesiune de caractere, scrise între ghilimele (“ “), care poate
conţine: texte, secvenţe ESCAPE, specificatori de format. Exemplu nr. 5:
Forma generală a unui specificator de format:
#include <stdio.h>
%[flags][lăţime].[precizie][modif]tip
#include <conio.h>
unde: void main(void)
% : reprezintă caracterul prin care se specifică descriptorul de format, nu trebuie să { int m = 250; float n = 23.4567; char nume[15];
lipseasă; printf("\n Format zecimal : %8d",m);
tip : reprezintă o literă care specifică tipul conversiei aplicate datelor la afişare, nu poate printf("\n Format zecimal : %8i",m);
lipsi din specificatorul de format. Pentru tip se folosesc: c – afişarea unui caracter; s – printf("\n Format octal : %o",m);
afişarea unui şir de caractere; i, d – afişarea unui număr întreg (în baza zece) cu semn; u – printf("\n Format octal : %6o",m);
afişarea unui număr întreg (în baza zece) fără semn; f – afişarea unui număr real cu semn - printf("\n Format octal : =%6o=",m);
notaţie zecimală (implicit sunt 6 cifre zecimale; e, E – afişarea unui număr real cu semn printf("\n Format hexazecimal : %8x",m);
(notaţie exponenţială); g – afişarea unui număr real (cea mai scurtă reprezentare între f şi e); printf("\n Format hexazecimal : %%4x \t %5x",m);
x – afişarea unui număr hexazecimal întreg fără semn; o – afişarea unui număr octal întreg printf("\n Format real : %f",n);
fără semn; p – afişarea unei adrese (a unui pointer);
printf("\n Format real : %7.3f",n);
flags : Poate fi unul din caracterele: + (plus): se afişează semnul datei (plus sau minus); - printf("\n Format real : %09.4f",n);
(minus): data este aliniată la stânga în câmpul de scriere; _ (spaţiu): valorile negative se printf("\n Format real : %.0f",n);
scriu cu semn (semnul minus) fără a se lăsa nici un spaţiu; # (diez): determină folosirea printf("\n Format real : %.2f",n);
formei alternative de scriere. printf("\n Format real : %*.*f",9,4,n*2);
lăţime : constă dintr-un număr întreg care specifică dimensiunea minimă a câmpului în printf("\n Format real : %.1e",n);
care va fi afişată data. Dacă sunt necesare mai multe poziţii, data va fi afişată pe câte poziţii printf("\n Numarul real este : %e ",-n);
trebuie. Dacă data are mai puţine caractere ea va fi aliniată la dreapta în câmpul de afişare. printf("\n Numarul real este : %g ",-n);
Spaţiile rămase libere se completează cu spaţiu. Dacă se plasează un 0 (zero) înaintea cifrei getch(); puts("\n Introduceti un caracter:");
ce reprezintă lăţimea, spaţiile rămase libere vor fi completate cu cifra 0. Dacă în locul cifrei printf("\n Caracterul introdus: %5c",getch());
ce reprezintă lăţimea se plasează caracterul *, atunci valoarea lăţimii este precizată la
printf("\n Introduceti numele:"); gets(nume);
execuţie, printr-un parametru din lista de argumente.
3
Şef lucrări Morariu-Gligor Radu PUC – Laborator nr. 2 + 3 4/6
puts("\n Ati introdus: "); printf(" %s ",nume);
printf("\n %5.3s",nume); Funcţia de intrare scanf( )
printf("\n Initiala numelui dvs. este : %c",nume[0]);
printf("\n Codul ASCII al initialei numelui este : %d",nume[0]); Funcţia scanf() se utilizează pentru citirea datelor de la tastatură, indiferent de tipul
puts("\n \n Pentru terminare apasati orice tasta!!!"); acestora. Funcţia permite specificarea formatului în care vor fi citite datele (scan with
getch(); format). Are prototipul în biblioteca de funcţii stdio.h iar apelul ei se face sub forma:
} scanf( sir_format, lista_de_adrese )
unde: sir_format : este o succesiune de caractere cuprinse între ghilimele care definesc
Efectul execuţiei programului este: formatul datelor de intrare (o succesiune de descriptori de format); lista_de_adrese : este o
listă care conţine adresele de memorie în care vor fi păstrate valorile citite. Fiecărui element
Format zecimal : 250 din sir_format îi corespunde o adresă din lista_de_adrese.
Format zecimal : 250 În cazul variabilelor simple, pentru specificarea adresei se foloseşte operatorul
Format octal : 372 adresă & plasat înaintea numelui variabilei.
Format octal : 372 În cazul tablourilor nu este necesară utilizarea operatorului adresă deoarece
Format octal : = 372= numelui tabloului îi este atribuită valoarea adresei de început a tabloului (adresa primului
Format hexazecimal : fa element). În cazul în care utilizăm variabile cu indici (elementele tabloului) este necesară
Format hexazecimal : %4x fa utilizarea operatorului adresă. Pot fi citite mai multe variabile într-o singură secvenţă,
separatorii utilizaţi fiind blank (spaţiu), tab \t, retur de car (caracterul new line \n, etc.).
Format real : 23.456699
Forma generală a descriptorilor de format este:
Format real : 23.457
Format real : 0023.4567 %[latime][modif]tip
Format real : 23 unde: latime : reprezintă lăţimea maximă a câmpului de intrare; modif : are aceeaşi
Format real : 23.46 semnificaţie ca şi în cazul funcţiei printf; tip : este o literă care indică conversia aplicată
Format real : 46.9134 datei la intrare (la citire);
Format real : 2.3e+01 Citirea se realizează dintr-un câmp de intrare. Un câmp de intrare începe de la
Numarul real este : -2.345670e+01 primul caracter introdus (exclus caracterele albe) şi se termină în una din situaţiile: se
Numarul real este : -23.4567 tastează un caracter alb (spaţiu, tab orizontal, linie nouă, tab vertical); se atinge lăţimea
Introduceti un caracter: impusă prin descriptorul de format; se tastează un caracter al cărui tip nu corespunde tipului
Caracterul introdus: e precizat în descriptorul de format. Funcţia scanf returnează o valoare întreagă care
reprezintă numărul de caractere citite corect.
Introduceti numele: morariu
Ati introdus: morariu Exemple:
mor
Initiala numelui dvs. este : m scanf(“%s”,sir1); scanf(“%s”,sir2); sau scanf(“%s %s”,sir1,sir2);
Codul ASCII al initialei numelui este : 109 scanf(“%d %d %d”,&a, &b, &c); // se vor introduce astfel: 1 2 3
Pentru terminare apasati orice tasta!!! scanf(“%d,%d”,&a,&b); // datele se vor introduce astfel: 1,2
scanf(“%f %f”,&e,&f); // datele se vor introduce astfel: 3.56 4.78

4
Şef lucrări Morariu-Gligor Radu PUC – Laborator nr. 2 + 3 5/6

Exemplu nr. 6: calculul elementelor unei sfere de rază R Exemplu nr. 8: Acest program afişează modul în care sunt reprezentate în
memoria calculatorului diferite tipuri de date
#include <stdio.h> // pt. funcţiile printf şi scanf #include<stdio.h>
#include <conio.h> // pt. funcţiia getch #include<conio.h>
#include <math.h> // pt. funcţiile matematice şi PI (M_PI) #include<string.h>
void main(void) // funcţia principală void main(void)
{ // inceputul funcţiei principale { char sir[15]="Program in C++"; int a[5]={11, 23, 35, 44, 56};
float R, D, S, V; // declaraţii de variabile float b[5]={1.23, 3.145, -2.43, 0.26, 1.0};
printf(“\n Introduceti raza:”); // apelul funcţiei printf pt. afisare text int c[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; clrscr();
scanf(“%f”,&R); // apelul funcţiei scanf pt. citirea valorii R for(i=0;i<=strlen(sir);i++)
D=2*R; printf("\n Car. poz: %3d, Valoare: %c, Adresa:%p",i+1,sir[i], &sir[i]);
S=4*M_PI*R*R; for(i=0;i<=4;i++)
V=4*M_PI*R*R*R/3; // calculul elementelor sferei printf("\n Elem:%3d, Valoarea:%3d, Adresa:%p",i+1,a[i],&a[i]);
printf(“\n Diametrul D = %7.3f”,D); // apelul fcţiei printf pt. afis. val. D for(i=0;i<=4;i++)
printf(“\n Aria S = %7.3f”,S); // apelul fcţiei printf pt. afis. val. S printf("\n Elem:%3d, Valoarea:%6.3f, Adresa:%p",i+1,b[i],&b[i]);
printf(“\n Volumul V = %7.3f”,V); // apelul fcţiei printf pt. afis. val. V getch(); clrscr();
getch(); // apelul funcţiei getch for(i=0;i<=2;i++)
} // sfârşitul funcţiei principale for(j=0;j<=2;j++)
Exemplu nr. 7: Acest program afişează caracterele şi codurile ASCII asociate. printf("\n L: %3d, C.: %3d, Val.:%3d, Adresa:%p",i+1,j+1,c[i][j],&c[i][j]);
getch();
#include<stdio.h> }
#include<conio.h>
void main(void) Teme propuse:
{ int i; char c; clrscr();
for(i=0;i<=255;i++) 1. Să se scrie un program pentru calculul valorii funcţiei:
{ printf("%c %3d ",i,i); y  6  x3  5  x 2  3  x  1
if(i%12==0) printf("\n"); 2. Să se scrie un program pentru rezolvarea sistemului de ecuaţii liniare de ordinul
} întâi:
getch(); a  x  b  y  c

} d  x  e  y  f
3. Se consideră două valori reale: a şi b care reprezintă lungimile catetelor unui
triunghi dreptunghic.
Se cere să se calculeze: lung. ipotenuzei, aria triunghiului, volumul şi aria laterală a
conului obţinut prin rotirea triunghiului în jurul catetei a.

5
Şef lucrări Morariu-Gligor Radu PUC – Laborator nr. 2 + 3 6/6

4. Să se scrie un program pentru transformarea coordonatelor polare în coordonate


carteziene. DESFĂŞURAREA LUCRĂRII:
5. Se consideră o progresie aritmetică la care se cunosc: valoarea primului termen a1
Timp de lucru: 100 minute.
şi raţia r. Se cere să se determine:
În cadrul laboratorului, se vor parcurge următoarele etape:
suma primilor n termeni: S n 
2  a1  n  1 r  n şi valoarea elementului k: Etapa 1: Cadrul didactic va prezenta succint noţiunile teoretice şi exemplele din
2 lucrare;
ak  a1  k  1  r ; Etapa 2: Studenţii vor lectura materialul didactic;
Etapa 3: Fiecare student va introduce exemplele din materialul didactic;
6. Să se calculeze şi să se afişeze valoarea polinomului Etapa 4: Studenţii împreună cu cadrul didactic vor rezolva tema propusă.
P( x)  c4  x 4  c3  x3  c2  x 2  c1  x  c0 . Coeficienţii polinomului vor fi
definiţi ca un şir de numere reale, ca şi în programul exemplu nr. 8.
 a0, 0 a0,1 a0, 2 
 
7. Se consideră o matrice A3x3 de forma: A   a1, 0 a1,1 a1, 2  Să se calculeze RECAPITULARE:
a a2,1 a2, 2 
 2, 0 În cadrul acestui laborator, studenţii s-au familiarizat cu funcţiile de intrare /
determinantul de ordinul 3. Elementele matricei vor fi definite ca şi în programul ieşire ale limbajului C. Împreună cu cadrul didactic, studenţii rezolvă o serie de
exemplu nr. 2; probleme de complexitate redusă.

8. Se consideră un trunchi de con (figura) pentru care se cunosc:


razele r şi R şi înălţimea I. Se cere să se calculeze următoarele
elemente: CONCLUZII:
G  I  R  r  ;
2
Generatoarea: 2
aria laterală:
Prin parcurgerea acestui laborator, studenţii şi-au însuşit noţiunile
S l    G  R  r  ; aria totală: 
St  Sl    R 2  r 2 ;  Volumul: teoretice referitoare la funcţiile de intrare / ieşire ale limbajului C. Prin editarea şi
 R2  r 2  R  r  rularea programelor exemplu studenţii au posibilitatea de a vizualiza modul de
V    I    ; diagonala: d  G 2  4  R  r ; lucru al funcţiilor de intrare / ieşire. Rezolvarea temelor împreună cu cadrul
 3  didactică contribuie la fixarea noţiunilor teoretice prezentate în lucrare.
9. Se consideră două puncte în spaţiu P1(x1, y1, z1) şi P2(x2, y2, z2), Să se calculeze
distanţa în spaţiu dintre cele două puncte.

Succes!!!

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