انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: یک سوال از فرترن  (دفعات بازدید: 6357 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
یک سوال از فرترن
« : 19 فروردین 1392، 07:46 ب‌ظ »
بسم الله.
سلام.
فرض کنید یه فایل رو تو فرترن باز میکنیم و تو هر مرحله یک سری دیتا بهش اضافه میکنیم ولی قبلش میخواهیم چک کنیم که دیتا تکراری نباشه تو همون فایل.چه راهی ساده تره بنظرتون.
الا من یه همچین برنامه ای نوشتم ولی برنامه خطای رسیدن به انتهای فایل رو میده.میخوام بدونم چطوری بگم به فرترن که تو مرحله ای که چک میکنه که دیتا تکراریه یا نه به ته فایل که رسید حلقه رو رها کنه و دیگه ادامه نده؟!
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

آفلاین Mostafa Jalilianfar

  • High Hero Member
  • *
  • ارسال: 1085
  • جنسیت : پسر
پاسخ : یک سوال از فرترن
« پاسخ #1 : 20 فروردین 1392، 12:38 ق‌ظ »
من فرترن بلد نیستم ولی توی سی پلاس که eof انتهای فایل رو مشخص می‌کنه که میشه اون رو توی while گذاشت تا انتهای فایل رو چک کنه و با یک for تکراری بودن رو چک کرد
دنبال دستوری بگرد که بشه باهاش فهمید که به انتهای فایل رسیدی البته فایلهای اسکی فکر کنم با کاراکتر /0 خاتمه پیدا می‌کنن که این رو هم می‌تونی امتحان کنی
به دلیل ترک انجمن لطفا با این ایمیل MustafaJF[at]Aol[dot]com تماس برقرار کنید و از پیام خصوصی استفاده نکنید

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : یک سوال از فرترن
« پاسخ #2 : 20 فروردین 1392، 01:19 ق‌ظ »
INTEGER :: Reason
INTEGER :: a, b, c


DO
   READ(*,*,IOSTAT=Reason)  a, b, c
   IF (Reason > 0)  THEN
      ... something wrong ...
   ELSE IF (Reason < 0) THEN
      ... end of file reached ...
   ELSE
      ... do normal stuff ...
   END IF
END DO

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
پاسخ : یک سوال از فرترن
« پاسخ #3 : 20 فروردین 1392، 03:34 ب‌ظ »
ممنون معین جان.البته من زیاد ازینی ه نوشتین سر در نیاوردم ولی به کمک راهنماییتون یه چیزایی پیدا کردم:
http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap04/iostatus.html

من به این نتیجه رسیدم گیر کار جای دیگس.
ببینین یه شبکه در نظر بگیرین که یه متحرک رو این شبکه داره حرکت میکنه و با احتمال مساوی بالا پایین چپ یا راست میره.
حالا این متحرک میخواد نقاطی رو که قبلا رفته تکرار نکنه.پس باید یه جوری باید نقاط قبلی رو به یاد بسپاره.من میخوام دقیقا این رو بنویسم و براش این کد رو زدم:

      REAL ran3,r,b,d
      INTEGER i,step,s,m,j,a,x,y
      open(12,file="self12.txt")
c       open(14,file="self14.txt")
      READ(*,*) step
      s=0
      m=0
      Do i=1,step
      r=ran3(idum)
      if (r .gt.0.75 ) then
      Do j=1,i
        READ (12,88) a,x,y,b
        if (s+1==x .and. m==y) then
         write (12,88) i,s+1,m,d
        goto 66
        end if
      enddo   
      s=s+1
      endif     
        if  (r .gt. 0.5 .and. 0.75 .gt. r ) then
        Do j=1,i
        READ (12,88) a,x,y,b
        if (s-1==x .and. m==y) then
         write (12,88) i,s-1,m,d
        goto 66
        end if
      enddo   
      s=s-1
            end if
        if  (r .gt. 0.25 .and. 0.5 .gt. r ) then
          Do j=1,i
        READ (12,88) a,x,y,b
       
        if (s==x .and. m+1==y) then
         write (12,88) i,s,m+1,d
        goto 66
        end if
      enddo   
            m=m+1
        end if
        if  ( 0.25 .gt. r ) then
            Do j=1,i
        READ (12,88) a,x,y,b
       
        if (s==x .and. m-1==y) then
         write (12,88) i,s,m-1,d
        goto 66
        end if
      enddo   
            m=m-1
        end if
        d=((m**2+s**2))**(0.5)
c         write (14,*) i,s,m,d
      write (12,88) i,s,m,d
66      END DO
88     format (/,I4,I4,I4,F8.3)
      end
!!!!!!!!!!!!!!RAN3(idum) !!!!!!!!!!!!!!!!!!
  FUNCTION ran3(idum)
      INTEGER idum
      INTEGER MBIG,MSEED,MZ
C     REAL MBIG,MSEED,MZ
      REAL ran3,FAC
      PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
C     PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
      INTEGER i,iff,ii,inext,inextp,k
      INTEGER mj,mk,ma(55)
C     REAL mj,mk,ma(55)
      SAVE iff,inext,inextp,ma
      DATA iff /0/
      if(idum.lt.0.or.iff.eq.0)then
        iff=1
        mj=MSEED-iabs(idum)
        mj=mod(mj,MBIG)
        ma(55)=mj

        mk=1
        do 11 i=1,54
          ii=mod(21*i,55)
          ma(ii)=mk
          mk=mj-mk
          if(mk.lt.MZ)mk=mk+MBIG
          mj=ma(ii)
11      continue
        do 13 k=1,4
          do 12 i=1,55
            ma(i)=ma(i)-ma(1+mod(i+30,55))
            if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
12        continue
13      continue
        inext=0
        inextp=31
        idum=1
      endif
      inext=inext+1
      if(inext.eq.56)inext=1
      inextp=inextp+1
      if(inextp.eq.56)inextp=1
      mj=ma(inext)-ma(inextp)

      if(mj.lt.MZ)mj=mj+MBIG
      ma(inext)=mj
      ran3=mj*FAC
      return
      END

ولی تنها دوخط تو فایل خروجی میمونه و برنامه سریع ناقص تموم میشه!!
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
پاسخ : یک سوال از فرترن
« پاسخ #4 : 23 فروردین 1392، 01:18 ق‌ظ »
خب.ایندفعه اومدم و از آرایه کمک گرفتم ولی همچنان یه جای کار میلنگه!
      REAL ran3,r,b,d
      INTEGER i,step,s,m,j,a,x,y, mat(1000,2),test(1,2)
      open(12,file="selfmat2d.txt")

      READ(*,*) step
      s=0
      m=0
      Do k=1,1000
      mat(k,1)=0
      mat(k,2)=0
      enddo
     
      Do i=1,step
      r=ran3(i)
      if (r .gt.0.75 ) then
     j=1
       test(1,1)= s+1
       test(1,2)= m
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        endif
      enddo   
      s=s+1
       endif   
        if  (r .gt. 0.5 .and. 0.75 .gt. r ) then
        j=1
       test(1,1)= s-1
       test(1,2)= m
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
      s=s-1
            end if
        if  (r .gt. 0.25 .and. 0.5 .gt. r ) then
       j=1
       test(1,1)= s
       test(1,2)= m+1
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
            m=m+1
        end if
        if  ( 0.25 .gt. r ) then
       j=1
       test(1,1)= s
       test(1,2)= m-1
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
            m=m-1
        end if
        d=((m**2+s**2))**(0.5)
             write (12,88) i,s,m,d
             mat(i,1)=s
             mat(i,2)=m
66      END DO
88     format (I4,I4,I4,F8.3)
      end
!!!!!!!!!!!!!!RAN3(idum) !!!!!!!!!!!!!!!!!!
  FUNCTION ran3(idum)
      INTEGER idum
      INTEGER MBIG,MSEED,MZ
C     REAL MBIG,MSEED,MZ
      REAL ran3,FAC
      PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
C     PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
      INTEGER i,iff,ii,inext,inextp,k
      INTEGER mj,mk,ma(55)
C     REAL mj,mk,ma(55)
      SAVE iff,inext,inextp,ma
      DATA iff /0/
      if(idum.lt.0.or.iff.eq.0)then
        iff=1
        mj=MSEED-iabs(idum)
        mj=mod(mj,MBIG)
        ma(55)=mj

        mk=1
        do 11 i=1,54
          ii=mod(21*i,55)
          ma(ii)=mk
          mk=mj-mk
          if(mk.lt.MZ)mk=mk+MBIG
          mj=ma(ii)
11      continue
        do 13 k=1,4
          do 12 i=1,55
            ma(i)=ma(i)-ma(1+mod(i+30,55))
            if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
12        continue
13      continue
        inext=0
        inextp=31
        idum=1
      endif
      inext=inext+1
      if(inext.eq.56)inext=1
      inextp=inextp+1
      if(inextp.eq.56)inextp=1
      mj=ma(inext)-ma(inextp)

      if(mj.lt.MZ)mj=mj+MBIG
      ma(inext)=mj
      ran3=mj*FAC
      return
      END
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

آفلاین abbasalim

  • High Sr. Member
  • *
  • ارسال: 642
  • جنسیت : پسر
  • http://esfandune.ir/
    • اسفندونه
پاسخ : یک سوال از فرترن
« پاسخ #5 : 25 فروردین 1392، 06:41 ب‌ظ »
 :o :o
فرترن ؟
داداش میون این همه \یمبر جرجیس و انتخاب کردین :D

آفلاین کیان

  • High Hero Member
  • *
  • ارسال: 2338
  • جنسیت : پسر
پاسخ : یک سوال از فرترن
« پاسخ #6 : 25 فروردین 1392، 06:56 ب‌ظ »
:o :o
فرترن ؟
داداش میون این همه \یمبر جرجیس و انتخاب کردین :D
مثلا ایشون رو نصیحت کردی؟
حتما نیاز داشته که داره از فرترن استفاده میکنه! فرترن برای کار با ماتریس ها قوی و سریعه!

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : یک سوال از فرترن
« پاسخ #7 : 25 فروردین 1392، 08:57 ب‌ظ »
:o :o
فرترن ؟
داداش میون این همه \یمبر جرجیس و انتخاب کردین :D
دوست من،
هر کسی با توجه به یه هدف خاص سمت برنامه‌نویسی و گنو/لینوکس می‌یاد. یادگیری زبون فورترن برای کسایی که کارهای محاسباتی سنگین می‌کنن یکی از واجبات هست :)

یه مثال از مکانیک سازه‌ها برات می زنم. وقتی که ما مثلاً یه ساختمان n طبقه داریم و می‌خواهیم ببینیم که تحت نیروهای وارد بر اون چه عکس‌العملی از خود نشون می‌ده، (نیروهای باد، زلزله، وزن و ...) می‌تونیم از رایانه کمک بگیریم و باید ساختمون رو یه جوری به خورد رایانه بدیم (مدل سازی) برای این‌کار یکی از مدل‌های پیشنهادی استفاده از مدل mass-spring-damper (جرم-فنر-میراگر)هست. و بعد از مدل سازی یکی از روش‌های حل به صورت عددی استفاده از finite element (اجزا محدود) هست، و مبنای اجزا محدود بر ماتریس‌ها و محاسبات ماتریسی هست. :) خلاصه بعد از طی چندمرحله ممکنه به یه معادله‌ی ماتریسی ۱۰۰ هزار در ۱۰۰ هزار برسیم. اون موقع هست که درود می‌فرستی بر روح پر فتوح خالق‌ها و توسعه‌دهنده‌های فورترن :)

آفلاین سلمان م.

  • ناظر انجمن
  • *
  • ارسال: 4106
  • جنسیت : پسر
  • GNU Operating System - سیستم عامل گنو
پاسخ : یک سوال از فرترن
« پاسخ #8 : 25 فروردین 1392، 09:00 ب‌ظ »
ببینین یه شبکه در نظر بگیرین که یه متحرک رو این شبکه داره حرکت میکنه و با احتمال مساوی بالا پایین چپ یا راست میره.
حالا این متحرک میخواد نقاطی رو که قبلا رفته تکرار نکنه.پس باید یه جوری باید نقاط قبلی رو به یاد بسپاره.
رشته‌ات چیه عزیزم؟ علمی‌تر توضیح می‌دی؟

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : یک سوال از فرترن
« پاسخ #9 : 25 فروردین 1392، 09:09 ب‌ظ »
خوب احتمال اینکه متحرک بتونه همه ی خونه های جدول رو بپیمایه و هیچ جایی گیر نکنه بسیار پایینه . متحرک پس از چند حرکت ( اگر این جابجایی ها با دلیل نباشه و بختکی انجام بشه ) یک گوشه گیر میفته .
شما یک ماتریس بساز . همه ی خونه های اونو صفر بده . هر خونه ای که پیموده شد رو 1 بکن . بهش بگو خونه ای رو میتونه بره که 0 باشه .
در پایان ماتریس رو چاپ کن
=========================
یک راه بهتر :
همه ی خونه ها رو صفر بده
توی هر خونه که میره با توجه به گامی که درش هستیم ( اگر نخستین گام هست 1 ، اگر گام دهم هست 10 ) شماره گام رو به خونه بده . اینجوری زمانی که ماتریس چاپ بشه میتونی بفهمی چجوری ماتریس رو پیموده
« آخرین ویرایش: 25 فروردین 1392، 09:13 ب‌ظ توسط doomhammer65ir »

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
پاسخ : یک سوال از فرترن
« پاسخ #10 : 25 فروردین 1392، 11:03 ب‌ظ »
ممنون از همه.
من با ماتریس هم نوشتم ولی از یه if ایراد میگرفت که من نفهمیدم.

@ سلمان
رشتم فیزیک.
اینم توضیح:
http://en.wikipedia.org/wiki/Self-avoiding_walk
البته من در دوبعدش رو میخوام.

@ doomhammer
اینکه یه جا گیر میکنه درسته به شرط اینکه خیلی کوچیک باشه شبکه مون.
من با ماتریسها اومدم یه ماتریس دادم و هر خونه ای رفته رو ریختم توش.بعد گفتم بیا و هر خونه ای رو میخوای بری چک کن تو اون ماتریسه هست؟
اگر نیست برو.اگر هست که یه جهت دیگه انتخاب کن.
برنامه ای هم که تو پست اول گذاشتم ویرایش کردم.
این بدون ماتریس:
      REAL ran3,r,b,d
      INTEGER i,step,s,m,j,a,x,y
      open(12,file="self12.txt")
      open(14,file="self14.txt")

      READ(*,*) step
      s=0
      m=0
      Do k=1,4*step+1
      write (12,88) 0,0,0,0.0
      enddo
      rewind 12
      Do i=1,step
      rewind 12
      r=ran3(i)
      if (r .gt.0.75 ) then
      Do j=1,i
      rewind 12
        READ (12,88) a,x,y,b
        if (s+1==x .and. m==y) then
c        rewind 12
c         write (12,88) i,s+1,m,d
        goto 66
        end if
      enddo   
      s=s+1
      endif     
        if  (r .gt. 0.5 .and. 0.75 .gt. r ) then
        Do j=1,i
        rewind 12
        READ (12,88) a,x,y,b
        if (s-1==x .and. m==y) then
c        rewind 12
c         write (12,88) i,s-1,m,d
        goto 66
        end if
      enddo   
      s=s-1
            end if
        if  (r .gt. 0.25 .and. 0.5 .gt. r ) then
          Do j=1,i
          rewind 12
        READ (12,88) a,x,y,b
       
        if (s==x .and. m+1==y) then
c        rewind 12
c         write (12,88) i,s,m+1,d
        goto 66
        end if
      enddo   
            m=m+1
        end if
        if  ( 0.25 .gt. r ) then
            Do j=1,i
            rewind 12
        READ (12,88) a,x,y,b
       
        if (s==x .and. m-1==y) then
c        rewind 12
c         write (12,88) i,s,m-1,d
        goto 66
        end if
      enddo   
            m=m-1
        end if
        d=((m**2+s**2))**(0.5)
         write (14,*) i,s,m,d
      write (12,88) i,s,m,d
66      END DO
88     format (I4,I4,I4,F8.3)
      end
!!!!!!!!!!!!!!RAN3(idum) !!!!!!!!!!!!!!!!!!
  FUNCTION ran3(idum)
      INTEGER idum
      INTEGER MBIG,MSEED,MZ
C     REAL MBIG,MSEED,MZ
      REAL ran3,FAC
      PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
C     PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
      INTEGER i,iff,ii,inext,inextp,k
      INTEGER mj,mk,ma(55)
C     REAL mj,mk,ma(55)
      SAVE iff,inext,inextp,ma
      DATA iff /0/
      if(idum.lt.0.or.iff.eq.0)then
        iff=1
        mj=MSEED-iabs(idum)
        mj=mod(mj,MBIG)
        ma(55)=mj

        mk=1
        do 11 i=1,54
          ii=mod(21*i,55)
          ma(ii)=mk
          mk=mj-mk
          if(mk.lt.MZ)mk=mk+MBIG
          mj=ma(ii)
11      continue
        do 13 k=1,4
          do 12 i=1,55
            ma(i)=ma(i)-ma(1+mod(i+30,55))
            if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
12        continue
13      continue
        inext=0
        inextp=31
        idum=1
      endif
      inext=inext+1
      if(inext.eq.56)inext=1
      inextp=inextp+1
      if(inextp.eq.56)inextp=1
      mj=ma(inext)-ma(inextp)

      if(mj.lt.MZ)mj=mj+MBIG
      ma(inext)=mj
      ran3=mj*FAC
      return
      END


این هم ماتریسیش.البته اینی که شما میگین خیلی ایده بهتریه ولی مثلا برای ۱۰۰۰۰۰*۱۰۰۰۰ فکر کنم کم بیاره نه؟
      REAL ran3,r,b,d
      INTEGER i,step,s,m,j,a,x,y, mat(1000,2),test(1,2)
      open(12,file="selfmat2d.txt")

      READ(*,*) step
      s=0
      m=0
      Do k=1,1000
      mat(k,1)=0
      mat(k,2)=0
      enddo
     
      Do i=1,step
      r=ran3(i)
      if (r .gt.0.75 ) then
     j=1
       test(1,1)= s+1
       test(1,2)= m
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        endif
      enddo   
      s=s+1
       endif   
        if  (r .gt. 0.5 .and. 0.75 .gt. r ) then
        j=1
       test(1,1)= s-1
       test(1,2)= m
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
      s=s-1
            end if
        if  (r .gt. 0.25 .and. 0.5 .gt. r ) then
       j=1
       test(1,1)= s
       test(1,2)= m+1
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
            m=m+1
        end if
        if  ( 0.25 .gt. r ) then
       j=1
       test(1,1)= s
       test(1,2)= m-1
        Do j=1,i
        if (test(1,1)==mat(j,1) .and. test(1,2)==mat(j,2)) then

        goto 66
        end if
      enddo   
            m=m-1
        end if
        d=((m**2+s**2))**(0.5)
             write (12,88) i,s,m,d
             mat(i,1)=s
             mat(i,2)=m
66      END DO
88     format (I4,I4,I4,F8.3)
      end
!!!!!!!!!!!!!!RAN3(idum) !!!!!!!!!!!!!!!!!!
  FUNCTION ran3(idum)
      INTEGER idum
      INTEGER MBIG,MSEED,MZ
C     REAL MBIG,MSEED,MZ
      REAL ran3,FAC
      PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
C     PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
      INTEGER i,iff,ii,inext,inextp,k
      INTEGER mj,mk,ma(55)
C     REAL mj,mk,ma(55)
      SAVE iff,inext,inextp,ma
      DATA iff /0/
      if(idum.lt.0.or.iff.eq.0)then
        iff=1
        mj=MSEED-iabs(idum)
        mj=mod(mj,MBIG)
        ma(55)=mj

        mk=1
        do 11 i=1,54
          ii=mod(21*i,55)
          ma(ii)=mk
          mk=mj-mk
          if(mk.lt.MZ)mk=mk+MBIG
          mj=ma(ii)
11      continue
        do 13 k=1,4
          do 12 i=1,55
            ma(i)=ma(i)-ma(1+mod(i+30,55))
            if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
12        continue
13      continue
        inext=0
        inextp=31
        idum=1
      endif
      inext=inext+1
      if(inext.eq.56)inext=1
      inextp=inextp+1
      if(inextp.eq.56)inextp=1
      mj=ma(inext)-ma(inextp)

      if(mj.lt.MZ)mj=mj+MBIG
      ma(inext)=mj
      ran3=mj*FAC
      return
      END
« آخرین ویرایش: 25 فروردین 1392، 11:05 ب‌ظ توسط mrmrn »
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

آفلاین yaslinush

  • Sr. Member
  • *
  • ارسال: 310
  • جنسیت : پسر
پاسخ : یک سوال از فرترن
« پاسخ #11 : 25 فروردین 1392، 11:29 ب‌ظ »
چه شاخه ای از فیزیک؟ راستی جیانت4 رو ابونتو نصب کردیمwien2kهم از بچه های دانشگاه صنعتی اصفهان تو ابونتو نصبیده.خواستی ورک شاپ مشهدم برات میفرستم

آفلاین doomhammer65ir

  • High Hero Member
  • *
  • ارسال: 1572
  • جنسیت : پسر
    • IRAN Backup
پاسخ : یک سوال از فرترن
« پاسخ #12 : 25 فروردین 1392، 11:35 ب‌ظ »
همینو با آرایه های سی هم میتونید بنویسید مگر اینکه دلیلی برای پافشاری بر فورترن داشته باشید

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
پاسخ : یک سوال از فرترن
« پاسخ #13 : 25 فروردین 1392، 11:49 ب‌ظ »
همینو با آرایه های سی هم میتونید بنویسید مگر اینکه دلیلی برای پافشاری بر فورترن داشته باشید
به سی چندان وارد نیستم.
ایدتون رو سریع نوشتم.الان نمیدونم چرا در جهت افقی گاهی تکراری میره ولی عمودی نه؟!
با اینکه هردو عین همه شرایطشون:
      REAL ran3,r,b,d
      INTEGER i,step,s,m,j,a,x,y, mat(1000,1000)
      open(12,file="selfmat2d.txt")

      READ(*,*) step
      s=0
      m=0
      Do k=1,step/2
      do j =1,step/2
      mat(k,j)=0
      enddo
      enddo
     
      Do i=1,step
      r=ran3(i)
      if (r .gt.0.75 ) then
 
        if (mat(s+1,m)==0 ) then
        mat(s+1,m)=i
        s=s+1
        write (12,88) i,s,m,d
        endif
        endif
        if  (r .gt. 0.5 .and. 0.75 .gt. r ) then
       
        if (mat(s-1,m)==0 ) then
        mat(s-1,m)=i
        s=s-1
        write (12,88) i,s,m,d
            end if
            endif
        if  (r .gt. 0.25 .and. 0.5 .gt. r ) then
     
        if (mat(s,m+1)==0 ) then
        mat(s,m+1)=i
        m=m+1
        write (12,88) i,s,m,d
        end if
        endif
        if  ( 0.25 .gt. r ) then
     
        if (mat(s,m-1)==0 ) then
        mat(1,m-1)=i
        m=m-1
        write (12,88) i,s,m,d
        end if
        endif
        d=((m**2+s**2))**(0.5)
c             write (12,88) i,s,m,d
             
66      END DO
88     format (I4,I4,I4,F8.3)
      end
!!!!!!!!!!!!!!RAN3(idum) !!!!!!!!!!!!!!!!!!
  FUNCTION ran3(idum)
      INTEGER idum
      INTEGER MBIG,MSEED,MZ
C     REAL MBIG,MSEED,MZ
      REAL ran3,FAC
      PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
C     PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
      INTEGER i,iff,ii,inext,inextp,k
      INTEGER mj,mk,ma(55)
C     REAL mj,mk,ma(55)
      SAVE iff,inext,inextp,ma
      DATA iff /0/
      if(idum.lt.0.or.iff.eq.0)then
        iff=1
        mj=MSEED-iabs(idum)
        mj=mod(mj,MBIG)
        ma(55)=mj

        mk=1
        do 11 i=1,54
          ii=mod(21*i,55)
          ma(ii)=mk
          mk=mj-mk
          if(mk.lt.MZ)mk=mk+MBIG
          mj=ma(ii)
11      continue
        do 13 k=1,4
          do 12 i=1,55
            ma(i)=ma(i)-ma(1+mod(i+30,55))
            if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
12        continue
13      continue
        inext=0
        inextp=31
        idum=1
      endif
      inext=inext+1
      if(inext.eq.56)inext=1
      inextp=inextp+1
      if(inextp.eq.56)inextp=1
      mj=ma(inext)-ma(inextp)

      if(mj.lt.MZ)mj=mj+MBIG
      ma(inext)=mj
      ran3=mj*FAC
      return
      END

اینم یه سری خروجی.
ردیف اول که گام هست.
دومی افقی و سومی عمودی.چهارمی هم فاصله از مبدا
   1   0   1   0.000
   2  -1   1   1.000
   5  -2   1   1.414
   6  -3   1   2.236
   8  -3   2   3.162
   9  -2   2   3.606
  10  -2   3   2.828
  11  -3   3   3.606
  12  -3   4   4.243
  13  -4   4   5.000
  14  -4   3   5.657
  16  -5   3   5.000
  17  -4   3   5.831
  18  -4   2   5.000
  19  -5   2   4.472
  20  -6   2   5.385
  21  -7   2   6.325
  22  -7   1   7.280
  24  -8   1   7.071
  25  -7   1   8.062
  26  -6   1   7.071
  34  -5   1   6.083
  36  -4   1   5.099
  55  -4   2   4.123
پی نوشت:
اشتباه کردم.عمودی هم تکرار میکنه.
مقلا تو گام ۵۵ رفته به خونه ای  که گام ۱۸ رفته بوده!!
عجیبه واقعا!!
مثلا تو ۲۲ گام از ۳۶ تا ۵۵ خونه تکراری نره بعد یهو بیاد بره یه خونه تکراری؟
« آخرین ویرایش: 26 فروردین 1392، 12:23 ق‌ظ توسط mrmrn »
پدرم به رحمت خدا رفتن. شادی روحش صلوات.

آفلاین mrmrn

  • High Hero Member
  • *
  • ارسال: 1490
  • جنسیت : پسر
  • آقا مرتضی
پاسخ : یک سوال از فرترن
« پاسخ #14 : 25 فروردین 1392، 11:52 ب‌ظ »
چه شاخه ای از فیزیک؟ راستی جیانت4 رو ابونتو نصب کردیمwien2kهم از بچه های دانشگاه صنعتی اصفهان تو ابونتو نصبیده.خواستی ورک شاپ مشهدم برات میفرستم
ممنون.
هسته ای ام.
البته نصب geant4 در آرچ که یک تک فرمان هست.
در اوبونتو هم راحت باید باشه.
شما کجاهستین که ازتون بگیرمش؟!اون آقا رو هم نمیشناسم!!
پدرم به رحمت خدا رفتن. شادی روحش صلوات.