Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables»

Σχετικά έγγραφα
Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Pascal. 15 Νοεμβρίου 2011

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Ενισχυτική διδασκαλία στα μαθήματα «Εισαγωγή στον προγραμματισμό» και «Αλγοριθμική»

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Προγραμματισμός Ι. Ασκήσεις. Τζάλλας Αλέξανδρος, Καθηγητής Εφαρμογών. Τμ. Μηχανικών Πληροφορικής Τ.Ε.

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Σκοπός. Εργαστήριο 5 Εντολές Επιλογής

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Αποτελέσματα προόδου

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΕΠΛ 034 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΗΜΥ

ιαφάνειες παρουσίασης #4

ιαφάνειες παρουσίασης #3

ιαφάνειες παρουσίασης #4

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Pascal. 26 Οκτωβρίου 2011

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Δομές ελέγχου. ομαδοποίηση εντολών εκτέλεση εντολών υπό συνθήκη επανάληψη εντολών

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 13 : Ασκήσεις Επανάληψης Γ. Αλέξανδρος Τζάλλας

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Εισαγωγή στο Προγραμματισμό για Μηχανολόγους Οδηγός Προετοιμασίας για τη Τελική Εξέταση

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

Σημειώσεις για πρόοδο στο εργαστήριο

Εχουμε ήδη συναντήσει μονοδιάστατους πίνακες, οι οποίοι ορίζονται ως εξής:

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 12 : Ασκήσεις Επανάληψης Β. Αλέξανδρος Τζάλλας

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Εργαστήριο 10 Πίνακες. Πίνακες. Η έννοια της δόμησης δεδομένων στη PASCAL. Σκοπός

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά)

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. β. Οι πληροφορίες είναι δεδομένα τα οποία δεν έχουν υποστεί επεξεργασία.

Κεφάλαιο 5ο: Εντολές Επανάληψης

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ

Κεφάλαιο 12 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Κεφάλαιο 12 : ΕΡΓΑΣΤΗΡΙΑΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 03 Συναρτήσεις

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Pascal. 1 Γλώσσες προγραμματισμού. 21 Οκτωβρίου 2011

ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α A1. 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. integer. real. Boolean. char. string A3.

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 5 : Υποπρογράμματα II. Αλέξανδρος Τζάλλας

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 7: ΑΝΑΔΡΟΜΗ

Γ ΤΑΞΗ ΗΜΕΡΗΣΙΟΥ ΕΠΑ.Λ ΜΑΘΗΜΑ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΚΦΩΝΗΣΕΙΣ

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

Λογισµικό (Software SW) Γλώσσες

ιαφάνειες παρουσίασης #2

Η γλώσσα προγραμματισμού C

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ (ΔΙΑΔΙΚΑΣΙΕΣ ΣΥΝΑΡΤΗΣΕΙΣ)

Ασκήσεις στα υποπρογράμματα

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL ΑΣΚΗΣΕΙΣ Γ ΛΥΚΕΙΟΥ ΚΑΤΕΥΘΥΝΣΗΣ

Παράλληλη Επεξεργασία Κεφάλαιο 2 Παραλληλισμός Δεδομένων

Προγραμματισμός PASCAL

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

ΛΥΣΕΙΣ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2007

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

ΑΠΑΝΤΗΣΕΙΣ. α- Σωστό β- Σωστό γ- Λάθος δ- Λάθος ε- Σωστό στ- Σωστό

Κεφάλαιο 7: Υπορουτίνες

Υπο-προγράμματα στη Fortran

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

Κεφάλαιο 10. Υποπρογράμματα

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

ΜΑΘΗΜΑ 2, Έλεγχος ροής προγράμματος ΒΑΣΙΚΗ ΣΥΝΤΑΞΗ:

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Κεφάλαιο 11 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008

8 FORTRAN 77/90/95/2003

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 7 : Πίνακες I. Αλέξανδρος Τζάλλας

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Μονάδες 4. β. x=20 και y=10

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

Υπολογισμός - Εντολές Επανάληψης

ιαφάνειες παρουσίασης #5

4. Επιλογή και Επανάληψη

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ. Πως γίνεται ο ορισμός μιας διαδικασίας; Να δοθούν σχετικά παραδείγματα. ΑΡΧΗ Εντολές ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΦΥΣ 145 Υπολογιστικές Μέθοδοι στη Φυσική. Πρόοδος 26 Μαρτίου 2007 Ομάδα 1 η

Transcript:

ενισχυτική διδασκαλία Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables» Χ. Σκουρλάς cskourlas@teiath.gr 2015-16

Επαναλήψεις - Loops, Διαδικασίες - procedures, Συναρτήσεις - functions, Αναδρομή - recursion, Πίνακες - tables Στην ενότητα αυτή θα επαναλάβουμε τις εντολές επανάληψης (loops). Θα μελετήσουμε τα υποπρογράμματα: διαδικασίες, συναρτήσεις Θα δούμε παραδείγματα αναδρομής. Θα μελετήσουμε πίνακες. Χ. Σκουρλάς

Παραδείγματα χρήσης εντολών επανάληψης for, while, repeat

Υπολογίστε το άθροισμα 1+2+3+...+10 χρησιμοποιώντας εντολή for. program upologismos_athroismatos(input, output); var i, N, athroisma: integer; N:=10; athroisma:=0; i:=1; for i:= 1 to N do athroisma:= athroisma+i; writeln('athroisma=1+2+3+4+5+ 6+7+8+9+10=', athroisma); readln; end.

Υπολογίστε το άθροισμα 1+2+3+...+10 χρησιμοποιώντας εντολή while. program upologismos_athroismatos(input, output); var i, N, athroisma: integer; N:= 10; athroisma:=0; i:=1; while i<=n do end; athroisma:= athroisma +i; i:= i+1; writeln('athroisma=1+2+3+4+5+6+7+ readln; end. 8+9+10=', athroisma);

Υπολογίστε το άθροισμα 1+2+3+...+10 χρησιμοποιώντας εντολή repeat. program upologismos_athroismatos(input, output); var i, N, athroisma: integer; N:=10; athroisma:=0; i:=1; repeat athroisma:= athroisma+i; i:= i+1 until i>n; writeln('athroisma=1+2+3+4+5+ readln; end. 6+7+8+9+10=', athroisma);

Τo πρόγραμμα διαβάζει τον αριθμό Ν, χρησιμοποιεί εντολή repeat και υπολογίζει το άθροισμα 1+2+3+...+Ν. program upologismos_athroismatos(input, output); var i, N, athroisma: integer; writeln('dwse plhthos diadoxikwn akeraiwn pou tha prostheseis'); readln(n); if (N<1) or (N>10) then writeln('dwse swsta to plhthos') else athroisma:=0; i:=1; repeat athroisma:= athroisma+i; i:= i+1; until i>n; writeln('athroisma =', athroisma); readln; End. Αποτελέσματα εκτέλεσης του προγράμματος dwse plhthos diadoxikwn akeraiwn pou tha prostheseis 5 15 (επειδή 1+2+3+4+5=15)

Ακολουθούν παραδείγματα προγραμμάτων που χρησιμοποιούν while, repeat. program upologismos_athroismatos(input, output); var arithmos, athroisma: integer; writeln('to programma tha diavazei kai tha prosthetei arithmous'); writeln('dwse arithmo <10 kai >0'); writeln('gia na stamathsei dwse arithmo pou den anhkei sto diasthma [1, 10)'); readln(arithmos); while (arithmos>=1) and (arithmos<10) do athroisma := athroisma+arithmos; writeln('dwse arithmo < 10 kai > 1'); readln(arithmos) writeln('athroisma =', athroisma); readln; end. Το πρόγραμμα διαβάζει και προσθέτει αριθμούς μεγαλύτερους από 0 και μικρότερους από 10. Για να σταματήσει το πρόγραμμα πληκτρολογείς είτε αριθμό αρνητικό ή 0 ή αριθμό μεγαλύτερο του 9.

program upologismos_athroismatos(input, output); var arithmos, athroisma: integer; writeln('to programma tha diavazei kai tha Το πρόγραμμα διαβάζει και προσθέτει prosthetei arithmous'); αριθμούς μεγαλύτερους από 0 και repeat μικρότερους από 10. Για να σταματήσει το πρόγραμμα writeln('dwse arithmo < 10 kai > 1'); πληκτρολογείς είτε αριθμό αρνητικό ή athroisma := athroisma+arithmos; 0 ή αριθμό μεγαλύτερο του 9. readln(arithmos); writeln('arithmos=', arithmos); until(arithmos<1)or(arithmos>=10); writeln('athroisma =', athroisma); readln; end.

Διαφορά for, while, repeat Θέλουμε το πρόγραμμά μας να διαβάζει ζευγάρια θετικών ακεραίων και να γράφει ποιούς αριθμούς δώσαμε. Αν ξέρουμε πόσα ζεύγη θα διαβάσει το πρόγραμμα (πχ 5 ζευγάρια) τότε χρησιμοποιούμε for: for i:= 1 to 5 do εντολές

program diavazw_zeugh(input, output); var i, arithmos1, arithmos2: integer; for i:= 1 to 5 do writeln('dwse 2 akeraious aritmous.'); readln(arithmos1, arithmos2); writeln('oi arithmoi pou edwses einai: ', arithmos1,', ', arithmos2); readln end.

Αλλιώς χρησιμοποίησε while ή repeat. Τότε θα χρειαστείς μία συνθήκη πχ το πρόγραμμα θα σταματάει αν δώσουμε αριθμό 0 μέσα στο ζεύγος. Να πως διαμορφώνονται οι εντολές while, repeat: while (arithmos1 > 0) and (arithmos2 > 0) do εντολές repeat εντολές until (arithmos1 = 0) or (arithmos2 = 0); Ακολουθούν τα δύο προγράμματα. Παρατήρησε ότι πριν από το while χρειάζεται να διαβάσεις το πρώτο ζευγάρι αριθμών ενώ στο repeat δε χρειάζεται!

program diavazw_zeugh(input, output); var arithmos1, arithmos2: integer; writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden to programma tha stamathsei'); readln(arithmos1, arithmos2); while (arithmos1 > 0) and (arithmos2 > 0) do writeln('oi arithmoi pou edwses einai: ', arithmos1,', ', arithmos2); writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden to programma tha stamathsei'); readln(arithmos1, arithmos2); readln end.

program diavazw_zeugh(input, output); var arithmos1, arithmos2: integer; repeat writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden to programma tha stamathsei'); readln(arithmos1, arithmos2); writeln('oi arithmoi pou edwses einai: ', arithmos1,', ', arithmos2) until (arithmos1 = 0) or (arithmos2 = 0); readln end.

Υποπρογράμματα: Διαδικασίες Ένα υποπρόγραμμα είναι μία ομάδα εντολών που όλες μαζί κάνουν μία συγκεκριμένη εργασία. Το υποπρόγραμμα είναι τμήμα του προγράμματος και έχει όνομα, αρχή, τέλος. Όταν θέλουμε να εκτελέσουμε τις εντολές του υποπρογράμματος το καλούμε με το όνομά του μέσα από το κύριο πρόγραμμα. και συναρτήσεις

program greetings(input, output); procedure hello; writeln('eimaste sti diadikasia'); writeln('hello world!'); end; writeln('eimaste sto kurio programma'); writeln('kaloume th diadikasia gia na grapsoume to minima '); hello; writeln('xanagurisame sto kurio programma'); readln; end.

Τα υποπρογράμματα χωρίζονται σε διαδικασίες (procedures) και συναρτήσεις (functions): function athroisma_duo_akeraiwn(a1, a2: integer): integer; athroisma_akeraiwn:= a1+a2; procedure hello; writeln('eimaste sti diadikasia'); writeln('hello world!'); procedure vres_min(a1, a2: integer; var elaxisto: integer); if a1 > a2 then elaxisto:=a2 else elaxisto:=a1;

Παραδείγματα χρήσης διαδικασιών, συναρτήσεων

α) Διαδικασίες χωρίς παραμέτρους (parameters) Οι διαδικασίες χωρίς παραμέτρους καλούνται από το κύριο πρόγραμμα μόνο με το όνομά τους. Δες και το παρακάτω παράδειγμα. program greetings(input, output);... hello;... end. procedure hello; εντολές end;

program greetings(input, output); procedure hello; writeln('eimaste sti diadikasia'); writeln('hello world!'); writeln('eimaste sto kurio programma'); writeln('kaloume th diadikasia gia na grapsoume to minima '); hello; writeln('xanagurisame sto kurio programma'); readln; end. Τα αποτελέσματα εκτέλεσης του προγράμματος Eimaste sto kurio programma Kaloume th diadikasia gia na grapsoume to minima Eimaste sti diadikasia Hello world! Xanagurisame sto kurio programma

Οι μεταβλητές του κύριου προγράμματος λέγονται καθολικές (global) επειδή μπορούμε να τις χρησιμοποιήσουμε και στο πρόγραμμα και στα υποπρογράμματα. Δηλαδή μία καθολική μεταβλητή μπορεί να την αλλάξει και το κύριο πρόγραμμα και τα υποπρογράμματα. Η i είναι καθολική μεταβλητή. program greetings(input, output); var i: integer; procedure hello; writeln('eimaste sti diadikasia'); writeln('i=', i); writeln('hello world!'); writeln('eimaste sto kurio programma'); i:= 10; writeln('kaloume th diadikasia gia na grapsoume i=10 kai Hello world!'); hello; writeln('xanagurisame sto kurio programma'); readln; end. Τα αποτελέσματα εκτέλεσης του προγράμματος Eimaste sto kurio programma Kaloume th diadikasia gia na grapsoume i=10 kai Hello world! Eimaste sti diadikasia i=10 Hello world! Xanagurisame sto kurio programma

program greetings(input, output); var i: integer; procedure hello;... writeln('i=', i);... end; writeln('eimaste sto kurio programma'); i:= 10; writeln('kaloume th diadikasia gia na grapsoume i=10 kai Hello world!'); hello; writeln('xanagurisame sto kurio programma'); readln; end.

Τι κάνει το παρακάτω πρόγραμμα; program kurio_programma(input, output); var x, y: integer; procedure diadikasia_ipologismwn; writeln('eimaste sti diadikasia'); x:=y+10; y:=x+y; writeln('x=', x, ' y=', y); writeln('eimaste sto kurio programma'); x:= 10; y:= 20; writeln('x=', x, ' y=', y); writeln('kaloume th diadikasia '); diadikasia_ipologismwn; writeln('xanagurisame sto kurio programma'); readln; end. Τα αποτελέσματα εκτέλεσης του προγράμματος Eimaste sto kurio programma x= 10 y= 20 Kaloume th diadikasia Eimaste sti diadikasia x= 30 y= 50 Xanagurisame sto kurio programma

program vathmologia(input, output); var i, athroisma, vathmos: integer; mesos: real; procedure mesos_oros; athroisma:=0; writeln('dwse vathmous mathimatwn'); for i:= 1 to 5 do readln(vathmos); athroisma := athroisma+vathmos; mesos:= athroisma/5; mesos_oros; writeln('mesos oros = ', mesos); readln; end. Τα αποτελέσματα εκτέλεσης του προγράμματος Dwse vathmous mathimatwn 3 7 10 5 5 Mesos oros = 6.000...0Ε+000 (δηλαδή = 6)

Τοπικές μεταβλητές (local variables) είναι οι μεταβλητές του υποπρογράμματος. Τις μεταβλητές αυτές δεν τις βλέπει το κύριο πρόγραμμα. Επομένως, οι τιμές των μεταβλητών αυτών αλλάζουν μόνο στο υποπρόγραμμα. program mesos_oros_vathmologias(input, output); (* όλες οι παρακάτω μεταβλητές είναι καθολικές - global *) var am: integer; mesos: real; procedure mesos_oros; (* όλες αυτές οι μεταβλητές είναι τοπικές- local *) var i, athroisma, vathmos: integer; end; Begin... mesos_oros; end.

program mesos_oros_vathmologias(input, output); var am: integer; mesos: real; procedure mesos_oros; var i, athroisma, vathmos: integer; athroisma:=0; writeln('dwse vathmous mathimatwn'); for i:= 1 to 5 do readln(vathmos); athroisma := athroisma+vathmos; mesos:= athroisma/5; writeln('grapse AM spoudasth.'); readln(am); writeln('am=',am); mesos_oros; writeln('mesos oros = ', mesos); readln; end. Ο σπουδαστής γράφει τον αριθμό μητρώου του (ΑΜ) και μετά βαθμούς πέντε μαθημάτων του. Το πρόγραμμα υπολογίζει το μέσο όρο των μαθημάτων.

program mesos_oros_vathmologia(input, output); var am: integer; mesos: real; procedure mesos_oros; var i, athroisma, vathmos: integer; athroisma:=0; writeln('dwse vathmous mathimatwn'); for i:= 1 to 5 do readln(vathmos); athroisma := athroisma+vathmos; end; mesos:= athroisma/5; end; writeln('to programma tha stamathsei an dwseis AM=99999.'); writeln('grapse AM spoudasth.'); readln(am); while am <> 99999 do writeln('am=',am); mesos_oros; writeln('mesos oros = ', mesos); writeln('grapse AM spoudasth.'); readln(am); end; readln end. Το πρόγραμμα διαβάζει κάθε φορά αριθμό μητρώο (ΑΜ) σπουδαστή και μετά βαθμούς πέντε μαθημάτων του. Το πρόγραμμα υπολογίζει το μέσο όρο των μαθημάτων. Μετά διαβάζει το επόμενο ΑΜ και συνεχίζει μέχρι να δώσουμε σαν αριθμό μητρώου 99999.

β) Παράμετροι τιμής (value parameters) Το κύριο πρόγραμμα όταν καλεί το υποπρόγραμμα του δίνει τιμές. Το υποπρόγραμμα χρησιμοποιεί τις τιμές για να εκτελέσει κάποιες εργασίες πχ υπολογισμούς, εκτυπώσεις. Το υποπρόγραμμα δεν επιστρέφει τιμές στο πρόγραμμα. Μετατρέπουμε το προηγούμενο πρόγραμμα mesos_oros_vathmologia ώστε το κύριο πρόγραμμα να στέλνει τον αριθμό μητρώου του σπουδαστή για να τυπωθεί. program mesos_oros_vathmologias(input, output); (* όλες οι παρακάτω μεταβλητές είναι καθολικές - global *) var am: integer; mesos: real; procedure mesos_oros(kwdikos_spoudasth:integer); (* όλες αυτές οι μεταβλητές είναι τοπικές- local *) var i, athroisma, vathmos: integer; end; Begin... mesos_oros(am); end.

program mesos_oros_vathmologia(input, output); var am: integer; mesos: real; procedure mesos_oros(kwdikos_spoudasth:integer); var i, athroisma, vathmos: integer; athroisma:=0; writeln('dwse vathmous mathimatwn'); for i:= 1 to 5 do readln(vathmos); athroisma := athroisma+vathmos; mesos:= athroisma/5; writeln('am=', kwdikos_spoudasth); writeln('to programma tha stamathsei an dwseis AM=99999.'); writeln('grapse AM spoudasth.'); readln(am); while am <> 99999 do mesos_oros(am); writeln('mesos oros = ', mesos); writeln('grapse AM spoudasth.'); readln(am); readln end.

γ) Παράμετροι μεταβλητών (variable parameters) Το κύριο πρόγραμμα όταν καλεί το υποπρόγραμμα του δίνει τα ονόματα καθολικών μεταβλητών που ήδη έχουν τιμή. Το υποπρόγραμμα αποθηκεύει τις τιμές που παίρνει σε δικές του τοπικές μεταβλητές για να εκτελέσει κάποιες εργασίες πχ υπολογισμούς, εκτυπώσεις. Το υποπρόγραμμα επιστρέφει τις τιμές που υπολόγισε στο κύριο πρόγραμμα. Διαφορά των περιπτώσεων β) και γ) για την κλήση program antallagh(input, output); var arithmos1, arithmos2: integer; procedure antallagh_timwn(var arit1, arit2:integer); var temp: integer;... end;... antallagh_timwn(arithmos1, arithmos2); writeln('arithmos1 = ', arithmos1); writeln('arithmos2 = ', arithmos2);... end; readln end. υποπρογράμματος από το κύριο. Στην περίπτωση κλήσης με τιμές το υποπρόγραμμα τις αξιοποιεί για να κάνει πράξεις χωρίς να επιστρέψει κάτι στο κύριο πρόγραμμα. Στην περίπτωση που καλείται το υποπρόγραμμα και του «περνάμε» μεταβλητές τότε το υποπρόγραμμα μπορεί να χρησιμοποιήσει τις τιμές, να κάνει υπολογισμούς και στη συνέχεια να στείλει τις τιμές που υπολόγισε στο κύριο πρόγραμμα.

program mesos_oros_vathmologia(input, output); var arithmos1, arithmos2, phliko, ypoloipo: integer; procedure ypologismos(arit1, arit2:integer); phliko:= arit1 div arit2; ypoloipo:= arit1 mod arit2; writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden i atnhtikos to programma tha stamathsei'); readln(arithmos1, arithmos2); while (arithmos1 > 0) and (arithmos2 > 0)do ypologismos(arithmos1, arithmos2); writeln('ypoloipo = ', ypoloipo); writeln('phliko = ', phliko); readln(arithmos1, arithmos2); readln end. Να γράψετε ένα πρόγραμμα που θα διαβάζει ζευγάρια θετικών ακέραιων αριθμών. Το πρόγραμμα θα καλεί μία διαδικασία (procedure) που θα υπολογίζει το υπόλοιπο και το πηλίκο της διαίρεσης των 2 αριθμών. Το πρόγραμμα θα σταματά αν δώσουμε μηδέν ή αρνητικό αριθμό.

Γράψτε πρόγραμμα που θα διαβάζει ζευγάρια δύο αριθμών. Το πρόγραμμα θα διαβάζει το ζευγάρι αριθμών και θα «αποθηκεύει» τους δύο αριθμούς του ζευγαριού σε δύο μεταβλητές με όνομα arithmos1, arithmos2. Μετά θα καλεί μία procedure που θα κάνει εναλλαγή των τιμών των μεταβλητών. Στη συνέχεια θα τυπώνει τις τιμές των μεταβλητών στο τετράγωνο. Το πρόγραμμα θα ρωτάει αν θέλουμε να συνεχίσουμε και αν ναι θα συνεχίζει να διαβάζει κ.λπ. program antallagh(input, output); var arithmos1, arithmos2: integer; ch: char; procedure antallagh_timwn(var arit1, arit2:integer); var temp: integer; temp:= arit1; arit1:= arit2; arit2:= temp; arit1:= arit1*arit1; arit2:= arit2*arit2; repeat writeln('dwse 2 akeraious aritmous.'); readln(arithmos1, arithmos2); antallagh_timwn(arithmos1, arithmos2); writeln('arithmos1 = ', arithmos1); writeln('arithmos2 = ', arithmos2); writeln('tha synexiseis; Y/N'); readln(ch) until (ch='n') or (ch= 'n'); readln end.

Συναρτήσεις (functions) Η συνάρτηση είναι ένα πρόγραμμα το οποίο καλείται από το κύριο πρόγραμμα για να κάνει κάποιους υπολογισμούς. Στο τέλος, επιστρέφει μία τιμή στο πρόγραμμα. program ypologismos_athroismatos_2_thetikwn(input, output); var arit1, arit2, athroisma: integer; function athroisma_akeraiwn(a1, a2: integer): integer; athroisma_akeraiwn:= a1+a2; end;... athroisma:= athroisma_akeraiwn(arit1, arit2);... readln end.

Υπολογισμός αθροίσματος ζευγαριών αριθμών program ypologismos_athroismatos_2_thetikwn(input, output); var arit1, arit2, athroisma: integer; function athroisma_akeraiwn(a1, a2: integer): integer; athroisma_akeraiwn:= a1+a2; writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden i atnhtikos to programma tha stamathsei'); readln(arit1, arit2); while (arit1 > 0) and (arit2 > 0)do athroisma:= athroisma_akeraiwn(arit1, arit2); writeln('athroisma = ', athroisma); readln(arit1, arit2); readln end.

Υπολογισμός μέσου όρου ζευγαριών αριθμών program ypologismos_mesou_orou_2_thetikwn(input, output); var arit1, arit2: integer; mesos: real; function mesos_oros_akeraiwn(a1, a2: integer): real; mesos_oros_akeraiwn:= a1+a2/2; writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden i atnhtikos to programma tha stamathsei'); readln(arit1, arit2); while (arit1 > 0) and (arit2 > 0)do mesos:= mesos_oros_akeraiwn(arit1, arit2); writeln('mesos oros = ', mesos); readln(arit1, arit2); readln end. Το ίδιο πρόγραμμα μπορεί να καλέσει, μία ή πολλές φορές, μια ή πολλές διαδικασίες ή συναρτήσεις.

program programma_me_function_kai_procedure(input, output); var arit1, arit2, min, max: integer; function vres_max(a1, a2: integer): integer; if a1 > a2 then vres_max:=a1 else vres_max:=a2; procedure vres_min(a1, a2: integer; var elaxisto: integer); if a1 > a2 then elaxisto:=a2 else elaxisto:=a1; writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden i atnhtikos to programma tha stamathsei'); readln(arit1, arit2); min:=0; while (arit1 > 0) and (arit2 > 0)do max:= vres_max(arit1, arit2); vres_min(arit1, arit2, min); writeln('elaxisto = ', min, ' megisto = ', max); readln(arit1, arit2); readln end. Να γράψετε ένα πρόγραμμα που θα διαβάζει ζευγάρια θετικών ακεραίων. Στη συνέχεια θα χρησιμοποιεί μία συνάρτηση για να βρεί τον μεγαλύτερο από αυτούς. Μετά θα χρησιμοποιεί μία διαδικασία για να βρεί το μικρότερο από αυτούς.

program programma_me_function_kai_procedure(input, output); var arit1, arit2, min, max: integer; function vres_max(a1, a2: integer): integer; if a1 > a2 then vres_max:=a1 else vres_max:=a2; procedure vres_min(a1, a2: integer; var elaxisto: integer); if a1 > a2 then elaxisto:=a2 else elaxisto:=a1; procedure vres_min_max(n1, n2, megisto, elax: integer); writeln('vriskesai stin procedure vres_min_max'); megisto:= vres_max(n1, n2); vres_min(n1, n2, elax); writeln('kalesses function & procedure kai sou gyrisan times'); writeln('megisto = ', megisto,' elaxisto = ', elax); writeln('dwse 2 akeraious aritmous.'); writeln('an kapoios einai mhden i atnhtikos to programma tha stamathsei'); readln(arit1, arit2); min:=0; max:=0; while (arit1 > 0) and (arit2 > 0)do vres_min_max(arit1, arit2, max, min); readln(arit1, arit2); readln end.

Αναδρομικές διαδικασίες και συναρτήσεις program paradeigma_anadromis(input, output); var a: integer; procedure antistrofi_arithmou(n: integer); write(n:3); If n < a then antistrofi_arithmou (n+1); write(n:3); repeat writeln('dwse thetiko akeraio'); writeln('an dwseis mhden i atnhtiko to programma tha stamathsei'); readln(a); until a>=1; antistrofi_arithmou(1); readln end. Dwse thetiko akeraio An dwseis mhden i atnhtiko to programma tha stamathsei 7 1 2 3 4 5 6 7 7 6 5 4 3 2 1

Να δούμε πως εκτελείται ακριβώς η αναδρομική διαδικασία. Έστω ότι θα δώσουμε α=3 και περιμένουμε να δείξει: 123321. Το πρόγραμμα με την εντολή antistrofi_arithmou(1); καλεί την αναδρομική διαδικασία. Program paradeigma_anadromis(input, output); var a: integer; procedure antistrofi_arithmou(n: integer); write(n:3); (* n=1, άρα γράφει 1 *) If n < a then (* n < a άρα καλείται η διαδικασία *) antistrofi_arithmou (n+1); (* n+1=2 *) write(n:3); (* Αυτή η εντολή θα εκτελεστεί αργότερα όταν επιστρέψουμε από τη διαδικασία και θα γράψει 1 *) end; repeat writeln('dwse thetiko akeraio'); writeln('an dwseis mhden i atnhtiko to programma tha stamathsei'); readln(a); (* a=3 *) until a>=1; antistrofi_arithmou(1); readln end.

procedure antistrofi_arithmou(n: integer); write(n:3); (* n=1 *) If n < a then (* n < a άρα καλείται η διαδικασία *) antistrofi_arithmou (n+1); write(n:3); (* Αυτή η εντολή θα εκτελεστεί αργότερα όταν επιστρέψουμε από τη διαδικασία και επειδή n=1 θα δείξει 1 *) end; procedure antistrofi_arithmou(n: integer); write(n:3); (* n=n+1=2, γράφει 2 *) If n < a then (* n=2 < a=3 άρα καλείται πάλι η διαδικασία *) antistrofi_arithmou (n+1); write(n:3); (* Αυτή η εντολή θα εκτελεστεί αργότερα όταν επιστρέψουμε από τη διαδικασία και επειδή n=2 θα δείξει 2 *) end;

procedure antistrofi_arithmou(n: integer); write(n:3); (* n=1 *) If n < a then (* n < a άρα καλείται η διαδικασία *) antistrofi_arithmou (n+1); write(n:3); (* Αυτή η εντολή θα εκτελεστεί αργότερα όταν επιστρέψουμε από τη διαδικασία και επειδή n=1 θα δείξει 1 *) end; procedure antistrofi_arithmou(n: integer); write(n:3); (* n=2 *) If n < a then (* n=2 < a=3 άρα καλείται πάλι η διαδικασία *) antistrofi_arithmou (n+1); write(n:3); (* Αυτή η εντολή θα εκτελεστεί αργότερα όταν επιστρέψουμε από τη διαδικασία και επειδή n=2 θα δείξει 2 *) end; procedure antistrofi_arithmou(n: integer); write(n:3); (* n=n+1=3, γράφει 3 *) If n < a then (* n=3 = a=3 άρα δεν καλείται πάλι η διαδικασία *) antistrofi_arithmou (n+1); write(n:3); (* Αυτή η εντολή θα εκτελεστεί και επειδή n=3 θα δείξει 3 *) end; Έως τώρα έχει γράψει 1233 Μετά θα γυρίσει και θα γράψει 2. Τέλος, θα πάει στην αρχική κλήση και θα γράψει το 1.

Υπολογισμός Ν!=1*2*3*...Ν program ypologismos_paragontikou(input, output); var n, p: integer; ch: char; function paragontiko(k: integer): integer; If k = 0 then paragontiko:= 1 else paragontiko:= k*paragontiko(k-1); repeat repeat writeln('dwse mh arnhtiko akeraio mikrotero h iso tou 10'); readln(n); until (n >= 0) and (n <= 10); p:= paragontiko(n); writeln(n, '!=', p); writeln('thes na synexiseis; Y/N'); readln(ch); until (ch='n') or (ch='n'); readln end.

n=3 p=paragontiko(3) function paragontiko(k: integer): integer; If k = 0 then paragontiko:= 1 else paragontiko:= k*paragontiko(k-1); end; k=3 paragontiko:= 3*paragontiko(2) function paragontiko(k: integer): integer; If k = 0 then paragontiko:= 1 else paragontiko:= k*paragontiko(k-1); end; k=2 paragontiko:= 2*paragontiko(1) function paragontiko(k: integer): integer; If k = 0 then paragontiko:= 1 else paragontiko:= k*paragontiko(k-1); end; k=1 paragontiko:= 1*paragontiko(0) function paragontiko(k: integer): integer; If k = 0 then paragontiko:= 1 else paragontiko:= k*paragontiko(k-1); end; k=0 paragontiko:= 1

n=3 p=paragontiko(3) paragontiko:=1 paragontiko:=1*1 paragontiko:=1*1*2 paragontiko:=1*1*2*3 k=3 paragontiko:= 3*paragontiko(2) k=2 paragontiko:= 2*paragontiko(1) k=1 paragontiko:= 1*paragontiko(0) k=0 paragontiko:= 1

Παραδείγματα χρήσης Πινάκων: Να γραφτεί πρόγραμμα που θα διαβάζει τους βαθμούς του σπουδαστή σε πέντε μαθήματα και θα εμφανίζει το μέσο όρο. Array a Βαθμοί σπουδαστή a[1] 1 a[2] 2 a[3] 3 a[4] 4 a[5] 5

Παραδείγματα χρήσης Πινάκων: Να γραφτεί πρόγραμμα που θα διαβάζει τους βαθμούς του σπουδαστή σε πέντε μαθήματα και θα εμφανίζει το μέσο όρο. program mesos_oros_5_mathimatwn(input, output); var a: array[1..5] of real; k: integer; sum, mesos: real; writeln('dwse vathmous 5 mathimatwn'); sum:=0.0; for k:=1 to 5 do readln(a[k]); sum:= sum+a[k]; mesos:= sum/5; for k:=1 to 5 do writeln('a[', k, ']=', a[k]); writeln('athroisma=', sum, ' mesos oros=', mesos); readln end. Dwse vathmous 5 mathimatwn 1 2 3 4 5 α[1]=1.000000000000000e+000 α[2]=2.000000000000000e+000 α[3]=3.000000000000000e+000 α[4]=4.000000000000000e+000 α[5]=5.000000000000000e+000 αthroisma=1.500000000000000e+001 mesos oros=3.000000000000000e+000

Να γραφτεί πρόγραμμα που θα διαβάζει τα αντίστοιχα στοιχεία δύο πινάκων, θα τα προσθέτει και θα βάζει το αποτέλεσμα σε τρίτο πίνακα. Όλοι οι πίνακες είναι μονοδιάστατοι και έχουν πέντε στοιχεία. Array a Array b Array c a[1] b[1] c[1]=a[1]+b[1] a[2] + b[2] = c[2]=a[2]+b[2] a[3] b[3] c[3]=a[3]+b[3] a[4] b[4] c[4]=a[4]+b[4] a[5] b[5] c[5]=a[5]+b[5]

Να γραφτεί πρόγραμμα που θα διαβάζει τα αντίστοιχα στοιχεία δύο πινάκων, θα τα προσθέτει και θα βάζει το αποτέλεσμα σε τρίτο πίνακα. Όλοι οι πίνακες είναι μονοδιάστατοι και έχουν πέντε στοιχεία. program prosthesh_pinakwn(input, output); var a, b, c: array[1..5] of real; k: integer; writeln('dwse stoixeia prwtou pinaka'); for k:=1 to 5 do readln(a[k]); writeln('dwse stoixeia defterou pinaka'); for k:=1 to 5 do readln(b[k]); writeln('ypologizw ta stoixeia tou tritou pinaka'); for k:=1 to 5 do c[k]:=a[k]+b[k]; writeln('deixnw ta stoixeia'); for k:=1 to 5 do writeln('c[', k, ']=', a[k], '+', b[k], '=', c[k]); readln end.

Ερωτήσεις