Διάλεξη 2ης Εβδομάδας Βασικές έννοιες - Μέρος 2ο)

Δευτέρα, 7 Οκτωβρίου 2024 - 7:08 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης

Ξεκινήσαμε τη σημερινή διάλεξη με έναν σχολιασμό πάνω στον στόχο της 1ης εβδομάδας. Σχολιάσαμε το πόσο εφικτός ήταν ο στόχος που βάλαμε και το αν τον πετύχαμε. Τα στοιχεία του eclass δείχνουν πως οι περισσότεροι πέτυχαν τον στόχο. Παρουσιάστηκαν και συζητήθηκαν τα δεδομένα που μας οδήγησαν στο συμπέρασμα αυτό. Όσοι από εσάς δεν έκαναν πιθανότατα αυτό οφείλεται στο ότι δεν αξιοποίησηαν τα εργαλεία που σας δόθηκαν για τον σκοπό αυτό (δες Εργαστήριο 1ης εβδομάδας (Απολογισμός-Επίλυση προβλημάτων)). Επαναλάβαμε για μία ακόμη φορά πως «Η δική σας ενεργή συμμετοχή είναι απαραίτητη»

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

Έτσι περάσαμε στο 2o Μέρος της ενότητας Βασικές Έννοιες (I2P_BasicConceptsPartB-UPDATED.pdf) . Περιγράψαμε τη μετατροπή της λεκτικής περιγραφής της add2Numbers σε πηγαίο κώδικα και μέσα από τη διαδικασία αυτή αναφέραμε πολύ βασικές έννοιες της γλώσσας προγραμματισμού όπως μεταβλητή, τύπο δεδομένων, τελεστής και έκφραση. Xρησιμοποιήσαμε την μεταβλητή για να δεσμευσουμε χώρο στην μνήμα για να βάλει εκεί η scanf τον αριθμό που θα πάρει από την βασική είσοδο (stdin, πληκτρολόγιο).

Με βάση τις νέες αυτές έννοιες αναπτύξαμε μαζί στο DevCpp, σε διαδοχικούς κύκλους ανάπτυξης (incremental development), την πρώτη έκδοση του προγράμματος add2Numbers (Add2NumbersV1.pdf). Χρησιμοποιήσαμε τους τελεστές + (διεργασία πρόσθεσης) και = (διεργασία ανάθεσης τιμής).

Συνεχίσαμε με την ενότητα που έχει στόχο την αξιοποίηση της αφαιρετικότητας στις διεργασίες στον πηγαίο κώδικα. Δώσαμε σε σχήμα (slides 19,20) την αφαιρετική αναπαράσταση της διεργασίας που μας δίνει τη δυνατότητα να εντοπίσουμε και να καταγράψουμε τα βασικά συνθετικά μιας διεργασίας που είναι το όνομα ( Ορίζει το τι κάνει η διεργασία),  η περιγραφή (Ορίζει το πως το κάνει),  οι είσοδοι που δέχεται και οι έξοδοι που παράγει. Συνεχίσαμε με την δημιουργία της πρώτης δικής μας συνάρτησης, της getNumber() την οποία χρησιμοποιούμε στην 2η έκδοση της Add2Numbers. Μέσα από τη διαδικασία αυτή είδαμε τη σημασία των: δήλωση συνάρτησης, ορισμό συνάρτησης, κλήση συνάρτησης. Αναπτυξαμε μαζί στο devCpp την 2η έκδοση της Add2Numbers η οποία χρησιμοποιεί την συνάρτηση getNumber(). Τονίσαμε πως η getNumber() δεν δέχεται ορίσματα (void) αλλά επιστρέφει τιμή στην συνάρτηση που την κάλεσε και για τον λόγο αυτό πρέπει να ορίσουμε στη δήλωση της τον τύπο της τιμής που επιστρέφει (int για την περίπτωση μας).

Συνεχίσαμε με την αξιοποίηση μιας άλλης δικής μας συνάρτησης που την ονομάσαμε sum() και την θέλουμε για να προσθέτουμε 2 αριθμούς. Είπαμε πως την συνάρτηση αυτή δεν έχει νόημα να την κάνουμε στην πράξη αλλά την αξιοποιούμε μόνο και μόνο για να δούμε την έννοια των ορισμάτων που δέχεται μια συνάρτηση και το πως αυτά την καθιστούν σε συνδυασμό με την επιστρεφόμενη τιμή επαναχρησιμοποιήσιμη (reusable). Ενσωματώσαμε την sum() στην 2η έκδοση της Add2Numbers. Ολοκληρώσαμε με τον τρόπο αυτό την 2η έκδοση της Add2Numbers (Add2NumbersV2.pdf).

Είδαμε στη συνέχεια δύο παραδείγματα  ανάθεσης έργου στον Τοτό. Η πρώτη αναφέρεται στην ακολουθία αριθμών με το όνομα hailstone sequence.  Είναι φυσικό ο Τοτός να μην γνωρίζει τον τρόπο εκτέλεσης του έργου αυτού και να θέλει Λεκτική Περιγραφή. Δώσαμε τη λεκτική περιγραφή σε 3 εκδοχές και σχολιάσαμε τα μειονεκτήματα των 2 πρώτων.

Με την 3η έκδοση της λεκτικής περιγραφής ήμαστε έτοιμοι να περάσουμε στη διαδικασία μετατροπής της σε πηγαίο κώδικα. Ο χρόνος δεν μας το επέτρεψε και αφήσαμε τη συνέχεια για την άλλη βδομάδα.

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

Είναι σημαντικό για εμάς να έχουμε μια εικόνα για το πόσο βατό και κατανοητό  είναι το υλικό αυτής της εβδομάδας ώστε να το λάβουμε υπόψιν για τη συνέχεια. Θέλουμε να δούμε ποια είναι τα προβλήματα που συναντήσατε ώστε να τα αντιμετωπίσουμε. Στην περιοχή συζητήσεων έχετε τη δυνατότητα να αναφέρετε τα προβλήματα αυτά (Προβλήματα στην επίτευξη του στόχου της 2ης εβδομάδος).

Σχόλια (2)

Θραμπουλίδης Κλεάνθης
Τετάρτη, 16 Οκτωβρίου 2024 - 12:01 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης
"This excerpt from a course blog post for a "Introduction to Programming" class outlines the key topics covered in the second week of the course. The post discusses the importance of active student participation, then delves into the key concepts introduced in the second week: variables, data types, operators, and expressions. The text also explores the concept of functions, illustrating their significance in program development through the creation of a function called getNumber() to obtain input from the user. The post concludes by highlighting the importance of re-usability in programming, emphasising the use of functions to achieve this. The blog post aims to provide a summary of the week's content, encourage student engagement, and solicit feedback on the material covered." NotebookLM
Θραμπουλίδης Κλεάνθης
Τετάρτη, 16 Οκτωβρίου 2024 - 12:32 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης
I2P_BasicConceptsPartB.pdf Summary "This document, "I2P_BasicConceptsPartB-UPDATED.pdf," presents an introduction to imperative programming concepts, using C as the example language. The text covers essential concepts such as data abstraction, procedural abstraction, variables, data types, loops, and functions, and it provides illustrative examples for each topic. The document demonstrates how these concepts are used to create programs that perform specific tasks, employing an incremental development approach. The main purpose of this text is to guide beginners in the fundamentals of imperative programming by breaking down concepts into digestible components, using practical examples, and offering concrete steps to help them write code."