ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ι (C11) - ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Ε)
ΙΩΑΝΝΗΣ ΣΑΡΡΗΣ
Η μαθησιακή εισάγει τους/τις εκπαιδευόμενους/ες στον δομημένο, διαδικαστικό προγραμματισμό με τη γλώσσα προγραμματισμού C. Ο/Η εκπαιδευόμενος/η θα έρθει σε επαφή με τις πιο κλασικές τεχνικές αλγορίθμων, την εκμάθηση βασικών και προηγμένων αλγοριθμικών τεχνικών και τη σύνταξη ολοκληρωμένων εφαρμογών περιβάλλοντος κονσόλας.
Στο μάθημα παρουσιάζεται το συντακτικό της γλώσσας και αναφέρονται βασικές έννοιες όπως είσοδος και έξοδος δεδομένων, σχόλια, δηλώσεις, τύποι μεταβλητών, τελεστές (αριθμητικοί, σύγκρισης, λογικοί,δυαδικοί, ολίσθησης), εκχώρηση δεδομένων, τύποι δεδομένων, εισαγωγή δεδομένων στην κύρια συνάρτηση (main), πίνακες, αλγόριθμοι επεξεργασίας πινάκων (συγχώνευση, διάσπαση, διαγραφή/εισαγωγή στοιχείων, αναζήτηση, ταξινόμηση), συμβολοσειρές, συναρτήσεις, βρόγχοι, δομές επιλογής και επανάληψης, κλήση μέσω τιμής και κλήση μέσω αναφοράς, εμβέλεια, λογικά και συντακτικά σφάλματα, επεξεργασία αρχείων κειμένου (read, write, append), εκσφαλμάτωση και απόδοση.
ΛιγότεραΗ μαθησιακή εισάγει τους/τις εκπαιδευόμενους/ες στον δομημένο, διαδικαστικό προγραμματισμό με τη γλώσσα προγραμματισμού C. Ο/Η εκπαιδευόμενος/η θα έρθει σε επαφή με τις πιο κλασικές τεχνικές αλγορίθμων, την εκμάθηση βασικών και προηγμένων αλγοριθμικών τεχνικών και τη σύνταξη ολοκληρωμένων εφαρμογών περιβάλλοντος κονσόλας.
Στο μάθημα παρουσιάζεται το συντακτικό της γλώσσας και αναφέρονται βασικές έννοιες όπως είσοδος και έξοδος δεδομένων, σχόλια, δηλώσεις, τύποι μεταβλητών, τελεστές (αριθμητικοί, σύγκρισης, λογικοί,δυαδικοί, ολίσθησης), εκχώρηση δεδομένων, τύποι δεδομένων, εισαγωγή δεδομένων στην κύρια συνάρτηση (main), πίνακες, αλγόριθμοι επεξεργασίας πινάκων (συγχώνευση, διάσπαση, διαγραφή/εισαγωγή στοιχείων, αναζήτηση, ταξινόμηση), συμβολοσειρές, συναρτήσεις, βρόγχοι, δομές επιλογής και επανάληψης, κλήση μέσω τιμής και κλήση μέσω αναφοράς, εμβέλεια, λογικά και συντακτικά σφάλματα, επεξεργασία αρχείων κειμένου (read, write, append), εκσφαλμάτωση και απόδοση.
Η μαθησιακή εισάγει τους/τις εκπαιδευόμενους/ες στον δομημένο, διαδικαστικό προγραμματισμό με τη γλώσσα προγραμματισμού C. Ο/Η εκπαιδευόμενος/η θα έρθει σε επαφή με τις πιο κλασικές τεχνικές αλγορίθμων, την εκμάθηση βασικών και προηγμένων αλγοριθμικών τεχνικών και τη σύνταξη ολοκληρωμένων εφαρμογών περιβάλλοντος κονσόλας.
Στο μάθημα παρουσιάζεται το συντακτικό της γλώσσας και αναφέρονται βασικές έννοιες όπως είσοδος και έξοδος δεδομένων, σχόλια, δηλώσεις, τύποι μεταβλητών, τελεστές (αριθμητικοί, σύγκρισης, λογικοί,δυαδικοί, ολίσθησης), εκχώρηση δεδομένων, τύποι δεδομένων, εισαγωγή δεδομένων στην κύρια συνάρτηση (main), πίνακες, αλγόριθμοι επεξεργασίας πινάκων (συγχώνευση, διάσπαση, διαγραφή/εισαγωγή στοιχείων, αναζήτηση, ταξινόμηση), συμβολοσειρές, συναρτήσεις, βρόγχοι, δομές επιλογής και επανάληψης, κλήση μέσω τιμής και κλήση μέσω αναφοράς, εμβέλεια, λογικά και συντακτικά σφάλματα, επεξεργασία αρχείων κειμένου (read, write, append), εκσφαλμάτωση και απόδοση.
Ύλη
-------------------
Διαβάστε από τις σημειώσεις ή από όποια άλλη πηγή θέλετε τα παρακάτω θέματα
- Εισαγωγή, ιστορία της C
- Συντακτικό της C
- Δομή ενός προγράμματος C
- Εντολή εμφάνισης printf()
- Σχόλια στη C
- Μεταβλητές στη C
- Τύποι δεδομένων στη C
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
Ασκήσεις
-----------------------
Από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις
Σε περιβάλλον Dev-C++ (εγκατάσταση από https://www.bloodshed.net/) υλοποιήστε απλό παράδειγμα όπου να εκτυπώνεται το μήνυμα "Hello World"
Ύλη
---------
Μεταβλητές στη C
Τύποι δεδομένων στη C
Εντολή εμφάνισης printf(), εμφάνιση τιμών μεταβλητών
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C Output
C Variables (έμφαση στο Format Specifiers)
C Data Types
Ασκήσεις
------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Variables
Exercise: C Format Specifiers
Exercise: C Change Values
Exercise: C Multiple Variables
Exercise: C Variable Names
Exercise: C Data Types
Exercise: C Character Data Types
Exercise: C Numeric Data Types
Exercise: C Decimal Precision
2, Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στους φακέλους variables και errors
3. Δημιουργήστε ένα πρόγραμμα στο οποίο θα ορίζονται δύο ακέραιοι αριθμοί (πχ 5 και 8) κα θα υπολογίζονται
Tο άθροισμά τους καταχωρώντας το στη μεταβλητή sum.
Η διαφορά τους καταχωρώντας τη στη μεταβλητή dif.
Tο γινόμενό τους καταχωρώντας το στη μεταβλητή mult.
Στο τέλος θα εμφανίζει το αποτέλεσμα των πράξεων στο χρήστη.
4. Να γραφεί πρόγραμμα που να ορίζει έναν δεκαδικό αριθμό και να εμφανίζει στην έξοδο ξεχωριστά το ακέραιο και το δεκαδικό του τμήμα (πχ για τον αριθμό 6.25 η έξοδος θα είναι: 6 και 0.25).
5. Δημιουργήστε πρόγραμμα το οποίο να υπολογίζει το μέσο όρο τριών ακεραίων αριθμών. Οι ακέραιοι θα ορίζονται από εσάς στο πρόγραμμα (πχ 5, 7 και 4).
Ύλη
------------
Είσοδος στη C- Εντολή scanf() για είσοδο ακεραίων
Τελεστές στη C
Δομή επιλογής If-else
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C User Input (User Input και Multiple Inputs)
C Operators
C If...Else (Μόνο τα δύο πρώτα if και else)
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό selection
Ασκήσεις
---------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Operators
Exercise: C If
Exercise: C Else
Exercise: C User Input
2. Nα γραφεί πρόγραμμα το οποίο να ζητάει από το χρήστη έναν ακέραιο αριθμό και να του εμφανίζει αν ο αριθμός είναι μονός ή ζυγός. (Διευκρινίση: Xρησιμοποιήστε τον τελεστή % όπου έχει σαν αποτέλεσμα το υπόλοιπο ακέραιας διαίρεσης. Πχ 3%2=1, ενώ 4%2=0.)
3. Aς υποθέσουμε ότι η βαθμολογία ενός μαθήματος προκύπτει ως ο μέσος όρος των βαθμολογιών (1 έως 20) δύο βαθμολογητών. Στην περίπτωση που οι 2 βαθμολογίες διαφέρουν περισσότερο από 4 μονάδες τότε το μάθημα βαθμολογείται από τρίτο βαθμολογητή. Να γραφεί πρόγραμμα που να ζητάει δύο βαθμολογίες από το χρήστη και στην περίπτωση που αυτές δεν διαφέρουν περισσότερο από 4 μονάδες να επιστρέφει ως τελική βαθμολογία του μαθήματος το μέσο όρο αυτών των δύο βαθμολογιών. Σε περίπτωση που η διαφορά των δύο βαθμολογιών είναι μεγαλύτερη από 4 μονάδες, να ζητείται τρίτη βαθμολόγηση και να επιστρέφεται αυτή ως τελικός βαθμός του μαθήματος.
4. Να γραφεί πρόγραμμα που να ζητάει 2 ακέραιους αριθμούς και να επιστρέφει το μεγαλύτερο από αυτούς. Σε περίπτωση που οι αριθμοί είναι ίσοι να επιστρέφεται ανάλογο μήνυμα.
5. Nα γραφεί πρόγραμμα που να ζητά από το χρήστη το βάρος του σε κιλά και το ύψος του σε μέτρα και να υπολογίζει το Δείκτη Μάζας Σώματος (ΔΜΣ) σύμφωνα με τον τύπο: BMI = βάρος/(ύψος*ύψος). Το πρόγραμμα να τυπώνει το βάρος και το ύψος που δόθηκαν, καθώς και τον ΔΜΣ που υπολογίστηκε. Επίσης ανάλογα με το αποτέλεσμα του ΒΜΙ να εμφανίζεται ο αντίστοιχος χαρακτηρισμός, σύμφωνα με τα παρακάτω: BMI<=18.5 Ελλιποβαρής, 18.5<BMI<=25 Κανονικό Βάρος, 25<BMI<=30 Υπέρβαρος, BMI>30 Παχύσαρκος.
Ύλη
----------------
Δομή επιλογής nested If-else If-Else
Δομή επιλογής switch
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C If...Else (Nested If)
C Switch
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό selection
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C If
Exercise: C Else
Exercise: C Else If
Exercise: C Switch
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 3-9) από την ενότητα "Δομές επιλογής (if, switch)"
3. Μία αεροπορική εταιρεία θεωρεί ότι μία πτήση είναι κερδοφόρα αν είναι γεμάτες τουλάχιστον το 60% των θέσεων του αεροσκάφους. Αντιθέτως, στην περίπτωση που είναι γεμάτες λιγότερες από το 30% των θέσεων η πτήση θεωρείται ζημιογόνα. Να γραφεί πρόγραμμα που να ζητά το συνολικό αριθμό των θέσεων του αεροσκάφους και τα εισιτήρια που έχουν πουληθεί και να εμφανίζει αν η πτήση είναι ζημιογόνα-κερδοφόρα ή ουδέτερη.
4. Μια εταιρεία κινητής τηλεφωνίας χρεώνει την αποστολή μηνυμάτων ανά μήνα ως εξής:
- Τα πρώτα 10 SMS 5λεπτά/sms
- Τα επόμενα 40 SMS 3 λεπτά/sms
- Τα επόμενα 50 SMS 2 λεπτά/sms
- Πάνω από 100 SMS 1 λεπτό/sms
Να γραφεί πρόγραμμα που να ζητά τον αριθμό των SMS που έστειλε εντός του μήνα ένας χρήστης και να του εμφανίζει το ποσό που πρέπει να πληρώσει.
Ύλη
----------------
Δομή επανάληψης for
Δομή επανάληψης while
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C While Loop (όχι το Do/While Loop)
C For Loop (όχι το Nested Loops)
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό loops
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C While Loop
Exercise: C For Loop
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 10-16) από την ενότητα "Δομές επανάληψης (for, while-do, do-while)"
Ύλη
----------------
Δομή επανάληψης nested for
Δομή επανάληψης do-while
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό loops
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Do While Loop
Exercise: C Nested Loops
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 10-16) από την ενότητα "Δομές επανάληψης (for, while-do, do-while)"
Ύλη
----------------
Λογικές Συνθήκες
Εντολές Break και Continue
Πίνακες μίας διάστασης
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C Logical Operators in Conditions
C Break and Continue
C Arrays (όχι το C Multidimensional Arrays)
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό arrays (όχι τις arr3.c, arr4_2d.c, arr_init.c και str2.c)
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Break and Continue
Exercise: C Arrays
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 17-19) από την ενότητα "Πίνακες".
Για τους τυχαίους ακέραιους αριθμούς χρησιμοποιήστε τη συνάρτηση rand() με την επικεφαλίδα <stdlib.h>
3. Να γραφεί πρόγραμμα που να ζητάει από το χρήστη 5 βαθμούς για τα μαθήματα ενός φοιτητή σε κλίμακα 1-10. Το πρόγραμμα να μη δέχεται βαθμολογίες εκτός της κλίμακας. Στη συνέχεια το πρόγραμμα να υπολογίζει και να τυπώνει το μέσο όρο του φοιτητή καθώς και τις βαθμολογίες που είναι μεγαλύτερες του μέσου όρου.
4. Nα γραφεί πρόγραμμα που να καταχωρεί 100 τυχαίους αριθμούς σε έναν πίνακα και στη συνέχεια να τυπώνει τον ελάχιστο αριθμό και τη θέση στην οποία αυτός βρίσκεται.
Ύλη
----------------
Πίνακες δύο διαστάσεων
Συμβολοσειρές
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C Multidimensional Arrays
C Strings
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό arrays (όλα τα παραδείγματα)
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Multidimensional Arrays
Exercise: C Strings
Exercise: C String Functions
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 17-19) από την ενότητα "Πίνακες".
Για τους τυχαίους ακέραιους αριθμούς χρησιμοποιήστε τη συνάρτηση rand() με την επικεφαλίδα <stdlib.h>. Για αλλαγή της σειράς των τυχαίων αριθμών που παράγεται από την rand() χρησιμοποιήστε την srand().
3. Να γραφεί πρόγραμμα που να ζητάει από το χρήστη το όνομα και το βαθμό ενός φοιτητή σε κλίμακα 1-10. Το πρόγραμμα να μη δέχεται βαθμολογίες εκτός της κλίμακας. Στη συνέχεια το πρόγραμμα να υπολογίζει και να τυπώνει το μέσο όρο του τμήματος καθώς και τις βαθμολογίες που είναι μεγαλύτερες του μέσου όρου. Το πρόγραμμα να τερματίζεται όταν δοθεί ως όνομα ή βαθμός του φοιτητή το 0.
Ύλη
----------------
Συναρτήσεις
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
C Functions
C Function Parameters
C Variable Scope
C Function Declaration and Definition
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό functions (όλα τα παραδείγματα)
Ασκήσεις
--------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php τις παρακάτω ασκήσεις:
Exercise: C Functions
Exercise: C Function Parameters
Exercise: C Scope
Exercise: C Function Declaration
2. Από την κεντρική σελίδα του GitHub (στο README- C notes for DIEK Zografou 2023B) λύστε όλα τα προβλήματα (προβλήματα 20-23) από την ενότητα "Συναρτήσεις".
3. Να γραφεί συνάρτηση η οποία να δέχεται ως παραμέτρους έναν χαρακτήρα και έναν ακέραιο αριθμό και να τυπώνει σε μία σειρά το χαρακτήρα τόσες φορές όσες ορίζει ο ακέραιος αριθμός. Μετά την εκτύπωση να ακολουθεί αλλαγή γραμμής. Να κληθεί η συνάρτηση για την εκτύπωση του παρακάτω
----------
*****
----------
Ύλη
-------------------
Δείκτες
Ενδεικτικά από https://www.w3schools.com/c/index.php διαβάστε τα
Από το GitHub (https://github.com/j-sarris/C) μελετήστε τα παραδείγματα που υπάρχουν στον φάκελό pointers
Ασκήσεις
-----------------------
1. Δοκιμάστε από το https://www.w3schools.com/c/c_exercises.php
τις παρακάτω ασκήσεις:
Exercise: C Memory Address
Exercise: C Pointers
Exercise: C Pointers and Arrays
2. Να γραφεί πρόγραμμα το οποίο να ζητάει από το χρήστη έναν χαρακτήρα και να μετράει πόσες φορές εμφανίζεται στη φράση "Κάθε αρχή και δύσκολη".
3. Να γραφεί πρόγραμμα το οποίο να δέχεται τη φράση "Κάθε αρχή και δύσκολη" και να την τυπώνει αντικαθιστώντας κάθε χαρακτήρα διαστήματος με αλλαγή γραμμής. Δηλαδή στην έξοδο θα πρέπει να εμφανίζεται
Κάθε
αρχή
και
δύσκολη
4. Να γραφεί πρόγραμμα που να αντιστρέφει τη φράση "Kathe arxh kai dyskolh". Δηλαδή στην έξοδο να εμφανίζεται η φράση "hloksyd iak hxra ehtaK"
Θεμα 1ο
Στον πίνακα basket καταχωρούνται οι πόντοι που πέτυχε μια ομάδα μπάσκετ στους τελευταίους 10 αγώνες της.
Να γράψετε πρόγραμμα C το οποίο:
- Να διαβάζει και να καταχωρεί στον πίνακα basket τους πόντους που πέτυχε η ομάδα σε κάθε αγώνα.
- Να εμφανίζει το μέσο όρο των πόντων που πέτυχε η ομάδα στους 10 αυτούς αγώνες, χρησιμοποιώντας τη δομή επανάληψης for για τη διάσχιση του πίνακα.
- Να υπολογίζει και να εμφανίζει σε πόσους αγώνες η ομάδα πέτυχε περισσότερους πόντους από τον μέσο όρο της. Η διάσχιση του πίνακα να γίνει με τη δομή επανάληψης while.
- Να υπολογίζει και να εμφανίζει χρησιμοποιώντας την συνάρτηση find_highscore() τον αριθμό των αγώνων που η ομάδα είχε πάνω από 90 πόντους. Η συνάρτηση θα δέχεται τον πίνακα basket και το πλήθος των στοιχείων του ως παραμέτρους και θα επιστρέφει τον αριθμό των αγώνων που είχε πάνω από 90 πόντους.
Θέμα 2ο
Να γράψετε πρόγραμμα C το οποίο για τη συμβολοσειρά “TEXNIKOS EFARMOGON PLHROFORIKHS” να υπολογίζει και να εμφανίζει τον αριθμό εμφάνισης του χαρακτήρα ”O” .
- Κάνοντας χρήση πίνακα.
- Χρησιμοποιώντας δείκτες.