Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομή επανάληψης => Μήνυμα ξεκίνησε από: Εβελινακι στις 05 Οκτ 2022, 09:22:40 ΜΜ

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

Ευχαριστώ εκ των προτέρων για την όποια βοήθεια!
Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: gpapargi στις 07 Οκτ 2022, 09:02:11 ΠΜ
Θα δοκιμάσεις μια προς μια όλες τις ακέραιες τιμές από το -100 ως το 100 για να δεις αν επαληθεύουν την εξίσωση και θα εμφανίζεις τις λύσεις. Για να το κάνεις έξυπνο θα έχεις ένα μετρητή που θα αυξάνει κατά ένα κάθε φορά που βρήκε λύση. Επειδή είναι 3ου βαθμού πολυωνυμική εξίσωση έχει το πολύ 3 λύσεις άρα αν βρεις 3 λύσεις τότε σταματάς.

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

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

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

edit: Το θεώρημα ακεραίων ριζών θέλει ακέραιους συντελεστές. Εδώ οι συντελεστές δεν είναι απαραίτητα ακέραιοι και δεν το πρόσεξα στην εκφώνηση. Ευχαριστώ τον ApoAntonis που μου το επισήμανε
Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: Λαμπράκης Μανώλης στις 07 Οκτ 2022, 10:12:32 ΠΜ
Καλημέρα σε όλους 

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

Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: ApoAntonis στις 07 Οκτ 2022, 11:07:19 ΠΜ
θα το γράψω για να μην σκάσω:
"όταν βρεί τρεις λύσεις" πρέπει να γίνει "αν βρεί τρεις λύσεις"
Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: Εβελινακι στις 07 Οκτ 2022, 10:19:26 ΜΜ
Ευχαριστώ πολύ για τη βοήθεια! 
Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: Εβελινακι στις 24 Οκτ 2022, 08:31:41 ΜΜ
Καλησπέρα και πάλι! Είμαι μαθήτρια της Γ'λυκειου και θα ήθελα βοήθεια σε μια άσκηση. 
Εκφώνηση: Να γράφει αλγόριθμος που θα εμφανίζει το άθροισμα S μόλις αυτό ξεπεράσει το 500 
S=1^2 + 2^4 + 3^6 + 4^8 +....
Τίτλος: Απ: μια βοηθεια σε μια ασκηση..
Αποστολή από: nokotsos στις 24 Οκτ 2022, 09:08:33 ΜΜ
Καλησπέρα,
Σε αυτού του είδους τις ασκήσεις προσέχεις που ξεκινάν που τελειώνουν και ποιο είναι το μοτίβο.
Παρατηρείς πως ο πρώτος αριθμός είναι 1^2 και ο επόμενος είναι (προηγούμενος_αριθμός+1)^(προηγούμενος εκθέτης + 2). Οπότε φτιάχνεις αρχικά  μια μεταβλητή για το άθροισμα και όσο αυτό είναι <= 500 συνεχίζει να αθροίζεις. Επίσης θα χρειαστείς μία μεταβλητή για την βάση και μία για τον εκθέτη για έχεις πιο πολύ τον έλεγχο στο πόσο θα τους αυξάνεις.


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

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


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




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