ΠΟΛΥΤΕΧΝΕΙΟ
ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών ΛΟΓ 102: Τεχνολογία Λογισμικού
Ι |
Ημερομηνία παράδοσης (με δισκέττα): | Τρίτη 11 Απριλίου 2000 |
Ποσοστό επί της συνολικής βαθμολογίας: |
10% |
Η παράδοση των ασκήσεων μπορεί να γίνει με έναν από τους ακόλουθους τρόπους κατά σειρά προτίμησης:
Να γραφεί ένα πρόγραμμα σε C που να υλοποιεί την εφαρμογή wc
του λειτουργικού συστήματος Unix. Η εφαρμογή αυτή μετράει τον αριθμό των γραμμών,
λέξεων και χαρακτήρων που περιέχονται σε αρχεία κειμένου. Τα ονόματα των αρχείων
δίνονται στη γραμμή εντολής. Παραδείγματα χρήσης της εφαρμογής δίνονται παρακάτω.
Οι γραμμές που ξεκινούν με το χαρακτήρα $
είναι οι γραμμές
εντολών που δίνονται στο Unix.
Παράδειγμα 1: Αν δοθεί ένα μόνο όνομα αρχείου, τυπώνεται ο αριθμός γραμμών, λέξεων και χαρακτήρων του αρχείου όπως παρακάτω.
$ wc hanoi.c lines words chars file 19 50 321 hanoi.c
Παράδειγμα 2: Αν δοθούν περισσότερα ονόματα αρχείων, τυπώνεται ο αριθμός γραμμών, λέξεων και χαρακτήρων για καθένα από αυτά τα αρχεία και στο τέλος τυπώνονται συγκεντρωτικά αθροίσματα, όπως παρακάτω.
$ wc filecopy.c hanoi.c hello.c recursive.c reverse.c reversep.c sum.c lines words chars file 26 59 433 filecopy.c 19 50 321 hanoi.c 5 9 62 hello.c 56 154 1063 recursive.c 18 47 229 reverse.c 34 124 788 reversep.c 16 47 218 sum.c ---------------------------------------------- 174 490 3114 total
Παράδειγμα 3: Αν δε δοθούν ονόματα αρχείων, η εφαρμογή
χρησιμοποιεί το αρχείο τυπικής εισόδου stdin
και μετρά τις γραμμές,
λέξεις και χαρακτήρες που διαβάζει από αυτό. Στην παρακάτω γραμμή χρησιμοποιείται
αυτή η λειτουργία με ανακατεύθυνση της τυπικής εισόδου από το Unix.
$ cat *.c | wc 174 490 3114 <stdin>
Να υλοποιηθεί σε C μια εφαρμογή εκτύπωσης αποδείξεων είσπραξης
χρημάτων. Η εφαρμογή αυτή θα διαβάζει ένα αρχείο παραγγελιών, με όνομα "orders.txt
"
και θα γράφει τις αποδείξεις σε ένα άλλο αρχείο με όνομα "receipts.txt
".
Το αρχείο των παραγγελιών περιέχει στην πρώτη του γραμμή τον συνολικό αριθμό των παραγγελιών που περιέχονται σε αυτό. Στη συνέχεια, για κάθε παραγγελία περιέχει τα ακόλουθα πεδία, κατά σειρά και σε ξεχωριστή γραμμή το καθένα:
Το συνολικό ποσό της παραγγελίας υπολογίζεται ως εξής. Κατ' αρχήν υπολογίζεται το συνολικό κόστος της παραγγελίας, δηλαδή το γινόμενο της ποσότητας επί την τιμή μονάδας. Επί του ποσού αυτού γίνεται έκπτωση, και προκύπτει το καθαρό ποσό πληρωμής. Στο καθαρό ποσό προστίθεται Φ.Π.Α. 18% και έτσι υπολογίζεται το τελικό εισπρακτέο ποσό. Στην απόδειξη πρέπει αναγράφονται, όπως φαίνεται στο παράδειγμα, το καθαρό ποσό πληρωμής, το ποσό του Φ.Π.Α. και το τελικό ποσό.
Η έκπτωση που γίνεται σε κάθε παραγγελία δεν είναι σταθερή αλλά υπολογίζεται με τον ακόλουθο τρόπο. Στην παραγγελία με το μεγαλύτερο συνολικό κόστος γίνεται έκπτωση 10%. Στην παραγγελία με το μικρότερο συνολικό κόστος δε γίνεται καμία έκπτωση. Στις υπόλοιπες παραγγελίες, το ποσοστό της έκπτωσης κυμαίνεται γραμμικά μεταξύ 0 και 10%, βάσει του κόστους της παραγγελίας.
Για παράδειγμα, παρακάτω δίνονται τα περιεχόμενα του αρχείου orders.txt
αριστερά και τα επιθυμητά αποτελέσματα δεξιά. Επισημαίνεται ότι στην τέταρτη
παραγγελία έγινε έκπτωση 10% (κόστος 38150, μετά την έκπτωση 34335), στην πρώτη
παραγγελία δεν έγινε καμία έκπτωση, ενώ στη δεύτερη παραγγελία έχει γίνει έκπτωση
5.91% (κόστος 25000, μετά την έκπτωση 23523).
orders.txt
"4 Charalambakis Konstantinos Iroon Polytechniou 4 0821-99342 12/3/2000 5 1200 Kountouriotis Mixalis Palamidiou 11 0821-43293 13/3/2000 100 250 Flessas Anargyros Alkminis 99 01-8374932 13/3/2000 1500 20.5 Papandreou Artemis Thessalias 7 031-234829 14/3/2000 1 38150
receipts.txt
"I received from Charalambakis Konstantinos, resident of Iroon Polytechniou 4, tel. 0821-99342, the amount of 7080 GRD (6000 + 1080 VAT) Chania, 12/3/2000. I received from Kountouriotis Mixalis, resident of Palamidiou 11, tel. 0821-43293, the amount of 27757 GRD (23523 + 4234 VAT) Chania, 13/3/2000. I received from Flessas Anargyros, resident of Alkminis 99, tel. 01-8374932, the amount of 33492 GRD (28383 + 5109 VAT) Chania, 13/3/2000. I received from Papandreou Artemis, resident of Thessalias 7, tel. 031-234829, the amount of 40515 GRD (34335 + 6180 VAT) Chania, 14/3/2000
nickie@softlab.ntua.gr
).
27/3/2000
.