Sunteți pe pagina 1din 48

Universitatea Tehnic Gheorghe Asachi din Iai Facultatea de Construcii i Instalaii

PROGRAMARE AVANSAT PENTRU


PROIECTARE I CERCETARE N CONSTRUCII
LUCRAREA II

Masterand Solonaru Maria Reabilitarea i Creterea Siguranei Construciilor

2011-2012

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 1
Calculul ariei unui triunghi oarecare utiliznd formula lui Heron varianta 1.

1. Enunul problemei S se calculeze aria unui triunghi oarecare avnd date lungimile laturilor acestuia. 2. Analiza problemei Date de intrare: Date de ieire: Formula lui Heron: = ( ) ,
++ 2

a,b,c laturile triunghiului S aria triunghiului

, unde p este semiperimetrul triunghiului dat.

3. Schema logic a problemei

START

read a,b,c

p=(a+b+c)/2

S=sqrt[p(p-a)(p-b)(p-c)]

write S

END

4. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. n aceast prim variant nu sunt introduse atenionri i/sau condiii asupra datelor introduse, adic asupra laturilor triunghiului.
Solonaru Maria Page 2

Programare avansat pentru proiectare i cercetare n construcii program AriaTriunghi !Calculul ariei unui triunghi cu formula lui Heron !Declaratii implicit none real a,b,c,S,p write(*,*) 'Program - Calculul ariei unui triunghi' write(*,*) 'Laturile triunghiului sunt:' !Citirea datelor write(*,*)'a=' read(*,*) a write(*,*)'b=' read(*,*) b write(*,*)'c=' read(*,*) c !Calculul semiperimetrului p=(a+b+c)/2. !Calculul ariei S=sqrt(p*(p-a)*(p-b)*(p-c)) !Afisarea rezultatului write(*,*) 'Aria triunghiului este =',S print *,'End' read* end program AriaTriunghi

Solonaru Maria

Page 3

Programare avansat pentru proiectare i cercetare n construcii

5. Rezultate Validitatea rezultatului depinde de corectitudinea datelor introduse.

Calculul ariei unui triunghi oarecare utiliznd formula lui Heron varianta 2.

1. Enunul problemei S se calculeze aria unui triunghi oarecare avnd date lungimile laturilor acestuia. 2. Analiza problemei Date de intrare: Date de ieire: Formula lui Heron: = ( ) ,
++ 2

a,b,c laturile triunghiului S aria triunghiului

, unde p este semiperimetrul triunghiului dat.

3. Schema logic a problemei

Solonaru Maria

Page 4

Programare avansat pentru proiectare i cercetare n construcii

START

read a,b,c

P=(a+b+c)/2

S=sqrt[p(p-a)(p-b)(p-c)]

write p,S

END

4. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. Varianta curent ia n considerare validitatea datelor introduse, astfel c sunt puse condiii pentru laturile triunghiului care trebuie s aib valori pozitive iar suma a dou laturi oarecare va fi strict mai mare dect valoarea celei de-a treia latur a triunghiului. Aceste condiii au fost integrate n program folosind instruciunea IF; structura programului folosete algoritmi liniari cu ramnificaii fr bucle de ntoarcere.
program heron2 ! calculul ariei cu formila lui Heron ! declaratii implicit none real a,b,c,p,S !introducere date write(*,*) 'Calculul ariei unui triunghi' write(*,*) 'Laturile triunghiului sunt:' write(*,1) 1 format('a=',$) read(*,*) a write(*,2) 2 format('b=',$) read(*,*) b write(*,3) 3 format('c=',$) read(*,*) c !conditii asupra datelor introduce if((a>0.).and.(b>0.).and.(c>0.).and.((a+b)>c).and.((b+c)>a).and.((c+a)>b)) then !calculul semispatiului p=(a+b+c)/2. write (*,*)'Semiperimetrul este, p=',p ! calculul ariei S=sqrt(p*(p-a)*(p-b)*(p-c)) ! afisarea rezultatului Solonaru Maria Page 5

Programare avansat pentru proiectare i cercetare n construcii write(*,*) 'Aria este, S =',S print *,'End' else write(*,*) 'Date de intrare incompatibile cu conditiile impuse!' write(*,*) 'Incercati alte dimensiuni pentru laturile triunghiului!' endif read* end program heron2

5. Rezultate Validitatea rezultatului depinde de corectitudinea datelor introduse.

Solonaru Maria

Page 6

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 7

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 2
Calculul ipotenuzei unui triunghi dreptunghic cnd se cunosc dimensiunile catetelor.

1. Enunul problemei S se afle ipotenuza unui triunghi dreptunghic cnd se cunosc cele dou catete. 2. Analiza problemei Date de intrare : a,b catetele triunghiului Date de ieire : c ipotenuza = 2 + 2 a c

b n rezolvare se folosete formula lui Pitagora i sunt puse condiii pentru valorile variabilelor de sub radical care vor fi strict pozitive. 3. Programarea problemei
program joi implicit none ! Declaratii real a,b,c write(*,*) 'Calculul ipotenuzei unui triunghi dreptunghic' ! Introducere date write(*,*)'a=' read(*,*) a Solonaru Maria Page 8

Programare avansat pentru proiectare i cercetare n construcii write(*,*)'b=' read (*,*) b if ((a>0.).and.(b>0.)) then c=sqrt(a**2+b**2) write(*,*) 'c=sqrt(a^2+b^2)=',c print *,'Sfarsit!' else write(*,*) 'Valori ale catetelor negative si/sau nule! Try again!' endif read* end program joi

4. Rezultate

Solonaru Maria

Page 9

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 3
Rezolvarea ecuaiei de gradul II

1. Enunul problemei S se rezolve ecuaia de gradul II. 2. Analiza problemei 2 + + = 0


Solonaru Maria Page 10

Programare avansat pentru proiectare i cercetare n construcii

Date de intrare: a,b,c coeficienii ecuaiei de gradul II Date de ieire: x1 , x2

3. Schema logic
START

read a,b,c

a0
DA >

NU

b0
DA

NU

c0
DA

NU

::0
=

<

x=

x1=x2=

x1=x2=

x1=x2=

write x

write 'imposibil

write 'egalitate'

write x1, x2

END

4. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. Structura programului scris ia n considerare toate variantele posibile conform schemei logice prezentate mai sus.
program ecdgrII1 !Rezolvarea ecuatiei de gradul II !Declaratii implicit none real a,b,c,x1,x2,pi,pr,delta,x !Instructiuni executabile write(*,*) 'Rezolvarea ecuatiei de gradul II' write(*,*) 'ax^2+bx+c=0' !Introducere date write (*,1) 1 format ('a= ',$) read (*,*) a write (*,2) Solonaru Maria Page 11

Programare avansat pentru proiectare i cercetare n construcii 2 format ('b= ',$) read (*,*) b write (*,3) 3 format ('c= ',$) read (*,*) c !Test asupra coeficientului a if (a/=0.) then write (*,*) ' a nenul' !calculul discriminantului delta=b*b-4.*a*c write(*,*) 'delta este' ,delta !Test asupra valorii discriminantului if (delta) 11,12,13 !Discriminant negativ, radacini complexe 11 write (*,*) 'delta negativ-solutii complexe' pr=-b/2./a !parte reala pi=sqrt(-delta)/2./a !parte imaginara write (*,*) 'x1=', pr,'+i*',pi write (*,*) 'x2=', pr,'-i*',pi goto 14 12 write (*,*) 'delta nul' x1=-b/(2.*a) x2=x1 write (*,*) 'x1=x2 = ',x1 goto 14 13 write (*,*) 'delta pozitiv' x1=(-b+sqrt(b*b-4.*a*c))/2./a x2=(-b-sqrt(b*b-4.*a*c))/2./a write(*,*) 'x1=',x1 write(*,*) 'x2=',x2 14 continue else !Ecuatia degenereaza intr-o ecuatie de gradul I write(*,*) 'Coeficientul a este nul, ecuatia devine de gradul I' !Test pentru coeficientul b if (b==0) then !Ecuatie degenerata de grad 0 write(*,*) 'si coeficientul b este nul' !Test asupra coeficientului c if (c==0) then !Toti coeficientii sunt nuli write(*,*) 'Toti coeficientii sunt nuli! Ecuatia este o identitate.' else !Coeficientii a si b sunt nuli, iar c este nenul write(*,*) 'Ecuatia nu are solutii!' endif else !Ecuatie de gradul I, rezolvabila write (*,*) 'Coeficientul b este nenul, solutie reala' x=-c/b write(*,*) 'x=', x endif endif print *, 'the end' read * end program ecdgrII1

Solonaru Maria

Page 12

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 13

Programare avansat pentru proiectare i cercetare n construcii

5. Rezultate

Solonaru Maria

Page 14

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 15

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 4
Calculul logaritmului zecimal al unui numr folosind fereastr de dialog-varianta 1

1. Enunul problemei S se calculeze logaritmul n baza zece a unui numr dat. 2. Analiza problemei
Solonaru Maria Page 16

Programare avansat pentru proiectare i cercetare n construcii

Date de intrare: a Date de ieire: b valoarea logaritmului zecimal = 10 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. Pentru calculul logaritmului zecimal al unui numr se utilizeaz ferestre de dialog. Nu sunt condiionri asupra datelor introduse. Acest program calculeaz logaritmul zecimal pentru o singur valoare introdus; pentru a obine logaritmul zecimal pentru alt numr se va rula din nou programul.
program fereastradialog1 !Masterand Maria Solonaru, RCSC an I use iflogm implicit none include 'resource.fd' type(dialog) dint logical rtr character *20 text real a,b write (*,*) 'Calculul logaritmului zecimal al unui numar' !utilizare ferestre de dialog rtr=dlginit(de,dint) rtr=dlgmodal(dint) rtr=dlgget(dint,adlg,text) write (*,*) text !transformare a din text in numar read(text,*) a write(*,*) 'a= ',a b=log10(a) write (*,*) 'log10(a)=',b !transformare din numar in text write(text,*) b rtr=dlgset(dint,bdlg,text) rtr=dlgmodal(dint) print *, 'the end' read * end program fereastradialog1

Solonaru Maria

Page 17

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 18

Programare avansat pentru proiectare i cercetare n construcii

Calculul logaritmului zecimal al unui numr folosind fereastr de dialog-varianta 2

1. Enunul problemei S se calculeze logaritmul n baza zece a unui numr dat. 2. Analiza problemei Date de intrare: a Date de ieire: b valoarea logaritmului zecimal = 10 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. n aceast variant se folosete instruciunea DO WHILE. Programul prezint o mbuntire fa de prima variant, n sensul c se poate calcula logaritmul zecimal pentru mai multe numere introduse.
program ferdi2 !masterand Maria Solonaru, RCSC an I use iflogm implicit none include 'resource.fd' type(dialog) dint Solonaru Maria Page 19

Programare avansat pentru proiectare i cercetare n construcii logical rtr,rtr1 character *20 text real a,b write (*,*) 'Calculul logaritmului zecimal pentru n numere' !utilizare ferestre de dialog rtr=dlginit(de,dint) rtr1=1 do while (rtr1==1) rtr1=dlgmodal(dint) rtr=dlgget(dint,adlg,text) write (*,*) text !transformare a din text in numar read(text,*) a write(*,*) 'a= ',a b=log10(a) write (*,*) 'log10(a)= ',b !transformare din numar in text write(text,*) b rtr=dlgset(dint,bdlg,text) enddo call dlguninit(dint) write (*,*) rtr print *, 'the end' read * end program ferdi2

4. Rezultate

Solonaru Maria

Page 20

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 21

Programare avansat pentru proiectare i cercetare n construcii

Calculul logaritmului zecimal al unui numr folosind fereastr de dialog cu callback - varianta 3

1. Enunul problemei S se calculeze logaritmul n baza zece a unui numr dat. 2. Analiza problemei Date de intrare: a Date de ieire: b valoarea logaritmului zecimal = 10 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008. Fa de primele dou variante, aceasta propune condiionri pentru valorile introduse care trebuie s fie pozitive, nenule i s nu conin litere ori semne. De asemenea, aceasta variant folosete ferestre de dialog cu callback.
program calldd1 !masterand Maria Solonaru, RCSC an I use iflogm implicit none include 'resource.fd' Solonaru Maria Page 22

Programare avansat pentru proiectare i cercetare n construcii type(dialog) dint logical rtr,rtr1,ve character *20 text real a,b write (*,*) 'Utilizare ferestre de dialog cu callback ' rtr=dlginit(de,dint) rtr1=1 do while (rtr1==1) rtr1=dlgmodal(dint) rtr=dlgget(dint,adlg,text) !transformare a din text in numar read(text,*,iostat=ve) a if (ve==0) then if (a<=0.) then rtr=dlgset(dint,bdlg,'Numar negativ sau zero!') else b=log10(a) !transformare b din numar in text write(text,*) b rtr=dlgset(dint,bdlg,text) endif else rtr=dlgset(dint,bdlg,'Error! ') endif enddo call dlguninit(dint) print *, 'the end' read * end program calldd1

4. Rezultate

Solonaru Maria

Page 23

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 24

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 25

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 5
Calculul funciei cosinus prin dezvoltarea n serie-varianta 1

1. Enunul problemei S se calculeze cosinusul unui numr prin dezvoltarea n serie avnd un numr finit i cunoscut de termeni. 2. Analiza problemei Date de intrare: x, n(numarul de iteratii) Date de ieire: cosx = 1 2! + 4! + (1) 2 ! = 0 1 + 2 + (1) 2 (1) = 2! 2(+1) (+1) (1) = +1 (2( + 1))! +1 2 = 2 + 1 (2 + 2) Problema se va rezolva n simpl precizie cu un numr finit de iteraii. 3. Schema logic
2 4 2

Solonaru Maria

Page 26

Programare avansat pentru proiectare i cercetare n construcii

START

read x, n

cs=1 t=1

i=1 2 2(2 1)

cs=cs+t i=i+1
DA

i
NU

write cs

STOP

4. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program fctcos !masterand Maria Solonaru, RCSC an I !calculul cosinusului cu un numar finit si cunoscut de termeni implicit none real x,cs,t integer i,n write (*,*) 'Calculul functiei cosinus prin dezvoltare in serie' !introducere date write (*,1) 1 format ('Argumentul x= ',$) read (*,*) x write (*,2) 2 format ('Numarul de iteratii n= ',$) read (*,*) n cs=1. Solonaru Maria Page 27

Programare avansat pentru proiectare i cercetare n construcii t=1. i=1 3t=-t*x/(2.*i)*x/(2.*i-1.) cs=cs+t write (*,*) i,t,cs i=i+1 if (i-n) 3,3,4 4 write(*,*) 'cos(',x,') = ',cs write(*,*) 'cos(',x,') = ',cos(x) print *, 'fin' read * end program fctcos

5. Rezultate

Solonaru Maria

Page 28

Programare avansat pentru proiectare i cercetare n construcii

Calculul funciei cosinus prin dezvoltarea n serie-varianta 2

1. Enunul problemei S se calculeze cosinusul unui numr prin dezvoltarea n serie avnd un numr finit i cunoscut de termeni. 2. Analiza problemei Date de intrare: x, n(numarul de iteraii) Date de ieire: cosx = 1
2 2!

4 4!

2 (1) = 2! 2(+1) (1)(+1) = +1 (2( + 1))! +1 2 = 2 + 1 (2 + 2)

+ (1) 2 ! = 0 1 + 2 + (1)

Problema se va rezolva n simpl precizie cu un numr finit de iteraii, folosind instruciunea do . 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program cosinus2 ! masterand Maria Solonaru, RCSC an I !calculul cosinusului cu un numar finit si cunoscut de termeni implicit none real x,cs,t integer i,n write (*,*) 'Dezvoltarea cosinusului' !introducere date write (*,1) 1 format ('Argumentul x= ',$) read (*,*) x write (*,2) 2 format ('Numarul de iteratii n= ',$) read (*,*) n cs=1. t=1. do i=1,n t=-t*x/(2.*i)*x/(2.*i-1.) cs=cs+t write (*,*) i,t,cs enddo 4 write(*,*) 'cos(',x,') = ',cs write(*,*) 'cos(',x,') = ',cos(x) print *, 'fin' read * end program cosinus2 Solonaru Maria Page 29

Programare avansat pentru proiectare i cercetare n construcii

4. Rezultate

Solonaru Maria

Page 30

Programare avansat pentru proiectare i cercetare n construcii

Calculul funciei cosinus prin dezvoltarea n serie - varianta 3

1. Enunul problemei S se calculeze cosinusul unui numr prin dezvoltarea n serie avnd un numr finit i necunoscut de termeni. 2. Analiza problemei Date de intrare: x, (eroarea) Date de ieire: cosx = 1
2 2!

4 4!

2 (1) = 2! 2(+1) (1)(+1) = +1 (2( + 1))! +1 2 = 2 + 1 (2 + 2)

+ (1) 2 ! = 0 1 + 2 + (1)

Problema se va rezolva n simpl precizie cu un numr finit de iteraii, utiliznd eroarea epsilon. 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program coserror !masterand Maria Solonaru, RCSC an I !calculul cosinusului cu un numar finit si necunoscut de termeni implicit none real x,cs,t,eps integer i write (*,*) 'Dezvoltarea cosinusului avand data eroarea' !introducere date write (*,1) 1 format ('argumentul x= ',$) read (*,*) x write (*,2) 2 format ('eroarea epsilon= ',$) read (*,*) eps cs=1. t=1. i=1 3t=-t*x/(2.*i)*x/(2.*i-1.) cs=cs+t write (*,*) i,t,cs i=i+1 if (abs(eps)-abs(t))3,3,4 4 write(*,*) 'cos(',x,') = ',cs write(*,*) 'cos(',x,') = ',cos(x) print *, 'fin' Solonaru Maria Page 31

Programare avansat pentru proiectare i cercetare n construcii read * end program coserror

4. Rezultate

Calculul funciei cosinus prin dezvoltarea n serie - varianta 4

1. Enunul problemei
Solonaru Maria Page 32

Programare avansat pentru proiectare i cercetare n construcii

S se calculeze cosinusul unui numr prin dezvoltarea n serie avnd un numr finit i necunoscut de termeni. 2. Analiza problemei Date de intrare: x, (eroarea) Date de ieire: cosx = 1
2 2!

4 4!

2 (1) = 2! 2(+1) (+1) (1) = +1 (2( + 1))! +1 2 = 2 + 1 (2 + 2)

+ (1) 2 ! = 0 1 + 2 + (1)

Problema se va rezolva n simpl precizie, utiliznd eroarea epsilon i folosind instruciunea do while . 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program cos4 !masterand Maria Solonaru, RCSC an I !Calculul cosinusului cu un numar finit si necunoscut de termeni implicit none real x,cs,t,eps integer i write (*,*) 'dezvoltarea cosinusului' !introducere date write (*,1) 1 format ('argumentul x= ',$) read (*,*) x write (*,2) 2 format ('eroarea epsilon= ',$) read (*,*) eps cs=1. t=1. i=1 do while (abs(eps)<=abs(t)) t=-t*x/(2.*i)*x/(2.*i-1.) cs=cs+t write (*,*) i,t,cs i=i+1 enddo 4 write(*,*) 'cos(',x,') = ',cs write(*,*) 'cos(',x,') = ',cos(x) print *, 'fin' read * end program cos4 Solonaru Maria Page 33

Programare avansat pentru proiectare i cercetare n construcii

4. Rezultate

Solonaru Maria

Page 34

Programare avansat pentru proiectare i cercetare n construcii

Calculul funciei cosinus prin dezvoltarea n serie - varianta 5

1. Enunul problemei S se calculeze cosinusul unui numr prin dezvoltarea n serie avnd un numr finit i necunoscut de termeni. 2. Analiza problemei Date de intrare: x, (eroarea) Date de ieire: cosx = 1
2 2!

4 4!

2 (1) = 2! 2(+1) (+1) (1) = +1 (2( + 1))! +1 2 = 2 + 1 (2 + 2)

+ (1) 2 ! = 0 1 + 2 + (1)

Problema se va rezolva n dubla precizie, utiliznd eroarea epsilon i folosind instruciunea do while . 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program cos5 !masterand Maria Solonaru, RCSC an I !calculul cosinusului cu un numar finit si necunoscut de termeni !varianta double precision implicit none real*8 x,cs,t,eps integer i write (*,*) 'dezvoltarea cosinusului' write (*,*) 'varianta in dubla precizie' !introducere date write (*,1) 1 format ('argumentul x= ',$) read (*,*) x write (*,2) 2 format ('eroarea epsilon= ',$) read (*,*) eps cs=1.d0 t=1.d0 !start iteratii-instructiunea do while i=1 do while (dabs(eps)<=dabs(t)) t=-t*x/(2.d0*i)*x/(2.d0*i-1.d0) cs=cs+t write (*,*) i,t,cs Solonaru Maria Page 35

Programare avansat pentru proiectare i cercetare n construcii i=i+1 enddo 4 write(*,*) 'cos(',x,') = ',cs write(*,*) 'cos(',x,') = ',dcos(x) print *, 'fin' read * end program cos5

4. Rezultate

Solonaru Maria

Page 36

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 6
Calculul caracteristicilor dinamice ale unui sistem cu 1 GLD

1. Enunul problemei S se calculeze caracteristicile dinamice ale unui sistem cu un grad de libertate dinamic dat. 2. Analiza problemei Date de intrare: bs, hs, m, h, E Date de ieire: I, A, T, , bs , hs dimensiunile seciunii transversale m masa sistemului h nalimea E modulul de elasticitate transversal I momentul de inerie A aria seciunii transversale - flexibilitatea - pulsaia T perioada Caracteristicile secionale i dinamice se calculeaz cu relaiile: = = =
3 12

3 3 1
1 Fig. Structur cu 1GDL

3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.

Solonaru Maria

Page 37

Programare avansat pentru proiectare i cercetare n construcii program calcdin1 ! Masterand Solonaru, RCSC an I use iflogm implicit none external sb1 external sb2 include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text real ier real m,bs,hs,h,E common ier,m,bs,hs,h,E ! stabilire indice de eroare pe eroare existenta ier=0 write(*,*) 'utilizare ferestre de dialog' rtr=dlginit(dext,dint) rtr=dlgsetsub(dint,mdlg,sb1) rtr=dlgsetsub(dint,bsdlg,sb1) rtr=dlgsetsub(dint,hsdlg,sb1) rtr=dlgsetsub(dint,hdlg,sb1) rtr=dlgsetsub(dint,Edlg,sb1) rtr=dlgsetsub(dint,calcul,sb2) rtr=dlgmodal(dint) print *, 'the end' read * call dlguninit(dint) end program calcdin1 subroutine sb1(dint,valc,ce) use iflogm implicit none include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text integer valc,ce real ier real m,bs,hs,h,E common ier,m,bs,hs,h,E rtr=dlgget(dint,mdlg,text) ! transformare m din text in numar read(text,*,iostat=ve) m if (ve==0) then ! ramura cu valoare acceptata if (m<=0.) then rtr=dlgset(dint,msj,' m numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,' Eroare la datele de intrare!') ier=0 return endif rtr=dlgget(dint,bsdlg,text) ! transformare bs din text in numar read(text,*,iostat=ve) bs if (ve==0) then ! ramura cu valoare acceptata if (bs<=0.) then Solonaru Maria Page 38

Programare avansat pentru proiectare i cercetare n construcii rtr=dlgset(dint,msj,' bs numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,' Eroare la datele de intrare!') ier=0 return endif rtr=dlgget(dint,hsdlg,text) ! transformare hs din text in numar read(text,*,iostat=ve) hs if (ve==0) then ! ramura cu valoare acceptata if (hs<=0.) then rtr=dlgset(dint,msj,' hs numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,' Eroare la datele de intrare!') ier=0 return endif rtr=dlgget(dint,hdlg,text) ! transformare h din text in numar read(text,*,iostat=ve) h if (ve==0) then ! ramura cu valoare acceptata if (h<=0.) then rtr=dlgset(dint,msj,' h numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,' Eroare la datele de intrare!') ier=0 return endif rtr=dlgget(dint,Edlg,text) ! transformare E din text in numar read(text,*,iostat=ve) E if (ve==0) then ! ramura cu valoare acceptata if (E<=0.) then rtr=dlgset(dint,msj,' h numar negativ sau zero !') ier=0 return endif else ! ramura cu eroare rtr=dlgset(dint,msj,' Eroare la datele de intrare!') ier=0 return endif rtr=dlgset(dint,msj,'') ier=1 write(*,*) 'ok!' Solonaru Maria Page 39

Programare avansat pentru proiectare i cercetare n construcii end subroutine sb1 subroutine sb2(dint,valc,ce) use iflogm implicit none include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text integer valc,ce real ier real m,bs,hs,h,E common ier,m,bs,hs,h,E real arie,miner,delta,omega,T if (ier==0) then rtr=dlgset(dint,msj,' Nu se pot face calculele!') else rtr=dlgset(dint,msj,' Se pot face calculele!') arie=bs*hs write(text,*) arie rtr=dlgset(dint,ariedlg,text) miner=bs*hs**3/12. write(text,*) miner rtr=dlgset(dint,minerdlg,text) delta=h**3/3/miner/E*1.e3 write(text,*) delta rtr=dlgset(dint,deltadlg,text) omega=1./sqrt(delta*m) write(text,*) omega rtr=dlgset(dint,omegadlg,text) T=2.*3.1459265/omega write(text,*) T rtr=dlgset(dint,Tdlg,text) ! se fac calculele si se afiseaza rezultatele endif write(*,*) 'OK!' end subroutine sb2

4. Rezultate

Solonaru Maria

Page 40

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 41

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 42

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 7
Calculul ariei unui triunghi

1. Enunul problemei S se calculeze aria unui triunghi cunoscnd laturile acestuia. 2. Analiza problemei n rezolvarea problemei se folosete formula lui Heron i sunt puse condiii asupra datelor introduse. Programul presupune folosirea unei ferestre de dialog. Formula lui Heron: = ( ) ,
++ 2

, unde p este semiperimetrul triunghiului dat.

3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.
program ariaunuitriunghidialog ! Masterand Maria Solonaru, RCSC an I use iflogm implicit none external sb1 external sb2 include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text real a,b,c,p,S common a,b,c,p,S write(*,*) 'Calculul ariei unui triunghi' write(*,*) 'Se utilizeaza ferestre de dialog' rtr=dlginit(dext,dint) rtr=dlgsetsub(dint,adlg,sb1) rtr=dlgsetsub(dint,bdlg2,sb1) rtr=dlgsetsub(dint,cdlg,sb1) rtr=dlgsetsub(dint,calcul,sb2) rtr1=dlgmodal(dint) print *, 'the end' read * call dlguninit(dint) end program ariaunuitriunghidialog subroutine sb1(dint,valc,ce) use iflogm implicit none include 'resource.fd' type(dialog) dint Solonaru Maria Page 43

Programare avansat pentru proiectare i cercetare n construcii logical rtr,rtr1,ve character*20 text integer valc,ce real a,b,c,p,S common a,b,c,p,S rtr=dlgget(dint,adlg,text) !transformare a din text in numar read(text,*,iostat=ve) a if (ve==0) then !ramura cu valoare neacceptata if (a<=0.) then rtr=dlgset(dint,msj,'a numar negativ sau zero!') endif else !ramura cu valoare acceptata rtr=dlgset(dint,msj,'ok!') endif rtr=dlgget(dint,bdlg2,text) !transformare b din text in numar read(text,*,iostat=ve) b if (ve==0) then !ramura cu valoare neacceptata if (b<=0.) then rtr=dlgset(dint,msj,'b numar negativ sau zero!') endif else !ramura cu valoare acceptata rtr=dlgset(dint,msj,'ok!') endif rtr=dlgget(dint,cdlg,text) !transformare c din text in numar read(text,*,iostat=ve) c if (ve==0) then !ramura cu valoare neacceptata if (c<=0.) then rtr=dlgset(dint,msj,'c numar negativ sau zero!') endif else !ramura cu valoare acceptata rtr=dlgset(dint,msj,'ok!') endif end subroutine sb1 subroutine sb2(dint,valc,ce) use iflogm implicit none include 'resource.fd' type(dialog) dint logical rtr,rtr1,ve character*20 text integer valc,ce real a,b,c,p,S common a,b,c,p,S if((a>0.).and.(b>0.).and.(c>0.).and.((a+b)>c).and.((b+c)>a).and.((c+a)>b)) then rtr=dlgset(dint,msj,'Datele de intrare sunt corecte!') p=(a+b+c)/2 write(text,*) p S=sqrt(p*(p-a)*(p-b)*(p-c)) write(*,*) 'Aria este : ',S rtr=dlgset(dint,rezdlg,text) else Solonaru Maria Page 44

Programare avansat pentru proiectare i cercetare n construcii rtr=dlgset(dint,msj,'Datele de intrare nu sunt corecte!') endif end subroutine sb2

4. Rezultate

Solonaru Maria

Page 45

Programare avansat pentru proiectare i cercetare n construcii

PROBLEMA NR. 8
Trasarea graficului unei funcii.

1. Enunul problemei S da o functie. Se cere s se traseze graficul funciei. = sin 2 + cos ) ( 2 2. Analiza problemei Folosind instruciunea DO se genereaz o serie de valori pentru variabila x, urmnd s se calculeze valorile funciei n aceste puncte. Pentru trasarea graficului funciei se folosete Array Visualizer. 3. Programarea problemei Pentru rezolvarea problemei s-a folosit limbajul de programare Fortran 90 sub implementarea Intel versiunea 11.0.061 n cadrul mediului de programare Microsoft Visual Studio 2008.

Solonaru Maria

Page 46

Programare avansat pentru proiectare i cercetare n construcii program graf1 !masterand Solonaru Maria, RCSC, an I !Graficul unei functii folosind Array Visualizer use avfrt use avobjmod implicit none real pi integer status,st,i integer viewerid, hroot,hgraph real px(20000), py(20000) pi=3.14159265 !Generarea argumentului si a functiei do i=1,20000 px(i)=(i-1)*6*pi/20000. py(i)=sin(2.*px(i))+cos(px(i)/2.) enddo call avstartwatch(loc(px),1,shape(px),av_real4,"px",status) call avstartwatch(loc(py),1,shape(py),av_real4,"py",status) call avnewviewer(viewerid) hroot=avgetobject("/") call avcreategraph2dobj(avgraphs(hroot),"plt|plot:xyplot,xsource:/px,ysource:/py ",hgraph) call avvisible(viewerid,1,status) print *, 'the end!' read* end program graf1

4. Rezultate

Solonaru Maria

Page 47

Programare avansat pentru proiectare i cercetare n construcii

Solonaru Maria

Page 48

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