Sunteți pe pagina 1din 9

Tematica şedinţei de laborator nr.

13
PROGRAME TURBO PASCAL

1. Calculul suprafeţelor reale, al suprafeţelor reduse şi al consistenţelor medii pe clasă


de vârstă
Programul pentru calculul suprafeţelor reale, al suprafeţelor reduse şi al consistentelor medii
pe clase de vârstă are ca date de intrare suprafaţa, vârsta şi consistenta pentru arboretele ce au
fost constituite într-o unitate de gospodărire. Programul prezintă o variantă simplificată a
problemei caracterizării fondului forestier, plecând de la ipoteza existenţei în fondul considerat a
numai cinci clase de vârstă. Evident, programul poate fi extins pentru un număr dorit de clase de
vârstă.
Numărul de arborete din cuprinsul fondului forestier se precizează prin variabila n. Întrucât
tipurile de date tip1 şi tip2, care reţin valoarea suprafeţei şi consistenţei şi respectiv a volumului
pentru fiecare arboret, s-au declarat ca tablouri cu o dimensiune şi cu indici de tip byte, numărul
maxim de arborete admis la execuţia programului de faţă este de 256 (valoarea maximă a
indicelui). După iniţializarea cu 0 a variabilelor care reprezintă suprafaţa reală şi redusă a fiecărei
clase de vârstă, acestea se calculează prin cumularea la valoarea precedentă a suprafeţei reale sau
reduse pentru fiecare arboret, în funcţie de îndeplinirea unei condiţii logice care stabileşte
apartenenţa arboretului, în raport cu vârsta sa, la o anumită clasă de vârstă precizată printr-un
interval de ani (de exemplu, clasa I de vârstă cuprinde arborete cu vârsta între 1...20 de ani, clasa
a-II-a între 21...40, etc.). Încadrarea arboretului într-o clasă de vârstă şi cumularea suprafeţei sale
la suprafaţa respectivei clase de vârstă se face prin instrucţiunea condiţională case, care
prefixează instrucţiunile de executat prin intervalele de ani specifice primelor patru clase de
vârstă, a cincea clasă fiind tratată ca alternativă la neîncadrarea în primele patru intervale.
Algoritmul pe care se bazează redactarea programului poate fi exprimat prin următorul
pseudocod:
început
 citeşte n; {n = numărul de arborete care compun fondul forestier analizat}
 pentru i = 1..n citeşte s[i], vr[i] si c[i]; {suprafaţa, vârsta şi consistenţa fiecărui arboret};
 pentru i = 1..5 iniţializează cu 0 variabilele sc[i] si sr[i]; {suprafaţa reală şi redusă};
 pentru i = 1..n analizează apartenenţa arboretului la o clasă de vârstă şi efectuează
calculele de tip cumulativ astfel:
 1..20 : atunci cumulează suprafaţa reală şi redusă a arboretului la clasa I;
 21..40: atunci cumulează suprafaţa reală şi redusă a arboretului la clasa II;
 41..60: atunci cumulează suprafaţa reală şi redusă a arboretului la clasa III;
 61..80: atunci cumulează suprafaţa reală şi redusă a arboretului la clasa IV;
 altfel cumulează suprafaţa reală şi redusă a arboretului la clasa V;
 pentru i = 1..5 dacă suprafaţa clasei i este egală cu 0, scrie ‘nu sunt arborete’
 altfel, calculează consistenţa medie şi afişeaza suprafaţa reală, redusă şi consistenţa
medie;
sfârşit.
Programul în limbajul Turbo Pascal este:

Program structura_fondului_forestier_pe_clase_de_varsta;
type tip1=array[byte] of real;
tip2=array[byte] of integer;
tip3=array[1..5] of real;
var n,i :byte;
s,c :tip1;
vr :tip2;
sc,sr,cm :tip3;
begin
write('Numar de arborete=');readln(n);
for i:=1 to 5 do
begin
sc[i]:=0;
sr[i]:=0;
end;
writeln('Precizati caracteristicile fiecarui arboret');
for i:=1 to n do
begin
writeln('Arboretul ',i);
write('Suprafata=');read(s[i]);
write('Virsta=');read(vr[i]);
write('Consistenta=');read(c[i]);
case vr[i] of
1..20:begin
sc[1]:=sc[1]+s[i];
sr[1]:=sr[1]+s[i]*c[i];
end;
21..40:begin
sc[2]:=sc[2]+s[i];
sr[2]:=sr[2]+s[i]*c[i];
end;
41..60:begin
sc[3]:=sc[3]+s[i];
sr[3]:=sr[3]+s[i]*c[i];
end;
61..80:begin
sc[4]:=sc[4]+s[i];
sr[4]:=sr[4]+s[i]*c[i];
end;
else begin
sc[5]:=sc[5]+s[i];
sr[5]:=sr[5]+s[i]*c[i];
end;
end;
end;
for i:=1 to 5 do
begin
write('Clasa ',i,' de virsta:');
if sc[i]=0 then writeln(' nu sint arborete')
else begin
cm[i]:=sr[i]/sc[i];
writeln(' Suprafata=',sc[i]:10:1,' ha Supr.redusa=',
sr[i]:10:1,' ha Consist.medie=',cm[i]:3:1);
end;
end;
end.
Numar de arborete=14
Precizati caracteristicile fiecarui arboret
Arboretul 1
Suprafata=5.9
Virsta=25
Consistenta=0.9
Arboretul 2
Suprafata=9.2
Virsta=45
Consistenta=0.8
Arboretul 3
Suprafata=10.4
Virsta=100
Consistenta=0.9
Arboretul 4
Suprafata=0.8
Virsta=75
Consistenta=0.6
Arboretul 5
Suprafata=11.2
Virsta=80
Consistenta=0.4
Arboretul 6
Suprafata=6.9
Virsta=55
Consistenta=0.9
Arboretul 7
Suprafata=14.5
Virsta=5
Consistenta=0.6
Arboretul 8
Suprafata=21.4
Virsta=15
Consistenta=0.6
Arboretul 9
Suprafata=9.1
Virsta=65
Consistenta=1.0
Arboretul 10
Suprafata=3.8
Virsta=10
Consistenta=0.5
Arboretul 11
Suprafata=12.0
Virsta=10
Consistenta=0.3
Arboretul 12
Suprafata=14.5
Virsta=90
Consistenta=0.9
Arboretul 13
Suprafata=5.5
Virsta=65
Consistenta=0.5
Arboretul 14
Suprafata=3.7
Virsta=95
Consistenta=1.0
Clasa 1 de virsta: Suprafata= 51.7 ha Supr.redusa= 27.0 ha Consist.medie=0.5
Clasa 2 de virsta: Suprafata= 5.9 ha Supr.redusa= 5.3 ha Consist.medie=0.9
Clasa 3 de virsta: Suprafata= 16.1 ha Supr.redusa= 13.6 ha Consist.medie=0.8
Clasa 4 de virsta: Suprafata= 26.6 ha Supr.redusa= 16.8 ha Consist.medie=0.6
Clasa 5 de virsta: Suprafata= 28.6 ha Supr.redusa= 26.1 ha Consist.medie=0.9

Pentru executia programului s-au folosit datele din tabelul 3.7.


Datele referitoare la arborete
Tabelul 3.7
Numărul Suprafaţa Vârsta Volumul Consistenţa
arboretului i=1… (ha) vr[i] v[i] c[i]
n s[i]
1 5.9 25 451 0.9
2 9.2 45 1626 0.8
3 10.4 100 3392 0.7
4 0.8 75 182 0.6
5 11.2 80 1792 0.4
6 6.9 55 1757 0.9
7 14.5 5 70 0.6
8 21.4 15 411 0.6
9 9.1 65 3049 1.0
10 3.8 10 27 0.5
11 12.0 10 50 0.3
12 14.5 90 5690 0.9
13 5.5 65 921 0.5
14 3.7 95 1672 1.0

2. Calculul volumelor la hectar şi al volumelor totale pe clase de vârstă


În privinţa algoritmului, acest program se aseamănă cu precedentul, dar apartenenţa
arboretului la o clasă de vârstă se stabileşte prin intermediul expresiei trunc((vr[i]-1)/20+1), unde
vr[i] este vârsta arboretului i. Pseudocodul algoritmului este următorul:
început
 citeşte n {n= număr de arborete};
 pentru i=1..n
 citeşte s[i], vr[i] si v[i] {în ordine, suprafaţa, vârsta şi volumul arboretului i};
 stabileşte max {max reprezintă clasa de vârstă maximă};
 pentru i=1..max iniţializează cu 0 supr[i] şi vol[i] {suprafaţa şi volumul clasei de vârstă
i};
 pentru i=1..n
 stabileşte clasa de vârstă a unui arboret;
 cumulează supafaţa şi volumul arboretului la suprafaţa şi volumul clasei;
 calculează volumul la hectar;
 pentru i=1..max dacă supr[i]=0 scrie ‘nu sunt arborete’
 altfel afişează volumul total şi volumul la hectar;
sfârşit.
Programul redactat pe baza pseudocodului este:

Program structura_fond_forestier_volume_pe_clase_de_varsta;
type tip1=array[byte] of real;
tip2=array[byte] of longint;
var n,i,k,max:byte;
v,vr,vol:tip2;
s,supr,vh:tip1;
begin
write('Nr.de arborete=');readln(n);
writeln('Precizati caracteristicile fiecarui arboret');
max:=1;
for i:=1 to n do
begin
writeln('Arboretul ',i);
write('Suprafata=');read(s[i]);
write('Virsta=');read(vr[i]);
write('Volumul=');readln(v[i]);
k:=trunc((vr[i]-1)/20)+1;
if max<k then max:=k;
end;
for i:=1 to max do
begin
supr[i]:=0;vol[i]:=0;
end;
for i:=1 to n do
begin
k:=trunc((vr[i]-1)/20)+1;
supr[k]:=supr[k]+s[i];
vol[k]:=vol[k]+v[i];
vh[k]:=vol[k]/supr[k];
end;
for i:=1 to max do
begin
write('Clasa ',i,' de virsta:');
if supr[i]=0 then writeln(' nu sint arborete')
else writeln('Volum total=',vol[i],' m3; volum/ha=',vh[i]:1:2,
' m3/ha');
end;
end.
Nr.de arborete=14
Precizati caracteristicile fiecarui arboret
Arboretul 1
Suprafata=5.9
Virsta=25
Volumul=458
Arboretul 2
Suprafata=9.2
Virsta=45
Volumul=1626
Arboretul 3
Suprafata=10.4
Virsta=100
Volumul=3392
Arboretul 4
Suprafata=0.8
Virsta=75
Volumul=182
Arboretul 5
Suprafata=11.2
Virsta=80
Volumul=1792
Arboretul 6
Suprafata=6.9
Virsta=55
Volumul=1757
Arboretul 7
Suprafata=14.5
Virsta=5
Volumul=70
Arboretul 8
Suprafata=21.4
Virsta=15
Volumul=411
Arboretul 9
Suprafata=9.1
Virsta=65
Volumul=3049
Arboretul 10
Suprafata=3.8
Virsta=10
Volumul=27
Arboretul 11
Suprafata=12.0
Virsta=10
Volumul=50
Arboretul 12
Suprafata=14.5
Virsta=90
Volumul=5690
Arboretul 13
Suprafata=5.5
Virsta=65
Volumul=921
Arboretul 14
Suprafata=3.7
Virsta=95
Volumul=1672
Clasa 1 de virsta:Volum total=558 m3; volum/ha=10.79 m3/ha
Clasa 2 de virsta:Volum total=458 m3; volum/ha=77.63 m3/ha
Clasa 3 de virsta:Volum total=3383 m3; volum/ha=210.12 m3/ha
Clasa 4 de virsta:Volum total=5944 m3; volum/ha=223.46 m3/ha
Clasa 5 de virsta:Volum total=10754 m3; volum/ha=376.01 m3/ha

3. Calculul suprafeţelor şi al consistenţelor medii pe categorii de consistenţe


Un alt element de caracterizare a structurii fondului de producţie îl constituie modul de
repartizare a suprafeţelor pe categorii de consistenţe. În plus, pentru fiecare categorie de
consistenţă se poate calcula consistenţa medie ca o medie ponderată a consistenţelor arboretelor
în raport cu suprafaţa.
Cele patru categorii de consistenţe considerate sunt:
 categoria I pentru consistenţe cuprinse în intervalul 0,1..0,3;
 categoria II pentru consistenţe cuprinse în intervalul 0,4..0,6;
 categoria III pentru consistenţe cuprinse în intervalul 0,7..0,8;
 categoria IV pentru consistenţe cuprinse în intervalul 0,9..1,0.
Încadrarea arboretelor într-o categorie de consistenţă se face printr-o succesiune de
instrucţiuni condiţionale if. Evaluarea expresiilor logice care urmează fiecărui if decide categoria
de consistenţă a unui arboret şi apelează o procedură având ca parametru actual chiar numărul
categoriei de consistenţe. Procedura declarată de utilizator calc realizează automat cumularea
suprafeţei reale şi reduse a fiecărui arboret la suprafaţa reală şi redusă a fiecarei categorii de
consistenţe şi calculul consistenţei medii şi a numărului de arborete din fiecare categorie.

Program structura_pe_categorii_de_consistenta;
type tip1=array[byte] of real;
tip2=array[1..4] of real;
tip3=array[1..4] of byte;
var n,i,k:byte;
s,c:tip1;
cm,sc,sr:tip2;
ncc:tip3;
procedure calc(k:byte);
begin
sc[k]:=sc[k]+s[i];
sr[k]:=sr[k]+s[i]*c[i];
if sc[k]<>0 then begin
cm[k]:=sr[k]/sc[k];
ncc[k]:=ncc[k]+1;
end;
end;
begin
write('Nr.de arborete=');readln(n);
for i:=1 to 4 do
begin
sc[i]:=0;
sr[i]:=0;
ncc[i]:=0;
end;
writeln('Precizati caracteristicile fiecarui arboret');
for i:=1 to n do
begin
writeln('Arboretul ',i,' :');
write('Suprafata=');readln(s[i]);
repeat
write('Consist.='); readln(c[i]);
until (c[i] >= 0) and (c[i] <= 1);
end;
for i:=1 to n do
begin
if c[i]<0.4 then calc(1)
else if c[i]<=0.6 then calc(2)
else if c[i]<=0.8 then calc(3)
else calc(4);
end;
for k:=1 to 4 do
begin
write('Categ.c. ',k);
if sc[k]<>0 then writeln(' Nr.arborete=',ncc[k],'; S.reala=',
sc[k]:1:1,' ha; cons.med=',cm[k]:1:2)
else writeln(' nu sint arborete');
end;
end.

Nr.de arborete=14
Precizati caracteristicile fiecarui arboret
Arboretul 1 :
Suprafata=5.9
Consist.=0.9
Arboretul 2 :
Suprafata=9.2
Consist.=0.8
Arboretul 3 :
Suprafata=10.4
Consist.=0.9
Arboretul 4 :
Suprafata=0.8
Consist.=0.6
Arboretul 5 :
Suprafata=11.2
Consist.=0.4
Arboretul 6 :
Suprafata=6.9
Consist.=0.9
Arboretul 7 :
Suprafata=14.5
Consist.=0.6
Arboretul 8 :
Suprafata=21.4
Consist.=0.6
Arboretul 9 :
Suprafata=9.1
Consist.=1.0
Arboretul 10 :
Suprafata=3.8
Consist.=0.5
Arboretul 11 :
Suprafata=12.0
Consist.=0.3
Arboretul 12 :
Suprafata=14.5
Consist.=0.9
Arboretul 13 :
Suprafata=5.5
Consist.=0.5
Arboretul 14 :
Suprafata=3.7
Consist.=1.0
Categ.c. 1 Nr.arborete=1; S.reala=12.0 ha; cons.med=0.30
Categ.c. 2 Nr.arborete=3; S.reala=20.5 ha; cons.med=0.45
Categ.c. 3 Nr.arborete=3; S.reala=36.7 ha; cons.med=0.60
Categ.c. 4 Nr.arborete=7; S.reala=59.7 ha; cons.med=0.91

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