Sunteți pe pagina 1din 55

- 1 -

1. Calculul ariei unui triunghi



i. Enunul problemei :
S se calculeze aria unui triunghi cunoscnd laturile sale.

ii. Analiza problemei :
Date de intrare: a,b,c laturile triunghiului
Date de ieire: S aria triunghiului
Metoda de rezolvare: formula lui Heron

(1.1)
unde p este semiperimetrul calculat cu relaia (1.2) :

(1.2)
iii. Programarea problemei :
S-a folosit limbajul Fortran 90 sub implementarea Intel versiunea 11.0.061 n mediul de
programare Microsoft Visual Studio 2008.
Se prezint, n continuare, o imagine a mediului Visual Studio cu lucrul asupra
programului.
Fereastra sistemului de dezvoltare MSVS 2008 arat astfel:


Fig.1.1
meniul
Zona de
program
Zona de fiiere
Fereastra curent a programului
- 2 -

program calcarie2


!program de calcul al ariei unui triunghi
implicit none
!delaratie
real a,b,c,p,S
!afisare de titlu
write(*,*) 'calculul ariei unui triunghi'
write(*,*)
!date de intrare
write(*,1)
1 format('a=',$)
read(*,*) a
write(*,2)
2 format('b=',$)
read(*,*) b
write(*,3)
3 format('c=',$)
read(*,*) c
!verificare
write(*,*) 'a,b,c sunt:',a,b,c
if ((a<=0.).or.(b<=0.).or.(c<=0.).or.&
((a+b)<=c).or.((a+c)<=b).or.((c+b)<=a)) then
write(*,*) 'eroare in datele de intrare'
else
!semiperimetrul
p=(a+b+c)/2
write(*,*) 'semiperimetrul este:',p
!aria
S=sqrt(p*(p-a)*(p-b)*(p-c))
write(*,*) 'Aria este:',S
endif
READ*

end program calcarie2
Programul n format .exe (executabil) n versiunea Debug are lungimea de 918 kB ,iar n
versiunea Release are 507 kB.
iv. Rezultate
Se prezint mai multe seturi de valori, pentru rezolvarea problemei:
a=3, b=4, c=5 numerele pitagorice

Fig.1.2
- 3 -

a=-2, b=5, c=4 se introduce de la tastatura latura a cu valoare negativ

Fig.1.3
a=8, b=3, c=4 am dat valori de la tastatur laturilor conform crora valoarea lui a
este mai mare dect suma valorilor lui b i lui c

Fig.1.4
a=0, b=2, c=5 se introduce de la tastatura latura a cu valoare nul

Fig.1.5

v. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Seturile de valori prezentate evalueaz orice posiblitate de introduce gresit de la
tastatura datele de intrare, aadar, este luat in calcul orice caz particular al acestei
secvene.

- 4 -

2. Calculul momentului de inerie
i. Enunul problemei :
S se calculeze momentul de inerie pentru triunghi i dreptunghi cunoscnd baza b,
respectiv nlimea h.
ii. Analiza problemei :
Date de intrare: b, h baza, nlimea
Date de ieire: i momentul de inerie
Metoda de rezolvare: se aplic formula de calcul a momentului de inerie pentru
triunghi i pentru dreptunghi, din Rezistena Materialelor
=

(2.1)
=

(2.2)
iii. Programarea problemei :
S-a folosit limbajul Fortran 90 sub implementarea Intel versiunea 11.0.061 n mediul de
programare Microsoft Visual Studio 2008.
program moment_de_inertie

implicit none
real tip,b,h,i
write(*,*)
write(*,*) 'program de calculul al momentului de inertie'
write(*,*) '============================================'
write(*,*)
!date de intrare
write(*,1)
1 format('tip=',$)
read(*,*) tip
write(*,2)
2 format('b=',$)
read(*,*) b
write(*,3)
3 format('h=',$)
read(*,*) h
if((b<=0).or.(h<=0)) then
write(*,*) 'nu se poate calcula'
else
if (tip==1) then
i=b*(h**3)/3
write(*,*) 'triunghi,i este:',i
else
i=b*(h**3)/12
write(*,*) 'dreptunghi,i este:',i
endif
endif
read *
end program moment_de_inertie


- 5 -

iv. Rezultate :

Fig.2.1

Fig.2.2

Fig.2.3

Fig.2.4
v. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu
ipotezele menionate), folosind compilatorul Intel Fortran 90 sub Visual
Studio 2008.
! Seturile de valori prezentate evalueaz orice posiblitate de introduce gresit
de la tastatura datele de intrare, aadar, este luat in calcul orice caz particular
al acestei secvene.
- 6 -

3. Crearea unei ferestre de dialog procedura general

i. Crearea diologului n Fortran :
Se deschide un nou proiect Fortran:

Fig.3.1


Fig.3.2

Din meniu Project Add new Item
- 7 -


Fig.3.3
i se obine urmtoarea fereastr:

Fig.3.4

Se alege Resource File(.rc), cu numele Resource1.rc. Se apas butonul Add
Mediul Visual Studio se schimb dup cum urmeaz:
- 8 -


Fig.3.5
Se observ n stnga un director numit Resource1.rc, iar n partea dreapt se remarc
apariia fiierului Resource1.rc n cadrul subdirectorului Source Files
Se lucreaz n partea stng (tab-ul Resource1.rc), se selecteaz directorul
Resource1.rc i se apas butonul dreapta al mouse-ului.


Fig.3.6
Se alegeAdd Resource i se obine fereastra urmatoare :
- 9 -


Fig.3.7
din care se selecteaz Dialog i se apas butonul New. Visual Studio aduce pe ecran
dialogul nou creat:

Fig.3.8

Dialogul nou creat are numele implicit IDD DIALOG1. l schimbm n fereastra
- 10 -


Fig.3.9

Se salveaz toate fiierele din proiect, apsnd butonul Save All

Fig.3.10
n partea stng (Solution Explorer) se selecteaz Resource Files clic butonul din
dreapta al mouse-ului Add Existing Item...

Fig.3.11

- 11 -

i se obine o list cu fiierele existente n proiect (se alege All Files(*.*) din dreapta
jos):

Fig.3.12

Se selecteaz Resource.hi se apas butonul Add. Se observ c fiierul Resource.h a
fost adugat n Solution Explorer.

Fig.3.13

- 12 -

n Solution Explorer se selecteaz Resource.h i se apas cu butonul dreapta al
mouse-ului:

Fig.3.14
Se alege Properties i se obine o fereastr dup cum urmeaz, adic:

Fig.3.15
n care se selecteaz din stnga Custom Build Step i se completeaz n dreapta rubrica
Command Line cu deftofd resource.h resource.fd respectiv rubrica Outputs cu
resource.fd i se apas ok.
- 13 -

Din meniul principal Build se activeaz Build Solution

Fig.3.16
La fel cum am adus fiierul Resource.h, se aduce i Fiierul Resource.fd.

Fig.3.17


- 14 -

ii. Programare :
S-a folosit limbajul Fortran 90 sub implementarea Intel versiunea 11.0.061 n
mediul de programare Microsoft Visual Studio 2008.
program ARIADIA

use iflogm
implicit none
include 'resource.fd'
type(dialog) fer
logical rtr
rtr=dlginit(fereastra,fer)
rtr=dlgmodal(fer)
call dlguninit(fer)
print *, 'fereastra finalizata'
read*

end program ARIADIA

Testatea ferestrei de dialog:

Fig.3.18

4. Introducerea unei ferestre de dialog pentru programul rezolvat la
problema nr. 3
i. Enunul problemei :
S se calculeze aria unui triunghi cunoscnd laturile sale.

ii. Analiza problemei :
Date de intrare: a,b,c laturile triunghiului
Date de ieire: S aria triunghiului
Metoda de rezolvare: formula lui Heron

(4.1)
- 15 -

unde p este semiperimetrul calculat cu relaia (4.2) :
=

(4.2)
iii. Programarea problemei :
S-a folosit limbajul Fortran 90 sub implementarea Intel versiunea 11.0.061 n mediul de
programare Microsoft Visual Studio 2008.
program ARIADIA

use iflogm
implicit none
include 'resource.fd'
external subaria
type(dialog) fer
logical rtr
rtr=dlginit(fereastra,fer)
rtr=dlgsetsub(fer,efectueaza,subaria)
rtr=dlgmodal(fer)
call dlguninit(fer)
! print *, 'fereastra finalizata'
read*

end program ARIADIA

subroutine subaria (fer,vx,x)

use iflogm
implicit none
include 'resource.fd'
type(dialog) fer
logical rtr,rer
character*20 text
character*1 ch
integer vx,x
real a,b,c,p,S

rtr=dlgget(fer,vala,text)
read(text,*) a
rtr=dlgget(fer,valb,text)
read(text,*) b
rtr=dlgget(fer,valc,text)
read(text,*) c
!se evita utilizarea spatiilor si caracterelor de tip logic
!vala
rtr=dlgget(fer,vala,text)
if (text/='') then
read(text,*) ch
read(text,*,iostat=rer) a
if ((rer==0) .and. (ch/='f') .and. (ch/='F') .and. (ch/='t') .and.
(ch/='t')) then
rtr=dlgset(fer,rez,'')
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
- 16 -

return
endif
!valb
rtr=dlgget(fer,valb,text)
if (text/='') then
read(text,*) ch
read(text,*,iostat=rer) b
if ((rer==0) .and. (ch/='f') .and. (ch/='F') .and. (ch/='t') .and.
(ch/='t')) then
rtr=dlgset(fer,rez,'')
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
!valc
rtr=dlgget(fer,valc,text)
if (text/='') then
read(text,*) ch
read(text,*,iostat=rer) c
if ((rer==0) .and. (ch/='f') .and. (ch/='F') .and. (ch/='t') .and.
(ch/='t')) then
rtr=dlgset(fer,rez,'')
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
!conform restructiei- laturile trebuie sa aiba valori pozitive si diferite
de 0
!conform restrictiei- fiecare latura trebuie sa aiba valoarea mai mica
decat suma valorilor celorlalte doua laturi

if((a>0).and.(b>0).and.(c>0).and.(a<b+c).and.(b<a+c).and.(c<b+a))then
rtr=dlgset(fer,rez,'')
else
rtr=dlgset(fer,rez,'Eroare la datele de intrare!')
return
endif
!calculul semiperimetrului
p=(a+b+c)/2
write(text,*)p
!calculul ariei
S=sqrt(p*(p-a)*(p-b)*(p-c))
write(text,*)S
!calculul si afisarea ariei in subrutina
rtr=dlgset(fer,valS,text)
rtr=dlgget(fer,valS,text)
read(text,*) S
!inchiderea subrutinei
write(*,*)
return
end subroutine subaria


- 17 -

iv. Rezultate :
Se prezint mai multe seturi de valori, pentru rezolvarea problemei:
a=3,b=4,c=5 numerele pitagorice

Fig.4.1
a=-2, b=5, c=4 se introduce de la tastatura latura a cu valoare negativ

Fig.4.2
- 18 -

a=8, b=3, c=4 am dat valori de la tastatur laturilor conform crora valoarea lui a
este mai mare dect suma valorilor lui b i lui c

Fig.4.3
a=0, b=2, c=5 se introduce de la tastatura latura a cu valoare nul

Fig.4.4

- 19 -

v. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Seturile de valori prezentate evalueaz orice posiblitate de introduce gresit de la
tastatura datele de intrare, aadar, este luat in calcul orice caz particular al acestei
secvene.

5. Rezolvarea ecuaiei de gradul 2
i. Enunul problemei :
S se gasesasc rdcinile ecuaiei de gradul 2 ( ax
2
+ bx + c = 0 (4.1) ) pentru
valori aleatorii ale argumentelor funciei.

ii. Analiza problemei :
Date de intrare : a , b , c valorile date de la tastatur;
Date de ieire : x1 , x2 rdcinile ecuaiei.
Metoda de rezolvare:

Fig.5.1



a::0
a0
a=0
, d=b
2
-4ac
d>0
a=0
a<0
, ecuaie de gr.I bx+c=0
b0
b=0

,
=
+
2

= =



,
=

2
=


ec. de gr.o
c=0

c0
- 20 -

iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 n mediul de programare Microsoft Visual Studio 2008, conform
schemei logice de mai sus.
program polinom

implicit none
!delaratie
real a,b,c,d,x1,x2,x,pr,pi
!titlul prgramului
write(*,*) 'rezolvarea ecuatiei de gradul 2'
write(*,*)
!date de intrare
write(*,1)
1 format('a=',$)
read(*,*) a
write(*,2)
2 format('b=',$)
read(*,*) b
write(*,3)
3 format('c=',$)
read(*,*) c
!verificare
write(*,*) 'a,b,c sunt:',a,b,c

if(a==0)then
write(*,*) 's-a gasit a=0'
if(b==0)then
write(*,*)'s-a gasit b=0'
if(c==0)then
write(*,*)'exista o infinitate de solutii'
else
write(*,*)'polinomul este imposibil de rezolvat'
endif
else
write(*,*)'s-a gasit b/=0'
x=-c/b
write(*,*)'solutia unica este x=',x
endif
else
write(*,*)'s-a gasit a/=0'
d=b**2.0-4.0*a*c
if (d>0)then
write(*,*)'s-a gasit d>0'
x1=(-b+sqrt(d))/2.0*a
x2=(-b-sqrt(d))/2.0*a
write(*,*) 'radacinile sunt' ,x1, 'si' ,x2
elseif (d==0)then
write(*,*)'s-a gasit d=0'
x=(-b)/(2.0*a)
write(*,*) 'solutia unica este x1=x2=x=' ,x
else
write(*,*)'s-a gasit d<0'
pr=-b/(2.0*a)
pi=sqrt(-d)/(2.0*a)
write(*,*) 'radacinile complexe sunt:'
write(*,*)'x1=',pr,'+',pi,'* i'
write(*,*)'x2=',pr,'-',pi,'* i'
- 21 -

endif
endif
print*, 'program finalizat'
read*

end program polinom


Programul in format .exe(executabil) n versiunea Debug are lungimea de 918 KB,iar in
versiunea Release are 496 KB.

iv. Rezultate :
Se prezint mai multe seturi de date, pentru rezolvarea problemei:
a=0, b=0, c=0 ;

Fig.5.2

a=1, b=4, c=2;

Fig.5.3



- 22 -

a=5, b=0, c=0;

Fig.5.4

a=0, b=5, c=2;

Fig.5.5

a=3, b=6, c=3;

Fig.5.6


- 23 -

a=4, b=7, c=8;

Fig.5.7
v. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Seturile de valori prezentate evalueaz orice posiblitate de introduce gresit de la
tastatura datele de intrare, aadar, este luat in calcul orice caz particular al acestei
secvene.

6. Preluarea datelor de intrare de ctre un fiier cu extensia xyz i
ulterior afiarea rezultatelor ntr-un fiier cu extensia text pentru
problema Rezolvarea ecuiei de gradul 2.

i. Enunul problemei:
S se gasesasc rdcinile ecuaiei de gradul 2 ( ax
2
+ bx + c = 0 (6.1) ) pentru
valori aleatorii ale argumentelor funciei.

ii. Analiza problemei:
Date de intrare : a , b , c valorile date de la tastatur;
Date de ieire : x1 , x2 rdcinile ecuaiei.



- 24 -

Metoda de rezolvare:


Fig.6.1


iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008, conform
schemei logice de mai sus.
program combinat

implicit none
real a,b,c,x,x1,x2,pi,pr,d
open(unit=11,file='progrnou.xyz')
open(unit=12,file='rezultate.txt')
20 read(11,1,end=10) a,b,c
1 format(3f10.0)
write(*,*) a,b,c

if(a==0)then
write(12,*) 's-a gasit a=0'
if(b==0)then
write(12,*)'s-a gasit b=0'
if(c==0)then
write(12,*)'exista o infinitate de solutii'
else
write(12,*)'polinomul este imposibil de rezolvat'
endif
else
write(12,*)'s-a gasit b/=0'
x=-c/b
write(12,*)'solutia unica este x=',x
endif
a::0
a0
a=0
, d=b
2
-4ac
d>0
a=0
a<0
, ecuaie de gr.I bx+c=0
b0
b=0

,
=
+
2

= =



,
=

2
=


ec. de gr.o
c=0

c0
- 25 -

else
write(12,*)'s-a gasit a/=0'
d=b**2.0-4.0*a*c
if (d>0)then
write(12,*)'s-a gasit d>0'
x1=(-b+sqrt(d))/2.0*a
x2=(-b-sqrt(d))/2.0*a
write(12,*) 'radacinile sunt' ,x1, 'si' ,x2
elseif (d==0)then
write(12,*)'s-a gasit d=0'
x=(-b)/(2.0*a)
write(12,*) 'solutia unica este x1=x2=x=' ,x
else
write(12,*)'s-a gasit d<0'
pr=-b/(2.0*a)
pi=sqrt(-d)/(2.0*a)
write(12,*) 'radacinile complexe sunt:'
write(12,*)'x1=',pr,'+',pi,'* i'
write(12,*)'x2=',pr,'-',pi,'* i'
endif
endif
go to 20
10 print *, 'programul s-a-ncheiat'
read*
close (11)
close (12)
end program combinat

Programul in format .exe(executabil) n versiunea Debug are lungimea de 918 KB,iar in
versiunea Release are 496 KB.

iv. Rezultate :
Se prezint mai multe seturi de date, pentru rezolvarea problemei n fiierul
progrnou.xyz :

Fig.6.2

Se ruleaz programul...
- 26 -


Fig.6.3

Se deschide fiierul rezultate.txt" i se observ setul de rezultate corespunztor setului
de valori date de la tastaura n fiierul progrnou.xyz:

Fig.6.4
v. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Seturile de valori prezentate evalueaz orice posiblitate de introduce gresit de la
tastatura datele de intrare, aadar, este luat in calcul orice caz particular al acestei
secvene.

- 27 -

7. Descompunerea funciei sinus n serie

i. Enunul problemei :
S se calculeze valoarea funciei sin(x) prin descompunerea n serie cu un numr finit
de cicluri n varianta simpl precizie.

ii. Analiza problemei :

Date de intrare: x
Date de ieire: sin(x), notat n program s
Metoda de rezolvare:

=

!

!
+

!
+ (1)

()!
(7.1)
S-a prelucrat seria i s-a obinut termenul curent al seriei ca fiind:

= 0 (7.2)

!
(7.3)

!
(7.4)

= (1)


()
!
(7.5)

= (1)

!
(7.6)

()
(7.7)

()
(7.8)

iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.

- 28 -

program sincl1
!calculul functiei sinus prin descompunere in serie
!cu un nr. finit cunoscut de cicluri
implicit none
!declaratii de tip
real x,t,s
integer n,i
write(*,*)'calculul functiei sinus prin descompunere in serie'
!date de intrere
write(*,1)
1 format(' x=',$)
read(*,*) x
write(*,2)
2 format(' n=',$)
read(*,*) n
!valori initiale
s=x
t=x
!ciclari
i=1
!t=-t*x**2/(2*i*(2*i+1))
!t=-t*x*x/2.0/i/(2.0*i+1.0)
3 t=-t*x/(2.0*i)*x/(2.0*i+1.0)
s=s+t
write(*,*)'i=',i,'t=',t,'s=',s
i=i+1
if(i-n)3,3,4
4 write(*,*)'s=',s
write(*,*)'sinus din calculator=',sin(x)
print *, 'program terminat'
read*
end program sincl1

Programul in format .exe(executabil) n versiunea Debug are lungimea de 882kB ,iar in
versiunea Release are 498kB.
iv. Rezultate :
Se prezint dou variante, diferite numai prin numrul de pai :

Fig.7.1
- 29 -


Fig.7.2
v. Concluzii :
!Programul lucreaz n radiani, aadar, valoarea parametrului x trebuie introdus de la
tastatur ca atare. Valoarea unghiului n radiani introdus este 0,5774, de altfel,
corespondentul in grade fiind de 33.
- 30 -

! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Se remarc rezultate identice iar valoarea sumei se stabilizeaz de la contorul i=3,
pentru c termenii seriei de la urmtorul contor nu mai influieneaz rezultatul.

8. Descompunerea funciei sinus n serie
i. Enunul problemei :
S se calculeze valoarea funciei sin(x) prin descompunerea n serie cu un numr finit
de cicluri n varianta simpl precizie, utiliznd instruciunea do.

ii. Analiza problemei :

Date de intrare: x
Date de ieire: sin(x), notat n program s
Metoda de rezolvare:

=

!

!
+

!
+ (1)

()!
(8.1)
S-a prelucrat seria i s-a obinut termenul curent al seriei ca fiind:

= 0 (8.2)

!
(8.3)

!
(8.4)

= (1)


()
!
(8.5)

= (1)

!
(8.6)

()
(8.7)

()
(8.8)

- 31 -

iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
program sincl3

!calculul functiei sinus prin descompunere in serie
!cu un nr. finit cunoscut de cicluri
implicit none
!declaratii de tip
real x,t,s
integer n,i
write(*,*)'calculul functiei sinus prin descompunere in serie'
!date de intrere
write(*,1)
1 format(' x=',$)
read(*,*) x
write(*,2)
2 format(' n=',$)
read(*,*) n
!valori initiale
s=x
t=x
!ciclari
do i=1,n
!t=-t*x**2/(2*i*(2*i+1))
!t=-t*x*x/2.0/i/(2.0*i+1.0)
t=-t*x/(2.0*i)*x/(2.0*i+1.0)
s=s+t
write(*,*)'i=',i,'t=',t,'s=',s
end do
write(*,*)'s=',s
write(*,*)'sinus din calculator=',sin(x)
print *, 'program terminat'
read*

end program sincl3

iv. Rezultate :
Se prezint dou variante, diferite numai prin numrul de pai :

Fig.8.1
- 32 -


Fig.8.2
v. Concluzii :
!Programul lucreaz n radiani, aadar, valoarea parametrului x trebuie introdus de la
tastatur ca atare. Valoarea unghiului n radiani introdus este 0,5774, de altfel,
corespondentul in grade fiind de 33.
- 33 -

! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Se remarc rezultate identice iar valoarea sumei se stabilizeaz de la contorul i=3,
pentru c termenii seriei de la urmtorul contor nu mai influieneaz rezultatul.


9. Descompunerea funciei sinus n serie
i. Enunul problemei :
S se calculeze valoarea funciei sin(x) prin descompunerea n serie cu un numr finit
dar necunoscut de cicluri n varianta simpl precizie.

ii. Analiza problemei :
Date de intrare: x

()
, reprezentnd valoarea ultimului termen din serie.
Date de ieire: sin(x), notat n program s
Metoda de rezolvare:
=

!

!
+

!
+ (1)

()!
(9.1)

=

()
(9.2)

Se utilizeaz, de altfel, instruciunea do while
iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.

program sincl2

!calculul functiei sinus prin descompunere in serie
!cu un nr. finit necunoscut de cicluri
implicit none
!declaratii de tip
real x,t,s,eps
integer i
write(*,*)'calculul functiei sinus prin descompunere in serie'
!date de intrare
write(*,1)
1 format(' x=',$)
read(*,*) x
write(*,2)
2 format(' epsilon=',$)
read(*,*) eps
!valori initiale
- 34 -

s=x
t=x
!ciclari
i=1
!se compara ultimul termen curent(valoarea initiala) al seriei cu eps impus
de la tastatura
do while (abs(t)>=abs(eps))
!se recalculeaza ultimul termen curent
3 t=-t*x/(2.0*i)*x/(2.0*i+1.0)
!se adauga la suma initiala a seriei t-ul curent
s=s+t
!afisare
write(*,*)'i=',i,'t=',t,'s=',s
!se incrementeaza
i=i+1
end do
!afisare
4 write(*,*)'s=',s
write(*,*)'sinus din calculator=',sin(x)
print *, 'program terminat'
read*

end program sincl2

Programul in format .exe(executabil) n versiunea Debug are lungimea de 882 kB ,iar in
versiunea Release are 486 kB.
iv. Rezultate :
Se prezint dou variante, pentru a evidenia precizia rezultatului pentru valoarea lui
mai mic:

9.1

9.2
- 35 -

v. Concluzii :
!Programul lucreaz n radiani, aadar, valoarea parametrului x trebuie introdus de la
tastatur ca atare. Valoarea unghiului n radiani introdus este 0,5774, de altfel,
corespondentul in grade fiind de 33.
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Se observ precizia rezultatului pentru valoarea lui mai mic.
10. Descompunerea funciei sinus n serie
i. Enunul problemei :
S se calculeze valoarea funciei sin(x) prin descompunerea n serie cu un numr finit
de cicluri n varianta dubl precizie, utiliznd instruciunea do.
ii. Analiza problemei :

Date de intrare: x
Date de ieire: sin(x), notat n program s
Metoda de rezolvare:

=

!

!
+

!
+ (1)

()!
(10.1)
S-a prelucrat seria i s-a obinut termenul curent al seriei ca fiind:

= 0 (10.2)

!
(10.3)

!
(10.4)

= (1)


()
!
(10.5)

= (1)

!
(10.6)

()
(10.7)

()
(10.8)
- 36 -

iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.

program sincl4

!calculul functiei sinus prin descompunere in serie
!cu un nr. finit cunoscut de cicluri
!varianta dubla precizie
implicit none
!declaratii de tip
real*8 x,t,s
integer n,i
write(*,*)'calculul functiei sinus prin descompunere in serie'
!date de intrere
write(*,1)
1 format(' x=',$)
read(*,*) x
write(*,2)
2 format(' n=',$)
read(*,*) n
!valori initiale
s=x
t=x
!ciclari
do i=1,n
!t=-t*x**2/(2*i*(2*i+1))
!t=-t*x*x/2.0/i/(2.0*i+1.0)
t=-t*x/(2.d0*i)*x/(2.d0*i+1.d0)
s=s+t
write(*,*)'i=',i,'t=',t,'s=',s
end do
write(*,*)'s=',s
write(*,*)'sinus din calculator=',dsin(x)
print *, 'program terminat'
read*

end program sincl4


Programul in format .exe(executabil) n versiunea Debug are lungimea de 882 kB ,iar in
versiunea Release are 486 kB.

iv. Rezultate :
Se prezint dou variante, diferite numai prin numrul de pai :
- 37 -


Fig. 10.1


Fig. 10.2
- 38 -

v. Concluzii :
!Programul lucreaz n radiani, aadar, valoarea parametrului x trebuie introdus de la
tastatur ca atare. Valoarea unghiului n radiani introdus este 0,5774, de altfel,
corespondentul in grade fiind de 33.
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Se remarc rezultate identice iar valoarea sumei se stabilizeaz de la contorul i=3,
pentru c termenii seriei de la urmtorul contor nu mai influieneaz rezultatul.

11. Descompunerea funciei sinus n serie
i. Enunul problemei :
S se calculeze valoarea funciei sin(x) prin descompunerea n serie cu un numr finit
dar necunoscut de cicluri n varianta dubl precizie.

ii. Analiza problemei :

Date de intrare: x

()
, reprezentnd valoarea ultimului termen din serie.
Date de ieire: sin(x), notat n program s
Metoda de rezolvare:

=

!

!
+

!
+ (1)

()!
(11.1)

=

()
(11.2)

Se utilizeaz, de altfel, instruciunea do while

iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.


- 39 -

program sincl5

!calculul functiei sinus prin descompunere in serie
!cu un nr. finit necunoscut de cicluri
!varianta dubla precizie

implicit none
!declaratii de tip
real*8 x,t,s,eps
integer i
write(*,*)'calculul functiei sinus prin descompunere in serie'
!date de intrere
write(*,1)
1 format(' x=',$)
read(*,*) x
write(*,2)
2 format(' epsilon=',$)
read(*,*) eps
!valori initiale
s=x
t=x
!ciclari
i=1
!t=-t*x**2/(2*i*(2*i+1))
!t=-t*x*x/2.0/i/(2.0*i+1.0)
do while (dabs(t)>=dabs(eps))
3 t=-t*x/(2.d0*i)*x/(2.d0*i+1.d0)
s=s+t
write(*,*)'i=',i,'t=',t,'s=',s
i=i+1
end do
4 write(*,*)'s=',s
write(*,*)'sinus din calculator=',dsin(x)
print *, 'program terminat'
read*

end program sincl5


iv. Rezultate :
Se prezint dou variante, pentru a evidenia precizia rezultatului pentru valoarea lui
mai mic:


Fig. 11.1


- 40 -


Fig. 11.2


v. Concluzii :
!Programul lucreaz n radiani, aadar, valoarea parametrului x trebuie introdus de la
tastatur ca atare. Valoarea unghiului n radiani introdus este 0,5774, de altfel,
corespondentul in grade fiind de 33.
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.
! Se observ precizia rezultatului pentru valoarea lui mai mic.

12. Calculul funciei ln(x)
i. Enunul problemei :
S se calculeze valoarea funciei ln(x) i s se creeze o fereastr de dialog n acest
sens .
ii. Analiza problemei :
Date de intrare: x
Date de ieire: funcia - ln(x);
Metoda de rezolvare:
S-a folosit din program functia alog(x), iar fereastra de dialog s-a construit conform
explicaiilor de la problema nr. 3

iii. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
- 41 -

program ferd1
use iflogm
implicit none
include 'resource.fd'
type(dialog) din
logical rtr
character*20 text
real x,vl
integer rer

rtr=dlginit(ferjoi,din)
rtr=dlgmodal(din)
rtr=dlgget(din,xf,text)
write(*,*)'s-a preluat din fereastra textul',text
read(text,*,iostat=rer) x
if(rer==0)then
write(*,*) 'numarul citit este',x
vl=alog(x)
write(text,*) vl
rtr=dlgset(din,lnx,text)
rtr=dlgset(din,msj,'x corect')
else
write(*,*)'eroare la x'
rtr=dlgset(din,msj,'eroare text')
endif
rtr=dlgmodal(din)
call dlguninit(din)

print *, 'sfarsit program'
read*
end program ferd1

iv. Rezultate :


Fig12.1
- 42 -


Fig12.2

v. Concluzii :
!Corectitudinea secvenei este confirmat de rezultat, respectiv de mesaj :
valoarea lui x ce a fost introdus de la tastatur este aproximativ egal cu
numarul lui Euler, iar n consecin valoarea logaritmului natural este de
aproximtiv 1.
Pentru introducerea de la tastatur a unui text/caracter se creeaz
imposibilitatea calculrii logaritmului natural, deci mesajul va fi n consecin.

13. Calculul de ordinul trei pentru un numr real a
i. Enunul problemei :
S se calculeze valoarea funciei

i s se creeze o fereastr de dialog n acest sens .


ii. Analiza problemei :
Date de intrare: a ;
Date de ieire: funcia -

;
Metoda de rezolvare:
Se scrie sub forma



- 43 -

iii. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
a) Se utilizeaz instruciunea if
program rad1

use iflogm
implicit none

type(dialog) frad
include 'resource.fd'
logical rtr
character*20 text
real a , pa
integer rin

rtr=dlginit(fereastra,frad)
rtr=dlgmodal(frad)
rtr=dlgget(frad,fa,text)
read(text,*,iostat=rin) a
if(rin==0) then
write(*,*) 'a=',a
pa=a**(1./3.)
write(text,*) pa
rtr=dlgset(frad,fp,text)
else
rtr=dlgset(frad,msj, 'exista o eroare la introducerea &
de la tastatura datei de intrare')
endif

rtr=dlgmodal(frad)
call dlguninit(frad)
print *, 's-a incheiat secventa'
read (*,*)

end program rad1

b) Se utilizeaz instruciunea do while
program rad2

use iflogm
implicit none
type(dialog) frad
include 'resource.fd'
logical rtr,r1
character*20 text
real a , pa
integer rin

rtr=dlginit(fereastra,frad)
r1=1

do while (r1==1)
r1=dlgmodal(frad)
write(*,*) r1
- 44 -

rtr=dlgget(frad,fa,text)
read(text,*,iostat=rin) a
if(rin==0) then
write(*,*) 'a=',a
pa=a**(1./3.)
write(text,*) pa
rtr=dlgset(frad,fp,text)
else
rtr=dlgset(frad,msj, 'exista o eroare la introducerea &
de la tastatura datei de intrare')
endif
enddo

rtr=dlgmodal(frad)
call dlguninit(frad)
print *, 's-a incheiat secventa'
read (*,*)

end program rad2

c) Se construiete subrutina
program rad3
use iflogm
implicit none
type(dialog) frad
include 'resource.fd'
external subfa
logical rtr,r1

rtr=dlginit(fereastra,frad)
rtr=dlgsetsub(frad,fa,subfa)
rtr=dlgmodal(frad)
r1=dlgmodal(frad)

print *, 's-a incheiat secventa'
read (*,*)

end program rad3

subroutine subfa (frad,fai,ce)
use iflogm
implicit none
type(dialog) frad
include 'resource.fd'
integer ce, fai,rtr,rin
real a, pa
character*20 text
character ch
rtr=dlgget(frad,fai,text)
write (*,*) 'fa=', text
read(text,*,iostat=rin) a
if(rin==0) then
read(text,*) ch
write (*,*) ch
write(*,*) 'a=',a
pa=a**(1./3.)
write(text,*) pa
rtr=dlgset(frad,fp,text)
rtr=dlgset(frad,msj,'Nu exista erori')
else
- 45 -

rtr=dlgset(frad,msj,'Exista o eroare la introducerea &
de la tastatura datei de intrare')
endif
end subroutine subfa

iv. Rezultate :
Se evalueaz poteniale erori cu ajutorul mai multor seturi de date:

Fig13.1

Fig13.2
v. Concluzii :
!Corectitudinea secvenei este confirmat de rezultat, respectiv de mesaj :
valoarea lui a ce a fost introdus de la tastatur este egal cu 125, iar n
consecin valoarea radicalului de ordinul trei este egal cu 5.
Pentru introducerea de la tastatur a unui text/caracter se creeaz
imposibilitatea calculrii radicalului de ordinul trei, deci mesajul va fi n
consecin.
- 46 -

14. Trasarea graficului funciei sinus
i. Enunul problemei :
S se traseze graficul funciei sinus .
ii. Analiza problemei :
Se furnizeaz lui i valori ntre 1 si 1000, se introduc legile de variaie ale funciei pe
cele 2 axe i se ruleaz programul.
iii. Programarea problemei :
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
Se deschide un nou proiect Fortran . . . se denumeste graf1 .
Se modific fiierul iniial graf1.f90 n ceea ce urmeaz :
program graf1

use avfrt
use avobjmod
implicit none
print *, 'sfarsit'
read*

end program graf1
n Solution Explorer se selecteaz F graf1 i cu apasarea butonului din dreapta
mouse-ului se selecteaz proprietile:

Fig14.1
- 47 -

Se deschide ferestra:

Fig14.2
Se selecteaz n stnga ferestrei Linker Imput
Se completeaz n rubrica Additional Dependencies cu avfrt.lib ole32.lib oleaut32.lib.
Se apas butonul OK .
Se completeaz programul , compilndu-se pe parcursul scrierii acestuia pentru o
verificare pe parcurs.

program graf1

use avfrt
use avobjmod
implicit none
real px(1000), py(1000)
real pi
integer i,st,vid,hroot,hg
pi=3.141593

do i=1,1000
px(i)=i*pi/100.
py(i)=sin(px(i))
enddo

call avstartwatch(loc(px),1,shape(px),av_real4,'px',st)
call avstartwatch(loc(py),1,shape(py),av_real4,'py',st)
call avnewviewer(vid)
hroot=avgetobject('/')
call avcreategraph2dobj(avgraphs(hroot),'sin1|plot:xyplot,xsource:/px,ysource:/py',hg)
call avvisible(vid,1,st)
print *, 'sfarsit'
read*

end program graf1
- 48 -

iv. Rezultate :

Fig14.3

Graficul funciei este reprezentat n programul Intel(R) Array Viewer:

Fig14.4

v. Concluzii :
! Graficul a fost trasat cu succes...

- 49 -

15. Calculul caracteristicilor dinamice ale unui sistem cu 1 gld
i. Enunul problemei :
S se calculeze caracteristicile dinamice ale unui sistem cu 1GLD cu ajutorul formulelor
de calcul din dinamica construciilor.
ii. Analiza problemei :

Date de intrare:

dimensiunile seciunii: b, h
lungimea barei: l
modulul de elasticitate al materialului: E

Date de ieire:

momentul de inerie I;
flexibilitatea ;
pulsaia ;
perioada T;
frecvena f.

Metoda de rezolvare:
Pentru calculul caracteristicilor dinamice ale barei ncastrate se vor folosi urmtoarele
formule de calcul din dinamica construciilor:
=

(15.1)
=

(15.2)
=


(15.3)
=

(15.4)
=

(15.5)
iii. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
- 50 -

program callb1
use iflogm
implicit none
include 'resource.fd'
type(dialog) din
logical rtr
external subgld
rtr=dlginit(ferjoi,din)
rtr=dlgsetsub(din,bsdia,subgld)
rtr=dlgsetsub(din,hsdia,subgld)
rtr=dlgsetsub(din,Edia,subgld)
rtr=dlgsetsub(din,hdia,subgld)
rtr=dlgsetsub(din,mdia,subgld)
rtr=dlgmodal(din)
call dlguninit(din)
end program callb1

subroutine subgld(din,var,ce)
use iflogm
implicit none
include 'resource.fd'
type(dialog) din
character*20 text
character ch
integer var,ce,rtr,rer
real bs, hs, E, h, m
real w, T, f, delta,I
!preluare date din dialog
!bsdia
rtr=dlgget(din,bsdia,text)
read(text,*,iostat=rer) bs
if (rer==0) then
read(text,*) ch
if ((ch=='f').or.(ch=='t').or.(ch=='F').or.(ch=='T')) then
rtr=dlgset(din,msj1,'eroare - bs de tip logic')
else
rtr=dlgset(din,msj1,'corect')
endif
else
rtr=dlgset(din,msj1,'eroare - bs de tip text')
endif
!hsdia
rtr=dlgget(din,hsdia,text)
read(text,*,iostat=rer) hs
if (rer==0) then
read(text,*) ch
if ((ch=='f').or.(ch=='t').or.(ch=='F').or.(ch=='T')) then
rtr=dlgset(din,msj2,'eroare - hs de tip logic')
else
rtr=dlgset(din,msj2,'corect')
endif
else
rtr=dlgset(din,msj2,'eroare - hs de tip text')
endif
!Edia
rtr=dlgget(din,Edia,text)
read(text,*,iostat=rer) E
if (rer==0) then
read(text,*) ch
if ((ch=='f').or.(ch=='t').or.(ch=='F').or.(ch=='T')) then
rtr=dlgset(din,msj3,'eroare - E de tip logic')
- 51 -

else
rtr=dlgset(din,msj3,'corect')
endif
else
rtr=dlgset(din,msj3,'eroare - E de tip text')
endif
!hdia
rtr=dlgget(din,hdia,text)
read(text,*,iostat=rer) h
if (rer==0) then
read(text,*) ch
if ((ch=='f').or.(ch=='t').or.(ch=='F').or.(ch=='T')) then
rtr=dlgset(din,msj4,'eroare - h de tip logic')
else
rtr=dlgset(din,msj4,'corect')
endif
else
rtr=dlgset(din,msj4,'eroare - h de tip text')
endif
!mdia
rtr=dlgget(din,mdia,text)
read(text,*,iostat=rer) m
if (rer==0) then
read(text,*) ch
if ((ch=='f').or.(ch=='t').or.(ch=='F').or.(ch=='T')) then
rtr=dlgset(din,msj5,'eroare - m de tip logic')
else
rtr=dlgset(din,msj5,'corect')
endif
else
rtr=dlgset(din,msj5,'eroare - m de tip text')
endif
!calculele caracteristicilor dinamice
!calcul moment de inertie
I=(bs*hs**3)/12
!calcul flexibilitate
delta=((h**3)/(3*E*I))
!calcul pulsatie
w=sqrt(1/((delta/100)*m))
!calcul perioada
T=2*3.14/w
!calcul frecventa
f=1/T
!afisare rezultate
!afisare I
write(text,*) I
rtr=dlgset(din,Idia,text)
!afisare delta
write(text,*) delta
rtr=dlgset(din,deltadia,text)
!afisare w
write(text,*) w
rtr=dlgset(din,wdia,text)
!afisare T
write(text,*) T
rtr=dlgset(din,Tdia,text)
!afisare f
write(text,*) f
rtr=dlgset(din,fdia,text)

end subroutine subgld
- 52 -

iv. Rezultate :

Fig15.1

Fig15.2
v. Concluzii :
!Se poate interveni asupra unei valori introduse, aadar se pot recalcula caracteristicile
sistemului, fr a nchide i redeschide aplicaia.
- 53 -

16. Calculul pentru expresiile: suma primelor n numere ntregi, factorial
de n, puterea n a lui n
i. Enunul problemei :
S se calculeze expresiile: suma primelor n numere ntregi, factorial de n, puterea n
a lui n
ii. Analiza problemei :
Date de intrare: variabila: n
Date de ieire: suma, factorial, putere
Metoda de rezolvare: se utilizeaz instruciunea do
iii. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.
!se calculeaza expresiile pentru suma primelor n nr intregi,factorial de n,
puterea n a lui n
!n este intreg strict pozitiv
program sumfactprod
implicit none
integer*8 n, contor, suma, factorial, putere
!date de intrare
write(*,1)
1 format('n=',$)
read(*,*) n
suma=0
factorial=1
putere=1
do contor=1,n
suma=suma+contor
factorial=factorial*contor
end do
putere=n**n
write(*,*)'suma=',suma
write(*,*)'factorial=',factorial
write(*,*)'putere=',putere
print *, 'End'
read*
end program sumfactprod

iv. Rezultate :

Fig16.1
- 54 -

v. Concluzii :
S-a utilizat dubla precizie in sensul obinerii unor rezultate exact.

17. Calculul c.m.m.d.c . i c.m.m.m.c . pentru dou variabile a i b.
i. Enunul problemei :
S se calculeze c.m.m.d.c . i c.m.m.m.c . pentru variabilele a i b date de la
tastatur.
ii. Analiza problemei :
Date de intrare: variabilele: a , b
Date de ieire: cmmdc, cmmmc
Metoda de rezolvare: reiniializarea variabelelor prin scaderea lor repetat, pn la
egalarea acestora
iii. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel
versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.

program cmmdc_cmmmc
implicit none
real cmmdc,cmmmc,P,tip
integer a,b
write(*,1)
1 format('tip=',$)
read(*,*) tip
write(*,2)
2 format('a=',$)
read(*,*) a
write(*,3)
3 format('b=',$)
read(*,*) b

if((b==0).or.(a==0)) then
write(*,*) 'nu se poate calcula'
else if (tip==1) then

do while(a/=b)
if(a>b)then
a=a-b
else
b=b-a
end if
cmmdc=a
end do

write(*,*) 'cmmdc pentru a si b este',cmmdc

else if( tip/=1) then
P=a*b
- 55 -


do while(a/=b)
if(a>b)then
a=a-b
else
b=b-a
endif
end do
cmmmc=P/a

write(*,*) 'cmmmc pentru a si b este',cmmmc

endif
print *, 'secventa terminata'
read*
end program cmmdc_cmmmc

i. Rezultate :

Fig16.1

Fig16.1

Fig16.1
vi. Concluzii :
! Conform unui algoritm de calcul, s-a rezolvat problema n cauz (cu ipotezele
menionate), folosind compilatorul Intel Fortran 90 sub Visual Studio 2008.

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