Sunteți pe pagina 1din 30

Varianta 1

Planul unei livezi de formă dreptunghiulară cu dimensiunea nm (n,


m ≤ 50) este format din zone pătrate cu latura 1 (vezi figura 1). În 1 2 3 … j … m
fiecare zonă reală a livezii creşte câte un singur copac fructifer de 1
anumită specie. Orice specie de arbori poate ocupa una sau mai multe 2
zone, nu neapărat vecine. …
Informaţii mai detaliate despre zonele livezii considerate sunt
i Zona [i, j]
înregistrate în următoarele două fişiere:
. fişierul text Copaci.in conţine pe prima linie numerele naturale n şi …
m, separate prin spaţiu. Fiecare din următoarele n linii ale acestui fişier n
conţine câte m denumiri de copaci (prun, visin, mar, cais, piersic etc.), Fig. 1. Planul livezii.
separate prin câte un spaţiu, reprezentând specia copacului din zona
respectivă [i, j];
. fişierul text Roada.in conţine n linii cu câte m numere reale, separate prin câte un spaţiu, fiecare număr
reprezentând roada (în chintale; 1 chintal=100kg ), adusă în anul curent de copacul din zona respectivă [i, j], 1≤
i ≤ n, 1≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Actualizează, prin substituire în fişierele de intrare, conţinutul rândului/coloanei din planul livezii;
alternativa aleasă şi numărul respectiv al rândului/coloanei de actualizat se va indica de la tastatură;
2) Exclude din planul livezii un rând (marginal) / o coloană (marginală); poziţia rândului (nord/sud) /
coloanei (vest/est) de exclus se va preciza de la tastatură;
3) Determină coordonatele (numărul rândului şi numărul coloanei) celui mai neroditor în anul curent copac,
cu denumirea speciei citită de la tastatură;
4) Determină roada totală a merilor din livadă pe anul curent;
5) Afişează pe ecran lista speciilor distincte de copaci din livadă în ordinea descendentă a roadei totale pe
specie, în anul curent; sortarea datelor se va realiza prin metoda interclasării.
6) Creează fişierul textual LinSpec.txt, în care se vor copia acele linii ale fişierului de intrare Copaci.in,
care conţin specie cu cea mai bogată roada;
7) Găseşte în reţeaua planului livezii un sector dreptunghiular de arie minimă ce conţine cel puţin k specii de
arbori. Laturile sectorului vor coincide cu laturile zonelor din plan. Numărul natural k se va citi de la tastatură;
la ecran se va afişa aria S şi coordonatele colţurilor stânga-jos şi dreapta-sus ale dreptunghiului găsit;
8) Rezolvă problema: Un angajat s-a rătăcit în interiorul livezi şi nu dispune de planul acesteia. Conform
intuiţiei sale, angajatul va putea ieşi mai repede din livadă, dacă va vizita succesiv doar pruni, trecând de la un
prun la altul numai in cazul, când zonele vecine respective au o latură comună.
Se dă poziţia iniţială P a angajatului prin coordonatele [xp, yp], ale unui prun.
Elaboraţi o procedură, care ar găsi cel mai scurt drum de parcurgere de la prunul din zona P la un careva
prun de la marginea livezii, prin deplasare conform intuiţiei angajatului.
Date de intrare. Numerele naturale xp şi yp se citesc de la tastatură,
iar informaţiile despre dimensiunea livezii şi speciile de copaci
P asociate zonelor ei –din fişierul text Copaci.in, descris anterior.
Date de ieşire. Fişierul Drum.out va conţine Drum.out
Zone cu pe prima linie numărul natural L –lungimea 9
pruni drumului. Fiecare din următoarele L+1 linii ale 2 2
fişierului de ieşire va conţine câte două numere 3 2
naturale, separate prin spaţiu, reprezentând 4 2
coordonatele zonelor ce formează cel mai scurt 5 2
drum. 6 2
Fig. 2. Exemplu de drum
De exemplu, în cazul drumului indicat în figura 2, 6 3
se va obţine fişierul cu formatul din figura 3. 6 4
6 5
6 6
7 6
Fig. 3.
Varianta 2
Planul unei livezi de formă dreptunghiulară cu dimensiunea nm (n, Ariciul
m ≤ 50) este format din zone pătrate cu latura 1 (vezi figura 1). În … j …m
1 2 3
fiecare zonă reală a livezii creşte câte un măr. Din fiecare copac pot 1 ☻
cădea câteva mere.
2
Informaţii mai detaliate despre zonele livezii considerate sunt …
înregistrate în următoarele două fişiere: i Zona [i, j]
. fişierul text Apples.in conţine pe prima linie numerele naturale n şi m,
separate prin spaţiu. Următoarele n linii ale acestui fişier conţine câte m …
numere naturale, separate prin spaţiu, fiecare din aceste valori n
reprezentând numărul de mere căzute de pe copacul din zona respectivă Fig. 1. Planul livezii.
[i, j];
. fişierul text Virsta.in, cele n linii ale căruia conţin câte m numere
naturale, separate prin spaţiu, fiecare din aceste numere reprezentând vârsta (în ani împliniţi ) copacului din
zona
respectivă [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.

Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,


următoarele prescripţii:

1) Înscrie în planul livezii un nou rând (marginal) / o nouă coloană (marginală); poziţia rândului (nord/sud) /
coloanei (vest/est) de înscris se va preciza de la tastatură;

2) Exclude din planul livezii un rând / o coloană; alternativa aleasă şi numărul de ordine al rândului /
coloanei de exclus se va preciza de la tastatură;

3) Determină coordonatele (numărul rândului şi al coloanei) copacilor de vârstă minimă;

4) Determină vârstele medii ale copacilor pentru fiecare din rândurile pare ale livezii;

5) Afişează pe ecran lista numerelor de ordine ale rândurilor de copaci din livadă în ordinea ascendentă a
cantităţilor totale de mere căzute pe rândurile respective; sortarea datelor se va realiza prin metoda b.

6) Creează fişierul textual Varstnici.txt, în care se vor copia acele linii ale fişierului de intrare Apples.in,
care conţin doar copaci de vârsta ce depăşeşte 10 ani;

7) Găseşte în reţeaua planului livezii un pătrat ce conţine în cele 4 vârfuri ale sale un număr sumar maximal
Smax de mere căzute; laturile pătratului vor coincide cu laturile zonelor din plan. Pe ecran se va afişa numărul
Smax, coordonatele colţurilor stânga-jos şi lungimea laturii pătratului găsit;

8) Rezolvă problema: În zona din colţul stânga-sus al livezii se află un arici. Instinctiv ariciul tinde să
ajungă la vizuina sa situată în zona din colţul dreaptă-jos al livezii. În livadă există restricţii de deplasare:
ariciul se poate mişca din zona curentă în zona învecinată din dreapta sau de jos.

Elaboraţi un subprogram, care determină numărul maxim Nmax de mere pe


care le poate strânge ariciul deplasându-se la zona dorită, şi un drum care asigură
această valoare.
Date de intrare. Informaţiile necesare despre dimensiunea livezii şi merele căzute
din copaci se conţin în fişierul text Apples.in,descris anterior.
Date de ieşire. Se va afişa pe ecran numărul Nmax şi drumul găsit, descris prin
coordonatele zonelor respective.
☻ De exemplu, pentru ilustrarea din figura 2, drumul parcurs se va afişa astfel: [1, 1]–
[2, 1]–[2, 2]–[3, 2]–[4, 2]–[4, 3]–[4, 4]–[5, 4]–[6, 4]–[6, 5] –[6, 6]–
Fig.2. Zone vizitate [6, 7]– [6, 8] –[7, 8]
Varianta 3
Planul unui teren muntos are forma unei matrice cu nm (n, m ≤ 50)
zone (vezi figura 1). Fiecare zonă reală a terenului are o anumită 1 2 3 … j … m
altitudine (înălţime în raport cu nivelul mării). 1
Informaţiile necesare despre zonele terenului considerat sunt 2
înregistrate în următoarele două fişiere: …
. fişierul text Munte.in conţine pe prima linie numerele naturale n şi m, Zona [i, j]
i
separate prin spaţiu. Următoarele n linii ale acestui fişier conţin câte m
numere reale, separate prin spaţiu, fiecare din aceste valori …
reprezentând altitudinea zonei respective [i, j]; n
. fişierul text Roci.in, fiecare din cele n linii ale căruia conţine câte m Fig. 1. Planul terenului muntos
tipuri ale stratului superior al scoarţei terestre muntoase (nisip, podzol,
pietris, granit, marmura, bazalt etc.), separate prin câte un spaţiu, rocile fiind atribute ale zonelor respective [i,
j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înterschimbă în planul terenului prima cu ultima linii;

2) Exclude din planul terenului un rând (marginal) / o coloană (marginală); poziţia rândului (nord/sud) /
coloanei (vest/est) de exclus se va preciza de la tastatură;

3) Determină coordonatele (numărul rândului şi numărul coloanei) zonelor de maxim local propriu al
altitudinilor , adică coordonatele zonelor nemarginale cu altitudine strict mai mare decât fiecare din altitudinile
celor maxim 8 zone vecine );

4) Determină numărul zonelor cu altitudinea mai mare decât altitudinea medie a acelor zone din teren, care
sunt asociate tipului de rocă introdus de la tastatură;

5) Afişează pe ecran lista rocilor distincte din zonele terenului în ordinea descendentă a numerelor totale de
zone ce reprezintă respectivele roci; sortarea datelor se va realiza prin metoda selecției.

6) Creează fişierul textual RociTip.txt, în care se vor copia acele linii ale fişierului de intrare Roci.in, care
conţin doar zone cu tip de rocă altitudinea cărora depășește altitudinea medie a tuturor zonelor;

7) Găseşte în reţeaua planului tablei un dreptunghi de arie maximală , ce conţine pe perimetru său doar
zone de altitudine strict mai mari decât maximul înălţimilor zonelor interne ale acestui dreptunghi. Laturile
dreptunghiului vor coincide cu laturile zonelor din plan. La ecran se va afişa aria S, coordonatele colţurilor
stânga –jos şi dreapta-sus ale dreptunghiului găsit. Dacă aşa dreptunghi nu există, atunci se va afişa mesajul
respectiv.

8) Rezolvă problema: Un alpinist pleacă dintr-o anumită zonă A, dată prin coordonatele ei [xa, ya] şi trebuie
să ajungă într-o zonă B de maxim absolut Hmax în altitudine. Dintr-o zonă, alpinistul se poate deplasa diagonal
sau ortogonal într-una din zonele învecinate, doar urcând sau mergând la acelaşi nivel. Poate el ajunge într-
unul din vârfurile absolute ? Dacă da, arătaţi una din soluţiile problemei.

Date de intrare. Numerele naturale xa şi ya se introduc de la tastatură, iar


A informaţiile despre altitudinile zonelor terenului –din fişierul text Munte.in,
descris anterior.
Date de ieşire. Se va afişa pe ecran răspunsul (DA/NU) la întrebarea „Poate
alpinistul ajunge într-unul din vârfurile absolute ?”, şi în caz afirmativ –numărul
Hmax şi drumul găsit, reprezentat prin coordonatele zonelor respective.
De exemplu, pentru ilustrarea din figura 2, drumul parcurs se va afişa astfel:
[2, 2]–[3, 2]–[4, 3]–[5, 2]–[6, 3]–[6, 4]–[5, 5]–[6, 6]–[7, 7]
B

Fig. 2. Zone vizitate. Zonă de maxim


absolut
Varianta 4

Se consideră o tablă de dimensiunea nm (n, m ≤ 50), împărţită în


1 2 3 … j … m
zone pătrate de lungimea 1 (vezi figura 1). Fiecare zonă a tablei are o
1
anumită înălţime şi culoare.
Informaţiile necesare despre zonele tablei considerate sunt 2
înregistrate în următoarele două fişiere: …
. fişierul text Tabla.in conţine pe prima linie numerele naturale n şi m, i Zona [i, j]
separate prin spaţiu. Următoarele n linii ale acestui fişier conţin câte m

numere reale, separate prin câte un spaţiu, fiecare din aceste valori
reprezentând înălţimea zonei respective [i, j]; n
. fişierul text Culoare.in, fiecare din cele n linii ale căruia conţine câte Fig. 1. Planul tablei
m denumiri de culori (alb, negru, verde, rosu, cafeniu, albastru etc.),
separate prin câte un spaţiu, reprezentând culorile zonelor respective [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înscrie în fişierele de intrare un nou rând (marginal) / o nouă coloană (marginală); poziţia rândului
(nord/sud) / coloanei (vest/est) de înscris se va preciza de la tastatură;

2) Exclude din planul tablei un rând / o coloană; poziţia rândului / coloanei de exclus se va preciza de la
tastatură;

3) Determină coordonatele (numărul rândului şi numărul coloanei) zonelor de maxim absolut al înălţimilor
zonelor de pe întreaga tablă;

4) Determină înălţimile medii ale zonelor din fiecare coloană impară a tablei;

5) Afişează pe ecran lista culorilor distincte, asociate zonelor tablei, în ordinea ascendentă a numerelor
totale de zone ce reprezintă culoarea respectivă; sortarea datelor se va realiza prin metoda inserției.

6) Creează fişierul text ZonCol.txt, în care se vor copia acele linii ale fişierului de intrare Culoare.in, care
corespund doar zonelor de înălţimi mai mari înălțimea medie a tuturor zonelor;

7) Determină în reţeaua planului tablei un dreptunghi de arie maximală, ce conţine în vârfuri doar zone de
anumită culoare DenCol; laturile dreptunghiului vor coincide cu laturile zonelor din plan. Denumirea culorii
DenCol se va citi de la tastatură; la ecran se va afişa aria S şi coordonatele colţurilor stânga –sus şi dreapta –jos
ale dreptunghiului găsit;
Poziţia 8) Rezolvă problema: În unul din pătrăţelele tablei se
iniţială P
plasează o bilă. Bila se poate deplasa din
13 17 18 12 poziţia curentă în unul din pătrăţelele vecine, pe una din
cele maxim 8 direcţii posibile, numai dacă acesta are o
11 înălţime strict mai mică decât cea a pătrăţelului pe care se
12 16 13
află bila. Pentru eventualele deplasări pe direcţii
diagonale sunt prevăzute găuri de cădere de tipul celor din
18 9 17 9 colţurile mesei de biliard.
Fiind dată poziţia iniţială P a bilei, prin coordonatele
10 18 8 15 7 8 [xp, yp] ale zonei respective, să se afle traseul cel mai
scurt, suficient pentru a părăsi tabla.
9 7 16 14 4 12 2 1 Date de intrare. Numerele naturale xp şi yp se citesc de
la tastatură, iar informaţiile necesare despre teren –din
10 9 6 5 14 3 17 4 fişierul text Tabla.in, descris anterior.
Date de ieşire. Se va afişa pe ecran drumul găsit prin
12 15 8 7 6 1 5 coordonatele zonelor respective.
Q De exemplu, pentru ilustrarea din figura 2, drumul
parcurs se va afişa astfel: [2, 2] – [3, 2] – [4, 3] – [5, 2] –
Zone vizitate Fig.2. Una din [6, 3] – [6, 4] – [5, 5] – [6, 6] – [7, 7].
ieşiri
Varianta 5
Planul unui teren aurifer de formă dreptunghiulară cu
dimensiunea nm (n, m ≤ 50), este format din zone pătrate cu latura 1 Robotul
(vezi figura 1). Fiecare zonă reală a terenului conţine câte o cantitate 1 2 3 … j … m
de aur de anumită calitate. 1
Informaţiile necesare despre zonele terenului considerat sunt 2
înregistrate în următoarele două fişiere:

. fişierul text Aur.in conţine pe prima linie numerele naturale n şi m,
Zona [i, j]
separate prin spaţiu. Următoarele n linii ale acestui fişier conţin câte i
m numere reale, separate prin spaţiu –elementele matricei A; fiecare …
din aceste valori reprezentă cantitatea ai,j grame de aur care, eventual, n
poate fi extrasă din zona respectivă [i, j]; Fig. 1. Planul terenului aurifer.
. fişierul text Calitate.in, cele n linii ale căruia conţine câte m cifre
din mulţimea {1,2,3,4}, separate prin câte un spaţiu, fiecare din aceste
valori reprezentând codul calităţii aurului disponibil din zona respectivă [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Inserează în planul terenului aurifer un nou rând / o nouă coloană; alternativa aleasă şi numărul de ordine
a rândului / coloanei, unde va avea loc inserarea, se va preciza de la tastatură;
2) Exclude din planul terenului un rând / o coloană; alternativa aleasă şi numărul respectiv al rândului /
coloanei de exclus se va preciza de la tastatură;
3) Determină coordonatele (numărul rândului şi numărul coloanei) zonelor de minim local propriu al
rezervelor de aur, adică coordonatele zonelor cu cantităţi disponibile de aur strict mai mici decât fiecare din
cantităţile celor 8 zone vecine posibile;
4) Determină disponibilele cantitățile totale de aur ale zonelor pentru fiecare din cele patru categorii de
calitate utilizate în fişierul Calitate.in;
5) Afişează pe ecran lista codurilor calităţii aurului din zonele terenului în ordinea ascendentă a numerelor
totale de zone ce reprezintă calitatea respectivă; sortarea datelor se va realiza prin metoda numărării.
6) Creează fişierul text ConstCal.txt, în care se vor copia acele linii ale fişierului de intrare Aur.in, care
conţin doar zone cu aur de aceiași calitate;
7) Determină un dreptunghi de arie maximală, ce conţine pe perimetru său (pe margine) oar zone cu aur de
calitatea cu codul CodC; valoarea CodC (una din cifrele de la 1 la 4) se va citi de la tastatură; laturile
dreptunghiului vor coincide cu laturile zonelor din plan. La ecran se va afişa aria S şi coordonatele colţurilor
stânga –sus şi dreapta –jos ale dreptunghiului găsit;
8) Rezolvă problema: În zona din colţul nord-vest al terenului se află un robot. Din zona cu coordonatele
[i, j], 1≤ i ≤ n, 1 ≤ j ≤ m, robotul poate extrage cel mult ai,j grame de aur –valori date în fişierul Aur.in. Din
considerente tehnologice pe teren există restricţii de deplasare: la fiecare pas robotul se poate mişca din zona
curentă numai în una din zonele vecine –cea din est sau cea din sud.
Elaboraţi un subprogram care determină cantitatea maximală totală de aur Cmn care poate fi extrasă de robot,
indiferent de calitate, precum şi unul din traseele robotului, care asigură această cantitate.
Date de intrare. Informaţiile necesare despre teren se citesc din fişierul text
Aur.in, descris anterior.
Date de ieşire. Se va afişa pe ecran numărul real Cmn şi drumul găsit prin
coordonatele zonelor respective.
De exemplu, pentru ilustrarea din figura 2, drumul parcurs se va afişa astfel:
[1, 1]–[2, 1]–[2, 2]–[3, 2]–[4, 2]–[4, 3]–[4, 4]–[5, 4]–[6, 4]–[6, 5]–[6, 6]–
[6, 7]–[6, 8] –[7, 8]

Fig.2. Zone vizitate


Varianta 6
Planul unui teritoriu maritim de formă dreptunghiulară cu dimensiunea nm (n,
m ≤ 50), este format din zone pătrate cu latura 1. În cadrul planului sunt
amplasate modelele câtorva corabii, reprezentate prin dreptunghiuri de dimensiuni
1 k şi k  1 (1 ≤ k ≤ 4).
Dreptunghiurile (corabiile) constau din pătrăţele întregi, nu se intersectează între
ele şi nu au puncte de tangenţă (vezi exemplu în figura 1). A
Informaţiile despre teritoriul maritim şi corabiile considerate sunt înregistrate B
în fişierul text Corabii.in, care conţine pe prima linie numerele naturale n şi m,
separate prin spaţiu. Fiecare din următoarele n linii ale acestui fişier conţine câte
m cifre binare, separate prin câte un spaţiu – elementele unei matrice T, în care Fig.1. Planul teritoriului
T[i, j] =1, dacă pătrăţelul [i, j] aparţine la careva dreptunghi, şi T[i, j] = 0 în caz
contrar.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înscrie în planul teritoriului maritim un nou rând (marginal) / o nouă coloană (marginală); poziţia rândului
(nord/sud) / coloanei (vest/est) se va preciza de la tastatură;

2) Exclude din planul teritoriului maritim corabia, coordonatele colţului stânga-sus a cărei se vor introduce
de la tastatură;

3) Determină tipul corabiei din teritoriul maritim, fiind introduse de la tastatură coordonatele colţului
dreapta-jos ale acesteia.
Notă. Se consideră 7 tipuri de corabii, codificate astfel:
1 – corabie cu lungimea 1; 5 – orizontală cu lungimea 2;
2 – verticală cu lungimea 2; 6 – orizontală cu lungimea 3;
3 – verticală cu lungimea 3; 7 – orizontală cu lungimea 4.
4 – verticală cu lungimea 4;

4) Determină numărul Nc de corabii prezente pe teritoriul maritim în studiu;

5)Afişează pe ecran coordonatele vârfurilor dreapta-jos ale corabiilor în ordinea screscătoare a lungimilor
acestora, prioritate dându-se, în cazul aceloraşi lungimi, corabiilor cu orientare orizontală; sortarea datelor se va
realiza prin metoda inserției.

6) Creează fişierul text Vertical.txt, care va conţine doar acele informaţii din fişierul Corabii.in, care se
referă la corăbiile reprezentate vertical sau sunt de dimensiunea 11;

7) Găseşte în reţeaua planului teritoriului maritim un dreptunghi de arie maximală, ce nu conţine pătrăţele
ocupate de corăbii; laturile dreptunghiului vor coincide cu laturile zonelor din plan. La ecran se vor afişa
coordonatele a două vârfuri opuse ale dreptunghiului găsit şi aria S a acestuia;
8) Rezolvă problema: O corabie de dimensiunea 11 pleacă dintr-o anumită zonă A, dată prin
coordonatele ei [xa, ya] şi trebuie să ajungă în zona liberă B cu coordonatele [xb, yb].
Drum.out Pe teritoriul maritim considerat, corabia se poate deplasa doar ortogonal şi, evident, fără a se
10 ciocni cu celelalte corabii, pe care le vom considera că staţionează.
5 1 Elaboraţi o procedură, care ar găsi cel mai scurt drum de parcurgere de la zona A la zona B,
6 1
7 1 prin deplasare conform cerinţelor formulate.
8 1 Date de intrare. Numerele naturale xa , ya , xb şi yb se citesc de la tastatură, iar informaţiile
8 2 despre teritoriu –din fişierul text Corabii.in, descris anterior.
8 3 Date de ieşire. Fişierul Drum.out va conţine pe prima linie numărul natural L-lungimea
8 4 drumului. Fiecare din următoarele L+1 linii ale fişierului de ieşire va conţine câte două numere
8 5 naturale, separate prin spaţiu, reprezentând coordonatele zonelor ce formează cel mai scurt
8 6 drum. De exemplu, în cazul figurii 1, se va obţine fişierul cu structura prezentată în figura 2.
7 6
6 6
Figura 2.
Varianta 7

Planul unui teritoriu maritim de formă dreptunghiulară cu dimensiunea nm este


format din zone pătrate cu latura 1. În cadrul planului sunt amplasate modelele
câtorva corăbii, reprezentate prin intermediul dreptunghiurilor de dimensiuni 1 d şi X X
d  1 (1 ≤ d ≤ 4).
Dreptunghiurile constau din pătrăţele întregi şi nu au puncte comune (vezi
X
exemplu în figura 1).
Considerăm 7 tipuri de corăbii, pe care le vom codifica astfel: X X
1 – corabie cu lungimea 1 (11); 5 – verticală cu lungimea 2;
Fig.1. Planul teritoriului
2 – orizontală cu lungimea 2; 6 – verticală cu lungimea 3;
3 – orizontală cu lungimea 3; 7 – verticală cu lungimea 4.
4 – orizontală cu lungimea 4;
Informaţii mai concrete despre teritoriul maritim şi corăbiile amplasate pe acest teritoriu sunt înregistrate
în următoarele două fişiere:
. fişierul text Corabii.in, care conţine pe prima linie numerele naturale n şi m, separate prin spaţiu. Fiecare din
următoarele n linii ale acestui fişier conţine câte m cifre binare, separate prin spaţiu –elementele unei matrice
A, în care A[i, j] =1, dacă pătrăţelul [i, j] aparţine la careva dreptunghi, şi A[i, j] = 0 în caz contrar.
. fişierul text Atac.in, care conţine pe prima linie naturalul a – numărul de atacuri, iar următoarele a linii
conţin câte o pereche de numere naturale x şi y, separate prin spaţiu, reprezentând coordonatele (numărul liniei
şi numărul coloanei) zonei care se atacă.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înscrie în planul teritoriu maritim un nou rând / o nouă coloană; alternativa aleasă şi numărul respectiv al
rândului/coloanei de înscris se va indica de la tastatură;
2) Exclude din planul teritoriului maritim corabia, coordonatele colţului dreapta-jos a cărei se vor introduce
de la tastatură;
3) Determină numărul k de corabii prezente pe teritoriul maritim în studiu;
4) Determină tipul t al corabiei –unul din cele 7 coduri, conform definiţiei de mai sus, fiind introduse de la
tastatură coordonatele colţului stânga –sus al acestei corabii;
5)Afişează pe ecran coordonatele vârfurilor stânga-sus ale corabiilor în ordinea descrescătoare a lungimii
acestora, prioritate dându-se, în cazul aceloraşi dimensiuni, corabiilor cu orientare verticală; sortarea datelor se
va realiza prin metoda bulelor.
6) Creează fişierul text Orizont.txt, care va conţine doar acele informaţii din fişierul Corabii.in, care se
referă la corăbiile reprezentate orizontal sau sunt de dimensiunea 11;
7) Găseşte în reţeaua planului teritoriului maritim examinat un sector dreptunghiular de arie minimală ce
conţine în întregime cel puţin C corăbii; laturile dreptunghiului vor coincide cu laturile zonelor din plan.
Numărul natural C se va citi de la tastatură. La ecran se va afişa aria S şi coordonatele colţurilor stânga-jos şi
dreapta-sus ale dreptunghiului găsit;
8) Rezolvă problema: Asupra corabiilor are loc o serie de atacuri. Informaţia despre aceste atacuri este
specificată în fişierul text Atac.in. Se cere să se determine corabiile care nu au fost atacate.
În fig.1. este reprezentat un teritoriu maritim de dimensiune 56, unde prin X se marchează zonele atacate.
Date de ieşire: Fişierul Corabii.out va conţine pe prima linie numărul Nn a corabiilor nevătămate, iar
fiecare din următoarele Nn linii vor conţine câte un triplet i, j, t, reprezentând, respectiv, coordonatele colţului
stânga-sus şi tipul t al corabiilor care au rămas întregi. O corabie este întreagă dacă nici unul din pătratele ei nu
a fost atacat.
Exemplu (ilustrat prin figura 1):
Corabii.in Atac.in Corabii.out Restricţii:
56 5 2 1 <= n, m, a <= 15; 1 <= x , i <= n;
010000 22 512 1 <= y, j <= m; 1 <= t, k <= 10.
010001 23 251
010100 44
000100 55
110101 56
Varianta 8
Harta unui castel de formă dreptunghiulară cu dimensiunea nm (n, m ≤ 20) este formată din celule
(pătrate) cu latura 1 şi pereţi între celule (vezi exemplu în figura 1). Evident, fiecare celulă poate avea de la 0
până la 4 pereţi pe laturile sale. Fiecărei celule i se asociază un număr întreg din intervalul [0,15], a cărui
reprezentare binară pe 4 biţi indică eventuala existenţă a pereţilor în ordinea West, Nord, Est, Sud. Se observă
că un perete interior intervine în codificarea a două celule şi anume celor vecine ce au acest perete în
comun; de exemplu, peretele de la sudul celulei [1,1], este şi perete nordic pentru celula [2,1].

1 2 3 4 5 6 7 N
Castel.in
1 W E 4 7
2 S 13 6 13 6 12 5 6
3 14 9 6 11 10 15 10
8 5 3 14 11 14 10
4
11 13 5 1 5 3 11
Fig. 1. Harta unui castel.
Figura 2. Codificare zecimală.

Informaţii despre castelul considerat sunt înregistrate în fişierul text Castel.in, care conţine pe prima linie
numerele naturale n şi m, separate prin spaţiu. Fiecare din următoarele n linii ale acestui fişier conţine câte m
numere întregi din intervalul [0,15], separate prin câte un spaţiu.
În figura 2 este prezentată codificarea zecimală a configuraţiei celulelor castelului modelat prin figura 1.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) “ Construieşte ” (înscrie) în planul castelului un nou perete interior, fiind introduse de la tastatură
adresele celulelor învecinate, care vor avea în comun acest perete.
Indicaţie. Subprogramul va modifica adecvat conţinutele celulelor învecinate implicate la “construirea”
peretelui.

2) “Demolează” (exclude) din planul castelului un perete intern, fiind introduse de la tastatură adresele
celulelor învecinate, care au în comun acest perete, preconizat demolării.
Indicaţie. Subprogramul va modifica adecvat conţinutele celulelor învecinate implicate la “demolarea”
peretelui.

3) Converteşte un număr întreg din intervalul [0,15] în codul său binar direct pe 4 poziţii. De exemplu, lui 6
îi va asocia codul 0110;

4) Creează fişierul text CodBinar.txt, cu n linii, fiecare linie conţinând câte m coduri directe 4 –poziţionale
ale numerelor întregi din poziţiile respective ale fişierului Castel.in, separate prin câte un spaţiu;

5) Determină numărul de pereţi verticali/orizontali (neîntrerupţi) ale castelului; de exemplu, în cazul figurii
1, avem 9 pereţi verticali şi 10 orizontali;

6) Determină numărul Nc de camere ale castelului;

7) Fiecărei camere îi asociază un număr de ordine de la 1 la Nc conform ordinii, de la stânga la dreapta, a


colţurilor stânga–sus ale camerelor castelului, prioritară fiind poziţia coloanei, în raport cu cea a rândului.
Notă. Vom numi colţ stânga-sus al unei camere, acel colţ al acesteia, care este poziţionat în cea mai de
stânga coloană, iar în cazul aceleaşi coloane –vârful din cea mai de sus linie. De exemplu, pentru planul
castelului din figura 1 avem corespondenţa:
1 ↔ [1,1] ; 2 ↔ [4,2]; 3 ↔[1,3]; 4 ↔ [1,5]; 5 ↔ [2,6].

8) Determină aria (un număr de pătrăţele apartenente ) unei camere a castelului, fiind dat numărul ei de
ordine. De exemplu, camera cu numărul 1 are colţul stânga –sus [1,1] şi aria egală cu 9.
Varianta 9
Pentru păstrarea în siguranţă a unor cantităţi mari de substanţe
1 2 3 4 5
radioactive, într-o regiune îndepărtată a fost construit un depozit
subteran, format dintr-o reţea de tuneluri la intersecţia cărora se află 1 Tunel
zone de depozitare. O zonă de depozitare poate fi liberă sau ocupată de 1
Zonă 1iberă
2
containere cu substanţe radioactive. Tunelurile depozitului formează un
caroiaj, iar distanţa dintre oricare două zone vecine este egală cu 1 (vezi 3 Zonă
fig. 1). Tunelurile orizontale sunt numerotate prin 1,2,3,...,n, iar cele ocupată
4
verticale prin 1,2,3,...,m. Fiecare zonă de depozitare se identifică printr-
o adresă unică de forma [i,j], unde i este numărul tunelului orizontal, iar Fig.1. Harta depozitului.
j al celui vertical, la intersecţia cărora se află zona respectivă.
Informaţii despre depozitul în studiu sunt înregistrate în fişierul text Depozit.in, care conţine pe prima linie numerele
naturale n şi m, separate prin spaţiu. Linia a doua a fişierului de intrare conţine naturalul k–numărul zonelor ocupate de
containerele cu substanţe radioactive. Următoarele k linii ale acestui fişier conţin câte două numere naturale i, j –adresele
zonelor ocupate.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:

1) Înterschimbă în planul depozitului prima cu ultima linie;

2) Reformează, prin substituiri în fişierul de intrare, un tunel din planul caroiajului, orientarea (orizontal/vertical) şi
numărul de ordine al cărui se vor indica de la tastatură;

3) Creează fişierul text Binar.txt, fiecare din cele n linii ale cărui va conţine câte m cifre binare, separate prin spaţiu –
elementele unei matrice T de dimensiunea nm, în care T[i, j]=1, dacă zona de depozitare [i, j] este ocupată, şi T[i, j] = 0
în caz contrar;

4) Determină numărul tunelului vertical cu un număr minimal de zone de depozitare ocupate;

5)Afişează pe ecran lista tunelurilor verticale în ordinea descendentă a numerelor zonelor de depozitare ocupate din
tunelurile respective; sortarea datelor se va realiza prin metoda selecției.

6) Determină adresele zonelor de depozitare libere, care nu au zone vecine ocupate în cele patru direcţii cardinale
(nord, est, sud, vest);

7) Determină în caroiajul depozitului un dreptunghi de arie maximală, ce conţine pe perimetru doar zone libere; la
ecran se va afişa aria S şi coordonatele colţurilor stânga –sus şi dreapta –jos ale dreptunghiului găsit;

8) Rezolvă problema: Prin coridoare şi prin zonele de depozitare se deplasează un robot. Robotul poate trece printr-o
zonă de depozitare numai atunci când ea este liberă.
Elaboraţi un subprogram care, determină cel mai scurt drum ce trebuie parcurs de robot pentru a ajunge dintr-o
zona [a, b] în altă zonă [c, d]. Distanţele parcurse de robot în interiorul zonelor de depozitare nu vor fi luate în
consideraţie.
Date de intrare. Numerele naturale a, b, c şi d se vor citi de la tastatură, iar adresele zonelor ocupate– din fişierul
Depozit.in, descris anterior.
Date de ieşire. Fişierul Depozit.out va conţine pe prima linie naturalul L –lungimea celui mai scurt drum.
Fiecare din următoarele L+1 linii ale fişierului de ieşire va conţine câte două numere naturale separate prin spaţiu,
reprezentând adresele zonelor ce formează unul dintre cele mai scurte drumuri.
Exemplu (ilustrat prin figura 1, pentru a = 2; b = 2; Depozit.in Depozit.out
c = 3; d = 5). 4 5 4
7 2 2
Restricţii. 1≤ m,n ≤ 100; 1 ≤ a,c ≤ n; 1 3 2 3
1≤ b, d ≤ m; 1 ≤ k ≤ 1000. 1 4 2 4
1 5 3 4
2 5 3 5
3 2
3 3
4 5
Varianta 10

Se consideră o tablă de dimensiunea nm, împărţită în zone Zona [L, C]


pătrate de lungimea 1 (exemplu vezi în figura 1). Fiecare zonă a tablei 1 2 3 … j … m
are o anumită înălţime. 1
Informaţii mai detaliate despre zonele tablei considerate sunt
2
înregistrate în fişierul text Vopsea.in, care conţine pe prima linie
numerele naturale n şi m, separate prin spaţiu. Următoarele n linii ale …
acestui fişier conţine câte m numere reale pozitive, separate prin câte un i Zona [i, j]
spaţiu, fiecare din aceste valori reprezentând înălţimea zonei respective …
[i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
n
În continuare, tablei în studiu îi vom asocia o matrice
A[1..n,1..m], în care sunt înscrise înălţimile zonelor respective. Fig. 1. Planul tablei.
Să se elaboreze un program care, folosind meniuri şi subprograme, să
realizeze, la solicitarea utilizatorului, următoarele prescripţii:
1) Înscrie în fişierele de intrare un nou rând marginal; poziţia rândului (nord/sud /vest/est) se va preciza de
la tastatură;
2) Exclude din planul tablei un rând / o coloană; alternativa aleasă şi numărul de ordine al rândului / coloanei
de exclus, se va preciza de la tastatură;
3) Determină minimul absolut al înălţimilor tablei în studiu, precum şi coordonatele (numărul liniei şi
numărul coloanei) zonelor respective;
4) Determină înălţimea medie a zonelor situate pe perimetrul (marginea) tablei în studiu;
5) Afişează pe ecran lista coloanelor tablei, în ordinea descendentă a maximelor înălţimilor zonelor din
coloanele respective; sortarea datelor se va realiza prin metoda interclasării.
6) Creează fişierul text OrdSir.txt, în care se vor copia acele linii ale fişierului de intrare Vopsea.in, care
reprezintă şiruri ordonate (crescător sau descrescător).
7) Găseşte în reţeaua planului tablei un pătrat de arie maximală, ce conţine pe diagonale zone doar de
înălţimi ce nu depăşesc numărul întreg H, citit de la tastatură. Laturile pătratului vor coincide cu laturile zonelor
din plan. la ecran se va afişa aria S şi coordonatele colţurilor stânga –jos şi dreapta –sus ale pătratului găsit;
8) Rezolvă problema: Se consideră o zonă [L,C] a tablei în studiu. Să ne imaginăm că peste această zonă
curge vopsea care se prelinge peste zona vecină dacă înălţimea acesteia nu depăşeşte înălţimea zonei deja
vopsite. Prelingerea are loc în direcţie verticală şi orizontală, dar nu şi pe diagonală. Alcătuiţi o procedură care
ar determina zonele vopsite pornind de la zona iniţială [L,C];
Date de intrare. Numerele naturale L şi C se vor citi de la tastatură, iar înălţimile zonelor –din fişierul
Vopsea.in, descris anterior;
Date de ieşire. Fişierul Vopsea.out, în cele n linii ale sale va conţine câte m caractere din mulţimea
{’*’, ’O’}, separate prin câte un spaţiu; cu caracterul ’ *’ se vor marca zonele vopsite, iar celelalte zone –prin
caracterul ’O’.
Exemplu (zona vopsită iniţial: [L,C]=[4,3] ):
Vopsea.in Vopsea.out Restricţii:
7 6 O O O O O O 2 ≤ n,m ≤ 20
28 27 26 25 24 23 0< A[i, j] ≤ 50
* O * * * O
4 17 7 6 5 16 * * * O * *
7 8 10 12 3 1 O O * * O O
13 12 11 11 17 19 O * O * * O
16 1 18 10 5 16 * * * * O O
4 5 9 10 18 4 O O O O O O
18 17 16 11 5 3
Varianta 11

Planul unui arhipelag are forma unei matrice binare A cu nm (n, m≤50) 1 2 3 4 5 6 7 8 9
zone pătrate (vezi figura 1). Se defineşte o insulă a unei matrice A aşa un 1 1 1 0 0 1 1 1 1 1
obiect ce este format din elemente cu valoarea 1 care se învecinează pe linii, 2
1 1 0 0 1 0 0 1 1
pe coloane sau pe diagonale.
3 0 1 0 1 1 1 1 1 1
Informaţiile despre matricea în studiu sunt înregistrate în fişierul text
Insule.in, care conţine pe prima linie numerele naturale n şi m, separate 4 0 0 0 0 0 0 0 0 1
prin spaţiu. Fiecare din următoarele n linii ale acestui fişier conţine câte m 5 1 1 0 1 1 0 0 0 0
cifre binare, separate prin spaţiu –elementele matricei A, în care A[i, j] =1, 6 0 1 0 0 0 0 1 1 1
dacă zona [i, j] aparţine la careva insulă, şi A[i, j]=0 în caz contrar (vezi 7 1 0 0 1 1 0 1 0 1
exemplu în figura 2). 8 1 1 0 0 1 1 1 1 1
Să se elaboreze un program care, folosind meniuri şi subprograme, să
realizeze, la solicitarea utilizatorului, următoarele prescripţii: Fig.1. Planul arhipelagului.
1) Dublează în planul arhipelagului un rând / o coloana; poziţia rândului/ coloanei (nord/sud /vest/est) se va
preciza de la tastatură;
2) Exclude din planul arhipelagului un rând (marginal) / o coloană (marginală); poziţia rândului (nord/sud) /
coloanei (vest/est) de exclus se va preciza de la tastatură;
3) Determină numărul de unităţi din perimetru matricei;
4) Calculează numărul de insule din arhipelagul în studiu;
5) Afişează pe ecran lista coloanelor în ordinea ascendentă a numărului de unităţi din liniile; sortarea datelor
se va realiza prin metoda bulelor.
6) Determină numărul de unităţi care aparţin celei mai mari insule;
7) Găseşte în reţeaua planului tablei un pătrat de arie maximală, ce conţine pe diagonale zone doar de
înălţimi ce nu depăşesc numărul întreg H, citit de la tastatură. Laturile pătratului vor coincide cu laturile zonelor
din plan. la ecran se va afişa aria S şi coordonatele colţurilor stânga –jos şi dreapta –sus ale pătratului găsit;
8) Rezolvă problema: Se consideră două insule ale arhipelagului în studiu. Prima din insule include în
componenţa sa oraşul O1 şi portul P1, având respectiv adresele [O1i, O1j] şi [P1i, P1j], iar cea de a doua insulă
– oraşul O2 şi portul P2, având respectiv adresele [O2i, O2j] şi [P2i, P2j]. Un turist, echipat cu toate cele
necesare pentru deplasare atât pe apă cât şi pe uscat, îşi programează următorul traseu:
O1 P1 (exclusiv pe uscat), P1 P2 (exclusiv pe mare), P2 O2 (exclusiv pe uscat).
Pe întreg traseul există restricţii de deplasare: turistul se poate mişca din zona curentă în zona vecină doar
în patru direcţii West, Nord, Est, Sud. Elaboraţi un subprogram care îl va ajuta pe turist să-si realizeze
obiectivele.
Date de intrare. Numerele naturale O1i, O1j, P1i, P1j, O2i , O2j, P2i şi P2j se vor citi de la tastatură, iar
informaţiile despre zonele arhipelagului – din fişierul Insule.in, descris anterior.
Date de ieşire. Fişierul text Cale.out va conţine pe Insule.in Cale.out
prima linie numărul naturalul L –lungimea celui mai scurt 8 9 11
drum ce trebuie parcurs de turist pentru a ajunge din oraşul 1 1 0 0 1 1 1 1 1 2 8
O1 în oraşul O2, trecând intermediar prin porturile P1 şi 1 1 0 0 1 0 0 1 1 3 8
P2. 0 1 0 1 1 1 1 1 1 3 7
Fiecare din următoarele L+1 linii ale fişierului va conţine 0 0 0 0 0 0 0 0 1 3 6
câte două numere naturale, separate prin spaţiu, 1 1 0 1 1 0 0 0 0 4 6
reprezentând adresele zonelor ce formează drumul găsit. 0 1 0 0 0 0 1 1 1 5 6
Dacă există două sau mai multe drumuri optime, în fişierul 1 0 0 1 1 0 1 0 1 5 7
de ieşire se va indica numai unul dintre ele. 1 1 0 0 1 1 1 1 1 5 8
Exemplu. În cazul ilustrat prin figura 1, pentru Figura 2. 6 8
O1i = 2, O1j =8, P1i =3, P1j = 6, O2i = 8 , O2j = 9, 6 9
P2i =6, P2j =8, introduse de la tastatură, şi fişierul de intrare 7 9
Insule.in (vezi figura 2), fişierul de ieşire Cale.out 8 9
va avea formatul din figura 3. Figura 3.
Varianta 12

Planul unor hrube de formă dreptunghiulară cu


dimensiunea nm (n, m ≤ 50) este format din pătrăţele cu 1 2 3 4 5 6 7 8 9
latura 1 (vezi fig. 1). Pătrăţelele haşurate reprezintă 1
obstacolele (pereţi, butoaie), iar cele nehaşurate – spaţiile 2
libere. Pătrăţelele de pe perimetrul planului, cu excepţia
3
celor de intrare sau ieşire, sunt haşurate prin definiţie. În
formă numerică planul hrubelor este redat prin tabloul A 4 ♀ Robotul
cu n linii şi m coloane. Elementele acestui tablou au 5
următoarea semnificaţie: 6
0 –spaţiu liber; 1 – perete; 2 –butoi, 3 –intrarea în
7
hrube; 4 – ieşirea din hrube.
Informaţiile despre zonele hrubelor în studiu sunt Fig.1. Planul
înregistrate în fişierul text Hrube.in, care conţine pe hrubelor
prima linie numerele întregi n, m separate prin spaţiu. Pe Intrare Ieşire
fiecare din următoarele n linii se conţin câte m numere
întregi din mulţimea {0, 1, 2, 3, 4}, reprezentând elementele A[i,j] (1 ≤ i ≤ n, 1 ≤ j ≤ m), separate prin câte un
spaţiu.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Inserează în planul hrubelor un nou rând / o nouă coloană; alternativa aleasă şi numărul de ordine al
rândului / coloanei, unde va avea loc inserarea, se va preciza de la tastatură;
2) Actualizează (prin substituire în fişierul de intrare) conţinutul unei linii/coloane din planul hrubelor;
alternativa aleasă şi numărul de ordine al liniei/coloanei de actualizat se vor preciza de la tastatură;
3) Determină linia/coloana în care sunt amplasate un număr minimal de butoaie;
4) Află numărul mediu de butoaie amplasate în zonele fiecărei coloane impare a hrubelor;
5) Afişează pe ecran lista liniilor în ordinea descendentă a numerelor de butoaie amplasate în hrube pe
coloane; Datele se vor sorta prin metoda inserției.
6) Creează fişierul Butoi.txt, prin copierea tuturor componentelor fişierului Hrube.in, cu excepţia cifrelor
de 2, care se vor înlocui respectiv prin denumiri ale soiurilor de vinuri, citite de la tastatură;
7) Găseşte în reţeaua hrubelor un pătrat de arie maximală, ce conţine pe diagonala principală doar butoaie; la
ecran se va afişa lungimea L a laturii şi coordonatele colţurilor stânga –sus ale pătratului găsit;
8) Rezolvă problema. După o vizită la renumitele hrube de la Cricova, un informatician a construit un
robot care lucrează în hrube. Robotul poate executa doar instrucţiunile SUS, JOS, DREAPTA, STANGA,
conform cărora el se deplasează în unul din pătrăţele vecine.
Elaboraţi un subprogram, care, cunoscând planul hrubelor, deplasează robotul prin încăperile subterane, de
la intrarea în hrube la ieşire. Colecţia de vinuri fiind foarte bogată, nu se cere vizitarea obligatorie a tuturor
încăperilor subterane.
Exemplu:
Date de intrare. Fişierul text Hrube.in, descris anterior. Hrube.in Hrube.out
79 SUS
Date de ieşire. Fişierul text Hrube.out va conţine pe fiecare 1 1 1 1 1 1 1 1 1 DREAPTA
linie câte una din instrucţiunile SUS, JOS, DREAPTA, 1 0 0 2 0 0 0 0 1 DREAPTA
DREAPTA
STANGA, scrise în ordinea executării lor de către robot. 1 0 2 0 0 2 0 2 1 DREAPTA
Dacă problema admite mai multe soluţii, în fişierul de ieşire 1 0 0 0 2 0 0 0 1 SUS
se va scrie doar una, oricare din ele. 1 0 2 0 2 0 2 0 1 SUS
1 0 0 0 0 0 2 0 1 DREAPTA
DREAPTA
1 3 1 1 1 1 1 4 1 JOS
JOS
JOS

* Hrubă –încăpere sau galerie subterană care serveşte la depozitarea produselor alimentare. În hrubele de la
Cricova pe parcursul a mai multor decenii sunt depozitate cele mai bune vinuri din Republica Moldova.
Varianta 13

Planul unui teren minat, având forma unei table dreptunghiulare de


1 2 3 … j …m
dimensiunea nm (n, m ≤ 50) este împărţit în zone pătrate de lungimea
1
1 (vezi figura 1). În fiecare zonă reală a terenului poate fi plasată o
mină. 2
Informaţii mai concrete despre terenul în studiu sunt înregistrate în …
fişierul text Teren.in, care conţine pe prima linie numerele naturale n i Zona [i, j]
şi m, separate prin spaţiu. Fiecare din următoarele n linii ale acestui

fişier conţine câte m cifre binare, separate prin câte un spaţiu –
elementele unei matrice T, în care T[i, j] =1, dacă zona [i, j] conţine o n
mină, şi T[i, j]=0 –dacă zona este liberă. Fig. 1. Planul terenului

Să se elaboreze un program care, folosind meniuri şi subprograme, să


realizeze, la solicitarea utilizatorului, următoarele prescripţii:

1) Înscrie în planul terenului un nou rând (marginal) / o nouă coloană (marginală); alternativa aleasă şi
poziţia rândului (nord/sud) / coloanei (vest/est) de înscris se vor preciza de la tastatură;

2) „Demină” zonele unui rând / unei coloane; alternativa aleasă şi numărul de ordine al rândului / coloanei
de „deminat” se va preciza de la tastatură;

3) Determină numărul liniei/coloanei cu un număr minimal de zone minate;

4) Determină media numerelor de zone minate de pe coloanele pare ale terenului în studiu;

5) Afişează pe ecran lista numerelor de ordine ale liniilor terenului în ordinea ascendentă a numărului total
de mine plasate pe liniile respective; datele se vor sorta prin metoda selecției;

6) Creează fişierul text Mine.txt, în care se vor copia doar acele linii ale fişierului de intrare Teren.in, care
nu conţin mine;

7) Determină numărul de obiecte din matricea binară T.


Notă. Un obiect este format din elemente cu valoarea 1 care se învecinează pe linii, pe coloane sau pe
diagonale.

8) Rezolvă problema. Un soldat, având la dispoziţie un detector de mine, porneşte dintru –un colţ al
terenului şi trebuie să ajungă în colţul opus. Pe terenul considerat, soldatul se poate deplasa doar ortogonal şi,
evident, fără a nimeri în careva din zonele minate.
Să se afle traseul cel mai scurt, ce trebuie parcurs de soldat pentru a
ajunge din zona [1, 1], considerată, evident, neminată, în zona [n, m].

Date de intrare. Informaţiile despre dimensiunile terenului şi zonele


minate din teritoriu se conţin în fişierul text Teren.in, descris
anterior.
Date de ieşire. Se va afişa pe ecran drumul găsit, descris prin
coordonatele zonelor respective.

De exemplu, pentru ilustrarea din figura 2, drumul parcurs se va afişa


astfel: [1, 1]–[2, 1]–[2, 2]–[3, 2]–[3, 3]–[4, 3]–[4, 4]–[4, 5]–[3, 5]–[3, 6]
–[3, 7]– [4, 7]– [5, 7] –[5, 6] – [6, 6] –[7, 6] –[7, 7] –[7, 8]
Fig.2. Zone vizitate
Varianta 14
Pentru a evita atacurile teroriştilor, forţele armate implicate într-un 1 2 3 4 5 6 7 8 9
conflict au hotărât să se retragă în cazematele construite pe terenul de 1 0 0 0 0 1 1 1 0 0
luptă, codificat printr-o matrice binară A cu n linii şi m coloane (n, m ≤ 2 0 0 0 1 0 0 0 1 0
50), în care valoarea 1 reprezintă un perete, iar valoarea 0 reprezintă 3 0 0 0 1 0 0 0 1 0
spaţiu liber. Cazematele sunt zonele libere de pe teren care sunt în 4 0 0 0 1 0 1 1 0 0

Cazemată
întregime înconjurate de pereţi (vezi figura 1). În operaţiunea militară
5 0 0 0 1 1 1 0 0 0
în studiu vor fi implicate k detaşamente de soldaţi.
Informaţii mai detaliate, ce ţin de această operaţiune militară, sunt 6 0 0 1 0 0 0 1 0 0
înregistrate în fişierul text Cazemate.in, care conţine pe prima linie 7 0 0 1 1 1 1 0 0 0
numerele naturale n, m, k, separate prin câte un spaţiu. Pe următoarele 8 0 1 0 0 1 0 0 0 0
n linii ale acestui fişier se află matricea binară A, cu elemente separate 9 0 1 0 0 1 0 0 0 0
prin câte un spaţiu. Ultima linie a acestui fişier va conţine k numere, 10 0 0 1 1 0 0 0 0 0
separate prin câte un spaţiu, corespunzătoare numărului de soldaţi din Fig. 1. Planul terenului.
fiecare detaşament.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înterschimbă în planul terenului prima cu ultima coloană;
2) Actualizează (prin substituire în fişierul de intrare) conţinutul unei linii/coloane din planul terenului;
alternativa aleasă şi numărul de ordine al liniei/coloanei de actualizat se vor preciza de la tastatură;
3) Sortează ascendent detaşamentele după numerele de soldaţi din ele; datele se vor sorta prin metoda
selecţiei;
4) Găseşte în reţeaua terenului un pătrat de arie maximală, pentru care elementele deasupra diagonalei
principale sunt doar zerouri;
5) Află numărul cazematelor de pe terenul de luptă;
6) Determină numărul soldaţilor care se pot adăposti în interiorul cazematelor, considerând că fiecare soldat
ocupă, în caz de necesitate, o singură locaţie din matrice;
7) Precizează, dacă este posibilă o distribuţie a soldaţilor, astfel încât detaşamentele să nu se scindeze; în
cazul în care acest lucru este posibil, se va afişa mesajul posibil, altfel –imposibil;
8) Dacă subprogramul de realizare a prescripţiei 7) returnează valoarea posibil, atunci, detaşamentele vor
fi distribuite pe la cazemate, fiecare soldat ocupând câte o poziţie liberă din cazemata în care se vor distribui
soldaţii acelui detaşament.
Se menţionează faptul că în nici una dintre cazematele de pe câmpul de luptă nu pot intra mai multe
detaşamente.
Date de intrare. Fişierul Cazemate.in, descris Cazemate.in Soldat.ou
anterior. t
Datele de ieşire. Fişierul Soldat.out, în fiecare din
1 1 2 4
cele k linii ale sale va conţine câte trei numere naturale, 9 3
0
separate prin câte un spaţii, reprezentând, respectiv,
0 0 0 1 1 1 0 0 2 8 2
numărul de ordine al detaşamentului, linia şi coloana unei
0 0 1 0 0 0 1 0 3 6 3
poziţii libere din cazemata în care se vor distribui soldaţii
0 0 1 0 0 0 1 0 Figura 3.
acelui detaşament.
Exemplu: In figura 2 este prezentată structura fişierului 0 0 1 0 1 1 0 0
Cazemate.in, conformă planului terenului ( fig.1.), iar 0 0 1 1 1 0 0 0
rezultatul distribuirii soldaţilor –în fişierul de ieşire 0 1 0 0 0 1 0 0
0 1 1 1 1 0 0 0
Soldat.out (fig.3).
1 0 0 1 0 0 0 0
1 0 0 1 0 0 0 0
0 1 1 0 0 0 0 0
6 3 2
Figura 2.
Varianta 15
Se consideră o tablă de dimensiunea nm, împărţită în zone pătrate
1 2 3 … j … m
de lungimea 1 (exemplu vezi în figura 1). Fiecare zonă a tablei are o
1
anumită înălţime. Prin definiţie, zonele din vecinătatea nemijlocită a
terenului au adâncimi extrem de mari, adică reprezintă nişte 2
„prăpăstii”. …
Informaţii mai detaliate despre zonele tablei considerate sunt i Zona [i, j]
înregistrate în fişierul text Lacuri.in, care conţine pe prima linie

numerele naturale n şi m, separate prin spaţiu. Următoarele n linii ale
acestui fişier conţine câte m numere reale pozitive, separate prin câte n
un spaţiu, fiecare din aceste valori reprezentând înălţimea zonei Fig. 1. Planul tablei
respective [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Actualizează (prin substituire în fişierul de intrare) conţinutul zonelor de pe perimetrul (marginea)
terenului;
2) Exclude din planul tablei un rând / o coloană; poziţia rândului / coloanei de exclus se va preciza de la
tastatură;
3) Determină dacă pentru matricea A există punct şa sau nu, iar în caz afirmativ menţionează coordonatele
şi valoarea punctului şa.
Notă. Se numeşte punct şa elementul A[is, js], care este minimal în linia is şi maximal în coloana js.
4) Afişează pe ecran lista înălţimilor zonelor de pe perimetrul (marginea) tablei, în ordine descendentă;
datele se vor sorta prin metoda sortării rapide;
5) Determină înălţimea medie a zonelor situate pe coloanele pare ale tablei;
6) Creează fişierul text MinM.txt, în care se vor copia acele linii ale fişierului de intrare Lacuri.in, care în
prima coloană conţin elementul minimal din linia respectivă;
7) Determină în reţeaua planului terenului un dreptunghi de arie maximală ce conţine doar zone de înălţimi
mai mică ca numărul real H; laturile dreptunghiului vor coincide cu laturile zonelor din plan. Numărul H se va
citi de la tastatură; la ecran se va afişa aria S, coordonatele colţurilor stânga –sus şi dreapta –jos ale
dreptunghiului găsit;
8) Rezolvă problema. Fie asupra tablei în studiu a năvălit o ploaie. Apa se scurge de pe o zonă pe cele
vecine conform legilor fizice respective. După expirarea unui anumit timp, ploaia încetează, scurgerile de apă
se termină. În anumite zone apa a putut să se statornicească, rămânând acumulată în anumite «lacuri».
Alcătuiţi o procedură care ar determina zonele tablei care au putut deveni componente ale eventualelor «lacuri».
Date de intrare. Fişierul Lacuri.in, descris anterior;
Date de ieşire. Fişierul Lacuri.out, în cele n linii ale sale va conţine câte m caractere din mulţimea
{’*’, ’O’}, separate prin câte un spaţiu; cu caracterul ’ *’ se vor marca zonele lacurilor, iar celelalte zone–prin
caracterul ’O’.

Lacuri.in Lacuri.out Restricţii


7 6 O O O O O O 2≤ n, m ≤ 50
28 27 26 25 24 23 O O * * * O 0<Înălţimile zonelor[i, j] ≤50
4 17 7 6 5 16 O O O O O O
7 8 10 12 13 1 O O O O O O
13 12 11 11 17 19 O * O * * O
16 1 18 10 5 16 O * * * O O
14 5 9 10 18 4 O O O O O O
18 17 16 11 5 3
Varianta 16
În urma unei catastrofe tehnologice o porţiune dreptunghiulară de
teren de dimensiunea nm a fost poluată cu substanţe radioactive. 1 2 3 … j … m
Pentru a descrie gradul de poluare, terenul respectiv a fost divizat în 1
zone pătratice de lungimea 1 (exemplu vezi în figura 1). 2
Informaţii mai concrete despre zonele terenului considerat sunt …
înregistrate în fişierul text Radiatii.in, care conţine pe prima linie Zona [i, j]
i
numerele naturale n şi m, separate prin spaţiu. Următoarele n linii ale
acestui fişier conţin câte m numere întregi dij , separate prin câte un …
spaţiu, fiecare din aceste valori reprezentând numărul de unităţi ale n
dozei de radiaţie pe care, eventual, ar putea să o primească o persoana Fig. 1. Planul terenului poluat
ce va parcurge zona respectivă [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:

1) Actualizează (prin substituire în fişierul de intrare) conţinutul unei linii/coloane din planul terenului;
alternativa aleasă şi numărul de ordine al liniei/coloanei de actualizat se vor preciza de la tastatură;

2) Exclude din planul tablei un rând / o coloană; poziţia rândului / coloanei de exclus se va preciza de la
tastatură;

3) Determină indicii liniilor ce conţin zone cu doză minimă de poluare;

4) Înscrie în tabloul liniar B[1..m], în ordinea descendentă valorile d1,j, ( 1 ≤ j ≤ m); datele se vor sorta prin
metoda selecției;

5) Determină doza medie de radiaţie pe zonele întregului teren în studiu;

6) Creează fişierul text ParLin.txt, în care se vor transcrie acele linii ale fişierului de intrare Radiatii.in
cere conțin doar numere pare;
1 1 1
7) Determină numărul de pătrăţele trasate de diagonala terenului în 1 2 3 4 5 6 7 8 9 0 1 2

studiu; De exemplu, pentru n = 9 şi m = 12, diagonala dreptunghiului 1

(terenului) va trasa 18 pătrăţele (vezi figura 2); 2


3
4
8) Rezolvă problema. Un cercetător trebuie să ajungă din zona [1, 1] 5
în zona [n, m] a terenului poluat în studiu. Trecerea dintr–un pătrăţel în 6
altul se poate efectua numai prin laturile adiacente. Este cunoscut faptul 7
că la parcurgerea pătrăţelului [i, j] cercetătorul va primi o doză de 8
radiaţie de dij unităţi, doza totală reprezentând suma dozelor pătrăţelelor 9
parcurse. Alegând diferite drumuri, cercetătorul ar putea minimiza doza Fig. 2. Pătrăţele trasate
totală.
Elaboraţi un subprogram ce calculează doza totală minimă dmin.

Date de intrare. Fişierul text Radiatii.in, descris anterior;


Date de ieşire. Fişierul text Radiatii.out , va conţine pe o singură linie numărul întreg dmin.

Exemplu.
Radiatii.in Radiatii.out
3 5 9
2 100 0 100 100
1 100 0 0 0
1 0 3 100 2

Restricţii. 1≤ n, m ≤ 30; 1 ≤ dij ≤ 100..


Varianta 17
Planul unei Păduri Magice de formă dreptunghiulară cu dimensiunea
nm este format din zone pătrate cu latura 1 (vezi figura 1). Pentru 1 2 3 … j …m
fiecare zonă reală din pădure se ştie tipul copacilor care o acoperă 1
(număr natural mai mic decât 101). O zonă este acoperită numai cu 2
copaci de acelaşi tip. În formă numerică planul pădurii este redat prin
tabloul A cu n linii şi m coloane. …
i Zona [i, j]
Să se elaboreze un program care, folosind meniuri şi subprograme,
să realizeze, la solicitarea utilizatorului, următoarele prescripţii: …
n
1) Inserează în matricea A o nouă linie/coloană; alternativa aleasă
şi numărul liniei/coloanei de inserat se va indica de la tastatură; Fig. 1. Planul pădurii

2) Exclude din planul pădurii un rând (marginal) / o coloană (marginală); poziţia rândului (nord/sud) /
coloanei (vest/est) de exclus se va preciza de la tastatură;

3) Determină lungimea celui mai lung subşir necrescător al şirului elementelor coloanei (matricei A) cu
indicele precizat de la tastatură;

4) Înscrie în tabloul liniar B[1..n] în ordinea ascendentă valorile Ai,n ( 1 ≤ i ≤ n); datele se vor sorta prin
metoda numărării;

5) Determină cota (în procente) zonelor cu copaci de tipul indicat de la tastatură, în raport cu numărul total
de zone ale planului pădurii;

6) Creează fişierul text ParCol.txt, în care se vor transcrie, pe linii, elementele coloanelor care conțin
doar elementele pare ale matricei A;

7) Găseşte în componenţa matricei A o submatrice pătratică simetrică de dimensiune maximală; la ecran se


vor afişa coordonatele colţului stânga –jos şi dimensiunea submatricei găsite;

8) Rezolvă problema. Prinţul Algorel se află pierdut undeva prin Pădurea Magică şi căută cu disperare drumul
înapoi spre castelul său. El se poate deplasa în cele patru direcţii: Nord, Sud, Est şi Vest, dar nu poate să iasă
din pădure fiindcă dincolo de pădure e tărâmul Spânului cel Râu. In drumul său către castel, prinţul trebuie să
plătească Pădurarului Magician un diamant pentru fiecare trecere dintr-o zonă în alta în care se schimbă tipul
copacilor (adică dacă cele două zone sunt acoperite cu tipuri diferite de copaci). Pentru trecerile între zonele
acoperite de acelaşi tip de copaci el nu plăteşte nimic. Cum diamantele sunt resursa cea mai importantă în regat,
prinţul vrea să ştie numărul minim de diamante pe care trebuie să-l plătească pentru a ajunge la castel.
Elaboraţi un subprogram, care, cunoscând planul pădurii, adresa curentă [pl, pc] a prinţului şi adres [cl, cc] a
castelului, îl va ajuta pe Algorel să se descurce în situaţia sa dificilă.
Date de intrare. Pe prima linie a fişierului Padure.in se afla 6 numere naturale n, m, pl, pc, cl, cc, separate
prin spaţii, cu semnificaţia de mai sus. Următoarele n
linii conţin cate m numere naturale separate prin Exemplu:
spatii, reprezentând tipul copacilor care acoperă Padure.in Padure.out
fiecare zonă din Pădurea Magică.
651154 2
Date de ieşire. Fişierul de ieşire Padure.out va
conţine pe prima linie un singur număr întreg D 00056
reprezentând minimul de diamante pe care Algorel 77111 Restricţii: 1 ≤ n, m ≤ 1000
este nevoit să-l plătească pentru a ajunge la castel.
11131 1 ≤ pl, cl ≤ n şi 1 ≤ pc, cc ≤ m
11221
00900
00009
Varianta 18
Se consideră un tablou bidimensional A[1..n, 1..m] cu elemente numere întregi.
Să se elaboreze un program care, folosind meniuri şi subprograme, să
realizeze, la solicitarea utilizatorului, următoarele prescripţii: 1 2 … j …m
1) Interschimbă în matricea A două linii; indicii liniilor de interschimb se 1
vor introduce de la tastatură; 2

2) Exclude din matricea A linia şi coloana la intersecţia căror se află primul
element minimal întâlnit la parcurgere pe coloane a elementelor acestei i
matrice; …
n
3) Determină în câte rânduri ale matricei A există elementul maximal;
Fig.1. Spirala.
4) Calculează media aritmetică a elementelor de pe fiecare coloană a
matricei A;

5) Sortează crescător elementele fiecărei liniei ale matricei A prin metoda inserției;

6) Creează fişierul Prime.txt cu n linii prin copierea doar a numerelor prime din liniile respective ale
matricei A;

7) Găseşte în matricea A un pătrat pentru care diferenţa (max –min) este minimală, unde max, min sunt,
respectiv, maximul şi minimul elementelor din pătratul selectat. Pe ecran se vor afişa coordonatele colţurilor
stânga-jos şi lungimea laturii pătratului găsit;

8) Rezolvă problema. Numim spirală acel drum prin matrice care, pornind din coltul stânga –sus,
traversează element după element prima linie, coboară pe ultima coloană, traversează ultima linie de la dreapta
la stânga, urcă pe prima coloană, apoi continuă cu cea de-a doua linie, penultima coloană, penultima linie şi a
doua coloana etc. Drumul se opreşte undeva în tablou, după ce toate elementele au fost traversate. Fiecare
element se vizitează o singura dată (vezi figura 1).
Să se stabilească dacă spirala tabloului A formează sau nu o progresie aritmetică. In cazul în care răspunsul
este afirmativ, să se determine valoarea ultimului element din spirală, în caz contrar –să se afişeze valorile
primelor doua elemente din spirală ale căror diferenţă nu este egală cu diferenţa dintre valorile elementelor deja
verificate.
Date de intrare. Pe prima linie a fişierului de intrare Spirala.in se află numerele naturale n şi m
separate prin spaţiu, reprezentând numărul liniilor, respectiv numărul coloanelor din tablou. Pe următoarele n
linii ale acestui fişier se afla câte m numere întregi, separate prin câte un spaţiu, reprezentând elementele
matricei A.
Date de ieşire. Dacă spirala formează progresie aritmetică, pe prima linie a fişierului de ieşire
Spirala.out se va scrie cuvântul DA. Pe următoarea linie se va scrie valoarea ultimului element din
spirală. Dacă însă spirala nu formează progresie aritmetică, pe prima linie a fişierului de ieşire se va scrie
cuvântul NU. Pe următoarea linie se vor scrie primele doua numere din spirală, pentru care nu este îndeplinită
proprietatea de progresie aritmetică.
Restricţii.
2≤ n, m ≤19 -32000 ≤ A[i, j] ≤ 32000 (i = 1, 2, ..., n, j = 1, 2, ..., m).

Exemplul 1: Exemplul 2:
Spirala.in Spirala.out Spirala.in Spirala.out
3 DA 23 NU
1 3 5 17 -1 -3 -5 -7 -5
15 17 7 -15 -5 -7
13 11 9
Varianta 19
Într-un sistem rectangular de coordonate 9
9
XOY este desenat un set de dreptunghiuri,
8 3 3 3 3 3 3 3 3 3 3
care modelează terenuri cultivate cu plante de 8
7 3 3 3 3 3 3 3 3 3 3
aceleaşi specii (pe întregul teren). Terenurile 7

au laturile paralele axelor de coordonate şi 6 6 3 3 3 3 3 3 2 2 2

vârfurile în puncte cu coordonate numere 5 1 1 1 1 5 2 2 2 2 2 2 2 2 2


întregi. Ele pot avea puncte comune doar pe 4 1 1 1 1 4 2 2 2 2 2 2 2 2 2
laturi. Fiecărei specii de plantă i se asociază 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2
o anumită culoare cu codul Cp, în funcţie de 2 4 4 1 1 2 1 1 1 1 5 5 2 2 2
specia plantelor cultivate pe acest teren (vezi 1 4 4 1 1 1 1 1 1 1 5 5
2
exemple în figurile 1 şi 2). 1 1 1 1 5 5 2
Informaţii mai concrete despre (0,0) 1 2 3 4 5 6 (0,0) 1 2 3 4 5 6 7 8 9 10
dreptunghiurile în studiu se conţin în fişierul Fig.1 (Exemplul 1) Fig. 2 (Exemplul 2)
text Teren.in, care conţine pe prima linie
un număr natural n reprezentând numărul de dreptunghiuri. Fiecare dintre următoarele n linii conţine câte 5
numere întregi separate prin câte un spaţiu: X1 Y1 X2 Y2 Cp. (X1,Y1) şi (X2,Y2) reprezintă coordonatele a
două colţuri diagonal opuse ale dreptunghiului, iar Cp reprezintă codul culorii dreptunghiului.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Înregistrează în fişierul text Teren.in, un dreptunghi, care se conformează caracteristicilor descrise mai
sus;
2) Exclude din fişierul text Teren.in, un dreptunghi, fiind introduse de la tastatură coordonatele a două
colţuri diagonal opuse ale acestuia;
3) Construieşte un dreptunghi de arie minimă cu laturile paralele axelor de coordonate, cuprinzând
terenurile descrise în fişierul de intrare;
4) Găseşte aria totală acoperită de terenurile în studiu;
5) Determină planta (culoarea) care acoperă cea mai mare suprafaţă din toate terenurile;
6) Creează fişierul ColComun.txt prin transcrierea acelor linii ale fişierului de intrare Teren.in, care
corespund codului culorii (Cp), introdus de la tastatură;
7) Rearanjează liniile fişierului de intrare în ordinea descrescătoare a codurilor culorilor plantelor;
8) Rezolvă problema. Mariuca merge cu avionul pentru prima dată. Din avion, ea vede terenuri cultivate cu
plante de forma celor descrise anterior. Fiind o fire curioasă, fetiţa ar vrea să determine aria celui mai mare
dreptunghi acoperit de plante de aceeaşi culoare. Elaboraţi un subprogram, care o va ajuta pe Mariuca să-şi
realizeze această aspiraţie.
Date de intrare. Fişierul Teren.in, descris anterior.
Date de ieşire. Fişierul de ieşire Teren.out va conţine o singură linie pe care va fi scris un singur număr
natural, reprezentând aria celui mai mare dreptunghi cultivat cu plante de aceeaşi culoare.

Exemple (ilustrate prin figurile 1 şi 2)


Restricţii
1 2

1 <= n <= 2500 teren.in teren.out teren.in teren.out


1 <= Cp <= 100
5 8 7 27
0<=X1,Y1, X2,Y2<=1000000000
1 1 3 3 4 0 0 4 3 1
3 1 5 3 1 6 2 9 7 2
Timp maxim de execuţie/test: 1 4 3 6 1 6 7 10 9 3
1.5 secunde 3 4 5 6 1 4 0 6 3 5
0 3 6 4 2 0 6 6 9 3
0 3 6 6 2
7 0 8 2 2
Varianta 20
Se consideră un teren agricol (vezi figura 1) modelat printr–un
tablou bidimensional A[1..n, 1..m] cu valori numere naturale, care Lăcusta
reprezintă unităţile condiţionale de cereale, care pot fi recoltate din 1 2 3 … j …m
zonele reale respective. 1
Datele, referitoare la matricea A, sunt înregistrate în fişierul text 2
Lacusta.in, care conţine pe prima sa linie numerele naturale n şi …
m, separate printr–un spaţiu. Pe următoarele n linii ale acestui fişier i Zona [i, j]
este reprezentată matricea A –pe fiecare linie câte m numere naturale,
separate prin spaţii. …
n
Să se elaboreze un program care, folosind meniuri şi subprograme,
să realizeze, la solicitarea utilizatorului, următoarele prescripţii: Fig. 1. Planul terenului agricol

1) Extinde matricea A prin adăugarea unei linii marginale şi a unei coloane marginale; poziţia liniei
(nord/sud) şi coloanei (vest/est) se va preciza de la tastatură;

2) Exclude din matricea A linia şi coloana la intersecţia căror se află primul element maximal întâlnit la
parcurgere pe linii a elementelor acestei matrice;

3) Găseşte numărul care apare cel mai frecvent în matricea A;

4) Determină media aritmetică a elementelor matricei A, care aparţin intervalului [-10, 10];

5) Sortează crescător elementele fiecărei linii ale matricei A prin metoda numărării;

6) Creează fişierul Select.txt cu n linii prin copierea subşirurilor descrescătoare de lungime maximală
din liniile respective ale matricei A; dacă aşa subşiruri sunt mai multe, se va copia câte unul din ele;

7) Determină dacă în componenţa matricei A există un pătrat magic de dimensiune k≥2, adică sumele
elementelor de pe liniile, coloanele şi diagonale pătratului sunt egale; în caz afirmativ la ecran se vor afişa
mesajul DA, coordonatele colţului stânga –jos şi dimensiunea k a pătratului găsit, astfel se va afişa mesajul
NU;

8) Rezolvă problema. Se consideră terenul agricol, modelat prin matricea A, descrisă mai sus. În colţul
stânga –sus al acestui teren se află o lăcustă –insectă care dăunează foarte mult agriculturii, distrugând definitiv
cerealele din zonele atacate de ea.
Fie lăcusta are de traversat terenul în studiu pornind de la colţul stânga-sus la colţul dreapta-jos. O traversare
constă din mai multe deplasări. La fiecare deplasare lăcusta execută un salt pe orizontală şi un pas pe verticală.
Un salt înseamnă că lăcusta trece de la o celulă la oricare alta aflată pe aceeaşi linie, iar un pas înseamnă că
insecta trece de la o celulă la celula aflată imediat sub ea. Excepţie ar putea face ultima deplasare, care,
eventual, ar putea să se reducă doar la un salt de la o celulă a ultimii linii la celula finală, situată în colţul
dreapta-jos a terenului. Scrieţi un subprogram care, dintre toate traseile posibile ale lăcustei, va găsi unul pentru
care cantitatea sumară a cerealelor distruse va fi minimală.
Date de intrare. Fişierul textual Lacusta.in.
Date de ieşire. Fişierul de ieşire Lacusta.out va conţine o singură linie pe care va fi scrisă suma minimă
găsită.
Exemplu.
Lacusta.in Lacusta.out Explicaţie Restricţii
45 28 Drumul este: 1  m, n  100
34579 (1,1)->(1,3)->
66344 (2,3)->(2,2)-> 1 A[i, j] 255
63396 (3,2)->(3,3)-> Timp maxim de execuţie/test:
65382 (4,3)->(4,5) 1 secundă
Varianta 21
Într-un sistem rectangular de coordonate XOY este desenat un set de n dreptunghiuri cu laturile paralele
axelor de coordonate şi vârfurile în puncte cu coordonate numere naturale.
Informaţii mai concrete despre dreptunghiurile în studiu sunt înregistrate în fişierul text Drept.in, care
conţine pe prima linie naturalul n, reprezentând numărul de dreptunghiuri. Fiecare dintre următoarele n linii ale
acestui fişier conţine câte 4 numere întregi ai, bi, ci şi di, separate prin câte un spaţiu; (ai, bi) reprezentă
coordonatele vârfului stânga –jos, iar (ci, di) –coordonatele vârfului dreapta –sus ale dreptunghiului respectiv
(1≤ i ≤ n).

Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,


următoarele prescripţii:

1) Înregistrează în fişierul text Drept.in un nou dreptunghi, care se conformează caracteristicilor


descrise mai sus;

2) Exclude din fişierul text Drept.in linia, indicele cărei se va introduce de la tastatură;

3) Construieşte un dreptunghi de arie minimă cu laturile paralele axelor de coordonate, cuprinzând


dreptunghiurile descrise în fişierul de intrare; coordonatele a două vârfuri opuse ale dreptunghiului determinat
se vor afişa pe ecran;

4) Determină dreptunghiul cu aria maximală;

5) Determină numărul sumar de puncte laticeale (de coordonate întregi) ce se află în interiorul şi pe laturile
dreptunghiului, pentru care coordonatele a două vârfuri opuse se introduc de la tastatură;

6) Creează fişierul text SortLin.txt, în care se vor transcrie liniile fişierului de intrare Drept.in în ordinea
descrescătoare a ariilor dreptunghiurilor respective; datele se vor sorta prin metoda bulelor;

7) Determina valoarea Sr –aria acoperită de dreptunghiurile în studiu (reuniunea lor).

8) Determina valoarea Si –aria intersecţiei dreptunghiurilor în studiu;

Date de intrare. Fişierul Drept.in, descris


anterior;
Date de ieşire. Fişierul text Drept.out va
conţine pe o singură linie numerele naturale Si şi Sr,
separate prin spaţiu.

Exemplu, de realizare a subsarcinilor 7-8:


Drept.in Drept.out Restricţii
3 8 100 1 ≤ n ≤ 50
1 2 15 7 0 ≤ ai, bi, ci, di ≤ 100
5 1 13 9
9 4 18 6
Varianta 22
Harta unui continent poate fi văzută ca un dreptunghi având înălţimea de n unităţi, iar lăţimea de m unităţi.
Colţul din stânga –sus al hărţii are coordonatele [0, 0] , iar colţul din dreapta-jos are coordonatele [n, m].
Coordonatele oraşelor de pe hartă sunt întotdeauna numere întregi, adică sunt de forma [i, j] cu 0 ≤ i ≤ n,
reprezentând linia şi 0 ≤ j ≤ m, reprezentând coloana.
Informaţii despre harta considerată sunt înregistrate în fişierul text Harta.in, care conţine pe prima linie
numerele naturale n şi m, separate prin spaţiu, reprezentând dimensiunile hărţii. A doua linie a fişierului conţine
naturalul k –numărul de oraşele de pe hartă. Pe următoarele k linii se găsesc câte două numere naturale,
separate printr-un spaţiu, reprezentând coordonatele a câte unui oraş de pe hartă.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:

1) Înregistrează pe harta continentului un nou oraş; coordonatele oraşului de înregistrat se vor introduce de la
tastatură;

2) Exclude de pe harta continentului un oraş, coordonatele cărui se vor introduce de la tastatură;

3)Determină coordonatele oraşului, care este cel mai apropiat de la colţul dreapta –sus al hărţii;

4) Determină numărul de oraşe plasate pe linia rasterului cu indicele indicat de la tastatură;

5) Afişează pe ecran indicii coloanelor rasterului hărţii, care nu conţin nici un oraş;

6) Creează fişierul text SortDist.txt, în care se vor transcrie liniile fişierului de intrare Harta.in în
ordinea crescătoare a distanţelor Di ( 0 ≤ i ≤ n ) ale oraşelor respective de la colţul stânga –sus al hărţii; la
sfârşitul liniilor fişierului creat se vor ataşa valorile Di, precedate de câte un spaţiu; datele se vor sorta prin
metoda selecției;

7) Găseşte pe harta continentului o zonă pătratică de arie maximă ce nu conţine oraşe;

8) Rezolvă problema. În unul din oraşele de pe hartă în studiu se găseşte un turist. El doreşte să pornească
într-o expediţie deosebită. A decis să plece într-o anumită direcţie, şi să păstreze acea direcţie pănă ajunge la
marginea continentului (a hărţii) unde se încheie expediţia sa. Doreşte însă să aleagă acea direcţie care îl asigură
că pe drumul său va trece prin cât mai multe oraşe.
Fiind date dimensiunile hărţii, coordonatele L şi C ale oraşului în care se găseşte iniţial turistul şi
coordonatele tuturor celorlalte oraşe de pe hartă, elaboraţi un subprogram care determină numărul maxim de
oraşe pe care le va vizita turistul.
Date de intrare. Fişierul de intrare Harta.in, descris anterior, şi numere naturale L, C care se introduc
de la tastatură.
Date de ieşire. Fişierul de ieşire Harta.out va avea pe prima sa linie, un număr natural reprezentând
numărul maxim de oraşe pe care le vizitează turistul.
Exemplu : L=3 C=2
Harta.in Harta.out Explicaţii
5 10 3 Datele de intrare corespund hărţii din figura următoare, în care
7 am marcat cu  poziţia iniţială a turistului, iar cu  oraşele de
0 0 pe hartă. Traseul ales este cel indicat de linia trasată.
0 8
1 6
2 2
2 4
3 7
4 5
.
Restricţii 1 ≤ n ≤ 1000 1 ≤ m ≤ 1000 1 ≤ k ≤ 2000
Varianta 23
Informaţiile despre un set de n paralelipipede dreptunghiulare sunt înregistrate în fişierul textual
Comori.in.
Pe prima linie a fişierului de intrare se află naturalul n, iar pe următoarele n linii ale lui se conţin
atributele dreptunghiurilor respective, fiecare linie i +1 ( 1≤ i ≤ n) conţinând următoarele date, separate prin
câte un spaţiu: CPi (Codul paralelipipedului i); cele 3 dimensiuni: a, b şi c; Culoare (roşie, galbenă, verde,
albastră), Material ( Materialul din care e confecţionat: lemn, metal, carton, plastic).
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:

1) Înregistrează un nou paralelipiped;

2) Exclude din fişierul Comoara.in linia ce corespunde codului figurii, introdus de la tastatură;

3 ) Determină numărul de paralelipipede cu volumul mai mare decât volumul mediu al paralelipipedelor în
studiu;

4) Afişează pe ecran atributele figurilor, de culoarea indicată de la tastatură, în ordinea descrescătoare a


volumelor acestora; sortarea datelor se va realiza prin metoda interclasării;

5) Determină figura de volum minim şi, respectiv, cea de volum maxim, confecţionate din materialul cu
denumirea introdusă de la tastatură;

6) Enumeră figurile confecţionate din lemn, volumul căror depăşeşte valoarea introdusă de la tastatură;

7) Creează fişierul textual Culoare.txt în care se vor copia acele linii ale fişierului de intrare, care
corespund figurilor de culoare introdusă de la tastatură;

8) Rezolvă problema. Vânătorii de comori au descoperit în una din încăperile închise ale unui castel
medieval n lingouri de aur de dimensiuni distincte. Fiecare lingou i ( 1 ≤ i ≤ n ) reprezintă un paralelipiped
dreptunghiular cu dimensiunile xi , yi , zi. Pentru a scoate lingourile la lumina zilei, vânătorii de comori trebuie
să perforeze într-un zid de piatră unul sau mai multe orificii dreptunghiulare, care nu au puncte de tangenţă. Un
lingou poate fi scos printr-un orificiu dreptunghiular doar atunci când lăţimea şi înălţimea orificiului sunt egale
sau mai mari ca lăţimea şi înălţimea uneia din feţele dreptunghiulare ale paralelipipedului. Evident, lingoul
poate fi rotit in orice fel.
Pentru a-şi uşura munca, vânătorii de comori doresc ca suma ariilor orificiilor ce trebuie perforate să fie cât mai
mică.

Sarcină. Elaboraţi un subprogram care, cunoscând dimensiunile lingourilor de aur, calculează valoarea minimă
S a sumei ariilor orificiilor de perforat, ce vor fi suficiente pentru a scoate toate lingourile.

Date de intrare. Fişierul text Comoari.in.

Date de ieşire. Fişierul text Comoari.out va conţine pe o singură linie numărul întreg S − valoarea minimă
a sumei ariilor orificiilor de perforat.

Exemplu.
Comoara.in Comoara.out
3 8
Cp1 1 4 4 g m
Cp2 5 3 2 g m
Cp3 1 2 2 g m
Varianta 24
Fie n plăci dreptunghiulare numerotate de la 1 la n. Despre placa i se ştie că are grosimea hi şi lungimile
laturilor xi, yi ( 1≤ i ≤ n).
Informaţiile despre plăcile considerate sunt înregistrate în fişierul text Turnuri.in, care conţine pe
prima linie numărul n, reprezentând numărul de plăci. Pe fiecare din următoarele n linii ale acestui fişier se
conţin câte trei numere întregi pozitive xi, yi, hi, separate prin spaţiu.

Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,


următoarele prescripţii:

1) Înregistrează în fişierul Turnuri.in o nouă placă;

2) Exclude din fişierul Turnuri.in linia ce corespunde indicelui liniei, introdus de la tastatură;

3) Determină grosimea maximă a plăcilor înregistrate în fişierul de intrare;

4) Determină minimul volumelor paralelipipedelor cu dimensiunile descrise în fişierul de intrare;

5) Afişează pe ecran caracteristicile (xi, yi şi h i) plăcilor de grosime mai mici ca valoarea h, introdusă de la
tastatură, în ordinea crescătoare a ariilor plăcilor respective; sortarea datelor se va realiza prin metoda bulelor;

6) Creează fişierul textual Patrat.txt în care se vor copia acele linii ale fişierului de intrare, care
corespund pătratelor;

7) Interschimbă valorile xi cu yi din liniile fişierului Turnuri.in, pentru care xi < yi ;

8) Rezolvă problema. Elaboraţi un subprogram care determină înălţimea maximală a unui turn ce poate fi
construit din plăcile în studiu. Pentru a asigura stabilitatea turnului se vor respecta următoarele reguli (figura 1):
 plăcile sunt puse una peste alta orizontal, nu pe muchii sau în alt mod;
 muchiile omoloage ale plăcilor suprapuse sunt paralele;
 orice placă din componenţa turnului se va sprijini în
întregime pe placa de mai jos (evident, placa de la
baza turnului se va sprijini pe sol);
 nu se cere să folosim toate plăcile.

Date de intrare. Fişierul text Turnuri.in, descris


anterior.

Date de ieşire. Fişierul text Turnuri.out va


conţine pe o singură linie un număr întreg –
înălţimea maximă a turnului.

Fig. 1. Turn construit din plăci dreptunghiulare


Exemplu:
Turnuri.in Turnuri.out Restricţii.
5 8 n ≤ 1000; xi, yi, hi ≤ 1000.
3 4 2
3 4 3
4 3 2
1 5 4
2 2 1
Varianta 25
Planul unui lac de formă pătratică cu latura de lungime n (3<=n<=1000 ) este divizat în zone pătrate cu
latura 1 (vezi fig.1). În fiecare zonă a lacului creşte câte un nufăr, ocupând complet zona respectivă. Pe unii
dintre aceşti nuferi stau la soare k (2<=k<=2000000 ) broscuţe, neexistând două broscuţe pe acelaşi nufăr.
Informaţiile despre dimensiunile lacului şi poziţionarea broscuţelor sunt înregistrate în fişierul text
Broscute.in, care conţine pe prima linie numerele naturale n şi k separate printr-un spaţiu, iar pe următoarele k
linii conţine câte două numere naturale x şi y reprezentând coordonatele unui nufăr pe care se află o broscuţă.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:

1) Înregistrează în fişierul Broscute.in o nouă broscuţă;

2) Exclude din fişierul Broscute.in broscuţa cu coordonatele introduse de la tastatură;

3) Enumără locurile posibile de salt pe diagonale ale broscuţei, poziţia cărei se indică de la tastatură;

4) Determină indicele liniei planului lacului, care conţine un număr maximal de broscuţe;

5) Rearanjează liniile cu indicii de la 2 la k+1 din fişierul Broscute.in în ordinea descrescătoare a


coordonatelor x prin metoda selecției;

6) Creează fişierul textual Plan.txt, fiecare din cele n linii ale cărui va conţine câte n cifre binare, separate
prin spaţiu –elementele matricei A de dimensiune nn, în care A[i, j] =1 dacă zona [i, j] este ocupată de o
broscuţă, şi A[i, j] = 0 în caz contrar (1< =i, j <=n);

7) Găseşte pe planul lacului o zonă dreptunghiulară de arie minimală, care conţine toţi nuferii ocupaţi de
broscuţe; la ecran se vor afişa coordonatele a două vârfuri opuse ale dreptunghiului găsit;

8) Rezolvă problema. Atunci când două broscuţe doresc să comunice, se vor întâlni pe acelaşi nufăr. Dar
orice broscuţă nu este dispusă să facă decât cel mult un salt pentru a ajunge pe un alt nufăr, iar saltul se face de
pe nufărul unde se găseşte broscuţa pe un alt nufăr aflat pe aceeaşi diagonală. În imaginea din figura 1 este
colorat în negru nufărul pe care se află o broscuţă, iar cu gri locurile posibile de salt ale ei.
1 2 3 4 5 6 7 8 Dacă două broscuţe, care doresc să comunice, se află deja pe aceeaşi
1 diagonală, atunci una din ele va sări direct pe nufărul celeilalte şi în acest caz
2 există două locuri posibile de întâlnire.
3 Dacă cele două broscuţe nu sunt pe aceeaşi diagonală, atunci, doar dacă este
4
posibil, ambele vor face câte un salt pe un nufăr aflat la intersecţia a două
diagonale şi în acest caz pot fi zero, unul sau două locuri de întâlnire posibile.
5
De exemplu, dacă prima broscuţă se găseşte pe nufărul de la poziţia (5, 3) şi
6
cealaltă la (6, 8), atunci fiecare va face un salt ca să ajungă fie la nufărul de la
7
coordonatele (3, 5), fie la nufărul de la coordonatele (8, 6). În schimb, pentru
8 două broscuţe aflate la coordonatele (2, 2) respectiv
Fig.1. Planul lacului. (1, 5) există un singur loc posibil de întâlnire, anume la poziţia (3, 3), iar
pentru două broscuţe aflate la coordonatele (2, 2) respectiv (2, 5) nu există niciun loc de întâlnire.
Cerinţă. Scrieţi un subprogram care să determine numărul locurilor posibile de întâlnire a broscuţelor.
Date de intrare. Fişierul de intrare Broscute.in, descris anterior.
Date de ieşire. Fişierul de ieşire Broscute.out va conţine o singură linie pe care va fi scris un număr
natural reprezentând numărul locurilor posibile de întâlnire ale broscuţelor. Exemplu:
Broscute.in Broscute.out Explicaţii
12 4 4 Pe lac se află 4 broscuţe. Există 4 posibile locuri de întâlnire:
- Nuferii de la poziţiile (6, 3) şi (11, 8), unde se pot întâlni broscuţele de la (6, 3) şi (11, 8),
6 3 pentru că se află pe aceeaşi diagonală;
3 10 - Nufărul de la poziţia (8, 5); acolo se pot întâlni broscuţele de la poziţiile (6, 3) şi (3,10) sau
11 8 se pot întâlni broscuţele de la poziţiile (3, 10) şi (11, 8);
- Nufărul de la poziţia (1, 8); acolo se pot întâlni broscuţele de la poziţiile (6, 3) şi (3, 10).
12 10 De remarcat că broscuţa de la (12, 10) nu se poate întâlni cu nici o altă broscuţă.
Varianta 26
Pe o tablă, de tipul celei de şah, cu dimensiunea n, se află firimituri de pâine şi o furnică. Pentru fiecare
pătrăţel [i, j], inclusiv cel în care se găseşte furnica, cantitatea de firimituri de pâine este egală cu restul
împărţirii lui i+j la 6. Astfel pentru n = 4 tabla se completează conform figurii 1.
Furnica ( notată cu F ) se poate deplasa din pătrăţelul unde se găseşte în toate cele
2 3 4 5 opt pătrăţele vecine, adică în direcţiile numerotate conform figurii 2: 1–nord , 2–nord-
3 4 5 0 est, 3–est, 4 –sud-est, 5–sud, 6–sud-vest, 7–vest, 8 –nord-vest). Pornind din pătrăţica
aflată în colţul din stânga– sus, furnica se deplasează în una dintre pătrăţelele vecine, şi
4 5 0 1 aşa mai departe. Pe drumul său ea se hrăneşte cu toată cantitatea de firimituri din
pătrăţelele prin care a trecut (după ce iese din pătrăţică cantitatea de firimituri devine 0).
5 0 1 2
Drumul furnicii este dat printr-un şir de k numere naturale (cuprinse între 1 şi 8) care
Fig.1. Tabla. precizează, la fiecare pas, următorul pătrăţel din drum.
Informaţiile despre dimensiunea tablei şi drumul furnicii sunt înregistrate în
fişierul de intrare Furnica.in, care conţine pe prima linie numerele n şi k,
F
separate între ele printr-un spaţiu, iar pe linia următoare k numere naturale din
mulţimea {1, 2, 3, 4, 5, 6, 7,8}, separate prin câte un spaţiu,
reprezentând următorul pătrăţel din drum pentru un pătrăţel curent.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, Fig.2. Codurile direcţiilor
la solicitarea utilizatorului, următoarele prescripţii:

1) Extinde drumul furnicii, descris în fişierul Furnica.in, cu un nou pătrăţel;

2) Exclude din drumul furnicii, descris în fişierul Furnica.in, ultimul pătrăţel;

3) Iniţializează matricea pătratică A, aplicând formula A[i, j] = ( i + j ) mod 6 (1 ≤ i, j ≤ n);

4) Determină frecvenţa fiecărei cifre ale mulţimii { 0, 1, 2, 3, 4, 5} în cadrul matricei A;

5) Afişează pe ecran elementele coloanei cu indicele C (introdus de la tastatură) a matricei A, ordonate


descrescător, prin metoda inserției;

6) Creează fişierul text Tabla.txt care conţine matricea pătratică A inițializată în p 3 ;

7) Găseşte în matricea A o submatrice pătratică de dimensiune maximală ce nu conţine cifra 0.


Dimensiunea Nm a submatricei găsite şi coordonatele colţului stânga-jos ale lui se vor afişa la ecran;

8) Rezolvă problema. Scrieţi un subprogram care pentru un drum dat, determină cantitatea totală de
firimituri mâncată de furnică, precum şi numărul pătrăţelelor prin care aceasta a trecut de cele mai multe ori.
Date de intrare. Fişierul de intrare Furnica. in, descris anterior.
Date de ieşire. Fişierul Furnica.out va conţine, pe prima linie, cantitatea totală de firimituri mâncată
de furnică, precum şi numărul pătrăţelelor prin care aceasta a trecut de cele mai multe ori.
Restricţii:
1 < n < 101;
0 < k < 201;
Timp maxim de execuţie/test: 1 secundă.
Exemplu.
Furnica.in Furnica.out Explicaţii
4 10 23 2 Drumul furnicii trece prin pătrăţelele (linie, coloană) următoare:
3653263623 (1,1)->(1,2)->(2,1)->(3,1)->(3,2)->(2,3)->(3,2)->
(3,3)->(4,2)->(3,3)->(3,4).
Pe drum se mănâncă următoarea cantitate de firimituri:
2+3+3+4+5+5+0+0+0+0+1=23
Prin pătrăţelele de coordonate (3,2) şi (3,3) se trece de cele mai
multe ori (de două ori).
Varianta 27
Să găseşti o comoară ascunsă de către piraţi este simplu dacă ai o hartă, care este însoţită de un algoritm ce
descrie deplasarea spre comoară. De obicei, indicaţiile presupun deplasări cu un anumit număr de paşi în una
dintre direcţiile numerotate conform figurii 1: 1–nord , 2–nord-est, 3–est, 4–sud-est, 5–sud, 6–sud-vest, 7–vest,
8 –nord-vest. Un pas ne duce întotdeauna dintr-un punct de coordonate întregi în alt punct de coordonate
întregi. Deci, dacă la un moment dat suntem în punctul de coordonate întregi (X, Y), deplasarea cu 1 pas în una
dintre cele 8 direcţii ne duce in unul dintre punctele de coordonate întregi conform figurii 2.
Direcţia Unde se ajunge
1 (X, Y+1)
2 (X+1, Y+1)
3 (X+1, Y)
4 (X+1, Y-1)
5 (X, Y-1)
6 (X-1, Y-1)
7 (X-1, Y)
Fig.1. Codurile
direcţiilor 8 (X-1, Y+1) Start 
Fig.2. Deplasarea cu un pas. Fig.3. Exemplu de traseu.

Călătoria după un traseul descris devine astfel simplă. Pentru exemplu din figura 3, se merge 3 paşi la nord, 1
la est, 1 la nord, 3 la est, 2 la sud şi 1 pas la vest.
Informaţiile despre traseul spre comoară sunt înregistrate în fişierul de intrare Comori.in, care conţine pe
prima linie naturalul n, reprezentând numărul de indicaţii. Următoarele n linii conţin câte o indicaţie pe o linie,
sub forma a două numere naturale d şi p, separate printr-un spaţiu, unde d este codul direcţiei, iar p numărul de
paşi.
Să se elaboreze un program care, folosind meniuri şi subprograme, să realizeze, la solicitarea utilizatorului,
următoarele prescripţii:
1) Extinde traseul spre comoară, descris în fişierul Comori.in, cu o nouă indicaţie;
2) Exclude ultima indicaţie din traseul spre comoară, descris în fişierul Comori.in;
3) Determină numărul total de paşi, necesar de efectuat conform traseului descris în fişierul de intrare;
4) Determină numărul schimbărilor de direcţii din traseul descris de piraţi;
5) Creează fişierul text UnPas.txt prin copiere din fişierul Comori.in a liniilor pentru care p =1;
6) Afişează pe ecran lista codurilor direcţiilor deplasărilor în ordinea ascendentă a numărului lor de apariţie în
traseul spre comoară; datele se vor sorta prin metoda bulelor;
7) Găseşte în planul cartezian un dreptunghi de arie minimală ce conţine în întregime traseul spre comoară;
laturile dreptunghiului vor fi paralele cu axele de coordonate respective. La ecran se va afişa aria S şi
coordonatele colţurilor stânga-jos şi dreapta-sus ale dreptunghiului găsit;
8) Rezolvă problema. Scrieţi un subprogram, care, după indicaţiile piraţilor determină punctul în care este
ascunsă comoara. Se consideră că axa Ox e îndreptată spre est, iar Oy spre nord. Iniţial căutătorul de comori se
afla în originea sistemului de coordonate (punctul cu coordonatele (0, 0)).
Date de intrare. Fişierul de intrare Comori.in, descris anterior.
Date de ieşire. Fişierul de ieşire Comori.out va conţine o singura linie pe care vor fi scrise două numere
întregi separate prin spaţiu x y, reprezentând coordonatele punctului în care este ascunsă comoara (x este
abscisa, iar y este ordonata).
Exemple:
Comori.in Comori.out Comori.in Comori.out Restricţii:
6 3 2 1 -10 10 1 <= n <= 40
1 3 8 10
1 <= d <= 8
3 1
1 1 1 <= p <= 1000
3 3
5 2
7 1
Varianta 28
Se consideră poligonul P1P2 ... Pn cu vârfurile enumerate în ordinea
mişcării acelor ceasornicului. Sunt cunoscute coordonatele carteziene xi,
8 3 3 3 3 3 3 3 3 3 3
yi ale fiecărui vârf Pi.
7 3 3 3 3 3 3 3 3 3 3
Fişierul de intrare CRUSOE.IN conţine pe prima linie numărul natural
n. Pe următoarele n linii ale lui sunt scrise câte două numere reale xi, yi, 6

separate prin spaţiu, reprezentând coordonatele punctelor Pi (1<=i <= n ). 5

Să se elaboreze un program care, folosind meniuri şi subprograme, să 4

realizeze, la solicitarea utilizatorului, următoarele prescripţii: 3

2
1) Înregistrează în fişierul CRUSOE.IN un nou vârf al poligonului;
1
indicele vârfului de adăugat se va preciza de la tastatură;

2) Exclude din fişierul de intrare un vârf al poligonului; indicele O 1 2 3 4 5 6 7 8 9 10

vârfului de exclus se va preciza de la tastatură; Fig. 1. Exemplu de poligon.

3) Găseşte cel mai apropiat punct Pi (1<=i <= n ) de la originea de coordonate;

4) Determină perimetrul poligonului P1P2 ... Pn;

5) Creează fişierul text OrdNeg.txt prin copiere din fişierul CRUSOE.IN a liniilor ce corespund
ordonatelor negative ale vârfurilor poligonului în studiu;

6) Afişează pe ecran lista vârfurilor poligonului P1P2 ... Pn în ordinea descendentă a ordonatelor acestora;
datele se vor sorta prin metoda interclasării;

7) Găseşte în planul cartezian un dreptunghi de arie minimală ce conţine în întregime poligonul în studiu;
laturile dreptunghiului vor fi paralele cu axele de coordonate respective. La ecran se va afişa aria S şi
coordonatele colţurilor stânga-jos şi dreapta-sus ale dreptunghiului găsit;

8) Rezolvă problema. După ultima invazie a erbivorelor pe terenurile cultivate, Crusoe a hotărât să
îngrădească o parte a insulei, pentru a proteja plantele de animale şi eventuali intruşi. Astfel el construieşte un
gard format din n pari îngropaţi vertical în pământ, uniţi cu nuiele. Terenul are forma unui poligon P1P2 ... Pn,
parii verticali fiind vârfuri, iar nuielele muchii.
Elaboraţi un subprogram care calculează aria S a sectorului îngrădit.
Date de intrare. Fişierul CRUSOE.IN descris anterior.
Date de ieşire. Fişierul CRUSOE.OUT va conţine pe o singură linie aria S scrisă cu cel puţin 3 cifre după
punctul zecimal.
Exemplu:

CRUSOE.IN CRUSOE.Out Restricţii:


6 4.500 Restricţii:
-1 –1 1 <= n <= 1000
0.5 –1 -1000 <= xi, yi <= 1000
1 1 xi , yi  R .
0.5 2
-1 2
-0.5 1
Varianta 29
Harta unui parc are forma unei matrice pătrate cu valori 0 şi 1, cifrele 0
1 2 3 ... j ... n
reprezentând zone accesibile ale terenul, iar cifrele de 1 modelează o groapă,
1 Ş
formată din zone întregi învecinate (Vezi figura 1).
Informaţii mai concrete despre modelul parcului sunt înregistrate în fişierul 2

Groapa
text Parc.in, pe prima linie a cărui se găseşte dimensiunea n (3<=n <= 3
250 ) a matricei. Pe următoarele n linii ale fişierului de intrare e descrisă ...
matricea binară A, ca şiruri de 0 şi 1 cu câte un spaţiu între numerele de pe

Zona [i,j]
i
aceeaşi linie. ...
Să se elaboreze un program care, folosind meniuri şi subprograme, să n C
realizeze, la solicitarea utilizatorului, următoarele prescripţii:
1) Inserează în matricea A o nouă linie/coloană; alternativa aleasă şi Fig.1. Harta parcului
numărul liniei/coloanei de inserat se va indica de la tastatură;

2) Transformă pe harta parcului o zona a gropii în zonă accesibilă; poziţia (indicele liniei şi cel al coloanei)
zonei de transformat se va preciza de la tastatură;

3) Determină poziţia unei unităţi din matricea A, care are cel mai mic indice al coloanei;

4) Determină aria gropii (numărul total de unităţi al acestui obiect);

5) Afişează pe ecran indicii liniilor ce intersectează groapa, în ordinea descendentă a numărului de unităţi din
liniile respective;

6) Creează fişierul text Groapa.txt prin copiere din fişierul Parc.in a tuturor liniilor ce conţin zone din
cadrul gropii;

7) Găseşte în matricea A o submatrice cu un număr minimal de elemente, ce conţine în întregime groapa din
parcul în studiu; numărul de elemente din submatricea găsită se va afişa la ecran;

8) Rezolvă problema. În fiecare zi Ionuţ vine de la şcoală trecând prin parc. Parcul are un obstacol (o groapă)
pe care elevul trebuie să o ocolească. După multe drumuri Ionuţ nu a reuşit să-şi dea seama care e cel mai scurt
drum spre casă; trebuie să ocolească groapa prin stânga sau prin dreapta?
Pentru a-l ajuta să afle răspunsul la întrebare, Ionuţ vă pune la dispoziţie harta
parcului sub forma reprezentată în figura 1. Şcoala (Ş) este în colţul stânga-sus al
parcului iar casa (C) în colţul din dreapta-jos. Cele 4 margini ale terenului sunt
accesibile. Pentru a trece dintr-o zonă a parcului într-o zonă învecinată pe
orizontală, verticală sau diagonală Ionuţ face un pas. El nu face salturi, deci poate
trece din zona curentă doar într-una din cele 8 zone învecinate (figura 2).
Fig.2. Direcţiile de Date de intrare. Fişierul Parc.in, descris anterior.
deplasare Date de ieşire. Prima linie a fişierului Parc.out va conţine două numere
naturale separate de un spaţiu. Primul dintre acestea reprezintă numărul minim de
paşi necesari prin care se poate ajunge de la şcoală acasă mergând prin stânga obstacolului, al doilea –numărul
minim de paşi necesari mergând prin dreapta obstacolului. Stânga şi dreapta se consideră în raport cu direcţia
de mişcare.
Exemplu Explicaţie
Parc.in Parc. out Deplasare prin stânga Deplasare prin dreapta

5 57 [1,1]-[2,2]-[2,3]-[3,4]-[4,5]-[5,5] [1,1]-[2,1]-[3,1]-[4,1]-[5,2]-[5,3]-[5,4]-[5,5]
00000
00000
01100
01100
00000
Varianta 30
Strănepotul unui fost pirat –căpitan Corsarul Negru Junior a găsit o
hartă a unui teritoriu maritim ce include renumitul Triunghi al
8 3 3 3 3 3 3 3 3 3 3
Bermudelor (TB), situat în marea Caraibilor, precum şi zone din preajma
3 3 3 3 3 3 3 3 3 3
acestuia. Structura hărţii este exemplificată în figura 1. Vârfurile TB sunt 7

determinate de trei insule punctiforme. Pe hartă sunt, de asemenea, 6

marcate (prin ovale), n corabii scufundate care conţin tezaure valoroase. 5


Informaţiile concretizate în urma studierii acestei hărţi şi a altor 4
surse vizavi de problema în studiu, au fost înregistrate de programatorul 3
corabiei corsarului în fişierul de intrare TB.in, care conţine pe prima
2
linie naturalul n–numărul de corabii scufundate. Următoarele n linii
1
conţin câte două numere întregi separate prin spaţiu–coordonatele
corabiilor. Urmează trei linii care conţin câte două numere întregi
separate prin spaţiu –coordonatele insulelor care reprezintă terenul O 1 2 3 4 5 6 7 8 9 10

maritim în studiu. Fig. 1. Hartă maritimă.

Să se elaboreze un program care, folosind meniuri şi subprograme, să


realizeze, la solicitarea utilizatorului, următoarele prescripţii:

1) Înregistrează o nouă corabie, care conform datelor oficiale s-a scufundat recent în interiorul TB;
coordonatele corabiei scufundate se vor preciza de la tastatură;

2) Scoate de pe cont corabiile care se află la distanţe mai mari de D mile maritime (0 milă maritimă este
egală cu 1852 m) de la vârfurile triunghiului; numărul D se va introduce de la tastatură;

3) Determină aria triunghiului, care are vârfurile în trei puncte din cele marcate în planul hărţii;

4) Găseşte cea mai apropiată de originea de coordonate corabie scufundată; coordonatele corabiei găsite
se vor afişa la ecran;

5) Calculează razele R şi r, respectiv a circumferinţei circumscrise şi a celei înscrise, relative la TB;

6) Creează fişierul text OrdPoz.txt prin copiere din fişierul TB.in, a liniilor ce corespund ordonatelor
pozitive ale corăbiilor în studiu;

7) Afişează pe ecran coordonatele corăbiilor scufundate în ordinea ascendentă a absciselor acestora;


datele se vor sorta prin metoda inserției;

8) Rezolvă problema. După o pregătire minuţioasă, Corsarul Negru Junior s-a pornit în expediţie cu
echipa sa spre TB. Este evident, că el nu se va aventura să exploreze corăbiile din TB, dar cu
siguranţă va colecta tezaurule din afara triunghiului.

Cerinţă. Scrieţi un subprogram care îl va ajuta pe corsar să TB.in TB.out Restricţii


determine numărul de corăbii scufundate ce se află în afara
4 2 2 ≤ N ≤ 99;
TB.
26 1 ≤ x[i],
Date de intrare. TB.in, descris anterior.
y[i] ≤ 200.
Date de ieşire. Fişierul de ieşire TB.out va conţine pe unica
sa linie un număr–numărul de corăbii scufundate în afara 44
TB. 74
Exemplu (asociat figurii 1): 95
13
66
10 3