Ενισχυτική διδασκαλία διδακτικές ενότητες αλγοριθμικής και εισαγωγής στον προγραμματισμό Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal» διδάσκων: χρήστος σκουρλάς, cskourlas@teiath.gr 2015-16
διδακτικές ενότητες αλγοριθμικής και εισαγωγής στον προγραμματισμό διδακτικές ενότητες αλγοριθμικής και εισαγωγής στον προγραμματισμό Εκπαιδευτικό σενάριο ενισχυτικής διδασκαλίας στα μαθήματα «Αλγοριθμική» και «Εισαγωγή στον Προγραμματισμό» του Τμήματος Μηχανικών Πληροφορικής του ΤΕΙ Αθήνας. διδάσκων: χρήστος σκουρλάς, cskourlas@teiath.gr 2015-16
Εισαγωγή στον προγραμματισμό Στην ενότητα αυτή παρουσιάζονται εισαγωγικές έννοιες αλγοριθμικής και προγραμματισμού. Τα προγράμματα που παραθέτουμε είναι γραμμένα στη γλώσσα Pascal. Χρησιμοποιούμε το λογισμικό Bloodshed Dev-Pascal. Στόχος μας είναι να βοηθήσουμε το σπουδαστή να κατανοήσει βασικές έννοιες προγραμματισμού και να μάθει να γράφει τα πρώτα προγράμματά του. Χ. Σκουρλάς
10 τρόποι για να χαιρετήσεις τον κόσμο! Όταν θέλεις να μάθεις μία νέα γλώσσα προγραμματισμού αρχίζεις γράφοντας ένα απλό πρόγραμμα. Στα περισσότερα βιβλία που σου μαθαίνουν προγραμματισμό διαβάζεις συνήθως ένα πρόγραμμα που γράφει στην οθόνη του υπολογιστή την αγγλική φράση Hello, world! Η φράση αυτή σημαίνει στα ελληνικά «Γειά σου κόσμε!»
Θα γράψουμε δέκα προγράμματα για να μάθουμε δέκα τρόπους να γράφουμε αυτή τη φράση. Να το πρώτο! program Hello_01(output); begin writeln('Hello, world!') end. Για να προλαβαίνεις να δεις τα αποτελέσματα: program Hello_01(output); begin writeln('Hello, world!'); readln end.
Περιγραφή της σύνταξης του πρώτου προγράμματος Για κάθε πρόγραμμά μας πρέπει να διαλέξουμε ένα όνομα. Διαλέξαμε το όνομα Hello_01. Έτσι γράψαμε στην πρώτη γραμμή, program Hello_01(output); Παρατηρήστε ότι η γραμμή αυτή τελειώνει με ερωτηματικό. Τι σημαίνει η λέξη output; Το πρόγραμμά μας θέλουμε να γράφει στην οθόνη του υπολογιστή το μήνυμα Hello, world! Έτσι δίπλα στο όνομα του προγράμματος γράφουμε σε παρενθέσεις την αγγλική λέξη ‘output’ που σημαίνει στα ελληνικά «έξοδος». Δηλαδή με αυτόν τον τρόπο λέμε στο πρόγραμμά μας ότι θα γράφει τις απαντήσεις (στην οθόνη). program Hello_01(output); begin writeln('Hello, world!') end.
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); begin writeln('Hello, world!') end.
Περιγραφή της σύνταξης του πρώτου προγράμματος program new(input,output); var a … begin writeln('Hello, world!'); readln(a); … end. Η αγγλική λέξη input σημαίνει στα ελληνικά είσοδος. Αν γράψουμε program new(input, output); Αυτό σημαίνει ότι το πρόγραμμά μας θα διαβάζει κάποια στοιχεία που θα πληκτρολογούμε.
Περιγραφή της σύνταξης του πρώτου προγράμματος program new(input,output); var a … begin writeln('Hello, world!'); readln(a); … end.
Περιγραφή της σύνταξης του πρώτου προγράμματος Το πρόγραμμα αρχίζει με την αγγλική λέξη begin που σημαίνει στα ελληνικά αρχή. Το πρόγραμμα τελειώνει με την αγγλική λέξη end που σημαίνει στα ελληνικά τέλος. Μετά τη λέξη end βάζουμε και τελεία. Ανάμεσα στις λέξεις begin, end γράφουμε τις εντολές μας δηλαδή γράφουμε αυτά που ζητάμε να κάνει ο υπολογιστής: writeln('Hello, world!'); program Hello_01(output); begin writeln('Hello, world!') end.
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); begin writeln('Hello, world!') end.
Περιγραφή της σύνταξης του πρώτου προγράμματος Τα ξαναλέμε: Μέχρι τώρα είδαμε ότι κάθε πρόγραμμα έχει ένα όνομα και αποτελείται από εντολές. Το πρόγραμμα Hello_01 έχει μία μόνο εντολή που πρέπει να εκτελέσει ο υπολογιστής, την παρακάτω: writeln('Hello, world!') Η εντολή αυτή γράφει στην οθόνη του υπολογιστή τη φράση Hello, world!' Στην εντολή αυτή μπορούσαμε να γράψουμε και ερωτηματικό στο τέλος writeln('Hello, world!'); program Hello_01(output); begin writeln('Hello, world!') end.
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); begin writeln('Hello, world!') end.
Να κάποιες σημαντικές παρατηρήσεις – πρώτη Αν δεν προλαβαίνεις να δεις τα αποτελέσματα του προγράμματος στο περιβάλλον της Bloodsed Dev-Pascal (http://www.bloodshed.net/devpascal.html) τότε πρόσθεσε μία εντολή readln; στο τέλος: program Hello_01(output); begin writeln('Hello, world!'); readln; end.
Να κάποιες σημαντικές παρατηρήσεις – δεύτερη Στο πρόγραμμά μας χρησιμοποιούμε μερικές αγγλικές λέξεις. ΚΑΘΕ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΧΡΗΣΙΜΟΠΟΙΕΙ ΤΙΣ ΔΙΚΕΣ ΤΗΣ! Κάθε μία από αυτές τις λέξεις έχει ένα ειδικό νόημα. Για παράδειγμα η λέξη Program δηλώνει ότι αυτό που ακολουθεί είναι το πρόγραμμά μας. Οι λέξεις αυτές λέγονται κρατημένες (reserved) επειδή τις κρατάμε και δεν τις χρησιμοποιούμε τυχαία. Για παράδειγμα, απαγορεύεται να χρησιμοποιήσουμε τη λέξη writeln σαν όνομα του προγράμματός μας. Η γλώσσα PASCAL έχει μερικές κρατημένες λέξεις όπως οι παρακάτω: program Hello_01(output); begin writeln('Hello, world!'); readln; end.
Δες το πρόγραμμα Hello_01 και γράψε ένα δικό σου που θα λέει ποιός είσαι και γράψε και ότι άλλο θέλεις. program Hello_01(output); begin writeln('Hello, world!') end. Να το νέο πρόγραμμά μου. program my_Hello(output); writeln('My name is Christos.'); writeln('I feel good.'); Όταν το εκτέλεσα έγραψε στην οθόνη του υπολογιστή: My name is Christos. I feel good. Hello, world! program my_Hello(output); begin writeln('My name is Christos.'); writeln('I feel good.'); writeln('Hello, world!'); readln end.
Θα μπορούσα να γράψω ερωτηματικό και στην τελευταία εντολή writeln όπως βλέπεις στο παρακάτω πρόγραμμα. program my_Hello(output); begin writeln('My name is Christos.'); writeln('I feel good.'); writeln('Hello, world!'); end. ΘΥΜΗΣΟΥ ΟΤΙ ΜΠΟΡΕΙΣ ΝΑ ΠΑΡΑΛΕΙΨΕΙΣ ΤΟ ΕΡΩΤΗΜΑΤΙΚΟ ΜΟΝΟ ΣΤΗΝ ΤΕΛΕΥΤΑΙΑ ΕΝΤΟΛΗ!
Το παρακάτω πρόγραμμα έχει 2 λάθη. Ποιά; program my_Hello(output); begin writeln('My name is Christos.') writeln('I feel good.') writeln('Hello, world!'); end.
Ακολουθούν άλλα 9 παραδείγματα
Πρόγραμμα Hello_02 Με την εντολή writeln('Hello, ','world Πρόγραμμα Hello_02 Με την εντολή writeln('Hello, ','world!') του προγράμματος γράφω μία μία τις λέξεις της φράσης “Hello world!” program Hello_02(output); begin writeln('Hello, ','world!') end. Πρώτα ο Η/Υ γράφει Hello, και αμέσως μετά δίπλα του την επόμενη λέξη Hello, world! Εγώ βέβαια βλέπω ακαριαία στην οθόνη όλο το μήνυμα Hello world!
Πρόγραμμα Hello_03 Με την εντολή write('Hello, '); γράφω τη λέξη “Hello,” και μετά γράφω “world!” με την εντολή writeln('world!') που τελειώνοντας αλλάζει και γραμμή program Hello_03(output); begin write('Hello, '); writeln('world!') end. Πρώτα ο Η/Υ γράφει Hello, και αμέσως μετά δίπλα του την επόμενη λέξη Hello, world! Εγώ βέβαια βλέπω ακαριαία στην οθόνη όλο το μήνυμα Hello world!
Πρόγραμμα Hello_04 Γράφω με την εντολή write('Hello, world Πρόγραμμα Hello_04 Γράφω με την εντολή write('Hello, world!'); τη φράση “Hello world!” και με την εντολή writeln αλλάζω και γραμμή program Hello_04(output); begin write('Hello, world!'); writeln end.
Πρόγραμμα Hello_05 Γράφω ένα υποπρόγραμμα με όνομα Hello Πρόγραμμα Hello_05 Γράφω ένα υποπρόγραμμα με όνομα Hello. Το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Το κύριο πρόγραμμα καλεί 4 φορές το υποπρόγραμμα και το μήνυμα 'Hello, world!' γράφεται 4 φορές. program Hello_05(output); procedure hello; begin writeln('Hello, world!') end; hello; hello; hello; hello end. Hello, world! program Hello_05(output); procedure hello; begin writeln('Hello, world!') end; hello; hello; hello; hello; readln end.
Πρόγραμμα Hello_06 Γράφω ένα υποπρόγραμμα με όνομα Hello Πρόγραμμα Hello_06 Γράφω ένα υποπρόγραμμα με όνομα Hello. Το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Το κύριο πρόγραμμα καλεί 7 φορές το υποπρόγραμμα και το μήνυμα 'Hello, world!' γράφεται 7 φορές. program Hello_06(output); var i : integer; procedure hello; begin writeln('Hello, world!') end; for i:=1 to 7 do hello end. Hello, world!
Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα Χρησιμοποιώ μία εντολή for i:= 1 to 7 do … δηλαδή μία εντολή επαναληπτικής εκτέλεσης ή εντολή βρόχου (loop). Λέγεται επαναληπτική εντολή ή εντολή βρόχου (loop) γιατί η εντολή αυτή κάνει την ίδια δουλειά πολλές φορές. Το i ορίζεται σαν μία ακέραια μεταβλητή και από την εντολή for θα πάρει διαδοχικά τιμές 1, 2, 3, 4, 5, 6, 7. program Hello_06(output); var i : integer; procedure hello; begin writeln('Hello, world!') end; for i:=1 to 7 do hello end.
Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα Όταν πάρει τιμή 1 καλείται για πρώτη φορά το υποπρόγραμμα Hello και το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Μετά η μεταβλητή i θα πάρει τιμή 2 και καλείται για δεύτερη φορά το Υποπρόγραμμα Hello και το υποπρόγραμμα ξαναγράφει 'Hello, world!'. Μετά η μεταβλητή i θα πάρει τιμή 3 και καλείται για Τρίτη φορά το Υποπρόγραμμα Hello και το υποπρόγραμμα ξαναγράφει 'Hello, world!'. Με τον ίδιο τρόπο η μεταβλητή i θα πάρει τιμή 4, μετά 5, μετά 6 και μετά 7 και κάθε φορά θα καλείται το Υποπρόγραμμα Hello και το υποπρόγραμμα θα ξαναγράφει τη φράση 'Hello, world!'. program Hello_06(output); var i : integer; procedure hello; begin writeln('Hello, world!') end; for i:=1 to 7 do hello end.
Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα Δηλαδή, χρησιμοποιήσαμε τη μεταβλητή σαν ένα μετρητή που θα πάρει διαδοχικά τις τιμές από 1 μέχρι 7 ώστε να καλέσουμε το υποπρόγραμμα 7 φορές και να τυπώσει 7 φορές το μήνυμα. program Hello_06(output); var i : integer; procedure hello; begin writeln('Hello, world!') end; for i:=1 to 7 do hello end.
Πρόγραμμα Hello_07 Πως ακριβώς δουλεύει το πρόγραμμα Χρησιμοποιώ μία εντολή for i:= 1 to n do … δηλαδή μία εντολή επαναληπτικής εκτέλεσης ή εντολή βρόχου (loop) και μία μεταβλητή i, όπως και προηγουμένως. Στο Hello_07, όμως, αντί της εντολής for i:=1 to 7 do hello χρησιμοποιώ την εντολή for i:=1 to n do hello. Για να ξέρει πόσες επαναλήψεις θα κάνει ορίζω τη σταθερά n, ως εξής: const n = 7; program Hello_07(output); const n = 7; var i : integer; procedure num_hello; begin writeln(i,' Hello, world!') end; for i:= 1 to n do num_hello end.
Πρόγραμμα Hello_08 Πως ακριβώς δουλεύει το πρόγραμμα Χρησιμοποιώ πάλι μία εντολή επαναληπτικής εκτέλεσης (τη λέμε και εντολή βρόχου (loop)) την εντολή for i:= 1 to n do hello Εδώ, όμως, αντί να ορίσω τη σταθερά n, όπως προηγουμένως, θα κάνω κάτι άλλο. Δηλαδή αντί της δήλωσης const n = 7; δηλώνω την ακέραια μεταβλητή n ως εξής: var i,n : integer; program Hello_08(input,output); procedure hello; begin writeln('Hello, world!') end; writeln('Give number', ' then press <enter>:'); read(n); readln; for i:= 1 to n do hello end.
Πρόγραμμα Hello_08 Πως ακριβώς δουλεύει το πρόγραμμα Στο πρόγραμμα με την εντολή writeln('Give number', ' then press <enter>:'); διατάζω τον υπολογιστή να γράψει στην οθόνη: Give number then press <enter>: Ο υπολογιστής αφού το γράψει περιμένει να του γράψουμε μία τιμή. Αυτό γιατί στο πρόγραμμά μας έχουμε γράψει την εντολή read(n); Μόλις πληκτρολογήσουμε μία τιμή ο υπολογιστής τη διαβάζει και τη γράφει στη μεταβλητή n. program Hello_08(input,output); var i,n : integer; procedure hello; begin writeln('Hello, world!') end; writeln('Give number', ' then press <enter>:'); read(n); readln; for i:= 1 to n do hello end.
Πρόγραμμα Hello_09 Πως ακριβώς δουλεύει το πρόγραμμα read(n); readln; το πρόγραμμα διάβασε πρώτα την τιμή της μεταβλητής n (με την εντολή read(n);) και μετά διάβασε μέχρι το υπόλοιπο της γραμμής (με την εντολή readln;). Το πρόγραμμα Hello_9 διαβάζει μία γραμμή και ότι τιμή έχουμε δώσει την αποθηκεύει στη μεταβλητή n. program Hello_09(input,output); var i,n : integer; procedure hello; begin writeln('Hello, world!') end; writeln('Give number',' then press <enter>:'); readln(n); for i:= 1 to n do hello end.
Πρόγραμμα Hello_10 program Hello_10(input,output); var i,n : integer; procedure hello; begin writeln('Hello, world!') end; writeln('Give number of greetings', ' then press <enter>:'); readln(n); if n < 0 then writeln('number is negative') else if n=0 then writeln('number is zero') else for i:= 1 to n do hello; readln end. Το πρόγραμμα ζητά να δώσουμε έναν αριθμό. Αν ο αριθμός που θα δώσουμε είναι αρνητικός Τότε ο υπολογιστής θα γράψει στην οθόνη το μήνυμα ‘number is negative’ Αλλιώς Αν ο αριθμός που θα δώσουμε είναι 0 Τότε ο υπολογιστής θα γράψει στην οθόνη το μήνυμα 'number is zero' Αλλιώς θα εκτελέσει επαναληπτικά το υποπρόγραμμα και θα τυπώσει n φορές το μήνυμα Hello, world!
Ερωτήσεις