Documente Academic
Documente Profesional
Documente Cultură
1. Enunul problemei
2. Analiza problemei
Date de intrare: a ,b, c, d ,e, f, g, h, M1, q1, q2,P1, M2 Date de ieire:diagrame de eforturi Calculul deschiderii grinzii: L=a+b+c+d + e + f+ g + h Calculul reaciunilor:
Verificarea reaciunilor:
VA+VB+q2*f-q1*d-p1
Olteanu Marius
Page 2
Olteanu Marius
Page 3
3. 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 grind use iflogm implicit none include 'resource.fd' type (dialog)fint logical lret external dateint, calcul integer rtr,ce,de real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2 common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi integer idi lret=dlginit(fer,fint) lret=dlgsetsub(fint,aa,dateint) lret=dlgsetsub(fint,bb,dateint) lret=dlgsetsub(fint,cc,dateint) lret=dlgsetsub(fint,dd,dateint) lret=dlgsetsub(fint,ee,dateint) lret=dlgsetsub(fint,ff,dateint) lret=dlgsetsub(fint,gg,dateint) lret=dlgsetsub(fint,hh,dateint) lret=dlgsetsub(fint,mm1,dateint) lret=dlgsetsub(fint,pp1,dateint) lret=dlgsetsub(fint,qq1,dateint) lret=dlgsetsub(fint,mm2,dateint) lret=dlgsetsub(fint,qq2,dateint) lret=dlgsetsub(fint,tras,calcul) lret=dlgmodal(fint) read * end program grind subroutine dateint(fint,ce,de) use iflogm implicit none include 'resource.fd' type (dialog)fint logical lret character*20 text character*1 ch integer ce,de,eret,idi real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2 common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi idi=1 lret=dlgget(fint,aa,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) a
Olteanu Marius
Page 4
if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(a >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti a') return endif lret=dlgget(fint,bb,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) b if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(b >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti b') return endif lret=dlgget(fint,cc,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) c if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(c >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti c') return endif lret=dlgget(fint,dd,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) d if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(d >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti d') return endif lret=dlgget(fint,ee,text)
Olteanu Marius
Page 5
if(text/='') then read (text,*) ch read (text,*,iostat=eret) e if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(e >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti e') return endif lret=dlgget(fint,ff,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) f if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(f >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti f') return endif lret=dlgget(fint,gg,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) g if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(g >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti g') return endif lret=dlgget(fint,hh,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) h if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(h >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti h') return
Olteanu Marius
Page 6
endif lret=dlgget(fint,mm1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) m1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(m 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti M1') return endif lret=dlgget(fint,pp1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) p1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(p 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti P1') return endif lret=dlgget(fint,qq1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) q1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(q 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti q1') return endif lret=dlgget(fint,mm2,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) m2 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(m 2>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif
Olteanu Marius
Page 7
M2')
lret=dlgget(fint,qq2,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) q2 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(q 2>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti q2') return endif idi=0 lret=dlgset(fint,msj,'Datele de intrare sunt corecte.') write(*,*) end subroutine subroutine calcul(fint,ce,de) use iflogm use avobjmod use avfrt implicit none include 'resource.fd' type (dialog)fint logical lret character*20 text character*1 ch integer ce,de,eret,idi,i,st,vid,hroot,hg real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,verif,L common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi parameter nrint=1000 real xx(nrint+1),Tx(nrint+1),Mx(nrint+1),VA,VB if(idi==0) then !date de intrare corecte lret=dlgset(fint,msj,'trasare posibila') write (*,*) 'trasare posibila' L=a+b+c+d+e+f+g+h write(*,*) 'L=',L VA=1/L*(q1*d*(d/2+e+f+g+h)-q2*f*(f/2+g+h)+p1*h-m1+m2) VB=1/L*(p1*(L-h)-q2*f*(L-f/2-g-h)+q1*d*(a+b+c+d/2)+m1-m2) verif=VA+VB+q2*f-q1*d-p1 write(*,*) 'verif=',verif write(text,*)VA lret=dlgset(fint,vva,text) write(text,*)VB lret=dlgset(fint,vvb,text) write(text,*)verif lret=dlgset(fint,verificare,text) xx(1)=0. Tx(1)=VA mx(1)=0. xx(nrint+1)=L
Olteanu Marius
Page 8
Tx(nrint+1)=-VB Mx(nrint+1)=0. do i=2,nrint xx(i)=xx(i-1)+L/nrint if (xx(i)<a) then !write(*,*) 'intervalul 1' Tx(i)=VA Mx(i)=VA*xx(i) elseif (xx(i)<(a+b)) then !write(*,*) 'intervalul 2' Tx(i)=VA Mx(i)=VA*xx(i)+m1 elseif (xx(i)<(a+b+c)) then !write(*,*) 'intervalul 3' Tx(i)=VA Mx(i)=VA*xx(i)+m1-m2 elseif (xx(i)<(a+b+c+d)) then !write(*,*) 'intervalul 4' Tx(i)=VA-q1*(xx(i)-a-b-c) Mx(i)=VA*xx(i)+m1-m2-q1*(xx(i)-a-b-c)**2/2 elseif (xx(i)<(a+b+c+d+e)) then !write(*,*) 'intervalul 5' Tx(i)=VA-q1*d Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2) elseif (xx(i)<(a+b+c+d+e+f)) then !write(*,*) 'intervalul 6' Tx(i)= VA-q1*d+q2*(xx(i)-(a+b+c+d+e)) Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*((xx(i)-(a+b+c+d+e))**2)/2 elseif (xx(i)<(a+b+c+d+e+f+g)) then !write(*,*) 'intervalul 7' Tx(i)=VA-q1*d+q2*f Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*f*(xx(i)-(a+b+c+d+e+f/2)) else !write(*,*) 'intervalul 8' Tx(i)=VA-q1*d+q2*f-p1 Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*f*(xx(i)-(a+b+c+d+e+f/2))p1*(xx(i)-(L-h)) end if Mx(i)=-Mx(i) enddo call avstartwatch(loc(xx),1,shape(xx),av_real4,'xx',st) call avstartwatch(loc(Tx),1,shape(Tx),av_real4,'Tx',st) call avstartwatch(loc(Mx),1,shape(Mx),av_real4,'Mx',st) call avnewviewer(vid) hroot=avgetobject('/') call avcreategraph2dobj(avgraphs(hroot),'diagft|plot:xyplot,xsource:/xx,ysource: /Tx',hg) call avcreategraph2dobj(avgraphs(hroot),'diagm|plot:xyplot,xsource:/xx,ysource:/ Mx',hg) call avvisible(vid,1,st) else !eroare la datele de intrare lret=dlgset(fint,msj,'trasare imposibila') write (*,*) 'trasare imposibila' end if end subroutine
Olteanu Marius
Page 9
4. Exemplu de calcul
Fig 1.1
Olteanu Marius
Page 10
Fig. 1.2
Fig. 1.3
Olteanu Marius Page 11
Se observ faptul c pentru valori negative ale dimensiunilor grinzii nu se pot trasa diagrame. Valabil acest lucru i pentru introducerea de la tastatur a caracterelor.
5. Concluzii i recomandri
Diagramele pot fi trasate doar cu ajutorul programelor Microsoft Visual Studio sub compilatorul Fortran ,iar trasarea propriu zis se realizeaz cu ajutorul programului Intel Array Viewer.
Olteanu Marius
Page 13