Απορίες και λύσεις για Fortran

The Stand

Πολύ δραστήριο μέλος

Ο Dr Gregory House αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 34 ετών. Έχει γράψει 852 μηνύματα.
Καλησπέρα παιδιά θα ήθελα μια βοήθεια για μια άσκηση στην fortran 90/95


Να γραφεί πρόγραμμα το οποίο θα διαβάζει έναν ακέραιο αριθμό Ν>2 και στη συνέχεια θα εμφανίζει αν ο συγκεκριμένος αριθμός είναι πρώτος ή όχι.Στη συνέχεια να χρησιμοποιήσετε το πρόγραμμα αυτό για μα εκτυπώσει όλους τους πρώτους αριθμούς που βρίσκονται στο διάστημα 1-100

Ευχαριστώ πολύ!:)

Σημείωση:
Τα μηνύματα 1 έως 4 και 11 έως 15 προέρχονται από το συγχωνευμένο θέμα "Απορίες για Fortran".
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Καλησπέρα παιδιά θα ήθελα μια βοήθεια για μια άσκηση στην fortran 90/95


Να γραφεί πρόγραμμα το οποίο θα διαβάζει έναν ακέραιο αριθμό Ν>2 και στη συνέχεια θα εμφανίζει αν ο συγκεκριμένος αριθμός είναι πρώτος ή όχι.Στη συνέχεια να χρησιμοποιήσετε το πρόγραμμα αυτό για μα εκτυπώσει όλους τους πρώτους αριθμούς που βρίσκονται στο διάστημα 1-100

Ευχαριστώ πολύ!:)
Σε Pascal σου κάνει; :P


Κι όταν λες "βοήθεια" τι ακριβώς θες; :hmm:
Πού έχεις κολλήσει; :)








Γιατί αν τη θες έτοιμη.... τσου. :P
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

adespoto

Περιβόητο μέλος

Η adespoto αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 38 ετών, επαγγέλεται Εκπαιδευτικός και μας γράφει απο Πειραιάς (Αττική). Έχει γράψει 5,603 μηνύματα.
Έχω κάτι σημειώσεις της φόρταν, αν θέλεις στις στέλνω μήπως καταλάβεις κάτι παραπάνω, εγώ πέρασα το μάθημα πριν 2 χρόνια και δε θυμάμαι τίποτα :P
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

fandago

Διακεκριμένο μέλος

Ο Ә□⌂щяңš αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 40 ετών και μας γράφει απο Αθήνα (Αττική). Έχει γράψει 6,876 μηνύματα.
Θα σου περιγράψω λίγο τον αλγόριθμο που πρέπει να έχεις:
- Ζητάς και δέχεσαι έναν αριθμό, με έλεγχο να είναι μεγαλύτερος του 2
- Μετά πρέπει να σκεφτείς ότι για να ΜΗΝ είναι κάποιος πρώτος αριθμός πρέπει να διαιρείται κανονικά με οποιονδήποτε αριθμό μεταξύ [ 2, ν ) όπου ν ο αριθμός που ελέγχεις. Άρα ουσιαστικά έχεις έναν επαναληπτικό βρόγχο που ελέγχει αν το modulo (το υπόλοιπο της διαίρεσης) του ν με τους αριθμούς 2,3,4,5,...,ν-1 είναι ίσο με 0.
- Αν είναι ίσο με 0 τότε διαιρείται και με έναν ακόμα αριθμό εκτός από το 1 και τον εαυτό του, άρα δεν είναι πρώτος, άρα βγαίνεις από τον βρόγχο και η συνάρτηση σου επιστρέφει FALSE.
- Αν τελειώσει ο βρόγχος και δεν έχει βρεθεί δλδ αριθμός που να διαιρεί το ν ακριβώς τότε επιστρέφεις TRUE.

Για το δεύτερο σκέλος τα πράγματα είναι πιο απλά:
- Ξεκινάς με έναν επαναληπτικό βρόγχο από το 1 μέχρι το 100 όπου δίνεις στην προηγούμενη συνάρτηση τον αύξων αριθμό του βρόγχου για είσοδο και όποτε αυτή σου επιστρέφει TRUE εσύ εκτυπώνεις τον αύξων αριθμό (μαζί με ένα κόμμα και ένα κενό) της επανάληψης ο οποίος θα είναι και πρώτος αριθμός.
- Το αποτέλεσμα θα είναι στην οθόνη σου να έχεις όλους τους πρώτους αριθμούς μεταξύ 1-100.

Δεν μπορώ να σου δώσω κώδικα, γιατί πρώτων είναι αντιπαιδαγωγικό και δεύτερον δεν έχω κάνει FORTRAN και ούτε πρόκειται. :)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Tetragrammaton

Διάσημο μέλος

Ο Site Bot αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 35 ετών, επαγγέλεται Συνταξιούχος και μας γράφει απο Πειραιάς (Αττική). Έχει γράψει 2,671 μηνύματα.
Έχω το παρακάτω πρόγραμμα. Δεν υπάρχουν καθόλου συντακτικά λάθη, το compilation γίνεται κανονικά. Παρόλα αυτά, όταν πάω να το τρέξω, μόλις πάω να δηλώσω το πλήθος των σημείων που θα εισάγω, κρασάρει λέγοντας ότι κάποια arrays έκαναν overflow. Όμως κανένα array εν προκειμένω δεν έχει χρησιμοποιηθεί, πόσο μάλλον να υπερχειλήσει. Έχει κανείς καμιά ιδέα;:worry:

Code:
program newton

implicit none

real::x(10),y(10),d1(10),d2(10,10),d3(10,10,10),d4(10,10,10,10),d5(10,10,10,10,10),d6(10,10,10,10,10,10),d7(10,10,10,10,10,10,10),g(10)
integer::i,j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,k,n,mode

write(*,*)'Grapse 1 an 8es na leitourgiseis me synartisi, i 2 an 8es na dwseis me ti seira ta zeygaria x,y'
read(*,*) mode

write(*,*)'Dwse ton ari8mo twn simeiwn'

read(*,*) n

if(mode==1) then

write(*,*)'Dwse tis tetmimenes twn simeiwn'
do i=0,n
read(*,*) x(i)
y(i)=x(i)**2

end do

else

write(*,*)'Dwse ta zeygi twn syntetagmenwn twn simeiwn'
do i=0,n
read(*,*) x(i),y(i)

end do

end if

write(*,*)'Exoume ta e3is simeia'

do i=0,n
write(*,*)x(i),y(i)
end do





do j1=0,n-1
d1(j1)=y(j1+1)
end do


do j2=0,n-1
d2(j2+1,j2)=(d1(j2+1)-d1(j2))/(x(j2+1)-x(j2))
end do


do j3=0,n-2
d3(j3+2,j3+1,j3)=(d2(j3+2,j3+1)-d2(j3+1,j3))/(x(j3+2)-x(j3))
end do

do j4=0,n-3
d4(j4+3,j4+2,j4+1,j4)=(d3(j4+3,j4+2,j4+1)-d3(j4+2,j4+1,j4))/(x(j4+3)-x(j4))
end do

do j5=0,n-4
d5(j5+4,j5+3,j5+2,j5+1,j5)=(d4(j5+4,j5+3,j5+2,j5+1)-d4(j5+3,j5+2,j5+1,j5))/(x(j5+4)-x(j5))
end do

do j6=0,n-5
d6(j6+5,j6+4,j6+3,j6+2,j6+1,j6)=(d5(j6+5,j6+4,j6+3,j6+2,j6+1)-d5(j6+4,j6+3,j6+2,j6+1,j6))/(x(j6+5)-x(j6))
end do

do j7=0,n-6
d7(j7+6,j7+5,j7+4,j7+3,j7+2,j7+1,j7)=(d6(j7+6,j7+5,j7+4,j7+3,j7+2,j7+1)-d6(j7+5,j7+4,j7+3,j7+2,j7+1,j7))/(x(j7+6)-x(j7))
end do

g(0)=d1(0)
g(1)=d2(1,0)
g(2)=d3(2,1,0)
g(3)=d4(3,2,1,0)
g(4)=d5(4,3,2,1,0)
g(5)=d6(5,4,3,2,1,0)
g(6)=d7(6,5,4,3,2,1,0)


do k=0,6
write(*,*)g(k)
end do


end

Σημείωση:
Τα μηνύματα 5 έως 10 προέρχονται από το συγχωνευμένο θέμα "
Βοήθεια σε Visual Fortran".
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Δανάη

Πολύ δραστήριο μέλος

Η Δανάη αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 35 ετών. Έχει γράψει 1,127 μηνύματα.
αντι για real γιατί δεν τους κάνεις διπλής ακρίβειας? δε ξέρω αν είναι αυτό που φταίει αλλά δε χάνεις κ κάτι να το δοκιμάσεις!
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Tetragrammaton

Διάσημο μέλος

Ο Site Bot αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 35 ετών, επαγγέλεται Συνταξιούχος και μας γράφει απο Πειραιάς (Αττική). Έχει γράψει 2,671 μηνύματα.
Νοουπ, σειμ ολντ σιτ. :(
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

kalypso

Περιβόητο μέλος

Η lily allen αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 35 ετών, επαγγέλεται Μηχανολόγος μηχανικός και μας γράφει απο Μονακό (Ευρώπη). Έχει γράψει 5,880 μηνύματα.
Ρε δε βλέπω κάποιο λάθος... :worry:
Σου κολλάει όταν πας να δώσεις το n- στην αρχή αρχή; Τι σου γράφει;


Γράψε και το end do --->enddo
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Τελευταία επεξεργασία:

Tetragrammaton

Διάσημο μέλος

Ο Site Bot αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 35 ετών, επαγγέλεται Συνταξιούχος και μας γράφει απο Πειραιάς (Αττική). Έχει γράψει 2,671 μηνύματα.
Ναι, εκεί κρασάρει. Απλώς κανει Overflow και κολλάει, τερματίζεται μόνο του.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Tetragrammaton

Διάσημο μέλος

Ο Site Bot αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 35 ετών, επαγγέλεται Συνταξιούχος και μας γράφει απο Πειραιάς (Αττική). Έχει γράψει 2,671 μηνύματα.
Λοιπόν έκανα κάποιες νέες διορθώσεις, και το πρόγραμμα πλέον δεν κρασάρει. Έχει πλέον τη μορφή:

Code:
program newton

implicit none

double precision::x(10),y(10),d1(10),d2(10),d3(10),d4(10),d5(10),d6(10),d7(10),g(10)
integer::i,j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,k,n,mode

write(*,*)'Grapse 1 an 8es na leitourgiseis me synartisi, i 2 an 8es na dwseis me ti seira ta zeygaria x,y'
read(*,*) mode

write(*,*)'Dwse ton ari8mo twn simeiwn'

read(*,*)n

if(mode==1) then

write(*,*)'Dwse tis tetmimenes twn simeiwn'
do i=1,n
read(*,*) x(i)
y(i)=x(i)**2

end do

else

write(*,*)'Dwse ta zeygi twn syntetagmenwn twn simeiwn'
do i=1,n
read(*,*) x(i),y(i)

end do

end if

write(*,*)'Exoume ta e3is simeia'

do i=1,n
write(*,*)x(i),y(i)
end do





do j1=1,n
d1(j1)=y(j1)
end do

g(1)=d1(1)


do j2=1,n-1
d2(j2)=(d1(j2+1)-d1(j2))/(x(j2+1)-x(j2))
end do

g(2)=d2(1)

[B]if(n>=2) then
do j3=1,n-2
d3(j3)=(d2(j3+1)-d2(j3))/(x(j3+2)-x(j3))
end do

g(3)=d3(1)
end if[/B]


if(n>=3) then
do j4=1,n-3
d4(j4)=(d3(j4+1)-d3(j4))/(x(j4+3)-x(j4))
end do

g(4)=d4(1)
end if


if(n>=4) then
do j5=1,n-4
d5(j5)=(d4(j5+1)-d4(j5))/(x(j5+4)-x(j5))
end do

g(5)=d5(1)
end if


if(n>=5) then
do j6=1,n-5
d6(j6)=(d5(j6+1)-d5(j6))/(x(j6+5)-x(j6))
end do

g(6)=d6(1)
end if


if(n>=6) then
do j7=1,n-6
d7(j7)=(d6(j7+1)-d6(j7))/(x(j7+6)-x(j7))
end do

g(7)=d7(1)
end if

write(*,*)'Oi syntelestes g toy polywnymou einai:'
do k=1,n
write(*,*)g(k)
end do


end

Το πρόβλημά μου είναι το εξής: Για κάποιο λόγο που αδυνατό να εξηγήσω, το μπολνταρισμένο forloop δίνει πάντα τιμή 1, με αποτέλεσμα όλα τα επόμενα να δίνουν τιμή 0. Μπορεί να καταλάβει κανείς wtf is going on?:confused:
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

mi3s

Εκκολαπτόμενο μέλος

Ο mi3s αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 32 ετών και μας γράφει απο Θεσσαλονίκη (Θεσσαλονίκη). Έχει γράψει 377 μηνύματα.
Καλησπέρα παιδιά

Προσπαθώ να κάνω κάτι ασκήσεις στην fortran και ενώ θέτω μια εντολή dimension p(50) ας πούμε μου βγάζει Error Incorrect sequence of statements Τι μπορεί να γράφω λάθος?Έτσι δεν είναι η εντολή?

thanks in advance!
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 14 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Eruyomo

Πολύ δραστήριο μέλος

Ο Μάνος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 39 ετών και μας γράφει απο Χανιά (Χανιά). Έχει γράψει 1,505 μηνύματα.
Κάνε τον κόπο και κάνε paste το κομμάτι που στο βγάζει αυτό (3 γραμμές πριν-μετά)
Επίσης δεν χρειάζεται νομιζω να δηλώνεις ως dimension p(50). Αν οι αριθμοί του array σου είναι πχ real, τότε μπορείς να το κάνεις το ίδιο πράγμα ως real p(50).
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 14 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

mi3s

Εκκολαπτόμενο μέλος

Ο mi3s αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 32 ετών και μας γράφει απο Θεσσαλονίκη (Θεσσαλονίκη). Έχει γράψει 377 μηνύματα.
Δεν χρησιμοποιούμε την δήλωση μεταβλητών αν και το είπαμε.Έχω μια υποψία ότι αυτό το πρόγραμμα που χρησιμοποιώ τώρα είναι για διαφορετική fortran.Από την σχολή μας έχουνε δώσει το digital visual fortran αλλά το έχω εγκαταστήσει σε άλλον υπολογιστή.Eδώ τώρα έχω microsoft visual studio 08 μαζί με ένα pgi fortran compiler.
Oρίστε όλο το πρόγραμμα
Code:
open(unit=1,file='dedomena.txt')
open (unit=2,file='apotelesmata.txt')
read(1,*)n,v
dimension p(50)
call pinakas(p,n,v,r)
write(2,3)(p(i),i=1,n)
3 format (3f4.1)
write(2,4)r
4 format (E4.2)
stop
close(1)
close(2)
end 


subroutine pinakas(p,n,v,r)
dimension p(50)
p1=0
do i=2,n
p(i)=p(i-1)+v
end do
r=0
do i=1,n
r=r+(p(i)**2)
end do

return
end
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 14 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Eruyomo

Πολύ δραστήριο μέλος

Ο Μάνος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 39 ετών και μας γράφει απο Χανιά (Χανιά). Έχει γράψει 1,505 μηνύματα.
Δεν έχεις δηλώσει τι είναι το p.

Βάλε ένα real p πριν το dimension.

Κάντο με όλες τις μεταβλητές στο subroutine βασικά.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 14 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

mi3s

Εκκολαπτόμενο μέλος

Ο mi3s αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 32 ετών και μας γράφει απο Θεσσαλονίκη (Θεσσαλονίκη). Έχει γράψει 377 μηνύματα.
Μα το θέμα είναι ότι όλες οι ασκήσεις που έχει και στο βιβλίο γραμμένες δεν έχουνε δηλωμένες μεταβλητές και όμως λειτουργουσαν τουλαχιστον αυτές που κάναμε στο εργαστήριο.

Βασικά το δοκίμασα και αυτό που είπες τώρα τα έβαλα όλα real αλλά πάλι βγάζει το ίδιο error.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 14 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

kikidimitris

Νεοφερμένος

Η kikidimitris αυτή τη στιγμή δεν είναι συνδεδεμένη. Είναι 40 ετών. Έχει γράψει μόλις ένα μήνυμα.
Γεια σε όλους!
Θα ήθελα τη βοηθειά σας στο παρακάτω. Είστε η τελευταία μου ελπίδα
program test
integer: a,b,x,y,z,i
real c,m,sum
open(1,file="αρχείο.txt",status="old")
i=0
sum=0
do
read(1,10,end=500)a,b,c
10 format(i3,2x,i2,2x,f4.1)
m=a+b
sum=sum+c
print*, m,c
read(1,*)x,y,z
if(x+y>z) then
print*,x,y,z
else
print*,z
endif
i=i+1
enddo
500 print*, "plithos", i
print*,"athroimsa", sum
close(1)
end program

Να γράψετε τις τιμές που εμφανίζει(print) το πρόγραμμα κατά την εκτελεσή του λαμβάνοντας υπόψη
ότι το αρχείο περιέχει δεδομένα που εμφανίζονται στο πλαίσιο δίπλα στο πρόγραμμα.

1512151810291234567
50 30 90
3512151890765490123
50 60 70


Οι ερωτήσεις μου είναι:
1)Η εντολή επανάληψης πρέπει να γίνει μέχρι το sum να γίνει 500?
2)Με βἀση το format έχουμε το a=151 αφού i3, το b=51 αφού αφήνουμε 2ψηφία κενά(2χ) και είναι i2
και αφήνουμε πάλι 2ψηφία κενά(2χ). Το πρόβλημα μου είναι το c. Απ'ότι έχω καταλάβει βάση του format f4.1 πρέπει να ειναι 4ψηφία συνολικά (συμπεριλαμβανομένης της υποδιαστολής) και 1ψηφίο μετά την υποδιαστολή. Αρα 029.1? Και τα υπόλοιπα ψηφία τα αγνοούμε?

Please help!!!!!!!!
Σας ευχαριστώ πολύ για τη βοήθεια.

Σημείωση:
Το παρόν μήνυμα προέρχεται από το συγχωνευμένο θέμα "Θέμα FORTRAN 90".
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

aglaia.kd

Νεοφερμένος

Η aglaia.kd αυτή τη στιγμή δεν είναι συνδεδεμένη. Έχει γράψει μόλις ένα μήνυμα.
ποιος ξερει απο fortran? ειναι αναγκη!:(

Σημείωση:
Το παρόν μήνυμα προέρχεται από το συγχωνευμένο θέμα "
Fortran".
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 1 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top