Ενισχυτική διδασκαλία διδακτικές ενότητες αλγοριθμικής και εισαγωγής στον προγραμματισμό Ενότητα 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 end. writeln('hello, world!'); readln
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); writeln('hello, world!') Για κάθε πρόγραμμά μας πρέπει να διαλέξουμε ένα όνομα. Διαλέξαμε το όνομα Hello_01. Έτσι γράψαμε στην πρώτη γραμμή, program Hello_01(output); Παρατηρήστε ότι η γραμμή αυτή τελειώνει με ερωτηματικό. Τι σημαίνει η λέξη output; Το πρόγραμμά μας θέλουμε να γράφει στην οθόνη του υπολογιστή το μήνυμα Hello, world! Έτσι δίπλα στο όνομα του προγράμματος γράφουμε σε παρενθέσεις την αγγλική λέξη output που σημαίνει στα ελληνικά «έξοδος». Δηλαδή με αυτόν τον τρόπο λέμε στο πρόγραμμά μας ότι θα γράφει τις απαντήσεις (στην οθόνη).
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); writeln('hello, world!')
Περιγραφή της σύνταξης του πρώτου προγράμματος program new(input,output); var a writeln('hello, world!'); readln(a); Η αγγλική λέξη input σημαίνει στα ελληνικά είσοδος. Αν γράψουμε program new(input, output); Αυτό σημαίνει ότι το πρόγραμμά μας θα διαβάζει κάποια στοιχεία που θα πληκτρολογούμε.
Περιγραφή της σύνταξης του πρώτου προγράμματος program new(input,output); var a writeln('hello, world!'); readln(a);
Περιγραφή της σύνταξης του πρώτου προγράμματος program Hello_01(output); begin writeln('hello, world!') 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.
Να κάποιες σημαντικές παρατηρήσεις πρώτη Αν δεν προλαβαίνεις να δεις τα αποτελέσματα του προγράμματος στο περιβάλλον της Bloodsed Dev-Pascal (http://www.bloodshed.net/devpascal.html) τότε πρόσθεσε μία εντολή readln; στο τέλος: program Hello_01(output); writeln('hello, world!'); readln;
Να κάποιες σημαντικές παρατηρήσεις δεύτερη Στο πρόγραμμά μας χρησιμοποιούμε μερικές αγγλικές λέξεις. ΚΑΘΕ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΧΡΗΣΙΜΟΠΟΙΕΙ ΤΙΣ ΔΙΚΕΣ ΤΗΣ! Κάθε μία από αυτές τις λέξεις έχει ένα ειδικό νόημα. Για παράδειγμα η λέξη Program δηλώνει ότι αυτό που ακολουθεί είναι το πρόγραμμά μας. Οι λέξεις αυτές λέγονται κρατημένες (reserved) επειδή τις κρατάμε και δεν τις χρησιμοποιούμε τυχαία. Για παράδειγμα, απαγορεύεται να χρησιμοποιήσουμε τη λέξη writeln σαν όνομα του προγράμματός μας. Η γλώσσα PASCAL έχει μερικές κρατημένες λέξεις όπως οι παρακάτω: program Hello_01(output); writeln('hello, world!'); readln;
Reserved words Τι σημαίνει Επεξήγηση Κρατημένες λέξεις Program Πρόγραμμα Ακολουθείται από το όνομα του προγράμματος Begin Αρχή Αρχή του προγράμματος ή μιας ομάδας (block) εντολών End Τέλος Τέλος του προγράμματος ή μιας ομάδας (block) εντολών Var Μεταβλητή Θα μιλήσουμε στη συνέχεια Const Σταθερά Θα μιλήσουμε στη συνέχεια Writeln Γράψε γραμμή Γράφει μία γραμμή που μπορεί να περιλαμβάνει κείμενα, τιμές μεταβλητών κ.λπ. Write Γράψε Γράφει κείμενα, τιμές μεταβλητών κ.λπ. χωρίς να Readln αλλάζει γραμμή Διάβασε γραμμή Διαβάζει μία γραμμή με τιμές μεταβλητών ή και σταθερών Read Διάβασε Διαβάζει τιμές μεταβλητών ή και σταθερών χωρίς να πάει στην επόμενη γραμμή For Για for i:= number1 to number2 do Do Κάνε πχ for i:= 1 to 10 do If Αν If then ; Then Τότε If then else if then else ; Else Αλλιώς If then else ; Input Είσοδος Μαθαίνουμε ότι το πρόγραμμα διαβάζει στοιχεία που πληκτρολογούμε Output Έξοδος Μαθαίνουμε ότι το πρόγραμμα γράφει τις απαντήσεις στην οθόνη Integer Ακέραιος αριθμός
Δες το πρόγραμμα Hello_01 και γράψε ένα δικό σου που θα λέει ποιός είσαι και γράψε και ότι άλλο θέλεις. program Hello_01(output); writeln('hello, world!') Να το νέο πρόγραμμά μου. program my_hello(output); begin end. writeln('my name is Christos.'); writeln('i feel good.'); writeln('hello, world!') Όταν το εκτέλεσα έγραψε στην οθόνη του υπολογιστή: 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); writeln('my name is Christos.'); writeln('i feel good.'); writeln('hello, world!'); ΘΥΜΗΣΟΥ ΟΤΙ ΜΠΟΡΕΙΣ ΝΑ ΠΑΡΑΛΕΙΨΕΙΣ ΤΟ ΕΡΩΤΗΜΑΤΙΚΟ ΜΟΝΟ ΣΤΗΝ ΤΕΛΕΥΤΑΙΑ ΕΝΤΟΛΗ!
Το παρακάτω πρόγραμμα έχει 2 λάθη. Ποιά; program my_hello(output); writeln('my name is Christos.') writeln('i feel good.') writeln('hello, world!');
Ακολουθούν άλλα 9 παραδείγματα
Πρόγραμμα Hello_02 Με την εντολή writeln('hello, ','world!') του προγράμματος γράφω μία μία τις λέξεις της φράσης Hello world! program Hello_02(output); writeln('hello, ','world!') Πρώτα ο Η/Υ γράφει Hello, και αμέσως μετά δίπλα του την επόμενη λέξη Hello, world! Εγώ βέβαια βλέπω ακαριαία στην οθόνη όλο το μήνυμα Hello world!
Πρόγραμμα Hello_03 Με την εντολή write('hello, '); γράφω τη λέξη Hello, και μετά γράφω world! με την εντολή writeln('world!') που τελειώνοντας αλλάζει και γραμμή program Hello_03(output); write('hello, '); writeln('world!') Πρώτα ο Η/Υ γράφει Hello, και αμέσως μετά δίπλα του την επόμενη λέξη Hello, world! Εγώ βέβαια βλέπω ακαριαία στην οθόνη όλο το μήνυμα Hello world!
Πρόγραμμα Hello_04 Γράφω με την εντολή write('hello, world!'); τη φράση Hello world! και με την εντολή writeln αλλάζω και γραμμή program Hello_04(output); write('hello, world!'); writeln
Πρόγραμμα Hello_05 Γράφω ένα υποπρόγραμμα με όνομα Hello. Το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Το κύριο πρόγραμμα καλεί 4 φορές το υποπρόγραμμα και το μήνυμα 'Hello, world!' γράφεται 4 φορές. program Hello_05(output); procedure hello; writeln('hello, world!') end; hello; hello; hello; hello Hello, world! Hello, world! Hello, world! Hello, world! program Hello_05(output); procedure hello; begin writeln('hello, world!') end; begin hello; hello; hello; hello; readln end.
Πρόγραμμα Hello_06 Γράφω ένα υποπρόγραμμα με όνομα Hello. Το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Το κύριο πρόγραμμα καλεί 7 φορές το υποπρόγραμμα και το μήνυμα 'Hello, world!' γράφεται 7 φορές. program Hello_06(output); var i : integer; procedure hello; writeln('hello, world!') end; for i:=1 to 7 do hello Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world!
Χρησιμοποιώ μία εντολή for i:= 1 to 7 do δηλαδή μία εντολή επαναληπτικής εκτέλεσης ή εντολή βρόχου (loop). Λέγεται επαναληπτική εντολή ή εντολή βρόχου (loop) γιατί η εντολή αυτή κάνει την ίδια δουλειά πολλές φορές. Το i ορίζεται σαν μία ακέραια μεταβλητή και από την εντολή for θα πάρει διαδοχικά τιμές 1, 2, 3, 4, 5, 6, 7. Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_06(output); var i : integer; procedure hello; writeln('hello, world!') end; for i:=1 to 7 do hello
Όταν πάρει τιμή 1 καλείται για πρώτη φορά το υποπρόγραμμα Hello και το υποπρόγραμμα γράφει τη φράση 'Hello, world!'. Μετά η μεταβλητή i θα πάρει τιμή 2 και καλείται για δεύτερη φορά το Υποπρόγραμμα Hello και το υποπρόγραμμα ξαναγράφει 'Hello, world!'. Μετά η μεταβλητή i θα πάρει τιμή 3 και καλείται για Τρίτη φορά το Υποπρόγραμμα Hello και το υποπρόγραμμα ξαναγράφει 'Hello, world!'. Με τον ίδιο τρόπο η μεταβλητή i θα πάρει τιμή 4, μετά 5, μετά 6 και μετά 7 και κάθε φορά θα καλείται το Υποπρόγραμμα Hello και το υποπρόγραμμα θα ξαναγράφει τη φράση 'Hello, world!'. Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_06(output); var i : integer; procedure hello; writeln('hello, world!') end; for i:=1 to 7 do hello
Δηλαδή, χρησιμοποιήσαμε τη μεταβλητή σαν ένα μετρητή που θα πάρει διαδοχικά τις τιμές από 1 μέχρι 7 ώστε να καλέσουμε το υποπρόγραμμα 7 φορές και να τυπώσει 7 φορές το μήνυμα. Πρόγραμμα Hello_06 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_06(output); var i : integer; procedure hello; writeln('hello, world!') end; for i:=1 to 7 do hello
Χρησιμοποιώ μία εντολή 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; Πρόγραμμα Hello_07 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_07(output); const n = 7; var i : integer; procedure num_hello; writeln(i,' Hello, world!') end; for i:= 1 to n do num_hello
Χρησιμοποιώ πάλι μία εντολή επαναληπτικής εκτέλεσης (τη λέμε και εντολή βρόχου (loop)) την εντολή for i:= 1 to n do hello Εδώ, όμως, αντί να ορίσω τη σταθερά n, όπως προηγουμένως, θα κάνω κάτι άλλο. Δηλαδή αντί της δήλωσης const n = 7; δηλώνω την ακέραια μεταβλητή n ως εξής: var i,n : integer; Πρόγραμμα Hello_08 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_08(input,output); var i,n : integer; procedure hello; writeln('hello, world!') end; writeln('give number', ' then press <enter>:'); read(n); readln; for i:= 1 to n do hello
Στο πρόγραμμα με την εντολή 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; writeln('hello, world!') end; writeln('give number', ' then press <enter>:'); read(n); readln; for i:= 1 to n do hello Πρόγραμμα Hello_08 Πως ακριβώς δουλεύει το πρόγραμμα
Ότι και προηγουμένως. Μόνο που στο πρόγραμμα Hello_08 με τις εντολές read(n); readln; το πρόγραμμα διάβασε πρώτα την τιμή της μεταβλητής n (με την εντολή read(n);) και μετά διάβασε μέχρι το υπόλοιπο της γραμμής (με την εντολή readln;). Το πρόγραμμα Hello_9 διαβάζει μία γραμμή και ότι τιμή έχουμε δώσει την αποθηκεύει στη μεταβλητή n. Πρόγραμμα Hello_09 Πως ακριβώς δουλεύει το πρόγραμμα program Hello_09(input,output); var i,n : integer; procedure hello; writeln('hello, world!') end; writeln('give number',' then press <enter>:'); readln(n); for i:= 1 to n do hello
program Hello_10(input,output); var i,n : integer; procedure hello; 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 Το πρόγραμμα ζητά να δώσουμε έναν αριθμό. Αν ο αριθμός που θα δώσουμε είναι αρνητικός Τότε ο υπολογιστής θα γράψει στην οθόνη το μήνυμα number is negative Αλλιώς Αν ο αριθμός που θα δώσουμε είναι 0 Τότε ο υπολογιστής θα γράψει στην οθόνη το μήνυμα 'number is zero' Αλλιώς θα εκτελέσει επαναληπτικά το υποπρόγραμμα και θα τυπώσει n φορές το μήνυμα Hello, world! Πρόγραμμα Hello_10
Ερωτήσεις