Συζητήσεις > python

Άσκηση: Τρίγωνα;

(1/2) > >>

chiossif:
Να και μια ασκησούλα που έβαλα για σεφτέ στην C/C++. Λύνεται και σε python και έτσι την έφερα και εδώ... Με τις πρώτες λύσεις και στις δύο γλώσσες θα συγκρίνουμε και την πιο κομψή...

Σε ένα αρχείο κειμένου υπάρχουν τρεις πραγματικοί αριθμοί σε κάθε γραμμή. Ζητείται ένα πρόγραμμα το οποίο θα διαβάσει όλες τις τριάδες μέχρι να τελειώσουν και για κάθε μία από αυτές θα ελέγχει αν είναι πλευρές τριγώνου και τότε θα υπολογίζει τα υπόλοιπα στοιχεία του τριγώνου δηλαδή γωνίες, περίμετρο και εμβαδό και θα τα εμφανίζει κατάλληλα. Προαιρετικά μπορείτε με βάση τα στοιχεία αυτά να χαρακτηρίσετε το τρίγωνο σε ορθογώνιο, οξυγώνιο ή αμβλυγώνιο, ισόπλευρο ισοσκελές ή σκαληνό ή ότι άλλο τριγωνο-σχετικό φανταστείτε...

Αυτήν την ασκησούλα όπως και πολλές άλλες δεν τις έχω "γεννήσει" και άρα δεν διεκδικώ την πατρότητα καμιάς (εκτός και αν το γράψω ρητά) (άνω τελεία) τις έχω διαβάσει σε βιβλία, που δυστυχώς δεν θυμάμαι, ή τις είχα συναντήσει όταν ήμουν φοιτητής. Επίσης μην ξεχάσετε να σχολιάσετε την λύση της...

vagvaf:
το έλυσα αλλα δεν ξέρω αν πρέπει να "δώσω" την λύση τόσο νώρίς

όσοι θέλουν να την δούνε την έχω βάλει εδώ : http://users.ntua.gr/rs03080/otinanai.py

σηκώνει βελτιώσεις αλλα απο αύριο ;D


το αρχείο πάνω στο οποίο έγινε η εφαρμογή ειναι αυτο: http://users.ntua.gr/rs03080/test.txt

chiossif:
Γρήγορος είσαι...

(καλά αυτή η pythoν πως ανοίγει και διαβάζει έτσι...)

Λοιπόν προτείνω να προστεθούν μερικά "ειδικά" τριγωνάκια:


3 4 5
9 9 9
3 4 7
3.0 4.0000001 4.9999999
1 2 1
3 2 2
1 3 1


Την δική μου δεν πρόλαβα να την λύσω σε C.
Πάντως ευτυχώς που τα forum είναι χωριστά... :-)


vagvaf:
Μεταφέρω εδω μια συζήτηση που έγινε σε chat

Θέμα ήταν τι περιορισμό βάζουμε για να ελέγχουμε αν δημιουργείται τρίγωνο με τις 3 δοθείσες πλευρές.
Η wikipedia (και η ευκλείδια γεωμετρία) γράφει:


--- Quote ---The sum of the lengths of any two sides of a triangle always exceeds (or at the very least, equals) the length of the third side. That is the triangle inequality. (In the special case of equality, two of the angles have collapsed to size zero, and the triangle has degenerated to a line segment.)
--- End quote ---

Οι δυο "αντίπαλες" προτάσεις ήταν:

if a+b>=c and a+c>=b and c+b>=a :
                                                         τότε τρίγωνο
if a+b>=c or a+c>=b or c+b>=a :
                                                         τότε τρίγωνο

Ποία είναι η σωστή όμως;
Ας δούμε λίγο καλύτερα τον ορισμό του Ευκλείδη :


--- Quote ---Το άθροισμα οποιωνδήποτε 2 πλευρών ενός τριγώνου πάντα είναι μεγαλύτερο (ή ίσο) από την τρίτη.
--- End quote ---
άρα σε ένα τρίγωνο ισχύει:
ΑΒ+ΑΓ>=ΒΓ
ΑΓ+ΒΓ>=ΑΒ
ΑΒ+ΒΓ>=ΑΓ
αυτές οι 3 σχέσεις λοιπόν ισχύουν σε ΚΑΘΕ τρίγωνο ΤΑΥΤΟΧΡΟΝΑ.

αν χρησιμοποιούσαμε το  or προφανώς θα γινόταν λάθος στους υπολογισμούς γιατί αν η σειρά με το μήκος των πλευρών ήταν κάπως έτσι:
6 3 2

6+3=9>=2
6+2=8>=3
3+2=5<=6 -> μη αποδεκτό

παρόλα αυτά το πρόγραμμα θα το δεχόταν επειδή ισχύει τουλάχιστον 1 ισότητα (or).

Άρα το or είναι λάθος?

Όχι απαραίτητα! Εξαρτάται πως εξετάζεις τον ορισμό και πως προσεγγίζεις το πρόβλημα!
Το or θα ήταν απολύτως σωστό (και το and θα ήταν λάθος) στην περίπτωση που κάποιος αντιλαμβανόταν τον ορισμό έτσι:


--- Quote ---Σε ΚΑΘΕ τρίγωνο η τρίτη πλευρά είναι μικρότερη από το άθροισμα των άλλων δύο.
--- End quote ---
και ο περιορισμός του προγράμματος θα ήταν κάπως έτσι (προσοχή στις αντεστραμμένες ανισότητες)

if a+b<c or a+c<b or c+b<a :
                                                         τότε MH-τρίγωνο

η ίδια διαδικασία με το and θα ήταν προβληματική γιατί δεν χρειαζόμαστε να ισχύουν ΟΛΕΣ η ανισότητες αυτή τη φορά, μόνο 1.



Κωστής:
μια αποριούλα: για 3,4,7 και για 0,0,0 (για παραδειγμα) το σκριπτακι σου βγαζει οτι σχηματιζουν τρίγωνο; με τη συνθήκα που εχεις βαλει

--- Code: ---    if a+b>=c and a+c>=b and c+b>=a:
--- End code ---
νομιζω ότι και αυτούς του συνδυασμούς βγαζει οτι σχηματιζουν τρίγωνο... ???

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Go to full version