Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Κανονας Τραπεζιου

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3205

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
f = lambda x: (-1/6)*(x-1)*(x+2)*(x-4)
n=input()
a=input()
b=input()
h=(b-a)/n
sum=0
part1=(0.5)*h*(f(a)+f(b))
if n>0:


for i in range(1,n):


xi=a+i*h
sum=sum+f(xi)
print part1+h*sum


Αυτος ειναι ο κωδικας αλλα δε βγαινουν σωστα τ νουμερα! Θα μπορουσατε να επισημανεται τα λαθη μου; Καθε βοηθεια ειναι δεχουμενη
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3206

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Αν ο κώδικας έχει αυτή περίπου την στοίχιση:
def func():
    f = lambda x: (-1 / 6.) * (x - 1) * (x + 2) * (x - 4)
    n = input('n: ')
    a = input('a: ')
    b = input('b: ')
    h = float(b - a) / n
    summary = 0
    part1 = 0.5 * h * (f(a) + f(b))
    if n > 0:
        for i in range(1, n):
            xi = a + i * h
            summary += f(xi)
    print part1 + h * summary
 
 
if __name__ == '__main__':
    func()
... και χρησιμοποιείς python 2.7,
πρέπει να προσέξεις τις διαιρέσεις (γίνονται int)
Για να το αποφύγεις όπως βλέπεις, πρέπει να τις κάνεις με float.
Αν για τιμές βάλεις 5, 6 και 7, τι πρέπει να πάρεις σαν έξοδο στο print?
Εμένα μου δίνει -19.7266666667
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3207

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
Οταν το τρεχω εμενα μου λεει η f its not defined.. Για ποιο λογο?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3208

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
το εφτιαξα και σε μενα τοσο δδινει
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3209

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
αλλα δεν ειναι η σωστη απαντηση κτ λαθος εχει
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3210

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
vaskot έγραψε:
αλλα δεν ειναι η σωστη απαντηση κτ λαθος εχει
OK.
Τι απάντηση πρέπει να πάρεις?
Με τι νούμερα εισόδου?
Και τι version Python έχεις?
Τελευταία διόρθωση: 9 Χρόνια 4 Εβδομάδες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3211

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
python 2.7
εισοδος 10 2 -4
και βγαινει 10.264
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3212

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
συγνωμη αλλα η συναρτηση εχει κι ενα *(χ-2)
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3213

  • vaskot
  • Το Άβαταρ του/της vaskot
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 26
from __future__ import division
f = lambda x: (-1/6)*(x-1)*(x-2)*(x+2)*(x-4)
n=input()
a=input()
b=input()

h = (b - a) / n
s = f(a) + f(b)
for i in xrange(1, n):
s += 2 * f(a + i * h)
print "%0.3f" % (s* h / 2)

τωρα ειναι σωστο απλα θελω να κανει συνεχως επαναληψεις μεχρι ο χρηστης να βαλει για n=0, πως το κανω αυτο?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 4 Εβδομάδες πριν #3214

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Κάπως έτσι:

# -*- coding: utf-8 -*-
from __future__ import division
import sys
 
f = lambda x: (-1/6)*(x-1)*(x-2)*(x+2)*(x-4)
 
n=input('Δώσε n. Αν n = 0, τότε έξοδος: ')
if n != 0:
    a=input()
    b=input()
 
while n <> 0:
    h = (b - a) / n
    s = f(a) + f(b)
    for i in xrange(1, n):
        s += 2 * f(a + i * h)
    print "%0.3f" % (s* h / 2)
    n=input('Δώσε n. Αν n = 0, τότε έξοδος: ')
    if n <> 0:
        a=input()
        b=input()
else:
    print "Έξοδος"
    sys.exit(1)


Σε παρακαλώ να βάζεις τον κώδικά σου σε code tags, ώστε να είναι ευανάγνωστος και να διευκολυνθούν αυτοί που τον διαβάζουν.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 3 Εβδομάδες πριν #3219

  • Tassos
  • Το Άβαταρ του/της Tassos
  • Αποσυνδεμένος
  • pyth__
  • g-lts.info
  • Δημοσιεύσεις: 78
  • Ληφθείσες Ευχαριστίες 5
Μπορείς να μας πεις ποιο είναι το πρόβλημα που σκοπεύεις να λύσεις με αυτό τον κώδικα;
Βλέπω στο θέμα να γράφεις "Κανονας Τραπεζιου", αλλά μπορείς να μας πεις εδώ τι ακριβώς θες, ποιο είναι το πρόβλημα.. ;
Ομάδα Ελληνικής - Μακροχρόνιας υποστήριξη.

Greek - Long Term Support Team.

Επισκεφθείτε μας εδώ : g-lts.info
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Κανονας Τραπεζιου 9 Χρόνια 3 Εβδομάδες πριν #3225

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Ο κανόνας τραπεζίου είναι ένας τρόπος αριθμητικής ολοκλήρωσης. Στα αγγλικά θα τον συναντήσεις με το όνομα Simpson's rule: en.wikipedia.org/wiki/Simpson's_rule

@vaskot
Σε τέτοιου είδους προβλήματα είναι πολύ βολικό να κάνεις test driven development, Να γράψεις δηλαδή tests που να ελέγχουν γνωστές περιπτώσεις. Στα tests προσπαθείς να καλύψεις και edge cases.

Αφού γράψεις τα test, μετά πας και υλοποιείς τη συνάρτηση που σε ενδιαφέρει. Αυτό που κερδίζεις είναι ότι θα γλυτώσεις χρόνο στο debugging και ότι θα έχεις μεγαλύτερη εμπιστοσύνη στο ότι ο κώδικας σου είναι σωστός.

Πχ, με κάτι σαν το ακόλουθο, κάθε φορά που τρέχεις τον κώδικά σου θα ελέγχεις και αν είναι σωστός.
from __future__ import division
 
# In this function you will write down your tests, i.e. you will assert that
# your code returns the correct result for the specified input
def test_simpsons_rule():
    # case 1
    f = lambda x: 2
    assert simpsons_rule(f, 0, 1, 1) == 2
    assert simpsons_rule(f, 0, 1, 10) == 2
 
    # case 2
    f = lambda x: x
    assert simpsons_rule(f, 0, 1, 1) == 0.5
    assert simpsons_rule(f, 0, 1, 10) == 0.5
 
    f = lambda x: x**2
    # ....
 
 
def simpsons_rule(f, a, b, n):
    # write down your own implementation
    pass
 
 
if __name__ == "__main__":
    test_simpsons_rule()
 
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.429 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου