Άσκηση στη δομή επιλογής

Ξεκίνησε από kiro, 29 Νοε 2005, 12:00:53 ΠΜ

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

kiro

Geia sas!!

Έχω βρει σε ένα site μια άσκηση και θα ήθελα να ρωτήσω κάτι. Η εκφώνηση της άσκησης είναι παρακάτω:

Μια ιδιωτική εταιρεία αποφάσισε να εφαρμόσει ενιαία πολιτική στη μισθοδοσία του προσωπικού της. Έτσι, ο βασικός μισθός είναι 1200 €. Για τους αποφοίτους ΑΕΙ/ΤΕΙ υπάρχει επίδομα 20% ενώ αν κάποιος διαθέτει μεταπτυχιακό τίτλο τότε το επίδομα σπουδών γίνεται 29%. Επιπρόσθετα, κάθε υπάλληλος λαμβάνει χρονοεπίδομα 15% επί του βασικού μισθού αν βρίσκεται μέχρι και 5 χρόνια στην εταιρεία, 25% αν βρίσκεται μέχρι και 15 χρόνια ενώ 35% αν εργάζεται περισσότερα από 15 χρόνια στην εταιρεία. Να αναπτύξετε αλγόριθμο που θα διαβάζει το όνομα του μισθωτού, το επίπεδο σπουδών (1. βασική εκπαίδευση, 2. ΑΕΙ/ΤΕΙ και 3. Μεταπτυχιακές σπουδές) καθώς και τα έτη υπηρεσίας και στη συνέχεια να υπολογίζει και να εκτυπώνει τις μηνιαίες αποδοχές του

Δίνει λύση για την άσκηση την εξής:


Αλγόριθμος Ενιαίο_Μισθολόγιο
  Βασικός_Μισθός ← 1200
  Διάβασε όνομα, έτη_υπηρεσίας, επίπεδο_σπουδών
  Αν επίπεδο_σπουδών = 1 τότε
    μισθός ← Βασικός_Μισθός
  Αλλιώς_Αν επίπεδο_σπουδών = 2 τότε
    μισθός ← Βασικός_Μισθός * (1 + 20/100)
  Αλλιώς_Αν επίπεδο_σπουδών = 3
    μισθός ← Βασικός_Μισθός * (1 + 29/100)
  Τέλος_Αν
  Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; μισθός * (1 + 15/100)
  Αλλιώς_Αν έτη_υπηρεσίας <= 15 τότε
    μισθός &#8592; μισθός * (1 + 25/100)
  Αλλιώς ! έτη_υπηρεσίας > 15
    μισθός &#8592; μισθός * (1 + 35/100)
  Τέλος_Αν
  Εκτύπωσε "Ο μισθωτός ", όνομα, " έχει μηνιαίες αποδοχές ", μισθός
Τέλος Ενιαίο_Μισθολόγιο

Από τη στιγμή που η εκφώνηση της άσκησης λέει πως λαμβάνει χρονοεπίδομα 15% επί του βασικού μισθού δε θα έπρεπε να είναι:

 Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 15/100)
  Αλλιώς_Αν έτη_υπηρεσίας <= 15 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 25/100)
Αλλιώς_Αν έτη_υπηρεσίας > 15
    μισθός &#8592; Βασικός_Μισθός * (1 + 35/100)
  Τέλος_Αν
  Εκτύπωσε "Ο μισθωτός ", όνομα, " έχει μηνιαίες αποδοχές ", μισθός
Τέλος Ενιαίο_Μισθολόγιο

Ή

Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; μισθός +  Βασικός_Μισθός * (1 + 15/100)
  Αλλιώς_Αν έτη_υπηρεσίας <= 15 τότε
    μισθός &#8592; μισθός +  Βασικός_Μισθός * (1 + 25/100)
  Αλλιώς_Αν έτη_υπηρεσίας > 15
    μισθός &#8592; μισθός +  Βασικός_Μισθός * (1 + 35/100)
  Τέλος_Αν
  Εκτύπωσε "Ο μισθωτός ", όνομα, " έχει μηνιαίες αποδοχές ", μισθός
Τέλος Ενιαίο_Μισθολόγιο



Ευχαριστώ πολύ!

P.Tsiotakis


Όλγα, έχεις δίκιο στην παρατήρησή σου. Γι' αυτό μάλλον χρησιμοποιεί την σταθερά Βασικός_Μισθός στην αρχή (και της αποδίδει την τιμή 1200). Για να τη χρησιμοποιήσει και για τον υπολογισμό του επιδόματος αργότερα. Πιστεύω οτι θα το διορθώσει τώρα που επισημάνθηκε

Λες και στο βιβλίο να την λύνει με αυτόν τον τρόπο;

andrika

Συμφωνω απολυτως με τον κυριο Τσιωτακη.. Και κατα την γνωμη μου πιο ευκολα κατανοητο στα παιδια ειναι να γραψουμε :
Βασικός_Μισθός +Βασικός_Μισθός * (15/100) για να καταλαβουν καλυτερα το οτι το 15% αναφερετε στον βασικο μισθο.

Σας ευχαριστω
 Ανδρεας

kiro

Δηλαδή από τις δύο δικές μου περιπτώσεις η πρωτη είναι σωστή; Δεν μπορούμε να πάρουμε συνολικά

Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; μισθός +  Βασικός_Μισθός * (1 + 15/100)
  
είναι λάθος; Δηλ ο τελικός μισθός να είναι ο μισθός από το πρώτο
Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 15/100)
  Αλλιώς_Αν έτη_υπηρεσίας <= 15 τότε
    μισθός &#8592;  Βασικός_Μισθός * (1 + 25/100)

  + ο Βασικός_Μισθός + το 115/100 * Βασικός_Μισθός

δηλ.

Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; μισθός +  Βασικός_Μισθός * (1 + 15/100)

Sergio

Στην κατεύθυνση της ανάπτυξης της αναλυτικής σκέψης θα «έβλεπα» ως διδακτικά ενδιαφέρουσα (ίσως προτιμότερη) μία λύση που θα πρότεινε τμηματική επίλυση του προβλήματος με ξεχωριστές ενότητες για κάθε (έμμεσα) ενδιάμεσο ζητούμενο, χωρίς να επαναλαμβάνει κοινές ενέργειες στα πλαίσια της(ων) δομής(ων) επιλογής:

[glossa]
! Είσοδος
Βασικός_Μισθός <-- 1200
ΔΙΑΒΑΣΕ όνομα, έτη_υπηρεσίας, επίπεδο_σππουδών

! Υπολογισμός επιδόματος σπουδών
ΑΝ επίπεδο_σπουδών = 1 ΤΟΤΕ
  Επίδομα_σπουδών <-- 0
ΑΛΛΙΩΣ_ΑΝ επίπεδο_σπουδών = 2 ΤΟΤΕ
  Επίδομα_Σπουδών <-- Βασικός_Μισθός * 20 / 100
ΑΛΛΙΩΣ
  Επίδομα_Σπουδών <-- Βασικός_Μισθός * 29 / 100
ΤΕΛΟΣ_ΑΝ

! Υπολογισμός Χρονοεπιδόματος
ΑΝ έτη_υπηρεσίας <= 5 ΤΟΤΕ
  Χρονοεπίδομα <-- Βασικός_Μισθός * 15 / 100
ΑΛΛΙΩΣ_ΑΝ έτη_υπηρεσίας <= 15 ΤΟΤΕ
  Χρονοεπίδομα <-- Βασικός_Μισθός * 25 / 100
ΑΛΛΙΩΣ
  Χρονοεπίδομα <-- Βασικός_Μισθός * 35 / 100
ΤΕΛΟΣ_ΑΝ

! Υπολογισμός Μηναίων Αποδοχών
Αποδοχές <-- Βασικός_Μισθός + Επίδομα_Σπουδών + Χρονοεπίδομα

! Έξοδος
ΓΡΑΨΕ Αποδοχές
[/glossa]

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

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

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

[glossa]
! Υπολογισμός Χρονοεπιδόματος

ΑΝ έτη_υπηρεσίας <= 5 ΤΟΤΕ
  ποσοστό <-- 15
ΑΛΛΙΩΣ_ΑΝ έτη_υπηρεσίας <= 15 ΤΟΤΕ
  ποσοστό <-- 25
ΑΛΛΙΩΣ
  ποσοστό <-- 35
ΤΕΛΟΣ_ΑΝ

Χρονοεπίδομα <-- Βασικός_Μισθός * ποσοστό / 100
[/glossa]

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

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

Τι νομίζετε;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

kiro

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

Αλγόριθμος Ενιαίο_Μισθολόγιο
  Βασικός_Μισθός &#8592; 1200
  Διάβασε όνομα, έτη_υπηρεσίας, επίπεδο_σπουδών
  Αν επίπεδο_σπουδών = 1 τότε
    μισθός &#8592; Βασικός_Μισθός
  Αλλιώς_Αν επίπεδο_σπουδών = 2 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 20/100)
  Αλλιώς_Αν επίπεδο_σπουδών = 3
    μισθός &#8592; Βασικός_Μισθός * (1 + 29/100)
  Τέλος_Αν
  Αν έτη_υπηρεσίας<= 5 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 15/100)
  Αλλιώς_Αν έτη_υπηρεσίας <= 15 τότε
    μισθός &#8592; Βασικός_Μισθός * (1 + 25/100)
  Αλλιώς_Αν έτη_υπηρεσίας > 15
    μισθός &#8592;Βασικός_Μισθός * (1 + 35/100)
  Τέλος_Αν
  Εκτύπωσε "Ο μισθωτός ", όνομα, " έχει μηνιαίες αποδοχές ", μισθός
Τέλος Ενιαίο_Μισθολόγιο

P.Tsiotakis

Συμφωνώ με το Σέργιο σε όλα...

Πάντως άλλαξα τη λύση της άσκησης 9 στην ιστοσελίδα http://users.kor.sch.gr/ptsiotakis/aepp/aepp_ask2_2_2.htm

και την έλυσα όπως ο Σέργιος προτείνει και όπως και στο βιβλίο (άσκηση 3.64) υπάρχει ως εξής:



Όλγα, δεν με πειράζει αν αναφέρεις κάποιο λάθος από τις ασκήσεις του δικτυακού μου κόμβου...  ;)

Με εκτίμηση

kiro

Sas euxaristw poly!!!an k den mou eipate telika an einai swsth h askhsh opws thn exw sthn teleutaia apanthsh mou.... ::)

P.Tsiotakis



Είναι λάθος γιατί στο δεύτερο μπλοκ εντολών πολλαπλής επιλογής που υπολογίζει το χρονοεπίδομα έχει ΧΑΣΕΙ το επίδομα σπουδών.

Το πρώτο μπλοκ εντολών πολλαπλής επιλογής που υπολογίζει το επίδομα σπουδών είναι σαν να μην υπάρχει.

Με εκτίμηση,

kiro