μια βοηθεια σε μια ασκηση..

Ξεκίνησε από Εβελινακι, 05 Οκτ 2022, 09:22:40 ΜΜ

« προηγούμενο - επόμενο »

Εβελινακι

Καλησπέρα, είμαι μαθήτρια της Γ Λυκείου και θα ήθελα μια βοήθεια για την υλοποίηση ενός προγράμματος το οποίο λέει:
 Να γράφει πρόγραμμα που να διαβάζει τα α,β,γ,δ Να υπολογίζει και να εκτυπώνει όλες τις ακέραιες λύσεις της εξίσωσης αχ^3+ βχ^2 + γχ + δ = 0 Στο διάστημα [-100,100]. Το πρόγραμμα θα πρέπει να είναι έξυπνο και να σταματά την αναζήτηση όταν βρει τρεις λύσεις. 

Ευχαριστώ εκ των προτέρων για την όποια βοήθεια!

gpapargi

#1
Θα δοκιμάσεις μια προς μια όλες τις ακέραιες τιμές από το -100 ως το 100 για να δεις αν επαληθεύουν την εξίσωση και θα εμφανίζεις τις λύσεις. Για να το κάνεις έξυπνο θα έχεις ένα μετρητή που θα αυξάνει κατά ένα κάθε φορά που βρήκε λύση. Επειδή είναι 3ου βαθμού πολυωνυμική εξίσωση έχει το πολύ 3 λύσεις άρα αν βρεις 3 λύσεις τότε σταματάς.

Μια τροποποίηση που μπορεί να το κάνει ακόμα πιο γρήγορο (και χωρίς περιορισμό στο [-100, 100] είναι να ελέγχεις μόνο τους διαιρέτες του δ (θεώρημα ακεραίων ριζών, άλγεβρα β λυκείου: αν μια πολυωνυμική εξίσωση έχει ακέραια λύση αυτή διαιρεί το σταθερό όρο).

Μια ακόμα βελτίωση είναι να γράψεις το πολυώνυμο ώστε να υλοποιεί το σχήμα horner δηλαδή ((αχ+β)*χ+γ)*χ+δ.

Γενικά προσφέρεται το θέμα για κουβέντα και αλγοριθμική συζήτηση το οποίο αν και διδακτικό δεν επιβραβεύεται στις εξετάσεις.

edit: Το θεώρημα ακεραίων ριζών θέλει ακέραιους συντελεστές. Εδώ οι συντελεστές δεν είναι απαραίτητα ακέραιοι και δεν το πρόσεξα στην εκφώνηση. Ευχαριστώ τον ApoAntonis που μου το επισήμανε

Λαμπράκης Μανώλης

Καλημέρα σε όλους 

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


ApoAntonis

θα το γράψω για να μην σκάσω:
"όταν βρεί τρεις λύσεις" πρέπει να γίνει "αν βρεί τρεις λύσεις"

Εβελινακι

Ευχαριστώ πολύ για τη βοήθεια! 

Εβελινακι

Καλησπέρα και πάλι! Είμαι μαθήτρια της Γ'λυκειου και θα ήθελα βοήθεια σε μια άσκηση. 
Εκφώνηση: Να γράφει αλγόριθμος που θα εμφανίζει το άθροισμα S μόλις αυτό ξεπεράσει το 500 
S=1^2 + 2^4 + 3^6 + 4^8 +....

nokotsos

Καλησπέρα,
Σε αυτού του είδους τις ασκήσεις προσέχεις που ξεκινάν που τελειώνουν και ποιο είναι το μοτίβο.
Παρατηρείς πως ο πρώτος αριθμός είναι 1^2 και ο επόμενος είναι (προηγούμενος_αριθμός+1)^(προηγούμενος εκθέτης + 2). Οπότε φτιάχνεις αρχικά  μια μεταβλητή για το άθροισμα και όσο αυτό είναι <= 500 συνεχίζει να αθροίζεις. Επίσης θα χρειαστείς μία μεταβλητή για την βάση και μία για τον εκθέτη για έχεις πιο πολύ τον έλεγχο στο πόσο θα τους αυξάνεις.


Αλγόριθμος Ασκ
   S ← 0
   !Αρχικά "φτιάχνουμε" τον πρώτο αριθμός της ακολουθίας
   Βάση_αριθμού ← 1
   Εκθέτης ← 2
   Όσο S <= 500 επανάλαβε
      S ← S + Βάση_αριθμού^Εκθέτης
      !Μην ξεχνάς να ανανεώνεις τις μεταβλητές για προσθέσεις τον επόμενο όρο στην άλλη επάνάληψη
      Βάση_αριθμού ← Βάση_αριθμού + 1
      Εκθέτης ← Εκθέτης + 2
   Τέλος_επανάληψης
   Εμφάνισε S
Τέλος Ασκ


Εβελινακι

Παράθεση από: nokotsos στις 24 Οκτ 2022, 09:08:33 ΜΜΚαλησπέρα,
Σε αυτού του είδους τις ασκήσεις προσέχεις που ξεκινάν που τελειώνουν και ποιο είναι το μοτίβο.
Παρατηρείς πως ο πρώτος αριθμός είναι 1^2 και ο επόμενος είναι (προηγούμενος_αριθμός+1)^(προηγούμενος εκθέτης + 2). Οπότε φτιάχνεις αρχικά  μια μεταβλητή για το άθροισμα και όσο αυτό είναι <= 500 συνεχίζει να αθροίζεις. Επίσης θα χρειαστείς μία μεταβλητή για την βάση και μία για τον εκθέτη για έχεις πιο πολύ τον έλεγχο στο πόσο θα τους αυξάνεις.


Αλγόριθμος Ασκ
   S ← 0
   !Αρχικά "φτιάχνουμε" τον πρώτο αριθμός της ακολουθίας
   Βάση_αριθμού ← 1
   Εκθέτης ← 2
   Όσο S <= 500 επανάλαβε
      S ← S + Βάση_αριθμού^Εκθέτης
      !Μην ξεχνάς να ανανεώνεις τις μεταβλητές για προσθέσεις τον επόμενο όρο στην άλλη επάνάληψη
      Βάση_αριθμού ← Βάση_αριθμού + 1
      Εκθέτης ← Εκθέτης + 2
   Τέλος_επανάληψης
   Εμφάνισε S
Τέλος Ασκ




Ευχαριστώ πολύ για τη βοήθεια, έγιναν πολύ κατανοητά! 🙏🏼