Aplicatiile sunt pentru pregatirea individuala. Cele care sunt precedate de litera E au fost date la examen in anii trecuti.
Aplicatii date pentru recunoasterea examenului ( 21 octombrie 2000 ):
1. Se citeste un fisier cu numele furnizat
de la tastatura, avand linii de forma:
nume valoare
nume fiind un sir alfanumeric, iar
valoare,
un real.
Sa se construiasca o lista ordonata descrescator,
dupa campul cheie ( pointer la caracter ), in care se memoreaza
cate un nume din fisier.
Fiecare nod al listei contine pe langa cheie,
campurile valoare ( la reaparitia unui nume in fisier, campul
se actualizeaza ), contor ( numara aparitiile in fisier ale aceluiasi
nume ) si inlantuire.
Sa se tipareasca lista construita ( vezi rezolvare
).
2. Sa se construiasca o matrice de M linii si N coloane, avand elemente de tip intreg lung, astfel:
Sa se elaboreze schemele logice pentru urmatoarele enunturi, specificand structurile de control utilizate:
1.Sa se tipareasca in ordine crescatoare ( descrescatoare ) trei valori citite de la tastatura.
E2.Pentru trei valori citite, sa se tipareasca cea care este cea mai apropiata de media lor aritmetica ( geometrica ).
3.Se citeste o secventa de numere intregi, terminata cu 0. Sa se afiseze contorul numerelor citite, suma, produsul, numarul celor pozitive, nule, negative, media aritmetica si geometrica.
4. Se citesc doi intregi n si f. Sa se tipareasca toti intregii <= n care sunt multiplii de f si numarul acestora.
5.Pentru doi intregi a si n cititi, sa se tipareasca suma si produsul primilor n intregi, valorile expresiilor n! si a^n.
E6. Sa se calculeze si sa se afiseze valoarea expresiei (a-m)^n/(n-a)^m, pentru a,m,n cititi de la tastatura, m,n >=0, intregi si a diferit de n.
E7. Sa se calculeze valoarea expresiei (n-a)^(b-n), pentru n variind intre a si b inclusiv; a si b se citesc, astfel incat sa fie pozitivi si b>a.
8.Sa se calculeze suma termenilor sirului an=x^n/n!, a0=1, pana la
insumarea a cel mult nmax termeni sau pana cand diferenta a doi termeni
consecutivi este eps. Se vor citi de la tastatura x ( 0<x<1 ), nmax
( nmax >=2 ), eps ( 0<eps<1).
Se vor afisa suma calculata, numarul de termeni insumati si diferenta
dintre ultimii doi termeni consecutivi.
9.Se considera functia: f(x)=(x^2-9)/(x-1), pentru x<1
x, pentru x>=1 si x<=5
1/(x-5), pentru x>5.
Sa se afiseze valorile functiei f(x) pentru xC[a,b], cu pasul p,
numarul punctelor in care x si f(x) sunt de acelasi semn si media aritmetica
a valoriilor calculate.a, b si p se citesc de la tastatura.
E10. Se
prelucreaza informatiile despre situatia cazarilor intr-un camin, astfel:
- se citesc pana la introducerea lui CTRL/Z perechi de valori intregi,
reprezentand numarul unei camere si numarul de studenti cazati in respectiva
camera; in cazul tastarii unei valori invalide ( <=0 ) pentru numarul
camerei sau al studentilor, se semnaleaza eroare si programul se termina;
- se afiseaza numarul de camere pentru care s-a facut citirea, media
de studenti cazati pe camera, numarul de camere cu un student cazat, cel
de camere cu mai mult de trei studenti cazati, numarul maxim de studenti
cazati si cel al ( primei ) camerei corespunzatoare.
11. Sa se calculeze si afiseze rezistentele echivalente pentru legarea in serie, respectiv paralel a celor cu valorile reale introduse de la tastatura si terminate cu CTRL/Z. La introducerea unei valori invalide ( <=0 ) se semnaleaza eroare si se termina programul.
12. Sa se afiseze numerele prime dintre doua valori citite.
13. Sa se afiseze factorii primi si exponentii lor pentru un numar citit.
14. Pentru doua date citite, in an, luna, zi, sa se afiseze numarul de ani intregi trecuti.
15. Sa se determine toate patratele perfecte dintre doua valori citite.
16. Sa se scrie algoritmul care determina daca trei valori reale citite pot fi laturile unui triunghi, in caz afirmativ, afisandu-i aria calculata cu formula lui Heron si determinand daca e echilateral, isoscel sau oarecare.
E17.Se considera
functia: f(x)=(2-x^4)/(1-2x), pentru x<0.5
(2x-1)/(1-5x^5), pentru x>=0.5.
Sa se afiseze:
-perechile x,f(x) pentru x luand valorile discrete cu pasul eps
din intervalul [min,max]; min, max, eps se citesc de la tastatura;
-numarul de puncte in care x si f(x) au avut semne diferite;
-minimul si maximul valorilor lui f(x) dintre cele calculate.
E18.Se
citesc de la tastatura triplete de valori intregi de forma a, b, c, unde
a este numarul matricol, iar b si c sunt notele la UPC ale studentului
cu numarul matricol a. Citirea se face pana cand cel putin una din valori
e invalida ( numar matricol negativ sau 0 sau note in afara intervalului
1-10 ). Sa se tipareasca:
- numarul de studenti pentru care s-a facut
citirea
- numarul matricol al studentului cu media
maxima; daca sunt mai multi student cu aceeasi medie maxima, se tipareste
numarul matricol al primului citit
- numarul de studenti restantieri si media
aritmetica a tuturor studentilor.
E19.Se
citesc de la tastatura perechi de valori reale de forma x, y, considerate
coordonatele cate unui unui punct in plan. Citirea se face pana in momentul
introducerii perechii 0,0, care nu se prelucreaza. Sa se tipareasca:
- numarul de puncte pentru care s-a facut
citirea
- coordonatele punctului celui mai apropiat
( departat ) de origine
- numarul de puncte de pe abscisa, al celor
de pe ordonata
- numarul de puncte de pe bisectoarea cadranului
1, al celor de pe bisectoarea cadranului 2.
E20.Se
citesc de la tastatura notele obtinute la examenul de UPC. citirea se termina
la introducerea unei valori invalide. Sa se tipareasca:
- numarul de note citite
- numarul de restante
- media aritmetica a notelor de trecere.
OPERATORI
E1,2,3.4. Ce se afiseaza pe ecran la executia urmatorului program? Gasiti raspunsul, dati justificarea, apoi verificati prin executie.
1.
#include <stdio.h>
int a,b; float c=13/2;
void main (void){
a=c-=2;
b=a-3<<sizeof(int);
printf("%d %d %d %f\n",a>=b,a,b,c);
c=++b | a;
printf("%d %d %c %f\n",a>b?a:b,a%b,'b'+b,c);
printf("%d\n",!(a-a)&&b);
}
2.
#include <stdio.h>
char a='c'; float b; int c;
void main (void){
b=7/(a-'a');
c=b+=2;
printf("%d %c %f %d\n",c&&4,++a,b,c);
a=c | 3;
c<<=sizeof(char);
b=a<c?c%a:a%c;
printf("%d %f %d\n",a,b,c);
}
3.
#include <stdio.h>
void main (void){
char j; float k; int i;
for(j='a',k=5/2,i=k+=3;i>>=1,--k,++j<'c';)
printf("%c %d %f %d %d\n",j,i,k,(int)k|3,i&&3);
}
4.
#include <stdio.h>
int a,b,c=5;
void main(void){
b=c<<sizeof(char);
a=++b&c;
printf("%d %d %d %d\n",a>b,a,b,c);
{
char a=b++/--c;
printf("%d %d %c\n",a>b?a:b,a%b,'c'+c);
}
printf("%d %d %d\n",a,b,c);
}
5.Sa se scrie un program care citeste ciclic cate trei intregi x,i,j,
pana
la introducerea lui CTRL/Z, pentru fiecare grup citit afisandu-se pe cate
un rand nou:
-reprezentarea lui x in zecimal, binar, hexazecimal si octal
-reprezentarea in zecimal, binar, hexazecimal si octal a complementului
lui x
-reprezentarea in zecimal, binar, hexazecimal si octal a numarului
obtinut prin inversarea octetilor lui x
-bitul i din x ( bitul 0 este cel mai putin semnificativ )
-numarul obtinut ( in binar, zecimal ) prin deplasarea lui x la
stanga cu i pozitii
-numarul obtinut ( in binar, zecimal ) prin deplasarea lui x la
dreapta cu j pozitii
-numarul obtinut ( in binar, zecimal ) prin complementarea bitului
i
-numarul obtinut ( in binar, zecimal ) prin setarea bitilor i si
j
-numarul obtinut ( in binar, zecimal ) prin stergerea bitilor i
si j
-numarul obtinut ( in binar, zecimal ) prin inversarea bitilor i
si j.
6.Sa se scrie un program care citeste ciclic cate trei intregi x,n,p,
pana la introducerea lui CTRL/Z, pentru fiecare grup citit afisandu-se
pe cate un rand nou, in binar, zecimal:
-numarul format din cei n biti din x incepind de la pozitia p, completati
la stanga cu 0
-numarul obtinut prin setarea celor n biti din pozitia p
-numarul obtinut prin stergerea celor n biti din pozitia p
-numarul obtinut prin inversarea celor n biti din pozitia p.
7.Se citesc intregii x,y,n,p. Se cere:
- sa se afiseze x si y in binar
- sa se pozitioneze in x, cei n biti incepand din pozitia p conform
cu ultimii n biti din y si sa se afiseze noua valoare a lui x, in binar
si zecimal.
E8,9. Ce se afiseaza pe ecran la executia urmatorului program? Gasiti raspunsul, dati justificarea, apoi verificati prin executie.
8.
#include <stdio.h>
int i=7/2; char j='b'; float k=0;
void main (void){
i=k+=3;
printf("%d %c %f\n",i,++j,k);
printf("%d %d %d\n",i>>1, i%2,i&&2);
}
9.
#include <stdio.h>
float i=9/4; int j=(int)i|4; char k='A'+2;
void main (void){
printf("%f %d %c\n",i,j,k);
printf("%d %d %d\n",j||2, j>>1, j>3?j-2:j+2);
}
10. Se citesc de la tastatura un intreg si un caracter; sa se afiseze caracterul citit si cel avand codul ASCII cu valoarea intregului mai mare, precum si codurile lor in bazele 10, 16 si 8, sub forma ( exemplificare pentru citirea intregului 4 si a caracterului C):
caracter codb10 codb16
codb8
'C'
67 43
103
'G'
71 47
107
Observatii: Citirile vor fi precedate de mesaje corespunzatoare. Inainte de a rula programul, precizati ce se va afisa pe monitor, subliniind informatile tastate de utilizator.
11. Se citesc trei caractere reprezentand numele unei firme, un intreg - numarul de angajati si un real - beneficiul. Sa se afiseze beneficiul mediu pe angajat, sub forma ( exemplificare pentru citirea caracterelor XYZ, a intregului 120 si a realului 240e4 ):
Firma "X.Y.Z." are beneficiul mediu: 20000.000000
Observatiile de la 10. raman valabile.
12. Ce sa tipareste pe ecran la executia urmatoarelor programe? Justificare.
#include <stdio.h>
int a,b; float c=15/2;
void main (void){
a=c-=2;
b=a--%sizeof(long);
printf("%d %d %d %f\n",a,b,a>=b,c);
c+=++ a;
printf("%d %d %c %f\n",a,a&&b,'b'+b,c);
printf("%d\n",!(a-a)&&b<=1);
}
13.
#include <stdio.h>
void main (void){
char a='c'; float b; int c;
b=(int)7.0/(a-'a');
c=b+=2;
printf("%d %c %f %d\n",c&&4,++a,b,c);
c%=c+=sizeof(char);
printf("%d %d\n",c,!c<=c!=3);
}
INSTRUCTIUNI
1-16.Elaborati programele pentru enunturile de la Scheme logice.
17. Se citesc de la tastatura valori reale,
pana la introducerea lui CTRL/Z. Sa se calculeze si sa se afiseze mediile:
- aritmetica
- geometrica ( radicalul de ordin n dintr-un
numar x se calculeaza prin apelul functiei pow(x,1/n) din math.h )
- armonica cu relatia n/med_arm=1/val1
+ 1/val2 + ... + 1/valn.
18.Sa se calculeze suma termenilor sirului an=x**n/n!, a0=1, pana
la insumarea a cel mult nmax termeni sau pana cand diferenta a doi termeni
consecutivi este eps. Se vor citi de la tastatura x ( 0<x<1 ), nmax
( nmax >=2 ), eps ( 0<eps<1).
Se vor afisa suma calculata, numarul de termeni insumati si diferenta
dintre ultimii doi termeni consecutivi.
19. Analog cu aplicatia anterioara, sa se calculeze sin, cos, tg pentru un x citit, folosind dezvoltarile in serie.
20.Sa se tipareasca toate numerele prime, patratele si cuburile perfecte dintre doua valori citite.
21.Se citesc intregii x,k1,k2,m1,m2. In stanga
balantei avem greutatea x. Avem la dispozitie m1 greutati de masa k1 fiecare
si m2 greutati de masa k2 fiecare.
a)Sa se afiseze toate posibilitatile de echilibrare
a balantei punind greutati doar in partea dreapta.
b)Sa se afiseze toate posibilitatile de echilibrare
a balantei.
22.Se citesc de la tastatura, ciclic, cate doi intregi n si b; pentru fiecare grup sa se afiseze valoarea lui n in baza b.
E23. Sa se calculeze si sa se afiseze valoarea expresiei (a-m)^n/(n-a)^m, pentru a,m,n cititi de la tastatura astfel incat intregii m,n sa fie >=0, iar a!=n. Sa se modifice programul, astfel incat sa se poata calcula expresia pentru triplete diferite, pana in momentul cand m si n sunt simultan 0.
TABLOURI
E1.
Sa se scrie programul care prelucreaza o matrice patratica de ordin N (
constanta simbolica ), de reali, considerata var globala, astfel:
- initializeaza elem cu expr (i^2-j^2)/(i^2+j^2+1)
al carei rezultat va fi returnat de o functie ce primeste ca parametri
valorile i si j ( indicii );
- afiseaza pe linii matricea
- afiseaza sumele elementelor de pe fiecare
linie, prin apelul functiei suma ce primeste indicele liniei si returneaza
suma
- interschimba doua linii - prin functia ce
primeste indicii liniilor.
Fiecare prelucrare se va implementa
prin cate o functie void fara parametri.
E2.Pentru
o matrice cu NL linii si NC coloane ( NL, NC constante simbolice ), declarata
ca variabila globala si avand elemente intregi, sa se scrie urmatoarele
functii void fara parametri:
- citire - citeste elementele matricii pe
coloane
- tiparire - tipareste elementele matricii
pe linii
- det_maxim - determina si afiseaza elementul
maxim din matrice
- constr_tab - construieste un tablou unidimensional
declarat ca variabila globala, ale carui elemente sunt sumele elementelor
de pe cate o linie a matricii
- interschimbare - interschimba elementele
de pe doua coloane ale matricii cu indicii cititi
- cauta - cauta in matrice o valoare citita,
afisandu-i pozitia.
Ce mai trebuie adaugat pentru a avea un program
C complet?
3. Sa se scrie un program care citeste
elementele unei matrici patrate A de ordin N, de numere intregi si efectueaza
operatiile:
a) construieste un tablou liniar cu toate
elementele matricii care sunt patrate perfecte
b) contruieste matricea B ca transpusa a matricii
A.
4.Sa se scrie un program care calculeaza si
afiseaza matricea produs a doua matrici de elemente intregi, initializate
la declarare. Produsul si afisarea vor fi realizate de cate o functie void
fara parametri, iar cele trei matrici
se vor considera variabile globale.
5.Sa se scrie un program care realizeaza urmatoarele
prelucrari asupra unei matrici patratice M de ordin N ( constanta simbolica
), avand elemente intregi, fiecare prelucrare fiind realizata de cate o
functie void fara parametri:
- citeste - elementele matricii pe coloane
- afiseaza - elementele matricii pe linii
- modifica - aduna la fiecare element al matricii
suma indicilor elementului respectiv; se afiseaza apoi matricea modificata
apeland functia de mai sus
- verif_sim - verifica daca matricea este
simetrica, afisand un mesaj corespunzator
- det_linia - determina linia din matrice
care are produsul elementelor maxim, afisand indicele liniei si produsul
- calc_sume - calculeaza si afiseaza patru
sume: a elementelor aflate pe diagonala principala, a celor de pe diagonala
secundara, a celor aflate deasupra diagonalei principale si a elementelor
aflate pe "marginile" matricii
- transpusa - construieste si afiseaza transpusa
matricii M.
E6.
Sa se scrie programul care prelucreaza o matrice de dimensiuni MxN ( constante
simbolice ), de reali, astfel:
- citeste elementele pe coloane
- afiseaza pe linii matricea
- calculeaza si afiseaza suma elementelor
de pe diagonala principala
- construieste un tablou care contine elementele
de pe ultima coloana.
Matricea si tabloul se vor declara var globale;
fiecare prelucrare se va implementa ca o functie void fara parametri.
E7.a.
Sa se declare matricea MATR de elemente reale, cu NL linii si NL coloane
(NL, NC sunt constante predefinite );
Considerand MATR variabila globala, sa se
scrie functiile:
b. INIT void, fara parametri, care initializeaza
elementele MATR considerat variabila globala, atribuind fiecarui element
valoarea raportului dintre i si j+1, i si j fiind indicii elementului respectiv;
c. COMP care primeste doi intregi, compara
suma elementelor de pe liniile primite ca parametri, returnand indicele
liniei cu suma mai mare.
E8.Sa
se scrie un program interactiv care prelucreaza un tablou de max N intregi
( N - cta predefinita ), prin urmatoarele comenzi:
I - initializeaza tabloul, prin citirea
dimensiunii sale si apoi a elementelor
L - listeaza elementele tabloului in
ordinea introducerii
O - listeaza elementele tabloului ordonate
crescator ( in tablou elementele trebuie sa ramana in ordinea introducerii
)
C - cauta o valoare in tablou, afisand
indicele in cazul gasirii
P - afiseaza maximul, suma, produsul,
media aritmetica si cea geometrica
X - terminare.
9. Sa se scrie un program interactiv care prelucreaza un tablou de
max N intregi ( N - cta predefinita ), prin urmatoarele comenzi :
I - initializeaza tabloul, prin citirea dimensiunii sale
si apoi a elementelor
V - initializeaza tabloul, prin citirea elementelor pana
la introducerea lui CTRL/Z sau a numarului maxim de elemente
A - initializeaza tabloul, fiecare element fiind egal cu
indicele sau
B - initializeaza tabloul astfel: primele doua elemente cu
0, 1, iar urmatoarele ca suma anterioarelor doua ( numerele Fibonacci )
L - listeaza elementele tabloului
O - listeaza elementele tabloului ordonate crescator ( in
tablou elementele trebuie sa ramana in ordinea introducerii )
D - analog cu O, dar in ordine descrescatoare
C - cauta o valoare in tablou, afisand indicele in cazul
gasirii
M - cauta o valoare in tablou, pe care o sterge in cazul
gasirii - dimensiunea tabloului va scadea astfel cu o unitate ( nr_elem,
nu N!!!); stergerea se realizeaza prin mutarea cu o pozitie inspre indicii
mici, a tuturor elementelor de tablou urmatoare celui care se sterge;
o alta varianta este de a copia ultimul element peste cel care se sterge
P - afiseaza maximul, suma, produsul, media aritmetica si
cea geometrica
X - terminare.
10. Sa se scrie un program care citeste coeficientii unui polinom de x, cu gradul maxim N, calculand apoi valoarea sa in puncte x citite, pana la introducerea pentru x a valorii 0 ( N e o constanta predefinita). Sa se afiseze si valoarea obtinuta prin apelarea functiei de biblioteca poly. Sa se modifice programul astfel incat sa citeasca ciclic polinoame, pe care sa le evalueze.
POINTERI, FUNCTII CU PARAMETRI
E1. Sa se scrie programul care calculeaza si afiseaza valoarea expresiei x^m+y^n+((xy)^m)^n, pentru x,y reali si m,n intregi cititi de la tastatura. Se va scrie o functie putere care primeste doi parametri: un real si un intreg, returnand rezultatul ridicarii primului parametru la puterea reprezentata de cel de-al doilea. Realii vor fi declarati double. Sa se afiseze si valoarea expresiei obtinuta prin folosirea functiei pow.
2. Sa se scrie programul care citeste perechi de intregi a,b de la tastatura, pana la CTRL/Z si afiseaza a^b. Se va folosi functia putere din programul anterior. Sa se afiseze si rezultatul obtinut cu pow.
3. Sa se scrie programul care citeste triplete de intregi a,b,c de la tastatura, pana la CTRL/Z. Fiecare triplet va fi ordonat crescator si apoi afisat. Ordonarea se va realiza de o functie void Ordonare, care va primi pointerii spre a,b,c.
E4. Sa se calculeze si sa se afiseze valoarea expresiei (a-m)^n/(n-a)^m, pentru a,m,n cititi de la tastatura astfel incat intregii m,n sa fie >=0, iar a!=n. Sa se modifice programul, astfel incat sa se poata calcula expresia pentru triplete diferite, pana in momentul cand m si n sunt simultan 0.
SIRURI DE CARACTERE
E1.a. Sa se scrie urmatoarele functii, care primesc ca parametru adresa unui sir de caractere:
INVERSARE inverseaza sirul primit,
nereturnand nimic;
NUMARA returneaza numarul de
vocale din sirul primit;
VERIF returneaza 1 daca sirul
primit este numeric, 2 daca contine doar litere, altfel 0.
b. Sa se scrie un program care citeste siruri
de la tastatura, fiecare pe un rand nou, pana la CTRL/Z, apoi:
-le tipareste inversate;
-afiseaza numarul de vocale
din fiecare sir;
-afiseaza cate din sirurile
citite contin doar cifre, respectiv doar litere.
Pentru prelucrari se vor apela
functiile de la a si se va folosi un tablou de siruri pentru memorarea
sirurilor citite.
Programul se va scrie in variantele
citirii cu scanf cu %s, respectiv cu gets.
2. Sa se scrie un program care prelucreaza sirurile de caractere,
citite pana la CTRL/Z, fiecare pe cate o linie si afiseaza:
- grupele de anagrame - siruri care contin aceleasi caractere, dar
in alta ordine
- palindroamele extrase pentru fiecare sir - un palindrom este un
sir de minim doua caractere, care inversat, ramane identic.
Nu se face distinctie intre literele mari si mici.
3. Se citeste o succesiune de siruri de caractere , terminata cu EOF, fiecare sir fiind tastat pe o linie. Se cere sa se afiseze grupurile de siruri care rimeaza – au ultimele 3 caractere identice.
4. Sa se scrie un program interactiv care gestioneaza un dictionar
de cuvinte, initial vid; pentru fiecare cuvant se retine echivalentul sau
intr-o limba straina X. Programul va raspunde comenzilor:
A - adauga un cuvant in dictionar ( cuvantul si echivalentul )
L - listeaza dictionarul in ordinea alfabetica
a cuvintelor ( de baza )
T - citeste dintr-un fisier cu numele introdus de la tastatura,
o succesiune de cuvinte, fiecare pe cate o linie si afiseaza traducerea
in limba X; pentru cuvintele inexistente in dictionar, se afiseaza
cate un sir de 10 caractere ‘X’
X - terminare.