Jump to content



Πρόβλημα στη Fortran


apagal

Recommended Posts

Καλησπέρα σας,

Χρησιμοποιώ το PLATO IDE της silverfrost ως κειμενογράφο και compliler για προγράμματα σε f90. Μπορεί κάποιος να με βοηθήσει εξηγώντας μου γιατί κάθε φορά που εκτελείται ο παρακάτω κώδικας μού βγάζει αποτέλεσμα 1?Ευχαριστώ εκ των προτέρων...

Program Pi

Real a,b

Integer i,n

Print *,"dwse epanalipsis"

a=4.0*atan(1.0)

Read *,n

Print *,a

b=0

Do i=0,n

b=(b+ (((-1)**i)/(2*i+1)))

End Do

Print *,b

End Program

Link to comment
Share on other sites

Δοκίμασε αυτό...:

Program Pi
Real a,b
Integer i,n

Print *,"dwse epanalipsis"
a=4.0*atan(1.0)
Read *,n
Print *,a
b=0
Do i=0,n
b=(b+ (((-1.0)**i)/(2.0*i+1.0)))
End Do
Print *,b
End Program

Το πρόβλημα είναι ότι ο compiler της fortran όταν βλέπει την εξίσωση, τότε λόγο του optimization του μετατρέπει τις μεταβλητές σε integer... αυτό που βλέπουμε εμείς εύκολα, δηλαδή ότι θέλουμε να πάρουμε reals στην έξοδο, δυστυχώς για τον compiler δεν είναι προφανές λόγο του optimization του, οπότε όταν μετατρέπει τον κώδικα σε assembly προτιμά να χρησιμοποιήσει το μικρότερο μήκος μεταβλητών, που φυσικά είναι ο integer...

Δεν ξέρω για ποιο λόγο ασχολείσαι με fortran, γιατί είναι πεθαμένη και χρησιμοποιείται καθαρά για ιστορικούς λόγους και επειδή ήταν δύσκολο να αλλάξουν μονομιάς οι προγραμματιστές σε μια πιο high level γλώσσα... ωστόσο, θα σου πρότεινα για ide να χρησιμοποιήσεις τον eclipse (project Photran) και για compiler την gfortran, που είναι και τα δυο freeware και από τα καλύτερα εργαλεία που παίζουν... Για να εγκαταστήσεις το Photran πρέπει πρώτα να κατεβάσεις τον eclipse, να εγκαταστήσει το CDT και μετά μέσα από τον eclipse την Photran, έχει αναλυτικά την διαδικασία στο site του eclipse, στο link που σου έδωσα...

Link to comment
Share on other sites

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip

http://wiki.eclipse.org/PTP/photran/documentation/photran5#Installing_Photran

Κανονικά εγκαθιστάς πρώτα τον eclipse, μετά την gfortran και ξεκινάς τον eclipse... επειδή ο installer της fortran βάζει στο PATH το /bin της gf, θα πρέπει να βρίσκει αυτόματα την make.exe και gfortran.exe που χρειάζεται ο eclipse... αν σου κάνει κουλά θα είναι πιθανόν λόγο της make, επειδή είναι standard όνομα και αν έχεις στο PATH πριν το /bin της gf κάποιο άλλο /bin ενός άλλου compiler, τότε θα σου χτυπάει το eclipse στο build... μην σε τρομάζει όμως, γιατί και φτιάχνεται εύκολα, μέσα από τα build properties του eclipse, αλλά και επίσης όπως σου πα θα πρέπει να έχεις πολλούς compilers εγκατεστημένους για να την πατήσεις...

Link to comment
Share on other sites

Το πρόβλημα είναι ότι ο compiler της fortran όταν βλέπει την εξίσωση, τότε λόγο του optimization του μετατρέπει τις μεταβλητές σε integer... αυτό που βλέπουμε εμείς εύκολα, δηλαδή ότι θέλουμε να πάρουμε reals στην έξοδο, δυστυχώς για τον compiler δεν είναι προφανές λόγο του optimization του, οπότε όταν μετατρέπει τον κώδικα σε assembly προτιμά να χρησιμοποιήσει το μικρότερο μήκος μεταβλητών, που φυσικά είναι ο integer...

Δεν ξέρω για ποιο λόγο ασχολείσαι με fortran, γιατί είναι πεθαμένη και χρησιμοποιείται καθαρά για ιστορικούς λόγους και επειδή ήταν δύσκολο να αλλάξουν μονομιάς οι προγραμματιστές σε μια πιο high level γλώσσα.

σωστος για την λυση..οντως ιδιαιτεροτητα του compiler..

για το 2ο διαφωνω..

η 90/95 εχει πολλες δυνατοτητες..κανει πολυ καλα την δουλεια της σε σχεση με υπολογισμους και δοκιμες για αποδοτικοτητα αλγοριθμων,χωρις να ειναι στριφνη και ενσωματωνοντας πολλα βελτιστοποιημενα εργαλεια και ετοιμες συναρτησεις.:p

Link to comment
Share on other sites

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip

http://wiki.eclipse.org/PTP/photran/documentation/photran5#Installing_Photran

Κανονικά εγκαθιστάς πρώτα τον eclipse, μετά την gfortran και ξεκινάς τον eclipse... επειδή ο installer της fortran βάζει στο PATH το /bin της gf, θα πρέπει να βρίσκει αυτόματα την make.exe και gfortran.exe που χρειάζεται ο eclipse... αν σου κάνει κουλά θα είναι πιθανόν λόγο της make, επειδή είναι standard όνομα και αν έχεις στο PATH πριν το /bin της gf κάποιο άλλο /bin ενός άλλου compiler, τότε θα σου χτυπάει το eclipse στο build... μην σε τρομάζει όμως, γιατί και φτιάχνεται εύκολα, μέσα από τα build properties του eclipse, αλλά και επίσης όπως σου πα θα πρέπει να έχεις πολλούς compilers εγκατεστημένους για να την πατήσεις...

Ακολούθησα τις οδηγηγίες σου , αλλά κάτι δεν πάει καλά με τον compiler.

untitled.bmp

Link to comment
Share on other sites

make hello2

'Building file: ../hello2.f90'

'Invoking: GNU Fortran Compiler'

gfortran -funderscoring -O0 -g -Wall -c -fmessage-length=0 -o"hello2.o" "../hello2.f90"

'Finished building: ../hello2.f90'

' '

cc hello2.o -o hello2

process_begin: CreateProcess(NULL, cc hello2.o -o hello2, ...) failed.

make (e=2): The system cannot find the file specified.

make: *** [hello2] Error 2

Ο κώδικας που έχω γράψει είναι ο ακόλουθος:

program hello2

implicit none

print *, "hello"

end program hello2

το πρόγραμμα το έχω αποθηκεύσει ως hello2.f90

Link to comment
Share on other sites

Νομίζω ότι κάτι τρέχει με τα paths των αρχείων σου... φτιάξε ένα καινούργιο project για fortran έτσι όπως λέει ο οδηγός εγκατάστασης, μετά κάνε στον φάκελο src (αν θυμάμαι καλά) στον project explorer, δεξί κλικ και add new file από εκεί... όχι ότι έχει σημασία, αλλά ονόμασε το αρχείο *.for

Απ' ότι φαίνεται, κάνει κανονικά compile, αλλά όταν πάει να κάνει invoke το process που τρέχει το exe (terminal), τότε τον πίνει... μπορείς να δεις στον φάκελο "Debug" ή "Release", του project σου αν υπάρχει το exe και να το τρέξεις από εκεί...

Link to comment
Share on other sites

δεν διαβασα προσεκτικα τα τελευταια ποστς...αλλα ενα συνηθισμενο προβλημα που εχουν ορισμενοι compilers ειναι οτι δεν θελουν η διαδρομη στο αρχειο να εχει κενα ή ελληνικους χαρακτηρες..

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.