Documente Academic
Documente Profesional
Documente Cultură
Culegere de Probleme
Culegere de Probleme
Grigore VASILACHE
Silviu GNCU
C U L E G E R E
DE PROBLEME LA INFORMATIC
pentru orele
de laborator
C
Copie autorizata pentru studenii CFBC
Capitolul 1 INSTRUCIUNI
1 Operaii de intrare/ieire
Operaii de ieire
write(x); sau writeln(x);
write(x1,x2,xn); este echivalent cu write(x1);
write(x2,); write(xn);
Parametrii din apel pot avea una din formele:
x x:w x:w:f, unde x este o
expresie de orice tip valoarea creia se va afia, w i f expresii de tip integer
specificatori de format. Ca parametru pot fi i constante caracteriale, care se
scriu n apostrofuri, i se afieaz aa cum se scriu ca parametru.
Pascal
Fie urmtoarea secven de program:
Var a:integer; b:real; ... a:=5; b:=7.236;
writeln(Valoarea lui a este,a:6, b=,b:5:2)
va afia:
Valoarea lui a este 5 b= 7.24
Atragem atenia c ultima cifr este 4 i nu 3 fiindc a avut loc rotunjirea.
Instruciunea writeln se deosebete de write prin faptul c dup afiarea
tuturor parametrilor se trece n linie nou.
printf(sir_de_ieire,list_de_ieire);
unde :
ir_de_ieire este un ir n componena cruia intr caractere ordinare i
grupe de caractere speciale, ce se numesc formate sau specificaii de
conversie.
list_de_ieire reprezint enumerarea elementelor de ieire, ce se
despart prin virgul. n calitate de elemente pot fi constante, variabile i
C expresii.
Exemplu :
Fie date urmtoarele declaraii :
int x=4,y=6;
printf("%d+%d=%d,x,y,x+y);
n rezultatul execuiei acestei secvene de program va fi afiat mesajul
4+6 =10.
int a=24;
1
Copie autorizata pentru studenii CFBC
double c=123.1234567;
instruciunea
printf(%d\n a=%5d\nc=%7.2g,a,a,c);
va afia :
24
a= 24 numrul a este afiat pe 5 poziii
c= 123.12 numrul c este afiat pe 7 poziii cu 2 cifre dup virgul
cout<<flux1<<flux2<<<<fluxn;
Fie date urmtoarele declaraii :
int a=24;
double c=123.1234567;
cout<<a<<endl<<a=<<setw(5)<<a<<endl;
cout<<c=<<setw(7)<<setprecision(2)<<c;
cout << setfill ('x') << setw (10);
C++
cout << 77 << endl;
va afia :
24
a= 24 //numrul a este afiat pe 5 poziii
c= 123.12 // numrul c este afiat pe 7 poziii cu 2 cifre dup virgul
xxxxxxxx77
Operaii de intrare
read(x); sau readln(x);
read(x1,x2,xn); este echivalent cu
read(x1); read(x2,); read(xn);
La execuia acestei instruciuni compilatorul ateapt de la tastatur
valoare (valori) pentru parametrul (parametrii) nscrii n paranteze. La
introducerea datelor trebuie s inem cont de tipul parametrilor. n cazul a mai
multor valori numerice ele se despart prin spaiu. Finalul introducerii este tasta
enter.
Se recomand ca nainte de orice instruciune read s fie o instruciune write,
Pascal unde se va scrie ce se dorete de introdus, excepie fcnd cazul citirii din
fiier. n caz c lista parametrilor este mai mare de 1 la introducerea lor pot fi
desprite i prin enter, n acest caz menionm c se introduc n continuare,
nu de la nceput. Pentru tipul de date string se recomand s fie unicul
parametru n list sau mcar ultimul.
Fie urmtoarea secven de program:
Var a,b:integer;;
Begin write (Introduceti doua numere intregi )
readln(a,b);
sau
Begin write (Introduceti valoarea lui a ) readln(a);
2
Copie autorizata pentru studenii CFBC
write (b=) readln(b);
Pentru introducerea datelor cu format se folosete funcia scanf(), este
definit n biblioteca stdio.h. Mod de utilizare :
scanf(ir_de_control,lista_de_intrare);
unde :
ir_de_control este un ir scris n ghilimele. n cadrul acestui ir se
indic tipul valorilor care urmeaz a fi citite. irul este format din % i
caracterul de conversie (sunt date mai sus).
lista_de_intrare indic adresele variabilelor pentru care vor fi citite
valori. n faa fiecrei variabile va fi operatorul adres &. n cazul n care se
C citesc mai multe valori acestea vor fi desprite prin virgul.
Exemplu
Fie date urmtoarele declaraii :
int a;
float b;
Pentru citirea valorilor de la tastatur a acestor variabile ntr-o singur
instruciune vom scrie :
scanf(%d%f,&a,&b);
%d indic tipul variabilei a (int), pe cnd %f indic tipul variabilei b (float).
Pentru citirea datelor de la consol vom scrie :
cin>>var1>>var2>>>>varn;
unde var1, var2, , varn sunt variabile.
Exemplu
C++ Fie date urmtoarele declaraii :
int a;
float b;
Pentru citirea valorilor de la tastatur a acestor variabile ntr-o singur
instruciune vom scrie :
cin>>a>>b;
3
Copie autorizata pentru studenii CFBC
2) ntr-o tabr numrul de biei este cu 10 mai mare dect cel al fetelor. De la
tastatur se citete numrul de fete. Elaborai un program prin intermediul cruia se va
determina numrul elevilor din tabr. Exemplu: date de intrare: 50 date de ieire: 110.
3) ntr-un autobuz care pleac n excursie sunt 7 copii. De la nc dou coli urc
ali copii, numrul acestora citindu-se de la tastatur. Elaborai un program prin
intermediul cruia se va determina numrul copiilor care au plecat n excursie.
Exemplu: Date de intrare: 15 20 Date de ieire: 42 copii.
5) Ion i Vasile joac dup urmtoarele reguli: Ion spune un numr iar Vasile
trebuie s gseasc cinci numere consecutive, cresctoare, numrul din mijloc fiind cel
ales de Ion. Elaborai un program prin intermediul cruia la ecran se vor afia numerele
gsite de ctre Vasile. Exemplu: Ion spune 10, Vasile spune 8 9 10 11 12.
16) O nav parcurge distana d (n km) dintre dou staii orbitale n a sptmni i b
zile. Elaborai un program prin intermediul cruia se va determina viteza navei
exprimat n km/or.
5
Copie autorizata pentru studenii CFBC
2 Funcii matematice
n varianta Pascal
Tipul Tipul
Descriere Funcia
argumentelor rezultatului
Arctangenta valorii x arctan(x);
Sinusul lui x sin(x);
Cosinusul lui x cos(x); Numeric, real
Puterea numrului e ex exp(x); adic
logaritmul natural lnx ln(x); integer sau
Rdcina ptrat a lui x sqrt(x); real
Valoarea absolut a lui x abs(x); Coincide cu
Ptratul lui x sqr(x); tipul lui x
Rotunjirea lui x round(x)
real integer
Trunchierea lui x trunc(x)
Paritatea lui x, True, daca x odd(x) integer boolean
este impar.
Numrul valorii ordinale x ord(x) ordinal integer
Predecesorul lui x pred(x)
ordinal
Coincide cu
Succesorul lui x succ(x) tipul lui x
Caracterul cu numrul x chr(x) integer char
Testarea sfritului de fiier eof(f)
fiier boolean
Testarea sfritului de linie eoln(f)
Partea fracionara obinuta prin frac( x) real real
trunchierea argumentului
Partea ntreaga obinuta prin Int(x) real real
trunchierea argumentului
Valoarea numrului Pi Pi Numeric real
(3,1415926536).
Dec( x
Decrementarea valorii [;n:LONGINT]) ordinal
Coincide cu
variabilei x cu 1 [respectiv n]. tipul lui x
;
Inc(
Incrementarea valorii variabilei x:ordinal
ordinal
Coincide cu
x cu 1 [respectiv n]. [;n:LONGINT]) tipul lui x
;
Iniializarea generatorului
intern de numere aleatoare cu o Randomize;
valoare arbitrara.
Numr real pseudoaleator,
subunitar, nenegativ (fr Random - real
argument).
Numr ntreg pseudoaleator din Random(x) integer WORD
domeniul 0..Ord(x)-1.
6
Copie autorizata pentru studenii CFBC
n varianta C/C++
Antet Descriere
Calculeaz arcsinusul/arccosinusul
double asin( double arg );
double acos( double arg ); valorii arg; rezultatul este msurat
n radiani
double atan( double arg ); Calculeaz arctangenta valorii arg,
double atan2( double y, double x ); respectiv a fraciei y/x
ntoarce cel mai mare ntreg mai
double floor( double num ); mic sau egal cu num (partea
ntreag inferioar)
ntoarce cel mai mic ntreg mai
double ceil( double num ); mare sau egal cu num (partea
ntreag superioar)
Calculeaz
double sin( double arg );
double cos( double arg );
sinusul/cosinusul/tangenta
double tan( double arg ); parametrului arg, considerat n
radiani
double sinh( double arg ); Calculeaz
double cosh( double arg ); sinusul/cosinusul/tangenta
double tanh( double arg ); hiperbolic a parametrului arg
double exp( double arg ); ntoarce valoarea earg
double pow(double base, double exp ); ntoarce valoarea basearg
double log( double num );
Calculeaz logaritmul natural (de
baz e) al valorii arg
double log10( double num );
Calculeaz logaritmul n baza 10 al
parametrului
double sqrt( double num );
Calculeaz rdcina ptrat a
parametrului
double fmod( double x, double y ); ntoarce restul mpririi lui x la y
double fabs( double arg ); ntoarce valoarea absolut a lui arg
I. f ( x) = x 3 + x 2 ; x
f ( x) =
1 1 x2 +1 ;
f ( x) = + 2 III.
II. x x ;
IV. f ( x) = x 2 ln x ;
7
Copie autorizata pentru studenii CFBC
1
f ( x) = sin x + sin 2 x e x e x
f ( x) = x x
V. 2 ; IX. e +e ;
8 tgx
f ( x) = x 2 + f ( x) =
VI. x; X. x .
f ( x) = e x ;
2
VII.
e x e x
f ( x) =
VIII. 2 ;
De la tastatur se citete valoarea lui x. Rezultatul va fi afiat cu o precizie de 3 cifre
dup virgul.
sin( x) + sin( y )
f ( x, y ) =
V. ey + ex
f ( x, y ) = x y + x
y
VI.
x y x2 y2
f ( x, y ) = + 2
VII.
| x + y | +1 x + y 2 + 1
8
Copie autorizata pentru studenii CFBC
3 Instruciunea de ramificare if
Instruciunea de ramificare if
If condiie then instruciunea1 else instruciunea2;
unde condiie este o expresie logic, care poate avea numai una din dou
valori true sau false. Dac rezultatul este true se execut instruciunea 1 i
se trece la urmtoarea instruciune dup if, i dac rezultatul este false se
execut instruciunea 2. Menionm aici c:
1. Dac este necesar s fie ndeplinite mai mult de o instruciune se
folosete instruciunea compus begin end.
2. nainte de cuvntul rezervat else nu se pune ;
3. Condiia poate fi simpl, dar i compus folosind OR, AND, NOT. n
acest caz trebuie s folosim parantezele.
Exemple:
If a>b then c:=a else c:=b;
Pasc c:=b; If a>b then c:=a; {Instruciunea de ramificare redus}
al
If a>b
then begin c:=a; writeln(a este mai mare);
end
else begin c:=b; writeln(b este mai mare);
end;
If a>0
then if a mod 2=0 then writeln(a este pozitiv, par)
else writeln(a este pozitiv, impar)
else if a mod 2=0 then writeln(a este negativ, par)
else writeln(a este negativ, impar)
9
Copie autorizata pentru studenii CFBC
Probleme pentru rezolvare independent
4) Ionel spune prinilor doar notele mai mari sau egale cu 7. ntr-o zi el a luat
trei note. Elaborai un program prin intermediul cruia la ecran se vor afia doar notele
pe care le va comunica Ionel prinilor. Exemplu : Date de intrare 8 7 5 Date de ieire
8 7.
5) Se introduc dou numere. Elaborai un program prin intermediul cruia se
va afia ctul dintre primul i al doilea, dac al doilea numr este diferit de 0 sau
mesajul mprire imposibil n caz contrar. Exemple: Date de intrare 10 3 Date de
ieire 3.33 Date de intrare 45 0 date de ieire Impartire imposibila.
10) ntr-o tabr, bieii sunt cazai cte 4 ntr-o csu, n ordinea sosirii. Ionel
a sosit al n-lea, n se citete de la tastatur. Elaborai un program prin intermediul cruia se
va determina n a cta csu se va afla Ionel Exemplu : date de intrare : n=69 date de
ieire : casuta 17.
11) Elevii clasei a V-a se repartizeaz n clase cte 25 n ordinea mediilor clasei
a IV-a. Radu este pe locul x (1<=X<=125) n ordinea mediilor, x se citete de la
tastatur. Elaborai un program prin intermediul cruia se va determina n ce clasa va fi
repartizat (A, B, C, D sau E)?. Exemplu : date de intrare : x=73 date de ieire : C.
13) Andrei primete ntr-o zi trei note, nu toate bune. Se hotrte ca, dac
ultima not este cel puin 8, s le spun prinilor toate notele primite iar dac este mai
mic dect 8, s le comunice doar cea mai mare not dintre primele dou. De la tastatur
se citesc notele primite de ctre Andrei. Elaborai un program prin intermediul cruia se
vor afia notele pe care Andrei le va comunica prinilor. Exemple : Date de intrare 6 9
9 Date de ieire 6 9 9 ; Date de intrare 8 5 7 Date de ieire 8.
11
Copie autorizata pentru studenii CFBC
14) De la tastatur se citesc trei numere. Elaborai un program prin intermediul
cruia se va afia numrul mai mare dintre al doilea i al treilea numr, dac toate trei
numere sunt pare i suma primelor dou numere n caz contrar. Exemple: Date de
intrare 46 32 100 date de ieire 100 ; Date de intrare 34 -25 10 Date de ieire 9.
15) S se afieze cel mai mare numr par dintre doua numere introduse n
calculator. Exemple : Date de intrare 23 45 Date de ieire nu exista numar par ; Date
de intrare 28 14 Date de ieire 28 ; Date de intrare 77 4 Date de ieire 4.
12
Copie autorizata pentru studenii CFBC
4 Instruciunea cu selecie multipl
switch( expresie ){
case constanta1: //instruciuni1 break;
case constanta2: //instruciuni2 break;
C/C
[default: //instruciuni]
++ }
Valoarea expresie de tip ordinal este evaluat la un tip ntreg, apoi aceast
valoare este comparat cu fiecare constant;
este rulat blocul de instruciuni al valorii gsite. n caz ca numrul nu este egal
cu nici una dintre constante, este executat blocul aflat dup default. n cazul,
cnd lipsete break se verific i celelalte cazuri.
13
Copie autorizata pentru studenii CFBC
3) De la tastatur se citesc 2 numere ntregi i un operator (+ - * / %). Elaborai
un program care n dependen de datele introduse va afia rezultatul. Dac se va
introduce un operator necunoscut rezultatul va fi 0. De exemplu: date de intrare 8 3 %,
8%3=2
14
Copie autorizata pentru studenii CFBC
5 Instruciuni ciclice
11) Se dau dou numere ntregi nenule. Elaborai un program prin intermediul
cruia se va afia cmmdc i cmmmc al lor. Exemplu : Date de intrare 12 32 Date de
ieire cmmdc=4 cmmmc 96.
12) Se dau trei numere. Elaborai un program prin intermediul cruia se va afia
cmmmdc al lor. Exemplu : Date de intrare 12 32 36 Date de ieire 4.
14) De la tastatur se citesc 2 numere nenegative mai mici dect 10, care
reprezint lungimile laturilor unui dreptunghi. Elaborai un program care n dependen
de datele introduse va afia un dreptunghi. Exemplu:
17
Copie autorizata pentru studenii CFBC
a) b)
Date de intrare 4 3 Date de intrare 4 3
Date de ieire Date de ieire
1111 1234
2222 1234
3333 1234
17) De la tastatur se citete un numr ntreg nenegativ n, mai mic dect 10.
Elaborai un program care va afia un triunghi.
a) b)
Date de intrare 4 Date de intrare 4
Date de ieire Date de ieire
1 1234
12 123
123 12
1234 1
18
Copie autorizata pentru studenii CFBC
o elibereaz pe Ileana Cosnzeana. Exemplu: Date de intrare x=10 a=4 b=1 Date de
ieire 3 zile.
21) Se citesc de la tastatur numere naturale pn cnd suma numerelor pare este
mai mare dect k. Cte numere au fost introduse i care este suma numerelor pare?
Exemplu: Date de intrare: K=12 5 8 1 2 2 3 6 Date de ieire: 7 (numere) 18
(suma celor pare).
22) Se citesc de la tastatur numere naturale pn cnd suma numerelor pare este
mai mare dect k. Cte numere au fost introduse i care este suma numerelor impare?
Exemplu: Date de intrare: K=12 5 8 1 2 2 3 6 Date de ieire: 7 (numere) 9
(suma celor impare)
23) Se citesc de la tastatur numere ntregi pozitive att timp ct suma lor nu
depete 1000. S se scrie un program care s afieze cea mai mic i cea mai mare
valoare a acestor numere. Exemplu: 550 345 100 45 Date de ieire max=550
min=100.
24) Se citesc de la tastatur numere ntregi pozitive att timp ct suma lor nu este
divizibil cu 3 S se scrie un program care s afieze cea mai mic i cea mai mare
valoare a acestor numere. Exemplu: 7 3 6 2 Date de ieire max=7 min=2.
29) Elaborai un program care va afia toate numerele ntregi pozitive a, b, c, mai
mici ca 20, cu urmtoarea proprietate: a2+b2=c2
19
Copie autorizata pentru studenii CFBC
30) Elaborai un program care va afia toate numerele ntregi pozitive a, b, c, mai
mici ca 20, cu urmtoarea proprietate: (a+b)3=c3
20
Copie autorizata pentru studenii CFBC
6 Recapitulare
3) Scriei un program care s determine toate numerele naturale mai mici dect
MAXINT cu proprietatea c sunt egale cu suma factorialelor cifrelor lor.
Exemplu: 145 = 1!+4!+5!
5) Un numr de trei cifre se numete norocos dac suma crorva dou cifre
ale acestui numr este egal cu a treia. Elaborai un program care citete de la tastatur n
numere, formate din trei cifre i determin numrul de numere norocoase
21
Copie autorizata pentru studenii CFBC
1 Tablouri unidimensionale
23
Copie autorizata pentru studenii CFBC
2 Tablouri bidimensionale
24
Copie autorizata pentru studenii CFBC
b. suma elementelor de pe coloana respectiv. Rezultatul se va afia la ecran.
Exemplu Pentru o matrice cu 3 lini i 3 coloane
123
456
789
Linia nou adugat va fi 12 15 18
c. suma dintre elementele primei linii i celei dea doua linie. Rezultatul se va
afia la ecran. Exemplu Pentru o matrice cu 2 lini i 3 coloane
123
456
Linia nou adugat va fi 5 7 9, adic 5=1+4; 7=2+5; 9=3+6.
25
Copie autorizata pentru studenii CFBC
3 iruri de caractere
n varianta Pascal
Antet Descriere
writeln(s); extrage la ecran irului s
readln(s); citete irul de la tastatur n variabila s
LENGTH(S) Lungimea irului S
Concateneaz irurile S1, S2, Sn. Echivalent cu
CONCAT(s1[,s2,,sn])
S1+S2++Sn.
Obinem poziia apariiei subirului n ir. Dac
POS(Subir,ir)
rezultatul e 0 rezult c aa subir nu exist n ir.
COPY (irul,
Obinem un subir, din irul dat, ncepnd de la care
De_La_Care_Poziie,
Cte_Carectere) poziie, de lungimea Cte_Carectere.
INSERT(Ce_Inseram, Se insereaz un subir ntr-un ir, ncepnd cu
In_Care_ir,
De_la_care_Poziie) poziia indicat.
DELETE (irul,
Din irul dat se exclud de la poziia indicat numrul
De_La_Care_Poziie,
Cte_Carectere) indicat de caractere.
Transform irul de caractere n numr. Dac nu
VAL(ir,
este posibil cod este diferit de zero, i dac s-a
Variabil_Numeric, Cod)
transformat cu succes Cod este 0.
Transform numrul n ir de caractere. M i n
STR(Numr[:m[:n]]; ir)
precizeaz formatul n ir.
Litera mare corespunztoare literei mici date ca
UpCase(x);
argument
Exemple:
Funcia sau procedura Rezultatul
POS(ma,Informatica) 6
POS(in,Informatica) 0
COPY (Informatica,7,3) ati
INSERT (m,maa,3)- mama
DELETE (Informatica,5,4) Infoica
n varianta C/C++
Antet Descriere
puts(sir); extrage la consol coninutul irului sir
gets(sir); citete caractere de la tastatur n variabila sir
compar irurile s1 i s2 returneaz o valoare
int strcmp(char *s1, char
*s2);
pozitiv, dac irul s1>s2, 0 dac s1 este egal cu
s2 i o valoare negativ dac s1<s2
26
Copie autorizata pentru studenii CFBC
5) De la tastatur se citesc patru cuvinte, fiecare cuvnt fiind citit ntr-o singur
variabil. Elaborai un program care va forma o fraz, va include toate cuvintele n ir.
Fiecare cuvnt va fi desprit prin spaiu, ultimul caracter din fraz va fi semnul punct.
La ecran se vor afia cuvintele citite ct i fraza format.
6) De la tastatur se citesc patru cuvinte, fiecare cuvnt fiind citit ntr-o singur
variabil, un cuvnt va fi format din minim 3 caractere. Elaborai un program care va
forma un cuvnt nou, n felul urmtor: din primul cuvnt va aduga primele 2 caractere,
din al doilea cuvnt va aduga primul caracter, primele trei caractere din cuvntul al
treilea i n/2 caractere din cuvntul patru(n lungimea cuvntului). La ecran se vor
afia cuvintele citite ct i cuvntul format.
7) De la tastatur se citesc patru cuvinte, fiecare cuvnt fiind citit ntr-o singur
variabil. Elaborai un program care va afia cuvintele n ordine alfabetic. Fiecare
cuvnt va fi afiat din rnd nou.
28
Copie autorizata pentru studenii CFBC
4 Fiiere
Deosebim dou feluri de fiiere: textuale (cu acces secvenial) i tipizate sau
binare (cu acces direct).
Instruciunile de lucru cu fiierele:
Exemplu 2: Fiierul date.txt conine mai multe numere ntregi, care sunt scrise n
mai multe rnduri. De citit datele din fiier i de afiat la ecran aceste numere.
date.txt
23 5 456 6 8 9 80 65 432
524 78 143 121
123
43 546
76 8
18 55 26 445 12
Atragem atenia c n diferite rnduri a fiierului sunt scrise un numr de valori
diferite.
Var a: integer; f:text;
Begin Assign (f,date.txt); reset(f);
While not eof(f) do
Begin While not eoln(f) do
Begin read(f,a); write(a:8); end;
readln(f); writeln;
end;
Fiierul tipizat poate fi perceput ca un tablou unidimensional cu indicii 0,1,
Toate elementele fiierului au un indice. n timpul lucrului cu acest tip de fiier
pot fi folosite urmtoarele:
Instruciunea seek(f,n) cursorul fiierului trece la componenta cu indicele n.
Filesize(f) returneaz numrul de componente a fiierului.
Filepos(f) returneaz poziia cursorului n fiier.
FILE *nume_file;
ex : FILE *f;
Pentru deschiderea fiierului se va utiliza funcia fopen. Mod de utilizare :
FILE *fopen(adresa_file, mod_de_deschidere);
C Deschide fiierul cu numele dat pentru acces de tip mod_de_deschidere.
Returneaz pointer la fiier sau NULL dac fiierul nu poate fi deschis, valoarea
returnat este memorat n variabila fiier, care a fost declarat pentru accesarea
lui.
adresa_file indic numele i adresa fiierului. Pentru a deschide fiierul
30
Copie autorizata pentru studenii CFBC
azi.txt n calitate de adres vom indica azi.txt, dac fiierul este pe discul c n
mapa temp atunci vom scrie C: \\temp\\azi.txt.
Parametrul mod_de_deschidere este un ir de caractere care poate avea
urmtoarele valori :
"r" - readonly , este permis doar citirea dintr-un fiier existent;
"w" - write, creeaz un nou fiier, sau dac exist deja, distruge vechiul
coninut;
"a" - append, deschide pentru scriere un fiier existent (scrierea se va face
n continuarea informaiei deja existente n fiier, deci pointerul de acces se
plaseaz la sfritul fiierului );
"+" - permite scrierea i citirea - actualizare (ex: "r+", "w+", "a+"). O
citire nu poate fi direct urmata de o scriere i reciproc. nti trebuie repoziionat
cursorul de acces printr-un apel la fseek.
"b" - specific fiier de tip binar.
32
Copie autorizata pentru studenii CFBC
Valoarea argumentului acces determin tipul de acces la fiier.
int eof (); returneaz nenul dac este sfrit de fiier;
int bad(); returneaz nenul dac s-a produs o eroare;
int fail(); returneaz nenul dac operaia nu a reuit.
get(ch); extrage un caracter n ch;
getline(str, MAX, [DELIM]); extrage pn la MAX caractere din str
sau pn la caracterul DELIM (\0 sau \n);.
read(str, MAX); extrage pn la MAX caractere n str sau pn la EOF;
seekg(positie) seteaz distana (n bytes) a pointerului de fiier fa de
nceputul fiierului;
seekg(positie, seek_dir) seteaz distana (n bytes) a pointerului de
fiier fa de poziia specificat seek_dir, care poate lua urmtoarele valori:
ios::beg - nceput de fiier
ios::cur - poziie curent
ios::end - sfrit de fiier
tellg(pos) returneaz poziia (n bytes) a pointerului de fiier fa de
nceputul fiierului;
write(str, SIZE) insereaz SIZE caractere din vectorul str n stream.
tellp() returneaz poziia pointerului de fiier n bytes.
7) Fiierul date.in conine elementele unei matrice. n prima linie sunt scrise
numrul de lini i de coloane separate printr-un spaiu. Pe urmtoarele linii sunt scrise
elementele matricei. Elaborai un program care va afia la ecran i va scrie n fiierul
date.out elementele matricei i poziiile pe care se afl valoarea maximal.
8) Fiierul date.in conine elementele unei matrice. n prima linie sunt scrise
numrul de lini i de coloane separate printr-un spaiu. Pe urmtoarele linii sunt scrise
elementele matricei. Elaborai un program care va afia la ecran si va scrie n fiierul
date.out elementele matricei i suma de pe fiecare linie.
9) Fiierul date.in conine elementele unei matrice. n prima linie sunt scrise
numrul de lini i de coloane separate printr-un spaiu. Pe urmtoarele linii sunt scrise
elementele matricei. Elaborai un program care va afia la ecran si va scrie n fiierul
date.out elementele matricei i minimul de pe fiecare coloan.
34
Copie autorizata pentru studenii CFBC
11) Fiierul date.in conine un ir de caractere. De la tastatur se citete un ir de
caractere. Elaborai un program care va nlocui cifrele din ir cu semnul +. Rezultatul va
fi afiat la ecran ct i n fiierul date.out
16) n fiierul numere.in sunt scrise mai multe numere ntregi. Elaborai un
program prin intermediul cruia se vor aduga numerele pare din fiierul numere.in n
fiierul date.txt.
19) Fiierul numere.in conine mai multe numere reale (cel puin 2). Elaborai un
program prin intermediul cruia n acest fiier se va aduga media aritmetic a ultimelor
2 numere.
35
Copie autorizata pentru studenii CFBC
20) Fiierul numere.in conine mai multe numere reale (cel puin 2). Elaborai un
program prin intermediul cruia n acest fiier se va aduga media aritmetic a
numerelor din fiier.
21) n fiierul date.in este scris un numr ntreg pozitiv mai mic dect 1000.
Elaborai un program care va aduga n fiier un triunghi:
a) b) c)
4 4 4
1 1234 1
12 123 21
123 12 321
1234 1 4321
22) n fiierul date.in sunt scrise mai multe cuvinte, fiecare cuvnt este separat
printr-un singur spaiu. Elaborai un program prin intermediul cruia se va afia la ecran
coninutul fiierului, cel mai lung cuvnt i cel mai mare cuvnt.
36
Copie autorizata pentru studenii CFBC
5 Metode de sortare
Metoda bulelor
k:=n; p:=false; k=n; p=0;
while p=false do while (!p){
Begin p:=true; l:=k; i:=1; p=1; l=k; i:=0;
While i<=l-1 do While(i<=l-1){
Begin If a[i]>a[i+1] then if(a[i]>a[i+1]){
begin x:=a[i]; a[i]:=a[i+1]; x=a[i]; a[i]=a[i+1]; a[i+1]=x;
a[i+1]:=x; k:=i; p=0;
k:=i; p:=false; }
end; i++;
i:=i+1; };
end; };
end;
Metoda de selecie
i:=1; i=0;
while i<=n-1 do while (i<n-1){
Begin x:=a[i]; l:=i; j:=i+1; x=a[i]; l=i; j=i+1;
While j<=n do while(j<n){
Begin if x>a[j] then begin if (x>a[j]){x=a[j];l=j;}
x:=a[j]; l:=j; end; j++;
j:=j+1; };
end; k=a[i];
k:=a[i]; a[i]:=a[l]; a[l]:=k; a[i]=a[l];
37
Copie autorizata pentru studenii CFBC
i:=i+1; a[l]=k;
end; i++;
sau };
for i:=1 to n-1 do
begin x:=a[i]; l:=i;
for j:=i+1 to n do
if x>a[j] then begin x:=a[j];
l:=j; end;
k:=a[i]; a[i]:=a[l];
a[l]:=k;
end;
Sortarea prin distribuire
Aceast metod se folosete de obicei n cazul cnd elementele tabloului numeric sunt
cuprinse ntr-un domeniu nu prea mare. Implementarea acestei metode se reduce la
declararea unui tablou suplimentar de dimensiunile domeniului. n acest tablou iniial
zerografiat, se adun cte o unitate n celula cu indicele egal cu valoarea elementului din
tabloul iniial. Fie tabloul a datele iniiale i b - cel cu rezultate, domeniul fiind de la c
la d.
For i:=c to d do b[i]:=0; for(i=c;i<d;i++) b[i]=0;
For i:=1 to n do begin t:=a[i]; for(i=0;i<n;i++){
b[t]:=b[t]+1; end; t=a[i]; b[t]=b[t]+1;
{aranjm elementele n tabloul a} }
i:=1; {aranjm elementele n tabloul a}
For j:=c to d do i=0;
For k:=1 to b[j] do begin for(j=c;j<d;j++)
a[i]:=j; i:=i+1; end; for(k=0;k<b[j];k++){
a[i]=j; i++;
}
38
Copie autorizata pentru studenii CFBC
intermediul cruia primele k numere vor fi sortate cresctor, iar restul numerelor
descresctor, k se citete de la tastatur.
6) Fiierul matrice.in conine elementele unei matrice. n prima linie sunt scrise
numerele m i n numrul de lini i de coloane separate printr-un spaiu. Pe
urmtoarele n linii sunt scrise cte m elemente ale matricei. Elaborai un program prin
intermediul cruia se vor sorta elementele fiecrei coloane n parte a matricei.
7) Fiierul matrice.in conine elementele unei matrice. n prima linie sunt scrise
numrul de lini i de coloane separate printr-un spaiu. Pe urmtoarele linii sunt scrise
elementele matricei. Elaborai un program prin intermediul cruia se vor sorta
elementele fiecrei linii a matricei.
39
Copie autorizata pentru studenii CFBC
6 Tipul de date articol
2) De la tastatur se citesc datele despre dou variabile de tipul data (an, luna,
zi). Elaborai un program prin intermediul cruia la ecran se va afia suma i diferena
dintre cele dou variabile de tipul data. La ecran data va fi afiat corect (0zi30,
0luna12)
3) De la tastatur se citesc datele despre dou variabile de tipul timp (ore, min,
sec). Elaborai un program prin intermediul cruia la ecran se va afia suma i diferena
dintre cele dou variabile de tipul timp. La ecran timpul va fi afiat corect (0sec59,
0min59).
Formule necesare:
Distana dintre 2 puncte A(x 1 ,y 1 ) i B(x 2 ,y 2 ) d AB = ( x1 x 2 ) 2 + ( y1 y 2 ) 2
a+b+c
P=
Aria unui triunghi: Aria = P( P a) * ( P b) * ( P c) , unde 2
6) Pe o suprafa plan sunt mai multe puncte, date prin coordonatele lor.
Elaborai un program prin intermediul cruia se vor sorta cresctor n dependen de
distana acestora de la centru axei de coordonate a sistemului cartezian.
Date de intrare. Fiierul puncte.in, care pe prima linie conine numrul de puncte
din plan, iar pe urmtoarele linii sunt scrise coordonatele punctelor.
Date de ieire. La ecran se va afia punctele sortate, fiecare coordonat de punct
fiind urmat de distana acestuia de la centru.
41
Copie autorizata pentru studenii CFBC
7 Recapitulare
42
Copie autorizata pentru studenii CFBC
7) Se consider tabloul X[1.. 10] de numere ntregi egale numai cu 0, 1 sau 2.
Scriei un program care aranjeaz pe primele locuri elementele egale cu 1, apoi cele
egale cu 0, apoi cele egale cu 2.
Intrare: Elementele tabloului se citesc de la tastatur.
Ieire: La ecran se va afia elementele tabloului modificat.
Capitolul 3 SUBPROGRAME
45
Copie autorizata pentru studenii CFBC
2 Parametri formali de tip variabil
47
Copie autorizata pentru studenii CFBC
3 Tablouri i funcii
49
Copie autorizata pentru studenii CFBC
4 Subprograme recursive
50
Copie autorizata pentru studenii CFBC
5 Recapitulare
51
Copie autorizata pentru studenii CFBC
De exemplu:
TABEL.IN TABEL.OUT
4 4 7 10 7
2 5 8 5 12 7 9 3
6 1 3 -3 16 10 13 3
8 2 5 -5 22 6 11 12
11 5 0 1
9) n fiierul text ELEVI.INT se conin date despre toi elevii absolveni din
Republica Moldova. n fiecare rnd sunt nscrise datele despre o singur persoan
astfel: nume, prenume, sex i nlimea, desprite printr-un spaiu. Din aceste date se va
crea o list simplu nlnuit ordonat alfabetic, dup nume. Parcurgei lista n scopul
calculrii i afirii la ecran a nlimii medii a fetelor i a bieilor.
Intrare: Fiierul text ELEVI.INT, unde sexul este indicat prin f pentru fete i b
pentru biei.
Ieire: La ecran se vor afia mesajul respectiv i mediile cerute.
10) Se numesc numere bine ordonate acele numere care au cifrele n ordine
strict cresctoare sau strict descresctoare (de exemplu 7532 i 2589 sunt bine
ordonate).
Scriei un program care citete din fiierul text DATE.IN cte un numr de 4 cifre
din fiecare linie, i creeaz alt fiier text DATE.OUT unde nscrie numerele bine
ordonate. La ecran se va afia numrul lor.
Intrare: Fiierul text DATE.IN
Ieire: Fiierul text DATE.OUT La ecran se va afia numrul de numere bine
ordonate.
12) Se consider un fiier text TEST.IN alctuit din mai multe linii. Scriei un
program care s afieze pe ecran toate literele alfabetului englez, folosite n acest fiier,
mpreun cu codul lor ASCII i frecvena lor de apariie. Afiai, de asemenea, codurile
ASCII ale caracterelor care apar n text cel mai frecvent.
Intrare: Fiierul text TEST.IN.
Ieire: La ecran se vor afia datele cerute.
De exemplu, pentru fiierul de intrare:
aBc bAaccaa
bc ac
pe ecran se va afia:
A 65 1
B 66 1
a 97 5
b 98 2
c 99 5
Caracterele care apar in text cu frecventa maxim 5 sunt:
Caracterul cu codul ASCII 97
Caracterul cu codul ASCII 99
14) Se cunoate c fiierul text INPUT.TXT este alctuit din numrul par de linii
i conine n linii impare numele elevilor, dar n cele pare notele acestora la o lucrare
de control. Numrul maxim al elevilor n clas 40. Scriei un program care citete
fiierul dat i creeaz un fiier text SORT.TXT care conine n fiecare rnd numele
elevului i nota n aa fel ca liniile s fie sortate n ordinea descresctoare a numelui.
54
Copie autorizata pentru studenii CFBC
55
Copie autorizata pentru studenii CFBC
Descriere Funcia/Procedura
Alocarea memoriei n heap pentru o variabil referin legat New(var p:POINTER);
i ncrcarea adresei n argumentul p.
Eliberarea memoriei alocate n heap pentru o variabila Dispose(var p:POINTER);
referin legat.
Lungimea celui mai mare bloc continuu existent n heap MaxAvail:LONGINT;
Lungimea totala a spaiului de memorie disponibil n heap. MemAvail:LONGINT;
Alocarea memoriei n heap pentru o variabila dinamica de GetMem(VAR p:POINTER;
mrime l si ncrcarea adresei ei n argumentul p. l:WORD);
Eliberarea memoriei alocate n heap pentru o variabila FreeMem(VAR p:POINTER;
dinamica de mrime l si de adresa memorata n p. l:WORD);
Memorarea adresei vrfului heap-ului (HeapPtr) n
Mark(VAR p:POINTER);
argumentul p.
Eliberarea memoriei alocate variabilelor dinamice prin apelul
Release(VAR p:POINTER);
precedent al procedurii Mark (depune p n HeapPtr).
57
Copie autorizata pentru studenii CFBC
1 Metoda trierii
2) Fiierul date.in conine mai multe caractere, s se afieze cea mai lung
secven de caractere identice. Dac sunt mai multe secvene, se va afia prima.
Exemplu: text: aabsssdadaaab se va afia sss.
5) Pe o suprafa plan sunt mai multe puncte, date prin coordonatele lor.
Fiierul puncte.in, care pe prima linie conine numrul de puncte din plan, iar pe
urmtoarele linii sunt scrise coordonatele punctelor. Elaborai un program prin
intermediul cruia se determina numrul maximal de triunghiuri care pot fi formate din
aceste puncte cu condiia c:
a) Triunghiurile formate nu se intersecteaz;
b) Triunghiurile formate sunt nscrise;
c) Triunghiurile formate au un vrf comun.
La ecran se va afia numrul de triunghiuri.
58
Copie autorizata pentru studenii CFBC
2 Metoda Greedy
59
Copie autorizata pentru studenii CFBC
3 Metoda Relurii
3) Se dau 1000 de monede, dintre care una este mai uoar dect celelalte, care
sunt identice. Determinai moneda fals printr-un numr minim de cntriri cu o balan
fr greuti marcate.
62
Copie autorizata pentru studenii CFBC
11) Se consider dou tablouri liniare de numere ntregi sortate cresctor.
Obinei n baza lor al treilea tablou astfel nct el s se obin sortat la completare.
12) Un cltor dorete s viziteze n orae, astfel nct s nu treac de dou ori
prin acelai ora, revenind n oraul de unde a pornit, marcat cu numrul 1. Cunoscnd
legturile existente ntre orae, se cere s se tipreasc toate drumurile posibile pe care
le poate efectua cltorul.
16) Fie N piese. Se cunoate timpul necesar pentru prelucrarea fiecrei piese la
fiecare dintre dou strunguri. Determinai n ce ordine trebuie prelucrate piesele la cele
dou strunguri, tiind c piesa poate fi prelucrat la strungul al doilea numai dup ce a
fost prelucrat la strungul nti, astfel nct timpul de lucru al strungurilor s fie cel mai
mic posibil.
19) Se consider planul unui labirint, redat prin matricea [A1:n, 1:m],
elementele creia au valori 1, dac poziia respectiv reprezint obstacol, sau 0 n caz
contrar (1<=n, m<=30). Pe plan sunt date dou puncte B i C, ce nu reprezint
obstacole. Elaborai un program ce determin dac exist un drum din punctul B pn n
punctul C. Deplasarea se face doar pe direcie orizontal sau vertical.
20) Se dau n iruri de caractere formate din cifre. mbinai aceste iruri astfel,
nct numrul obinut s fie cel mai mare posibil ca valoare.
26) Fie n localiti. ntre fiecare dou dintre aceste localiti exist sau nu
comunicaii aeriene . Fiind date dou localiti, s se determine dac se poate ajunge
dintr-o localitate n alta pe cale aerian.
64
Copie autorizata pentru studenii CFBC
27) Fie o scar cu n (n - numr natural) trepte. O persoan trebuie s urce scara.
La fiecare pas ea poate urca una sau dou trepte consecutive. Determinai numrul de
moduri n care persoana dat poate urca scara.
29) Se consider un dicionar explicativ, pstrat ntr-u fiier text. Fiind dat un
termen nou, includei termenul i definiia lui n dicionar printr-un numr minim de
operaii.
30) Preedintele unei ri este ales de ctre parlament din care fac parte n
deputai. Pentru a fi ales preedintele trebuie s primeasc cel puin 2/3 din voturile
deputailor. ntre anumii deputai exist conflicte de interese. Doi deputai aflai n
conflict de interese voteaz diferit. Fiind date numrul natural n i perechile de numere
x, y, unde deputaii cu numrul de ordine x i y au conflict de interese, s se verifice
dac este posibil alegerea preedintelui.
31) S se scrie toate cifrele de la 1 la 9 n rnd, astfel nct fiecare dou vecine s
formeze un numr divizibil cu 7 sau cu 13.
65
Copie autorizata pentru studenii CFBC
36) Se dau M tablouri liniare cu numrul de componente diferit. Numrul de
componente ale fiecrui tablou se conine n tabloul L[1:m]. S se determine secvenele
maxime de elemente alturate ce figureaz n toate tablourile n aceeai ordine.
66
Copie autorizata pentru studenii CFBC
PROBLEME CU CARACTER DE
Capitolul 5 OLIMPIAD
Vopsit. Doi copii vopsesc un gard din scnduri pe care le vom numerota de la 1
la n astfel: primul ia o cutie de vopsea roie cu care vopsete scndurile cu numrul p,
2p, 3p, etc. Al doilea procedeaz la fel, ncepe de la acelai capt al gardului dar ia o
cutie de vopsea albastr i vopsete din q n q scnduri. Astfel, cnd vor termina de
vopsit, gardul va avea multe scnduri nevopsite, unele scnduri vopsite n rou, altele n
albastru, iar altele n violet. Cunoscnd numerele n, p i q afiai: a) cte scnduri rmn
nevopsite b) cte scnduri sunt vopsite n rou c) cte scnduri sunt vopsite n albastru
d) cte scnduri sunt vopsite n violet.
Film. F fete si B biei i-au luat bilete la film. Toate biletele sunt pe acelai rnd,
pe scaune consecutive. Elaborai un program care s determine o posibilitate de aranjare
a fetelor si bieilor pe scaune astfel nct lng orice biat s se afle cel puin o fat, iar
lng orice fat s stea cel puin un biat.
Input: Fiierul de intrare film.in conine pe prima linie dou numere naturale separate
prin spaiu F B, unde F reprezint numrul de fete, iar B numrul de biei.
Output: Fiierul de ieire film.out va conine o singura linie pe care vor fi scrise F litere
'f' si B litere 'b' ('f' indicnd o fat, iar 'b' indicnd un biat), respectnd condiiile
problemei.
Restricii: 1 <= F, B <= 100
Pentru datele de test exista ntotdeauna soluie.
Exemplu:
film.in film.out
34 bfbfbfb
67
Copie autorizata pentru studenii CFBC
Finala. La finala campion 2009 vor participa N elevi i M profesori.
Organizatorii colaboreaz cu o firm de transport care are autobuze identice, fiecare
autobuz avnd K locuri. Elaborai un program ce va determina numrul minim de
autobuze necesare, tiind c n orice autobuz trebuie s existe cel puin 2 profesori.
Input: Fiierul de intrare finala.in conine pe prima linie trei numere naturale
separate prin cte un spaiu N M K, cu semnificaia din enun.
Output: Fiierul de ieire finala.out va conine un singur numr natural
reprezentnd numrul minim de autobuze necesare. Dac nu este posibil organizarea
transportului n condiiile problemei, vei afia valoarea 0.
Restricii: 1<=N, M, K<=10000
Exemplu:
finala.in finala.out Explicaii
10 4 7 2 Sunt 10 copii i 4 profesori. n fiecare autobuz vor
merge 5 copii i 2 profesori, deci sunt necesare 2
autobuze
10 4 5 0 Transportul nu poate fi organizat n condiiile date
68
Copie autorizata pentru studenii CFBC
Evaluarea expresiilor Se consider expresiile aritmetice formate din numere
ntregi, mai mici dect 1000 i operatorii binari +, , *. Scriei un program care
evalueaz expresiile aritmetice n studiu.
Input: Fiierul input.txt va conine expresia de evaluat.
Output: Fiierul output.txt va conine rezultatul evalurii.
Restricii: Lungimea maxim a expresiei este de 300 de caractere.
Exemplu:
Fiierul input.txt Fiierul output.txt:
16+34+2*47 51
70
Copie autorizata pentru studenii CFBC
Exemplu
arcas.in (desen) arcas.out
8 11
25
36
27
47
69
86
72
54
34
arcas.in arcas.out
5 0
13
26
23
56
31
71
Copie autorizata pentru studenii CFBC
Exemplu:
cetati.in cetati.out Explicaie
10 5
21
34
63
66
85
10 3
11 7
12 6
9 11
15 8
Ptrate[12] Fie dat o reea din puncte cu coordonate ntregi N N. Fie unele
noduri ale reelei sunt colorate cu alb, altele cu negru. Se cere s determinai numrul
de ptrate pe reeaua dat (vrfurile unui ptrat trebuie s coincid cu nodurile reelei i
s fie colorate cu aceeai culoare).
De exemplu, pentru reeaua 4 4, din desenul 1 exist un singur ptrat (des. 2).
Mere. n grdina lui Ion crete un pom de mr. Pomul fiind fermecat, merele cad
din el dup o regul diferit de legile fizicii: La un moment dat un mr de desprinde de
ramura sa i ncepe s cad vertical n jos. Dac n timpul cderii mrul atinge un alt
mr, acesta din urm ncepe s cad i el vertical n jos. Traiectoria merelor n cdere nu
se schimb la atingerea altor mere. Astfel, orice mr, cu excepia primului, ncepe s
cad doar dup ce a fost atins de un mr n cdere.
Cerin Se cere s scriei un program, care s determine numrul de mere, care vor
cdea din pom.
Date de intrare. Fiierul de intrare mere.in va conine pe prima linie numrul n al
73
Copie autorizata pentru studenii CFBC
merelor din pom. Urmtoarele n linii conin descrierea merelor. Linia i+1 conine
descrierea mrului cu indicele i . Fiecare mr este considerat o sfer. Un mr este
descris de coordonatele punctului su superior (n acest punct el este prins de ramur,
codia fiind punctiform) xi , y i i zi i raza r i toate numerele - ntregi). Se garanteaz,
c iniial nici care dou mere nu se intersecteaz. Axa OZ este orientat vertical n sus.
Date de ieire. Fiierul de ieire mere.out va conine un singur numr - cel al
merelor, care vor cade din copac n cazul cnd ncepe s cad mrul cu indicele 1 .
Restricii
1 N 200
-10000 (xi, yi, zi) 10000
1 ri 10000
Exemplu
74
Copie autorizata pentru studenii CFBC
75
Copie autorizata pentru studenii CFBC
Valorile pentru litere se refera la situaia cnd <Caps Lock> este inactiva. Cnd <Caps
Lock> este activata, valorile coloanelor Normal si Shift se inverseaz. Tastele blocului
numeric transfera, la tastarea normala, codurile pentru cifre (#48..#57), numai daca <Num
Lock> este activ. n toate celelalte cazuri, se transfer codurile funciilor asociate, precizate n
tabelul anterior. Tastele F11, F12, Scroll, Pause nu genereaz coduri.
Erori de execuie
Apariia unei erori de execuie determina ntreruperea programului si afiarea unui
mesaj de eroare, de forma: Run-time error nnn at xxxx:yyyy, unde nnn este codul erorii de
execuie, iar xxxx:yyyy este adresa ei (segment si offset). Erorile de execuie se mpart n:
erori DOS (coduri 1-99); erori de intrare/ieire (coduri 100-149), erori critice (coduri 150-199)
si erori fatale (coduri 200-255).
ERORI DOS
1 Funcie inexistenta. Generata de un apel al unei funcii DOS inexistente.
2 Fiier inexistent. Generata de execuia uneia din procedurile Reset, Append, Rename sau
Erase, daca identificatorul asignat variabilei de tip fiier nu corespunde unui fiier existent.
3 Cale inexistenta. Generata de execuia uneia din procedurile:
o Reset, Append, Rewrite, Rename sau Erase, daca identificatorul asignat variabilei de tip fiier
este invalid sau include un sub[director] inexistent;
o ChDir, MkDir sau RmDir, daca sub[directorul] este invalid sau inexistent.
4 Prea multe fiiere deschise. Generata de execuia uneia din procedurile Reset sau Append
daca, la un moment dat, sunt deschise simultan mai mult de 12 fiiere ale utilizatorului. Daca
se dorete raportarea erorii pentru un numar mai mic de fiiere deschise simultan, trebuie ca
fiierul CONFIG.SYS sa nu con-tina clauza FILES=xx, sau sa specifice numrul de fiiere
dorit.
5 Acces interzis la fiier. Generata de execuia uneia din procedurile:
o Reset sau Append, daca FileMode permite scrierea, dar identificatorul asignat variabilei fiier
specifica un [sub]director/fiier read-only;
o Rewrite, daca sub[directorul] este plin sau identificatorul asignat variabilei fiier specifica un
[sub]director/fiier existent read-only;
o Rename, daca identificatorul asignat variabilei fiier specifica un fiier existent;
o Erase, daca identificatorul asignat variabilei fiier specifica un sub[director]/fiier read-only;
o MkDir, daca: exista un fiier cu aceleai nume n sub[directoriu] printe; nu exista spaiu n
sub[directorul] printe; este specificat n cale un dispozitiv;
o RmDir, daca: sub[directorul] nu este vid; nu se specifica un sub[director] n cale; directorul
specificat include rdcina;
o Read/BlockRead pentru un fiier cu tip/fr tip, daca acesta nu a fost deschis pentru citire;
o Write/BlockWrite pentru un fiier cu tip/fr tip, daca acesta nu a fost deschis pentru scriere.
6 Handle de fiier invalid. Generata la transmiterea unui handle (vezi 8.2) invalid de fiier,
la un apel al sistemului DOS.
76
Copie autorizata pentru studenii CFBC
12 Cod invalid de acces la fiier. Generata de execuia uneia din procedu-rile Reset sau
Append pentru fiiere cu tip/fr tip, daca valoarea variabilei FileMode este invalida.
15 Numr dispozitiv invalid. Generata de execuia uneia din procedurile GetDir sau ChDir,
daca numrul dispozitivului periferic este invalid.
16 Sub[directorul] curent nu poate fi suprimat. Generata de execuia procedurii RmDir,
daca n calea specificata este inclus directorul curent.
17 Redenumire fiiere pe dispozitive diferite. Generata de execuia procedurii Rename, daca
specificatorii de fiiere nu sunt pe acelai dispozitiv.
ERORI DE INTRARE/IESIRE
Erorile de intrare/ieire determina ntreruperea execuiei programului, numai daca instruciunea
respectiva a fost compilata cu directiva {$I+} (valoare implicit). n cazul n care se specifica
directiva de compilare {$I-}, execuia programului continu, iar apariia erorii este depistata cu
ajutorul funciei IOResult.
100 Eroare la citirea de pe disc. Generata de execuia procedurii Read pentru fiiere cu tip,
daca se ncearc citirea sfritului de fiier.
101 Eroare la scrierea pe disc. Generata de execuia uneia din procedurile Close, Write,
WriteLn, Flush sau Page, daca s-a umplut discul (nu mai este spaiu pe disc).
102 Fiier neasignat. Generata de execuia uneia din procedurile Reset, Rewrite, Append,
Rename sau Erase, daca variabila fiier nu a fost asignata unui nume fizic, prin procedura
Assign.
103 Fiier nedeschis. Generata de execuia uneia din procedurile/funciile Close, Read, Write,
Seek, Eof, FilePos, FileSize, Flush, BlockRead sau BlockWrite, daca fiierul nu este deschis.
104 Fiier nedeschis pentru intrare. Generata de execuia uneia din procedurile/funciile
Read, ReadLn, Eof, EoLn, SeeKEof sau SeeKEoln, daca fiierul TEXT respectiv nu este
deschis pentru consultare.
105 Fiier nedeschis pentru ieire. Generata de execuia uneia din procedurile Write sau
WriteLn, daca fiierul TEXT respectiv nu este deschis pentru crea-re/ex-tindere.
106 Format numeric invalid. Generata de execuia uneia din procedurile Read sau ReadLn,
daca o valoare numerica citita dintr-un fiier TEXT nu concorda cu formatul numeric declarat.
ERORI CRITICE
150 Disc protejat la scriere
151 Unit necunoscut
152 Dispozitivul nu este pregtit
153 Comanda necunoscuta
154 Eroare CRC n data
155 Cerere pe un dispozitiv greit
156 Eroare de poziionare pe disc
157 Tip dispozitiv necunoscut
158 Sector negsit
159 Imprimanta n ateptarea hrtiei
77
Copie autorizata pentru studenii CFBC
160 Incident la scrierea pe dispozitiv
161 Incident la citirea de pe dispozitiv
162 ntrerupere hardware
ERORI FATALE
200 mprire la zero. Generata de mprirea la 0 a unui numar, cu operatorii / , MOD sau
DIV.
201 Nonapartenena la un interval. Generata de instruciunile compilate cu directiva {$R+},
n urmtoarele condiii:
o expresia de indice pentru referirea unui element de masiv este n afara intervalului;
o atribuirea unei valori n afara intervalului stabilit pentru variabila respectiva;
o atribuirea unei valori n afara intervalului stabilit pentru un parametru de
procedura/funcie.
202 Depire stiva. Generata la apelul unei proceduri/funcii, compilate cu directiva {$S+},
cnd nu este spaiu suficient n stiva pentru memorarea variabilelor locale. Stiva se poate mari
cu directiva de compilare {$M}. Eroarea apare si n cazul unui apel recursiv infinit.
203 Depire heap. Generata de execuia uneia din procedurile New sau GetMem, cnd nu
este suficient spaiu n heap, pentru alocarea unui bloc sau a unei zone de mrime specificata.
204 Operaie cu pointer invalid. Generata de execuia uneia din procedu-rile Dispose sau
FreeMem daca: pointerul are valoarea nil sau indica o locaie n afara zonei heap; lista
blocurilor libere nu poate fi extinsa, deoarece este plina; HeapPtr are o valoare prea apropiata
de limita inferioara a listei libere.
205 Depire virgula mobila. Generata n urma unei operaii al crei rezultat este un numar
prea mare pentru a fi reprezentat ntr-un tip real de data Pascal.
206 Depire inferioara virgula mobila. Generata n urma unei operaii al crei rezultat este
un numar prea mic pentru a fi reprezentat ntr-un tip real de data Pascal. Apare numai daca se
utilizeaz coprocesorul matematic 8087. Se transmite, implicit, valoarea zero.
207 Operaie virgula mobila invalida. Generata daca:
o Argumentul funciilor Trunc sau Round este n afara intervalului [-2147483648,
2147483647];
o Argumentul funciei Sqrt este negativ;
o Argumentul funciei Ln este negativ sau zero;
o A aprut o depire a stivei 8087.
208 Managerul de reacoperire nu este instalat. Generata n urma apelului unei
funcii/proceduri de reacoperire, n cazul n care componenta de gestiune a structurilor de
reacoperire (Overlay Manager) nu a fost instalata (cel mai adesea nu s-a apelat procedura
OvrInit sau apelul ei a euat).
209 Eroare la citirea unui fiier de reacoperire. Generata n cazul n care se produce o
eroare cnd managerul de reacoperire ncearc sa citeasc un unit dintr-un fiier de reacoperire.
78
Copie autorizata pentru studenii CFBC
BIBLIOGRAFIE
79