Βοήθεια στη Fortran
- Σ. Διονύσης
- Δημοσιεύσεις: 190
- Εγγραφή: Τρί Φεβ 19, 2013 5:17 pm
- Τοποθεσία: Milky Way,Orion Arm, Solar System, 3rd Planet(Earth)
Βοήθεια στη Fortran
Έφτιαξα ένα απλό πρόγραμμα σε Fortran 90/95 το οποίο βρίσκει το μεγαλύτερο στοιχείο ενός συνόλου:
program maximum_value_of_set
integer n
real b, maxvalue
real, allocatable, dimension (:) :: A
print *, "Give the dimension of the vector:"
read *, n
allocate (A(n))
do i=1,n
read *, A(i)
enddo
b= maxvalue (n,A)
print *,b
end
real function maxvalue (n,A)
integer, intent (in) :: n
real, intent (in), dimension (n) :: A
integer i
maxvalue=A(1)
do i=2,n
if (A(i)>maxvalue) maxvalue=A(i)
enddo
end function
Όταν το τρέχω όμως και βάζω διάφορες τιμές π.χ αντί να βγάλει το μου βγάζει
Δηλαδή σε κάθε αποτέλεσμα προσθέτει το
Από τι μπορεί να οφείλεται αυτό. Μήπως είναι το format;
Αν μπορεί να βοηθήσει κάποιος θα το εκτιμούσα πολύ.
program maximum_value_of_set
integer n
real b, maxvalue
real, allocatable, dimension (:) :: A
print *, "Give the dimension of the vector:"
read *, n
allocate (A(n))
do i=1,n
read *, A(i)
enddo
b= maxvalue (n,A)
print *,b
end
real function maxvalue (n,A)
integer, intent (in) :: n
real, intent (in), dimension (n) :: A
integer i
maxvalue=A(1)
do i=2,n
if (A(i)>maxvalue) maxvalue=A(i)
enddo
end function
Όταν το τρέχω όμως και βάζω διάφορες τιμές π.χ αντί να βγάλει το μου βγάζει
Δηλαδή σε κάθε αποτέλεσμα προσθέτει το
Από τι μπορεί να οφείλεται αυτό. Μήπως είναι το format;
Αν μπορεί να βοηθήσει κάποιος θα το εκτιμούσα πολύ.
τελευταία επεξεργασία από matha σε Κυρ Μαρ 09, 2014 1:26 am, έχει επεξεργασθεί 1 φορά συνολικά.
Λόγος: Διόρθωση LaTeX.
Λόγος: Διόρθωση LaTeX.
My System:
Case:CoolerMaster HAF-X
CPU:i7-2600k @5.0GHz @1.43v
RAM:Corsair Dominator GT 32GB 2133MHz
GPU:ATI RADEON HD6990 4GB @950MHz @1450MHz
Mobo:GIGABYTE Z68X-UD7-B3
SSD:Corsair Force GS 240GB
HDD:WD Caviar Black 2TB
CPU cooler:CoolerMaster V10
Headphones:V-moda M100
Audio interface:RME Babyface
Case:CoolerMaster HAF-X
CPU:i7-2600k @5.0GHz @1.43v
RAM:Corsair Dominator GT 32GB 2133MHz
GPU:ATI RADEON HD6990 4GB @950MHz @1450MHz
Mobo:GIGABYTE Z68X-UD7-B3
SSD:Corsair Force GS 240GB
HDD:WD Caviar Black 2TB
CPU cooler:CoolerMaster V10
Headphones:V-moda M100
Audio interface:RME Babyface
-
- Δημοσιεύσεις: 29
- Εγγραφή: Κυρ Δεκ 21, 2008 7:36 pm
Re: Βοήθεια στη Fortran
Διονύση αυτό το +0.0000023 στο βγάζει οτι νούμερα και να δώσεις στην αρχή ή μονο για τα συγκεκριμμένα;
Ρωτάω γιατι ένα τέτοιο αποτέλεσμα μπορεί να οφείλεται σε σφάλμα αναπαράστασης του 7.51
οπότε το μηχανημα τον προσεγγίζει απο τον αριθμό που σου εκτυπώνει.
Αν δεν θες να εμφανίζεται μπορεις αντι της print να χρησιμοποιήσεις την print ''(f5.3)'', μεταβλητή
η οποία θα εμφανίσει τον αριθμό με 1 ψηφίο πριν την υποδιαστολή και 3 μετά την υποδιαστολή
Ρωτάω γιατι ένα τέτοιο αποτέλεσμα μπορεί να οφείλεται σε σφάλμα αναπαράστασης του 7.51
οπότε το μηχανημα τον προσεγγίζει απο τον αριθμό που σου εκτυπώνει.
Αν δεν θες να εμφανίζεται μπορεις αντι της print να χρησιμοποιήσεις την print ''(f5.3)'', μεταβλητή
η οποία θα εμφανίσει τον αριθμό με 1 ψηφίο πριν την υποδιαστολή και 3 μετά την υποδιαστολή
Τσαπαρικος Βασίλειος
- Σ. Διονύσης
- Δημοσιεύσεις: 190
- Εγγραφή: Τρί Φεβ 19, 2013 5:17 pm
- Τοποθεσία: Milky Way,Orion Arm, Solar System, 3rd Planet(Earth)
Re: Βοήθεια στη Fortran
Το κάνει οποιοδήποτε αριθμούς και να βάλω. Αυτό που λές είναι το format.
Το θέμα είναι ότι αν κάνεις το συγκεκριμένο format που λες ή για κάποιο συγκεκριμένο αριθμό δεκαδικών, π.χ:
b= maxvalue (n,A)
print '(F5.3)',b
end
ή όπως μου αρέσει να το γράφω για να διαβάζεται καλύτερα:
b= maxvalue (n,A)
print 1,b
1 format (f5.3)
end
τότε θα εμφανίζονται μόνο 3 δεκαδικά ψηφία. Έτσι αν θέλω ας πουμε να συγκρίνω αριθμούς με δεκαδικά ψηφία π.χ τους αριθμούς: και θα έχουμε παράδοξο και θα βγάλει αποτέλεσμα
Επίσης, τώρα παρατηρώ ότι δε προσθέτει πάντα το συγκεκριμένο αριθμό που γράφω παραπάνω, αλλά μια φορά μου αφαίρεσε
Μήπως είναι ο compiler;
Το θέμα είναι ότι αν κάνεις το συγκεκριμένο format που λες ή για κάποιο συγκεκριμένο αριθμό δεκαδικών, π.χ:
b= maxvalue (n,A)
print '(F5.3)',b
end
ή όπως μου αρέσει να το γράφω για να διαβάζεται καλύτερα:
b= maxvalue (n,A)
print 1,b
1 format (f5.3)
end
τότε θα εμφανίζονται μόνο 3 δεκαδικά ψηφία. Έτσι αν θέλω ας πουμε να συγκρίνω αριθμούς με δεκαδικά ψηφία π.χ τους αριθμούς: και θα έχουμε παράδοξο και θα βγάλει αποτέλεσμα
Επίσης, τώρα παρατηρώ ότι δε προσθέτει πάντα το συγκεκριμένο αριθμό που γράφω παραπάνω, αλλά μια φορά μου αφαίρεσε
Μήπως είναι ο compiler;
My System:
Case:CoolerMaster HAF-X
CPU:i7-2600k @5.0GHz @1.43v
RAM:Corsair Dominator GT 32GB 2133MHz
GPU:ATI RADEON HD6990 4GB @950MHz @1450MHz
Mobo:GIGABYTE Z68X-UD7-B3
SSD:Corsair Force GS 240GB
HDD:WD Caviar Black 2TB
CPU cooler:CoolerMaster V10
Headphones:V-moda M100
Audio interface:RME Babyface
Case:CoolerMaster HAF-X
CPU:i7-2600k @5.0GHz @1.43v
RAM:Corsair Dominator GT 32GB 2133MHz
GPU:ATI RADEON HD6990 4GB @950MHz @1450MHz
Mobo:GIGABYTE Z68X-UD7-B3
SSD:Corsair Force GS 240GB
HDD:WD Caviar Black 2TB
CPU cooler:CoolerMaster V10
Headphones:V-moda M100
Audio interface:RME Babyface
Μέλη σε σύνδεση
Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες