Βοήθεια στην κλιμακωτή χρέωση

Ξεκίνησε από dolcefarniente, 08 Οκτ 2012, 11:15:48 ΠΜ

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

dolcefarniente

Θα μπορούσα να έχω μία βοήθεια για την παρακάτω άσκηση με κλιμακωτή χρέωση;;

Σε μία εταιρία οι αποδοχές των υπαλλήλων κυμαίνονται από 1250 € έως 5000€. Στο μισθό γίνεται παρακράτηση φόρου σύμφωνα με τον παρακάτω πίνακα και υπολογίζεται κλιμακωτά.

Από 1250€ έως και 1600€              Π1%
Πάνω από 1600 μέχρι και 2000      Π2%
Πάνω από 2000 μέχρι και 3000      Π1+Π2 %
Πάνω από 3000 μέχρι και 5000      Π1*Π2 %


Θα έπρεπε να είναι κάπως έτσι:

Αν αποδ<=1249 τότε
  φ<-- 0
αλλιώς_αν αποδ<=1600 τότε
  φ<-- (αποδ-1249)*Π1/100
αλλιώς_αν αποδ<=2000 τότε
  φ<-- 351*Π1/100+(αποδ-1600)*Π2/100
αλλιως_αν αποδ<=3000 τότε
  φ<--351*Π1/100+400*Π2/100+(αποδ-2000)*(Π1+Π2)/100

κτλ???

Έχω μπερδευτεί γιατί το διάστημα δεν αρχίζει από το 0 ή το 1 (πχ. 0-500, 501-1000).

Και μία ακόμη ερώτηση:
α) 0-500                     
    501-1000

β) 1-500
    501-1000
για τα παραπάνω διαστήματα η λύση θα είναι ίδια στην κλιμακωτή χρέωση;;
Δηλαδή τα πρώτα 500 θα πολλαπλασιαστούν με ένα ποσοστό ή στο (α) τα πρώτα 501 θα πολλαπλασιαστούν??

Ευχαριστώ εκ των προτέρων

petrosp13

Ως προς τον κώδικα, θα έλεγα να διορθώσεις το 351 σε 350. Κατά τα άλλα είναι σωστό

Ως προς τα διαστήματα, θα έλεγα ότι οι δυο περιπτώσεις που δίνεις είναι ακριβώς οι ίδιες. Εφόσον προκύπτει ότι οι μονάδες είναι ακέραιες (500-501), δεν μπορεί να υπάρχουν 0 μονάδες, άρα το πρώτο διάστημα μπορεί να είναι 0-500 ή σωστότερα 1-500 και αφορά 500 μονάδες και στις 2 περιπτώσεις
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

dolcefarniente

Ευχαριστώ για την απάντηση.

Αλλά μία προσέγγιση :

Αν αποδ>=1250 και αποδ<=1600 τότε
φ<-- αποδ*π1/100
αλλιώς_αν αποδ<=2000 τότε
φ<-- 350*π1/100 + (αποδ-350)*π2/100
αλλιώς_αν αποδ<=3000 τότε
φ<-- 350*π1 + 400*π2/100 +(αποδ-750)*(π1+π2)/100
αλλιώς_αν αποδ<=5000 τότε
φ<-- 350*π1/100 + 400*π2/100 + 1000*(π1+π2)/100 + (αποδ-1750)*(π1*π2)/100
Τελος_αν

θα ήταν λάθος?? Να ξεχάσω δηλαδή το ποσό πριν από το 1250, αφού δεν φορολογείται??


petrosp13

Εξαρτάται τι πρέπει να κάνεις με τον φόρο μετά την δομή επιλογής
Αν πρέπει να τον εμφανίσεις ή να τον χρησιμοποιήσεις σε εντολές, τότε πρέπει να βάλεις και την περίπτωση που λες, γιατί αλλιώς δεν θα υπάρχει τιμή για τον φόρο, αν οι αποδοχές είναι κάτω των 1250
Γενικότερα, δεν νομίζω ότι μπορείς να το αποφύγεις αυτό, ακόμα κι αν ζητάει απλά να υπολογίσεις τον φόρο
Και ο μηδενικός φόρος θεωρείται υπολογισμός

Στην λύση σου ξέχασες στην πρώτη περίπτωση να αφαιρέσεις 1250 ευρώ και δεν έπρεπε να αλλάξεις τις αφαιρέσεις που είχες αρχικά
Το κομμάτι του φόρου που αντιστοιχεί πάνω από κάποιο ποσό (π.χ. 2000) υπολογίζεται αν αφαιρέσουμε 2000, όχι αν αφαιρέσουμε τα ποσά που βάλαμε στην ίδια εντολή με άλλο ποσοστό φόρου
Αυτό θα ίσχυε στην συνηθισμένη περίπτωση, όπου η φορολόγηση ξεκινάει από το πρώτο ευρώ
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gpapargi

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

Υπάρχουν 2 περιπτώσεις: Η πρώτη είναι τα ποσά που εμφανίζονται να είναι πραγματικοί αριθμοί και η δεύτερη είναι να είναι ακέραιοι.
Αν η εκφώνηση σου λέει ότι μέχρι 500 έχει την Α ταρίφα και από 500 ως 800 έχεις τη Β ταρίφα τότε βλέπεις ότι εκεί που τελειώνει η πρώτη ζώνη αρχίζει η δεύτερη. Άρα τα ποσά είναι πραγματικοί αριθμοί.
Αν σου λέει ότι μέχρι 500 έχει την Α ταρίφα και από 501 ως 800 έχει τη Β ταρίφα αυτό σημαίνει ότι περιορίζεσαι στους ακεραίους. Δεν έχει νόημα να σου δώσει ποσό 500,3 ευρώ γιατί δεν το καλύπτει η εκφώνηση.

Η περίπτωση των πραγματικών είναι πιο απλή. Μπορείς να ζωγραφίσεις τα διαστήματα και να δεις μέσω των ευθυγράμμων τμημάτων ποιο είναι το κάθε μήκος στο οποίο εφαρμόζεται η κάθε ταρίφα.
Στους ακέραιους πρέπει να δεις πόσοι ακέραιοι υπάρχουν στη ζώνη που σε ενδιαφέρει. Πχ στο δεύτερο παράδειγμα που αναφέρω αν έχεις χ ευρώ στην περιοχή 501 – 800 το πλήθος των ακεραίων είναι χ- 501 + 1 = χ – 500.
Έτσι και στην πραγματική και στην ακέραια περίπτωση καταλήγεις στο χ-500 (και αυτό οδηγεί σε τυποποιημένη επίλυση της άσκησης) αλλά για διαφορετικούς λόγους.

dolcefarniente

Για τον 1ο ψευδοκώδικα που έγραψα:

1 Αν αποδ<=1249 τότε
2  φ<-- 0
3 αλλιώς_αν αποδ<=1600 τότε
4  φ<-- (αποδ-1249)*Π1/100
5αλλιώς_αν αποδ<=2000 τότε
6  φ<-- 351*Π1/100+(αποδ-1600)*Π2/100
7αλλιως_αν αποδ<=3000 τότε
8  φ<--351*Π1/100+400*Π2/100+(αποδ-2000)*(Π1+Π2)/100

αν διορθώσω το 351 και το κάνω 350, μετά πως θα κάνω στη γραμμή 6: αποδ-1600 ?? αφού έχω αφαιρέσει (1249+350) και όχι (1249+351)??


Στο 2ο αν το άλλα ζα κάπως έτσι:

Αν αποδ>=1250 και αποδ<=5000 τότε
Αν αποδ<=1600 τότε
  φ<-- αποδ*π1/100
αλλιώς_αν αποδ<=2000 τότε
  φ<-- 350*π1/100 + (αποδ-350)*π2/100
αλλιώς_αν αποδ<=3000 τότε
  φ<-- 350*π1 + 400*π2/100 +(αποδ-750)*(π1+π2)/100
αλλιώς
  φ<-- 350*π1/100 + 400*π2/100 + 1000*(π1+π2)/100 + (αποδ-1750)*(π1*π2)/100
Τέλος_αν
αλλιώς
  φ<--0
Τελος_αν


Όσο για τα όρια 0-500 ή 1-500, έχετε δίκαιο, είναι λογικό. Ευχαριστώ

petrosp13

Δεν θα αφαιρέσεις 1249, αλλά 1250
Τα 1250 πρώτα ευρώ είναι αφορολόγητα
Γενικά, τα ποσά είναι στρόγγυλα πάντα για διευκόλυνση των υπολογισμών

Δεν χρειάζεται να ασχοληθείς με το δεύτερο, το πρώτο είναι σωστό, χωρίς αλχημείες
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

dolcefarniente

Εκτιμώ πολύ την προσπάθειά σας για να με βοηθήσετε. Δε θέλω να σας κουράσω, αλλά πράγματι έχω μπερδευτεί με αυτή την άσκηση και αναρωτιέμαι, αφού το διάστημα [1250,1600] είναι κλειστό, τα πρώτα 1249 δεν είναι αφορολόγητα και πρέπει να τα αφαιρέσω?

petrosp13

σκέψου το εξής απλό. Αν είναι αφορολόγητα τα πρώτα 5 ευρώ, πόσα θα αφαιρέσεις στην επόμενη κατηγορία; μέχρι τα 1250 είναι αφορολόγητα. Το 1251ο ευρώ το οποίο ξεκινάει από το 1250 είναι φορολόγησιμο. Το πρώτο ευρώ τελειώνει στο 1, δεν ξεκινάει από το 1
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

dolcefarniente

Φίλε petrosp13, αν έχω κλιμακωτή στο εξής:

ποσό       επιτόκιο
<10000     ε1
>=10000   ε2

δεν πρέπει να κάνω το παρακάτω???

Αν ποσό <10000 τότε
  τοκος<--ποσο * ε1
Αλλιώς
  τοκος<--9999*ε1 + (ποσό-9999)*ε2



Με το ίδιο σκεπτικό πήγα να κάνω:

Αν αποδ< 1250  τότε             !ή αποδ<=1249
φ<--0
αλλιώς_αν αποδ<=1600 τότε
   φ<-- (αποδ-1249)*Π1/100

για αυτό δεν μπορώ να το καταλάβω.

petrosp13

αν αυτό είναι το σκεπτικό της άσκησης, φυσικά και Έχεις δίκιο. Απλά συνήθως οι ασκήσεις δίνουν στρογγυλοποίημένα νούμερα για να μην χρειάζοντάι ιδιαίτεροι υπολογισμοί
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

P.Tsiotakis

το <1250 € δεν είναι <=1249

αλλά <= 1249.99

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

dolcefarniente

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

Όπως και η επισήμανση για τη διάκριση ακεραιων - πραγματικών. Θα υποθέσω όμως ότι πρόκειται για αποδοχές με ακέραιες τιμές.

Και κάτι τελευταίο αν είναι εύκολο..Σε μια άσκηση που θέλει να διαβάζει ένα ποσό και δε μου λέει "Θεωρήστε ότι είναι θετικός αριθμός", επιβάλλεται ο έλεγχος με βάση το βιβλίο;; Ή είναι προαιρετικός εδώ, ενώ ουσιαστικά είναι λάθος να μη γίνει;;

Παράδειγμα:
έως 1000
πάνω από 1000 μέχρι και 2000
πάνω από 2000 μέχρι και 3000

θα χρησιμοποιούσα το:

Αν ποσο>0 τότε
Αν ποσό<=1000 τότε
  ....
αλλιώς_αν ποσό<=2000
  ...
αλλιώς
  ....
Τέλος_αν
Αλλιώς
Εμφάνισε "Λάθος"
Τέλος_αν


ή το

Αν ποσο>0 και ποσό<=1000
....
αλλιώς_αν ποσό<=2000
....
αλλιώς
Τελος_αν


Και είναι επικίνδυνο που το τελευταίο αλλιώς δεν είναι αλλιώς_αν ποσό<=3000???

Ευχαριστώ για την υπομονή σας.

petrosp13

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

Γιώργος Παπαδόπουλος

Από τη στιγμή που η άσκηση λέει ότι οι μισθοί είναι από 1250 μέχρι 5000, τότε θεωρούμε ότι δεν υπάρχουν μισθοί έξω από αυτά τα όρια και άρα δεν υπάρχει μηδενικό φόρος.

Αναφέρομαι στην αρχική άσκηση με τους υπαλλήλους