ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 1 ο ΣΕΤ ΑΣΚΗΣΕΩΝ
Οι ασκήσεις αυτού του φυλλαδίου καλύπτουν τα παρακάτω θέματα και δίνονται ενδεικτικά οι αντίστοιχες ενότητες στο βιβλίο The GNU C Programming Tutorial που μπορείτε συμβουλευτείτε (http://crasseux.com/books/ctutorial/). Τύποι δεδομένων, δήλωση μεταβλητών, αρχικοποίηση μεταβλητών, Μετατροπή τύπων (κεφάλαιο Variables and Declarations) Tελεστές, προτεραιότητα τελεστών, λογικοί τελεστές, Εκφράσεις (κεφάλαιο Expressions and Operators) printf () και scanf() if() Το πρώτο σύνολο ασκήσεων θα εξετασθεί μαζί με το δεύτερο την εβδομάδα 25/11-1/12/13 (ο κάθε φοιτητής θα εξεταστεί την ώρα του τμήματος του, για κάθε υποερώτημα ο φοιτητής θα πρέπει να έχει το αντίστοιχο αρχείο κώδικα C αποθηκευμένο στο λογαριασμό του στο diogenis.ceid.upatras.gr το οποίο θα πρέπει να έχει μεταγλωττιστεί χωρίς σφάλματα, ενώ για το σύνολο των ερωτημάτων θα πρέπει να έχει φέρει και μια εκτυπωμένη αναφορά με τις απαντήσεις του ). Σε μερικές ασκήσεις ίσως χρειαστείτε συναρτήσεις από τη βιβλιοθήκη <math.h> της C. Χρήσιμεςτέτοιες συναρτησεις είναι η pow() για ύψωση σε δύναμη, και η log10() για δεκαδικούς λογαρίθμους. Στην περίπτωση αυτή θα πρέπει η μεταγλώττιση να πραγματοποιηθεί με την οδηγία lm, δηλαδή η μεταγλώττιση να γίνει ως εξής: gcc -lm... Άσκηση 1 η a) Με δεδομένες τις ακόλουθες δηλώσεις μεταβλητών: int i; char ch; short sh; unsigned long ul; float f; long double dl; ποιος είναι ο τύπος δεδομένων του αποτελέσματος των ακόλουθων εκφράσεων: i. f/ch ii. i*ul iii. f/ch (i*ul) iv. f/ch i*ul v. f/ch (i*ul)*dl b) Με δεδομένες τις ακόλουθες δηλώσεις μεταβλητών: int a = 99, b=100; char c = Α, d = C ; ποια είναι η τιμή των παρακάτω λογικών εκφράσεων: i.!(a == b) ii. (++a == b) iii. (c+2 == d) iv. 0 && 1 1
v. 0 && (1 1) c) Έστω η έκφραση (++p > q--) (r-- > q++). Ποιες θα είναι οι τιμές των μεταβλητών p, q και r μετά τον υπολογισμό της έκφρασης, αν οι αρχικές τιμές αυτών είναι: i. p = 3, q = 4, r = 5 ii. p = 1, q = 1, r = -4 iii. p = -4, q = -3, r = -4 Αιτιολογήστε την απάντησή σας όπου κρίνεται ότι είναι απαραίτητο. Άσκηση2 η Να γραφεί πρόγραμμα σε C το οποίο αρχικά να διαβάζει από το πληκτρολόγιο 2 αριθμούς με τιμή από 1 έως 999. Για τους δύο αυτούς αριθμούς το πρόγραμμα πρέπει να : 1. Τυπώνει στην οθόνη ποιος είναι ο μεγαλύτερος 2. Τυπώνει στην οθόνη από πόσες εκατοντάδες, δεκάδες και μονάδες αποτελείται ο κάθε αριθμός 3. Τυπώνει στην οθόνη την διαφορά τους 4. Τυπώνει στην οθόνη από πόσες εκατοντάδες, δεκάδες και μονάδες αποτελείται η διαφορά τους Στην περίπτωση που κάποιος από τους αριθμούς είναι μικρότερος από 1 ή μεγαλύτερος από 999 ή οι δύο αριθμοί είναι ίσοι το πρόγραμμα πρέπει να τερματίζει και να τυπώνει ανάλογο μήνυμα. Άσκηση 3 η Δύο σφαίρες Σ 1 και Σ 2 με μάζες m 1 και m 2 κινούνται με ταχύτητες u 1 και u 2 όπως φαίνεται στο παραπάνω σχήμα. Οι σφαίρες συγκρούονται κεντρικά και ελαστικά. Σύμφωνα με την αρχή διατήρησης της ορμής και την αρχή διατήρησης της κινητικής ενέργειας γνωρίζουμε ότι μετά την κρούση οι εξισώσεις των ταχυτήτων τους περιγράφονται από τις σχέσεις Γράψτε προγράμματα σε C που να επιλύουν τα παρακάτω θέματα και αντίστοιχα. 1. Να εκτυπώνονται στην οθόνη οι νέες ταχύτητες των σφαιρών αν m 1 = 1 kg, m 2 = 3 kg, u 1 = 4 m/s 2, u 2 = -2 m/s 2 2. Να εκτυπώνονται στην οθόνη οι νέες ταχύτητες των σφαιρών ζητώντας από τον χρήστη να εισάγει τιμές μάζας και αρχικών ταχυτήτων. 3. Κάντε τις απαραίτητες αλλαγές στο παραπάνω πρόγραμμα ώστε να μπορεί να εισάγει ο χρήστης δεκαδικές τιμές για τα δεδομένα.
4. Ποιες αλλαγές πρέπει να γίνουν ώστε το πρόγραμμα να δέχεται ακέραιες τιμές και να επιστρέφει δεκαδικά αποτελέσματα? Άσκηση 4 η Ένας καθηγητής θέλει να χωρίσει τους μαθητές μιας τάξης σε τρεις κατηγορίες βάση των βαθμών που έγραψαν σε πέντε μαθήματα (Α, Β, Γ, Δ, Ε). Τα μαθήματα χωρίζονται σε δύο βασικές κατηγορίες (δύο μαθήματα αυξημένης βαρύτητας (Α,Β) και τρία μαθήματα κανονικής βαρύτητας(γ,δ,ε)). Οι συντελεστές βαρύτητας για τα μαθήματα αυξημένης βαρύτητας είναι 1,5 για το Μάθημα Α και 1,2 για το Μάθημα Β αντίστοιχα, ενώ τα υπόλοιπα μαθήματα έχουν ως συντελεστή βαρύτητας την μονάδα. Ο διαχωρισμός των μαθητών σε μία από τις τρεις κατηγορίες γίνεται με βάση την παρακάτω λογική. Κατηγορία 1 : Αν ο μέσος όρος των μαθημάτων (λαμβάνοντας υπόψη ότι τα μαθήματα διακρίνονται σε δύο κατηγορίες βαρύτητας) είναι μεγαλύτερος του 15,0 ή αν και στα δύο μαθήματα αυξημένης βαρύτητας έχει γράψει πάνω από 17,0. Κατηγορία 2 : Αν ο μέσος όρος των μαθημάτων (λαμβάνοντας υπόψη ότι τα μαθήματα διακρίνονται σε δύο κατηγορίες βαρύτητας) είναι μεγαλύτερος του 10,0 ή αν και στα δύο μαθήματα αυξημένης βαρύτητας έχει γράψει πάνω από 13,0. Κατηγορία 3 : Όλες οι υπόλοιπες περιπτώσεις. Ο καθηγητής θα εισάγει για κάθε μαθητή το ονοματεπωνυμό του τους βαθμούς του και στην συνέχεια θα εκτυπώνεται στην οθόνη του υπολογιστή το αποτέλεσμα κατάταξης του μαθητή σε μία από τις τρεις κατηγορίες. Το μήνυμα θα πρέπει να έχει την παρακάτω μορφή. Ο μαθητής ονοματεπώνυμο με μέσο όρο μέσος όρος ανήκει στην κατηγορία Κατηγορία. Επίσης να λάβετε υπόψη σας τα παρακάτω: (α) Ο μέσος όρος θα εκτυπώνεται με ακρίβεια δύο δεκαδικών ψηφίων. (β) Θα γίνεται έλεγχος των βαθμών που θα εισάγει ο καθηγητής και στην περίπτωση που έχει εισάγει μη αποδεκτή τιμή θα εκτυπώνει προειδοποιητικό μήνυμα και θα τερματίζει το πρόγραμμα. ΥΠΟΔΕΙΞΗ: Επειδή ακόμα δεν έχετε διδαχθεί αλφαριθμητικά μπορείτε να θεωρήσετε ότι το ονοματεπώνυμο είναι απλώς ένας χαρακτήρας (π.χ. 'A', 'B',...). Αλλιώς ο σωστός τρόπος δηλωσης, ανάγνωσης και εκτύπωσης αλφαριθμητικού είναι ο: char name[100]; //δηλωση ονοματεπωνύμου scanf("%s", name); // στα αλφαριθμητικά δεν βάζουμε & (εξαίρεση στον κανόνα) printf("%s", name); /* η είσοδος και η έξοδος ΔΕΝ πρέπει να έχουν κενά, οπότε το κενό το προσομοιώνετε με _, λ.χ. name_surname (εισοδος απο χρήστη) */ Άσκηση 5 η Να αναπτυχθεί πρόγραμμα τα οποίο αφού διαβάσει την τιμή μίας πραγματικής παραμέτρου x, υπολογίζει τις ακόλουθες συναρτήσεις: (i) f(x)=x 5-7x 2 +x (ii) f(x)=e x +logx-x 4
Άσκηση 6 η Να δημιουργηθεί πρόγραμμα σύμφωνα με το οποίο ο υπολογιστής να δέχεται τρεις ακεραίους αριθμούς x, y, και z και στη συνέχεια: 1. να υπολογίζει το άθροισμά τους 2. να βρίσκει το μεγαλύτερο και το μικρότερο 3. να βρίσκει και να εμφανίζει το x y+z 4. να υπολογίζει και να εμφανίζει τους δεκαδικούς λογαρίθμους των x και y, z. Όλα τα παραπάνω να τα εμφανίζει στην οθόνη με κατάλληλα σχόλια. Άσκηση 7 η Να γραφεί πρόγραμμα το οποίο να διαβάζει ένα ακέραιο αριθμό στο διάστημα [0, 1023], να απομονώνει την δεύτερη πεντάδα των δυαδικών του ψηφίων και να επιστρέφει το νέο αριθμό (για παράδειγμα αν δοθεί η τιμή 00011 00000=96, τότε το πρόγραμμα να εμφανίζει την τιμή 00011=3). Παράδειγμα εκτέλεσης: Dose arithmo sto [0,1023]: 96 3 Άσκηση 8η Να γραφεί πρόγραμμα το οποίο να δέχεται το ύψος και το βάρος του χρήστη σε m (π.χ. 1.83) και kg (π.χ. 70) αντίστοιχα. Έπειτα θα υπολογίζει το δείκτη μάζας σώματος χρησιμοποιώντας τον τύπο: ΒΜΙ = βάρος/(ύψος*ύψος). [π.χ. BMI = 70/(1.83*1.83)] Τέλος, να εκτυπώνει το BMI και ανάλογα με την τιμή του BMI να εκτυπώνεται και το αντίστοιχο ενημερωτικό μήνυμα με βάση τον παρακάτω πίνακα: Συνθήκη Μήνυμα ΒΜΙ < 18,5 Λιποβαρής 18,5 ΒΜΙ 25 Κανονικός 25 < ΒΜΙ 30 Υπέρβαρος ΒΜΙ > 30 Παχύσαρκος Παρατήρηση: Να γίνουν οι απαραίτητοι έλεγχοι για το ύψος και το βάρος, έτσι ώστε αν δοθεί αρνητικός αριθμός το πρόγραμμα να τερματίζει, εμφανίζοντας ενημερωτικό μήνυμα. Άσκηση 9η Γράψτε ένα πρόγραμμα το οποίο να διαβάζει από την είσοδό του 2 έγκυρες χρονικές στιγμές (έστω Τ1 και Τ2), με την μορφή HH:MM:SS όπου ΗΗ είναι ένας αριθμός ωρών (0-23), ΜΜ ένας αριθμός λεπτών (0-59) και SS ένας αριθμός δευτερολέπτων (0-59). Εάν ο χρήστης δώσει μη έγκυρη τιμή, το πρόγραμμα θα πρέπει να τερματίζει. Στη συνέχεια ελέγξτε εάν η χρονική στιγμή T2 έπεται της Τ1, και εκτυπώστε το χρονικό διάστημα μεταξύ των στιγμών Τ1 και Τ2: α) στην μορφή HH:MM:SS β) σε δευτερόλεπτα γ) σε λεπτά και δευτερόλεπτα.