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

Τρίτη, 15 Οκτωβρίου 2024 - 2:21 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης

Ξεκινήσαμε την 3η  διάλεξη με μια αναφορά στα αντικείμενα που παρουσιάστηκαν την 2η Εβδομάδα χρησιμοποιώντας ως βάση την ΕΑ-2 add2Numbers (I2P_WeekAgenda_3.pdf slides 8-10). Αυτό ως κίνητρο για να εκφράσετε τις τυχόν απορίες σας πάνω σε αυτά. Κάναμε μια αναφορά στο παραδοτέο της 2ης εβδομάδας στο οποίο δεν πήγατε καλά, παρά το γεγονός ότι είχαμε καλύψει τις απαντήσεις σε όλα τα ερωτήματα στις διαλέξεις και το φροντιστήριο και, ίσως το πιο σημαντικό, όλες οι απαντήσεις είναι στις διαφάνειες στο eclass. Επιπλέον με βάση τα παραδοτέα της εργασίας της 2ης ομάδας Εργαστηρίου μόνο οι μισοί από εσάς παρέδωσαν μια έκδοση της add2Numbers που ικανοποιεί τις απαιτήσεις όλων των δράσεων, και αυτό ενώ είχατε τον πηγαίο κώδικα στην διάθεση σας. Επαναλάβαμε για μία ακόμη φορά πως «Θέλει πολύ δουλειά!»

Κλείσαμε την παρένθεση με την αναφορά στο αντικείμενο της 1ης εβδομάδας και δώσαμε την οργάνωση της σημερινής παρουσίασης (I2P_WeekAgenda_3.pdf slide 11).

Στη συνέχεια περάσαμε στο 3ο Μέρος της σειράς διαφανειών Βασικές έννοιες (I2P_BasicConceptsPartC.pdf).  Ξεκινήσαμε με μια αναφορά στο πως ο Τοτός εκτέλεσε την τιμωρία που του έβαλε η δασκάλα του αξιοποιώντας τη διαδικασία ανάπτυξης προγράμματος και την πρόταση επανάληψης for, την σημασία της οποίας δώσαμε.

Στη συνέχεια τονίσαμε τη σημασία της αφαιρετικοτητας στην διαδικασία ανάθεσης έργου στην μηχανή χρησιμοποιώντας το παράδειγμα Fibonacci Numbers. Δώσαμε το computer hardware model και είδαμε την μορφή περιγραφής της διεργασίας  υπολογισμού Fibonacci Numbers σε γλώσσα μηχανής και σε assembly. Μορφές στις οποίες είναι σχεδόν αδύνατο να εκφράσουμε τη διεργασία. Θέλουμε πιο human readable και αφαιρετική αναπαράσταση και δώσαμε μια πιο αφαιρετική  αναπαράσταση από την Λεκτική Περιγραφή. Η αναπαράσταση αυτή καταγράφει τις εισόδους και τις εξόδους της διεργασίας και μας βοηθά αργότερα στον εντοπισμό  των πρώτων μεταβλητών του προγράμματος. Με βάση αυτή την αναπαράσταση αναθεωρήσαμε τη διαδικασία ανάπτυξη προγράμματος (slide 15) και τονίσαμε πως αυτή θα είναι η διαδικασία που θα ακολουθούμε στη συνέχεια σε κάθε άσκηση.

Στη συνέχεια εφαρμόσαμε την ανανεωμένη διαδικασία για την ανάπτυξη του προγράμματος FibonacciNumbers. Δώσαμε ένα πρώτο πηγαίο κώδικα και σχολιάσαμε εναλλακτικές υλοποιήσεις, τις οποίες θα πρέπει να δουλέψετε. Η πρώτη αυτή έκδοση (FibonacciNumbersV1.pdf) βασίζεται στην επιλογή μας να τυπώνει το σύστημα τον κάθε όρος της ακολουθίας μετά τον υπολογισμό του, η οποία μας επιτρέπει να έχουμε μια μεταβλητή για την έξοδο της διεργασίας, την cTerm (currentTerm). Επιμείναμε στον τρόπο οργάνωσης του αποθηκευτικού χώρου που πρέπει να χρησιμοποιείτε για τους σκοπούς του εργαστηρίου. Αυτό θα πρέπει να τηρηθεί ευλαβικά από το εργαστήριο αυτής της εβδομάδας.

 

Μια άλλη επιλογή στην διαχείριση της εξόδου της διεργασίας «Εμφάνισε n όρους της ακολουθίας

Fibonacci» είναι να υπολογίζονται πρώτα όλοι οι όροι και στη συνέχεια να τυπώνονται. Αυτό ήταν το κίνητρο για να κάνουμε μια εισαγωγή στους πίνακες της C, και στη συνέχεια να αξιοποιήσουμε την κατασκευή του Πίνακα για να δώσουμε μια δεύτερη έκδοση του προγράμματος FibonacciNumbers (FibonacciNumbersV2.pdf). Αυτή μας έδωσε τη δυνατότητα να δούμε κάποια πολύ βασικά πλεονεκτήματα του πίνακα.

 

Στη συνέχεια κάναμε πάλι μια αναφορά στην add2Numbers σε συνδυασμό με την ανανεωμένη διαδικασία ανάπτυξης προγράμματος και είδαμε πως  ο Τοτός αξιοποίησε το ChatGPT για να αναπτύξει το πρόγραμμα add2Numbers. Το μήνυμα είναι πως μπορείτε να αξιοποιήσετε την ΑΙ στην διαδικασία εξοικείωσης με τον προγραμματισμό αλλά πάντα ελεγχόμενα.

Η διεργασία ως επαναχρησιμοποιήσιμη μονάδα λειτουργικότητας και η συνάρτησης που μας επιτρέπει να περιγράφουμε διεργασίες στο πρόγραμμα μας ως αυτόνομες επαναχρησιμοποιήσιμες μονάδες κώδικα ήταν το επόμενο αντικείμενο μας. Χρησιμοποιήσαμε τις συναρτήσεις sum και max για να δώσουμε βασικές προτάσεις που μας επιτρέπουν α) επαναλαμβανόμενη εκτέλεση ενός συνόλου προτάσεων (πρόταση επανάληψης for) και β) εκτέλεση προτάσεων εάν μια συνθήκη είναι αληθής ή ψευδής (πρόταση if else).

 

Το τελευταίο αντικείμενο του 3ου μέρους των βασικών εννοιών είναι το πρόγραμμα average. Είδαμε τη διαδικασία ανάπτυξης για την επιλογή να διαβάζουμε τον αριθμό και αμέσως μετά να ενημερώνουμε το άθροισμα. Σχολιάσαμε με βάση τον κώδικα που δίνεται στις διαφάνειες σημεία που θα πρέπει να προσέξουμε όπως η ανάγκη δήλωσης της μεταβλητής avg ως float και την χρήση του κατάλληλου προσδιοριστή για την εμφάνιση της τιμής μιας μεταβλητής τύπου float. Σχολιάσαμε επίσης την πρόταση υπολογισμού του μέσου όρου και το τι πρέπει να προσέξουμε σε αυτή. Η πρόταση αυτή μας έδωσε την αφορμή να αναφέρουμε την έννοια της μετατροπής τύπου (type conversion) και τον τρόπο που την επιβάλει ο προγραμματιστής στο σύστημα.  Είδαμε επίσης μια εναλλακτική υλοποίηση με την πρόταση επανάληψης while. Δεν προλάβαμε να τα δούμε αυτά στο DevCpp (θα το κάνετε στο φροντιστήριο).

Ο χρόνος δεν μας επέτρεψε να δούμε πως θα αξιοποιήσουμε συνάρτηση στο πρόγραμμα average που είναι και αυτό αντικείμενο του Εργαστηρίου αυτής της εβδομάδας.

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

Τετάρτη 17/10

Κατά τη διάρκεια του Φροντιστηρίου της Τετάρτης δώσαμε την αφαιρετική αναπαράσταση της διεργασίας Υπολογισμός μέσου όρου (άσκηση Average), δώσαμε τη λεκτική περιγραφή και στη συνέχεια  δημιουργήσαμε ένα προτζεκτ για την έκδοση 1 της Average (το βάλαμε στον κατάλογο AvarageV1) και δώσαμε βήμα προς βήμα τον κώδικα (AverageV1.pdf).  Στη συνέχεια περάσαμε στην έκδοση 2. Κάναμε ένα αντίγραφο του καταλόγου του προτζεκτ της 1ης έκδοσης (το ονομάσαμε AverageV2) και δουλέψαμε την 2η έκδοση πάνω σε αυτό. Η 2η έκδοση βασίζεται στην αξιοποίηση της συνάρτησης average η οποία υπολογίζει και επιστρέφει τον μέσο όρο πίνακα ακεραίων (AverageV2.pdf). Δώσαμε την δήλωση, τον ορισμό και εξηγήσαμε γιατί επιλέξαμε αυτόν τον τρόπο δήλωσης της.

Σχόλια (2)

Θραμπουλίδης Κλεάνθης
Πέμπτη, 24 Οκτωβρίου 2024 - 12:44 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης
"This is an excerpt from a blog post discussing the third week of a programming course. The post outlines the main concepts covered during the lecture, including the process of developing programs, the use of loops and arrays in C programming, the role of abstraction in program design, and the importance of using tools like ChatGPT effectively. The author emphasises the need for students to practice programming concepts and to engage with the materials provided in the course. The post then details the exercises conducted during the subsequent tutorial session, focusing on developing a program to calculate the average of a set of numbers, showcasing different approaches and the benefits of using functions. The emphasis throughout the post is on encouraging students to develop their programming skills and to apply the concepts they have learnt to practical exercises." NotebookLM
Θραμπουλίδης Κλεάνθης
Πέμπτη, 24 Οκτωβρίου 2024 - 12:48 μ.μ.
- από τον χρήστη Θραμπουλίδης Κλεάνθης
Summary of I2P_BasicConceptsPartC.pdf by NotebookLM "This is a document that teaches the fundamentals of procedural programming. It uses a conversational approach, exemplified by the repeated mention of "Τοτός" (Greek for "Tommy"), a fictional character who is tasked with performing simple assignments. The document introduces basic programming concepts like variables, data types, arrays, and functions, demonstrating how they can be used to solve problems. The document also explores various approaches for developing and documenting programs, from simple verbal descriptions to structured English and pseudocode, ultimately leading to the implementation of programs in C. Throughout the document, the author emphasises the importance of clear, concise problem decomposition and modular code design. This is illustrated by the "Add2Numbers" example, which is progressively refined from a basic program to a more efficient, reusable function. The author also illustrates key concepts such as the "for" loop and how it can be used for repetitive tasks. Finally, the document concludes with an exercise that encourages learners to apply the acquired knowledge to solve a more challenging problem, demonstrating how a simple program can be broken down into smaller, manageable steps."