Πληροφορική/ Τεχνολογιών Απορία με fortran

χημεια4λαιφ

Νεοφερμένο μέλος

Ο χημεια4λαιφ αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι Μεταπτυχιακός φοιτητής. Έχει γράψει 96 μηνύματα.
Απορία στη πληροφορική fortranf90
939515c56b86d609e2.jpg


Πως λύνεται αυτό?

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

 
Δεν ξέρω fortran αλλά το ερώτημα εξηγεί καλά τι θα κάνεις. Θα έχεις μια επανάληψη η οποία θα υπολογίζει το άθροισμα και μόλις δυο διαδοχικά αθροίσματα έχουν διαφορά μικρότερη από το h το σταματάς.

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

 
Στείλε τον κώδικα που έχεις γράψει ως τώρα για να σε βοηθήσουμε.

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

 
Εμένα με μπερδεύει η απάντηση του @johnny

Η υπόδειξη λέει ότι η άθροιση σταματά όταν η απόλυτη τιμή του όρου που προστίθεται στο άθροισμα είναι μικρότερη από h, δηλαδή όταν

το abs(3/ι*(x^ι)) < h

Αυτό που λέει ο @johnny (μόλις δυο διαδοχικά αθροίσματα έχουν διαφορά μικρότερη από το h το σταματάς) από που βγαίνει;


Άρα η λύση ειναι:
1) Mια συνάρτηση που παίρνει ως είσοδο την τιμή του x και την ακρίβεια h.
2) Μέσα στη συνάρτηση ορίζουμε και αρχικοποιουμε την τιμή του i = 1, καθώς και το άθροισμα (sum = 0)
3) Μετά βάζουμε μια while που ελέγχει ότι για όσο abs(3/ι*(x^ι)) >= h κάνουμε τον υπολογισμο sum = sum + 3/i*(x^i) και αυξάνουμε την τιμή του i κατά 1
4) Έπειτα επιστρέφουμε ως έξοδο το i και το sum μέσα σε ένα πίνακα ή άλλη δομή δεδομένων.

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

 
Τελευταία επεξεργασία:
Ο Άκικος έχει δίκιο, η άσκηση είναι πιο εύκολη από αυτό που φαντάστηκα. Δεν είχα διαβάσει πως χρησιμοποιείς την "ακρίβεια".

Ο Άκικος έχει τελειώσει ΕΜΠ είναι καλύτερος σε αυτά.

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

 
Τελευταία επεξεργασία:
Ο Άκικος έχει τελειώσει ΕΜΠ είναι καλύτερος σε αυτά.
Ούτε εμας μας έμαθαν Fortran :mpliaks:... αλλά μας έμαθαν να επιβιώνουμε στις δύσκολες καταστάσεις.

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

 
Εμένα με μπερδεύει η απάντηση του @johnny

Η υπόδειξη λέει ότι η άθροιση σταματά όταν η απόλυτη τιμή του όρου που προστίθεται στο άθροισμα είναι μικρότερη από h, δηλαδή όταν

το abs(3/ι*(x^ι)) < h

Αυτό που λέει ο @johnny (μόλις δυο διαδοχικά αθροίσματα έχουν διαφορά μικρότερη από το h το σταματάς) από που βγαίνει;


Άρα η λύση ειναι:
1) Mια συνάρτηση που παίρνει ως είσοδο την τιμή του x και την ακρίβεια h.
2) Μέσα στη συνάρτηση ορίζουμε και μηδενίζουμε την τιμή του Ν, καθώς και το άθροισμα (sum)
3) Μετά βάζουμε μια while που ελέγχει ότι για όσο abs(3/ι*(x^ι)) >= h κάνουμε τον υπολογισμο sum = sum + 3/i*(x^i) και αυξάνουμε την τιμή του Ν κατά 1
4) Έπειτα επιστρέφουμε ως έξοδο το Ν και το sum μέσα σε ένα πίνακα ή άλλη δομή δεδομένων.

Το N δεν κατάλαβα τι ρόλο παίζει.... Δλδ θα κάνω do i=1,1000000
If abs(3/i*x^i) then sum=sum+(3/i*x^i)
Else exit και μετά τι;

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

 
Το N δεν κατάλαβα τι ρόλο παίζει.... Δλδ θα κάνω do i=1,1000000
If abs(3/i*x^i) then sum=sum+(3/i*x^i)
Else exit και μετά τι;


Έκανα edit την παραπανω απάντηση.

Το Ν είναι μια από τις εξοδους της συναρτησης. Είναι ο αριθμός i ώστε abs(3/i*x^i)<h


Δεν θα βάλεις do αλλά while loop με συνθήκη abs(3/i*x^i)>=h

251735c573f5c06a02.jpg

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

 
Τελευταία επεξεργασία:
do while ABS((3/i)*x**i)>=h
s=s+(3/i)*x**i)


i=i+1 αυτο;;;; ειμαι αχτηστος στην πληροφορικη δεν εχω το σκεπτικο για να γινω καλος

do while ABS((3/i)*x**i)>=h
s=s+(3/i)*x**i)


i=i+1 αυτο;;;; ειμαι αχτηστος στην πληροφορικη δεν εχω το σκεπτικο για να γινω καλος


με enddo sto telos

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

 
do while ABS((3/i)*x**i)>=h
s=s+(3/i)*x**i)


i=i+1 αυτο;;;; ειμαι αχτηστος στην πληροφορικη δεν εχω το σκεπτικο για να γινω καλος




με enddo sto telos


δεν ξέρω τη σύνταξη της fortran αλλά η λογική αυτή ειναι.

Δεν είναι αρχαία, έκθεση, ιστορία και άλλες θεωρητικές μπούδρες. 2, 3 εντολές είναι που αν καταλάβεις τη λογική τους μπορεί να λύσεις οποιοδήποτε αλγόριθμο. Η άσκηση αυτή προσπαθεί να σε ψαρώψει από την εκφώνηση αλλά αν καταλάβεις τι ζητά ο αλγόριθμος η λύση είναι εύκολη.

Μην προσπαθείς να λύσεις την άσκηση στο χαρτί αλλά σε υπολογιστή κατευθείαν.

Ένας online compiler είναι εδώ
https://www.tutorialspoint.com/compile_fortran_online.php

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

 
εχω το προγραμμα στον υπολογιστη μου.....θα προσπαθησω να τη λυσω

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

 

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

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