diamangeo Δημοσ. 3 Δεκεμβρίου 2011 Δημοσ. 3 Δεκεμβρίου 2011 Γεια σας, χρησιμοποιώ visual studio 2008 με Intel fortran composer update 5 2011. Κατ' αρχάς θέλω να ρωτήσω αν υπάρχει διαφορά στον κώδικα/γλώσσα του προαναφερθέντος προγράμματος με την compaq visual fortran v6.6, την οποία μου δώσανε απ' το πανεπιστήμιο αλλά δεν έτρεχε στον Η/Υ μου, μάλλον λόγω windows 7. Το δεύτερο και βασικό ερώτημα μου έχει να κάνει με μία άσκηση: έχω γράψει αυτά εδώ: program test2 implicit none real :: I,S,X,N read*,N I=0 S=0 read*,X do S=S+X I=I+1 if (I<0) then exit else print*,S end if end do end program test2 Δίνω Ν, δίνω Χ αλλά αρχίζει και κάνει πράξεις χωρίς τελειωμό.... Μπορεί κάποιος να με βοηθήσει;
V.I.Smirnov Δημοσ. 3 Δεκεμβρίου 2011 Δημοσ. 3 Δεκεμβρίου 2011 O compiler αυτός της Intel είναι από τoυς καλύτερους που κυκλοφορούν (όπως και ο αντίστοιχος για C++) και συνεργάζεται άψογα με το visual studio. Καλύτερος συνδυασμός είναι δύσκολο να βρεθεί. Η intel fortran είναι συνέχεια της compaq visual fortran, η οποία είναι συνέχεια της digital fortran, η οποία είναι συνέχεια της fortran powerstation της MS. Σε όλες αυτές τις εκδόσεις (δηλ. από το '92) ως σήμερα η συμβατότητα των βιβλιοθηκών διατηρείται ευλαβικά σε πολύ μεγάλο βαθμό. Λίγα προβλήματα μπορεί να υπάρχουν (π.χ. κατάργηση κάποιου plugin κλπ) αλλά είτε λύνονται εύκολα είτε είναι ασήμαντα. Μιλάμε πάντα για τις βιβλιοθήκες και τα project files που αφορούν τον συγκεκριμένο compiler και τα windows (qwin, array visualizer κλπ). O αμιγής κώδικας δεν πρέπει να έχει προβλήματα σε κανέναν compiler. Σε ότι αφορά την άσκηση, έχεις θέσει ως συνθήκη εξόδου από τον βρόχο ότι I<0. Ωστόσο αυτό αυτό δεν συμβαίνει ποτέ διότι γράφεις Ι=Ι+1 και η τιμή του πάντα αυξάνεται. Βάλε π.χ. Ι>10 και μετά από 10 φορές θα σταματάει.... -
diamangeo Δημοσ. 4 Δεκεμβρίου 2011 Μέλος Δημοσ. 4 Δεκεμβρίου 2011 Σε ότι αφορά την άσκηση, έχεις θέσει ως συνθήκη εξόδου από τον βρόχο ότι I<0. Ωστόσο αυτό αυτό δεν συμβαίνει ποτέ διότι γράφεις Ι=Ι+1 και η τιμή του πάντα αυξάνεται. Βάλε π.χ. Ι>10 και μετά από 10 φορές θα σταματάει.... - Σύμφωνα όμως με την άσκηση, μόνο όταν το Ι θα είναι αρνητικό θα σταματάει... Υ.Γ.: Ευχαριστώ για τις απαντήσεις σου!
taazz Δημοσ. 4 Δεκεμβρίου 2011 Δημοσ. 4 Δεκεμβρίου 2011 Σύμφωνα όμως με την άσκηση, μόνο όταν το Ι θα είναι αρνητικό θα σταματάει... Υ.Γ.: Ευχαριστώ για τις απαντήσεις σου! όπως το διαβάζω εγώ ο βρόγχος σταματάει όταν το Χ είναι αρνητικό και όχι το Ι
diamangeo Δημοσ. 4 Δεκεμβρίου 2011 Μέλος Δημοσ. 4 Δεκεμβρίου 2011 Μήπως η εκφώνηση της άσκησης δεν είναι καλή; Δεν μπορώ να καταλάβω τί εννοεί με το "έως ότου εμφανιστεί ενας αρνητικός αριθμός". Αφού εγω δίνω το Χ, άμα δώσω θετικούς θα κάνει πράξεις στο άπειρο... @taazz, αυτό με το Χ αντί του Ι, το σκέφτηκα κι εγώ, αλλά είχε το ίδιο αποτέλεσμα......
diamangeo Δημοσ. 4 Δεκεμβρίου 2011 Μέλος Δημοσ. 4 Δεκεμβρίου 2011 Γράφω αυτά εδώ: program testdoenddo implicit none integer :: X 20 read*,X if ((X<1).AND.(X>10)) goto 20 end program testdoenddo Στην compaq visual fortran v6.6 το 20 δεν θα το κοκκίνιζε, εδώ όμως (βλ. πρώτο ποστ) το κοκκινίζει και φυσικά δεν ισχύει το goto. Είτε δώσω ότι Χ=5, είτε Χ=13 π.χ., λέει press any key to continue... Αν έχω καταλάβει καλά το κοκκινίζει επειδή το αναγνωρίζει σαν integer constant (ακέραια σταθερά). Πως θα το κάνω να εφαρμόζει το goto;
V.I.Smirnov Δημοσ. 4 Δεκεμβρίου 2011 Δημοσ. 4 Δεκεμβρίου 2011 Το κόκκινο χρώμα είναι απλώς σήμανση του compiler για τους αριθμούς γραμμής. Αριθμός που τίθεται πρώτος σε κάποια γραμμή υποδηλώνει αριθμό γραμμής, όχι ακέραια σταθερά. ( Παρεμπιπτόντως, όλα τα χρώματα και το περιβάλλον μπορούν να αλλάξουν κατά βούληση από to μενού Tools->Option->Environment αλλά καλύτερα μην πειράξεις τίποτε διότι μπορεί να γίνει μεγάλο μπάχαλο.) Το goto δουλεύει μια χαρά. Το λάθος είναι στη συνθήκη. To σωστό είναι (X<1.or.X>10) (παρενθέσεις δεν χρειάζονται). Ακόμα καλύτερα, γράψε do while (X<1.or.X>10) read *,X end do Μετά το end δεν χρειάζεται το όνομα του προγράμματος, ούτε και πριν το program στην αρχή. -
diamangeo Δημοσ. 4 Δεκεμβρίου 2011 Μέλος Δημοσ. 4 Δεκεμβρίου 2011 Όποιος μπορεί να με βοηθήσει με την παρακάτω άσκηση, θα του είμαι ευγνώμων, είμαι φοιτητής και ακόμα δεν εχω πάρει βιβλίο...
V.I.Smirnov Δημοσ. 5 Δεκεμβρίου 2011 Δημοσ. 5 Δεκεμβρίου 2011 (επεξεργασμένο) Να σε βοηθήσω εγώ. > program series implicit none real(8):, sin2, e, a, diff, fact2n, sum integer::n, i, maxNumTerms write(*,'("Give x : " \)') read *,x maxNumTerms=100 e=1.E-6 a=sin(x)**2 diff=abs(a) sum=0.; n=0 do while(diff>e.and.n<maxNumTerms) fact2n=1. do i=1,2*n fact2n = fact2n*i end do sum = sum + ( (-1)**(n+1) * 2**(2*n-1) * x**(2*n) ) / fact2n n=n+1 diff=abs(a-sum) end do write(*,10) a, sum, a-sum write(*,20) n-1 10 format( / "analytic value A : " ,f16.9 /, & "value from series B : " ,f16.9 /, & "difference A-B : " ,f16.9 ) 20 format(// "number of computed terms : ", i4 / ) end program Ως γνωστόν, η συνάρτηση αναπαρίσταται μόνον εντός της ακτίνας σύγκλισης της δοθείσης σειράς. Δηλ. για τιμές του x έξω από κάποιο διάστημα η ισότητα της σειράς και της συνάρτησης δεν ισχύει. Δεν κάθισα να υπολογίσω αναλυτικά την ακτίνα σύγκλισης αλλά παίζοντας με το προγραμματάκι βρήκα ότι είναι περίπου στο 10 με 11 (από εκεί και πάνω η ακρίβεια δεν επιτυγχάνεται σε ανεκτό πλήθος όρων όπερ σημαίνει ότι η σειρά δεν συγκλίνει σε όλο το R).... - Επεξ/σία 5 Δεκεμβρίου 2011 από V.I.Smirnov
taazz Δημοσ. 5 Δεκεμβρίου 2011 Δημοσ. 5 Δεκεμβρίου 2011 Μήπως η εκφώνηση της άσκησης δεν είναι καλή; Δεν μπορώ να καταλάβω τί εννοεί με το "έως ότου εμφανιστεί ενας αρνητικός αριθμός". Αφού εγω δίνω το Χ, άμα δώσω θετικούς θα κάνει πράξεις στο άπειρο... @taazz, αυτό με το Χ αντί του Ι, το σκέφτηκα κι εγώ, αλλά είχε το ίδιο αποτέλεσμα...... Χωρίς να έχω ασχοληθεί με τον κωδικά σου γιατί δεν έμαθα ποτε fortran και έχοντας ρίξει μια γρήγορη ματιά στην εκφώνηση έχεις ένα σύνολο αριθμών μεγέθους N όπου ο κάθε αριθμός αντιπροσωπεύετε από την μεταβλητή Χ στον βρόγχο. ο τερματισμός του βρόγχου γίνεται όταν βρεθεί ο πρώτος αριθμός του συνόλου που είναι αρνητικός ή όταν έχουν προστεθεί όλοι οι αριθμοί στην μεταβλητή αθροίσματος. Κοινός Ι > Ν. EDIT. ΠΡέπει να αρχήσω να διαβάζω τις απαντήσεις πριν απαντήσω.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα