Introduction to Programming
Diomidis Spinellis
Department of Management Science and Technology
Athens University of Economics and Business
Athens, Greece
dds@aueb.gr
Υλικό και λογισμικό
- Υλικό (hardware) καλούμε τα φυσικά στοιχεία του
υπολογιστή.
- Λογισμικό (software) καλούμε το σύνολο των προγραμμάτων
που χρησιμοποιεί ο υπολογιστής.
- Τα προγράμματα είναι αποθηκευμένες οδηγίες που εκτελούνται από το
υλικό.
Ιστορική ανασκόπηση
- Προγραμματισμός με διακόπτες
- Γλώσσα μηχανής
- Συμβολική γλώσσα
- Fortran
- Algol, C, Pascal, Modula-2
- Lisp, Simula, Prolog, ML
- Smalltalk, C++, Java
- Visual Basic, TCL/TK, Perl
Η διεργασία του προγραμματισμού
- Προσδιορισμός απαιτήσεων
- Ανάλυση / σχεδίαση
- Συγγραφή σε ψευδοκώδικα
- Συγγραφή στη γλώσσα προγραμματισμού
- Μεταγλώττιση
- Εκτέλεση
- Έλεγχος / επαλήθευση
- Αποσφαλμάτωση
Το περιβάλλον της Visual Basic
Το περιβάλλον υλοποίησης της Visual Basic στο Excel έχει την παρακάτω μορφή:
- Πάνω δεξιά γράφεται ο κώδικας της εφαρμογής
- Άνω αριστερά μπορεί κανείς να επιλέξει τα στοιχεία και τα αρθρώματα
της εφαρμογής.
- Κάτω αριστερά μπορεί κανείς να αλλάξει τις ιδιότητες του στοιχείου που
έχει επιλέξει
- Με την πάνω γραμμή εργαλείων μπορεί κανείς μεταξύ άλλων να
ξεκινήσει και να σταματήσει την εφαρμογή.
Πως γράφουμε απλά προγράμματα
- Στο πρόγραμμα Excel τα προγράμματα συσχετίζονται με
μακροεντολές (macros):
σύνθετες εντολές που μπορούμε να εκτελέσουμε με απλό τρόπο.
- Από την επιλογή Tools - Macro - Macros μπορούμε να δώσουμε όνομα
στη διαδικασία που θα απαρτήσει το πρόγραμμά μας.
- Με την εντολή Create δημιουργούμε τη νέα διαδικασία,
μέσα στην οποία μπορούμε να γράψουμε εντολές
- Για να εκτελέσουμε τη διαδικασία πατάμε F5 στο περιβάλλον του
προγραμματισμού, ή συσχετίζουμε τη διαδικασία μας με κάποιο πλήκτρο.
Πως το Excel μπορεί να γράψει προγράμματα για εμάς
Το πρώτο μου πρόγραμμα
Το πρώτο πρόγραμμα έχει ως στόχο να εμφανίσει στην οθόνη το μήνυμα "hello, world".
Έχει την παρακάτω μορφή:
Sub main()
MsgBox "hello, world"
End Sub
Για να το εκτελέσουμε, πατάμε το πλήκτρο F5 και, αν δεν έχουμε κάνει
κάποιο λάθος, θα δούμε στην οθόνη μας το παρακάτω αποτέλεσμα:
Μορφή του προγράμματος
- Η γραμμή "Sub Main" ορίζει μια διαδικασία (procedure),
στη δική μας περίπτωση το σημείο απ' όπου ξεκινάει το πρόγραμμα.
- MsgBox
- Το κείμενο μέσα στα εισαγωγικά είναι μια
συμβολοσειρά (string).
- End Sub
- Κάθε γραμμή περιέχει μια εντολή
- Μπορούμε να προσθέσουμε δικά μας
σχόλια (comments) αν αρχίσουμε ή συνεχίσουμε μια γραμμή με μονά
εισαγωγικά.
Σταθερές
- Η συμβολοσειρά "hello, world" την
οποία είδαμε στην προηγούμενη ενότητα είναι μια
σταθερά (constant) της Visual Basic.
- Οι σταθερές αυτές χρησιμοποιούνται συχνά για να παραστήσουν μηνύματα
προς το χρήστη (π.χ. "Παρακαλώ βάλτε την κάρτα σας στην υποδοχή") ή
και μεταξύ υπολογιστών (π.χ. "RCPT TO: dspin@aegean.gr").
- Ένα άλλο είδος σταθερών είναι αυτές που παριστάνουν αριθμητικές
τιμές (π.χ. 42 ή 3.1415927).
- Στη Visual Basic ξεχωρίζουμε της ακέραιες (integer)
σταθερές (π.χ. 42, 123456, -3) και τις σταθερές που παριστάνουν
αριθμούς κινητής υποδιαστολής (floating point numbers)
(π.χ. 3.1415827, -2.0, 6.023e-23).
Εκτύπωση τιμών
Απλές πράξεις
Οι αριθμητικές τιμές της Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω τελεστών (operators):
Πράξη | Τελεστής της Visual Basic |
Πρόσθεση | + |
Αφαίρεση | - |
Πολλαπλασιασμός | * |
Διαίρεση | / |
Υπόλοιπο ακέραιας διαίρεσης | mod |
Ύψωση σε δύναμη | ^ |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις ανάμεσα
στον τελεστή ^, μετά ανάμεσα στους τελεστές * / mod και
μετά οι πράξεις ανάμεσα στους τελεστές + -.
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
Παραδείγματα
- MsgBox "ένα συν ένα = " + Str(1 + 1)
- MsgBox "Το εμβαδό του δωματίου είναι " + Str(3 * 5) + " τετραγωνικά μέτρα."
- MsgBox Str(36.7) + " βαθμοί Celsius = " + Str(32 + 9.0 / 5.0 * 36.7) + " βαθμοί Fahrenheit."
- MsgBox Str(1 + 2 * 3) 'Τυπώνει 7
- MsgBox Str((1 + 2) * 3) ' Τυπώνει 9
Μεταβλητές
- Οι αριθμητικές τιμές μπορούν να αποθηκευτούν σε
μεταβλητές (variables)
- Το όνομα μιας μεταβλητής πρέπει να αρχίζει με έναν λατινικό αλφαβητικό
χαρακτήρα και να ακολουθείται από λατινικού αλφαβητικούς
χαρακτήρες ή/και ψηφία.
Παράδειγμα: Temperature, X1, Y1, X2, Y2, Total
- Τα ονόματα των μεταβλητών δεν πρέπει να ταυτίζονται με
δεσμευμένες λέξεις (reserved words)
της Visual Basic (Sub, MsgBox, End, κ.λπ.).
- Ο ορισμός τους γίνεται γράφοντας τη λέξη Dim,
το όνομα της μεταβλητής και
τον τύπο της μεταβλητής (integer για ακέραιες τιμές,
double για τιμές κινητής υποδιαστολής,
string για συμβολοσειρές).
- Μπορούμε να ορίσουμε πολλές μεταβλητές ίδιου τύπου χωρίζοντάς τις
με ",".
Παράδειγμα:
Dim Faces as Integer
Dim X As Double, Y As Double
- Για να δώσουμε μια τιμή σε μια μεταβλητή χρησιμοποιούμε τη
σύνταξη:
μεταβλητή = τιμή
για παράδειγμα:
Faces = 2 * 8 + 12
- Στη συνέχεια μπορούμε να χρησιμοποιούμε την τιμή της μεταβλητής
όπως και οποιοδήποτε άλλη σταθερά. Παράδειγμα:
Sub Main()
Dim Faces As Integer
Dim Len As Double
Len = 12.5;
Faces = 6;
MsgBox "Επιφάνεια = " + Str(Len * Len * Faces)
End Sub
Τελεστές σύγκρισης
Οι αριθμητικές τιμές της Visual Basic μπορούν να συγκριθούν με τη
χρήση των παρακάτω τελεστών:
Σύγκριση | Τελεστής της Visual Basic |
Ίσο | = |
Διάφορο | <> |
Μικρότερο | < |
Μεγαλύτερο | > |
Μικρότερο ή ίσο | <= |
Μεγαλύτερο ή ίσο | >= |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις με την
παρακάτω σειρά:
- ^
- * /
- mod
- + -
- = <>. < > <= >=
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
- Το αποτέλεσμα της κάθε σύγκρισης είναι
αληθές (True) αν το αποτέλεσμα της σύγκρισης είναι
αληθές και
ψευδές (False) αν το αποτέλεσμα της σύγκρισης είναι
ψευδές.
- Οι τιμές True και False είναι λογικές σταθερές.
Παραδείγματα
MsgBox 1 + 1 = 2 ' Εμφανίζει True
MsgBox 1 > 2 ' Εμφανίζει False
MsgBox 5 <> 5 ' Εμφανίζει False
MsgBox 1 <= 5 ' Εμφανίζει True
MsgBox 1 <= 1 ' Εμφανίζει True
MsgBox 1 <= 0 ' Εμφανίζει False
Βρόχοι με την εντολή do while
- Μπορούμε να επαναλάβουμε την εκτέλεση ορισμένων εντολών με τη
δομή ελέγχου (control structure) do while ... loop.
- Αυτή χρησιμοποιείται ως εξής:
do while συνθήκη
εντολή
εντολή
...
loop
- Οι εντολές που ακολουθούν το do while εκτελούνται όσο η συνθήκη είναι
αληθής.
Παράδειγμα (εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do While i < 5
MsgBox i
i = i + 1
Loop
End Sub
- Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το do while για πρώτη
φορά τότε οι εντολές που περιέχονται σε αυτό δε θα εκτελεστούν.
- Η δομή ελέγχου do while ... loop μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η MsgBox) δηλαδή ακόμα και μέσα σε μια άλλη
do while.
Το παρακάτω παράδειγμα εμφανίζει στην οθόνη την προπαίδεια των αριθμών
από το 2 μέχρι το 5.
Sub main()
Dim i As Integer
Dim j As Integer
i = 2
Do While i <= 5
j = i
Do While j <= 5
MsgBox Str(i) + " * " + Str(j) + " = " + Str(i * j)
j = j + 1
Loop
i = i + 1
Loop
End Sub
Η εντολή for
Λογικοί τελεστές
Τα λογικά αποτελέσματα στη Visual Basic μπορούν να συνδυαστούν με τη
χρήση των παρακάτω λογικών τελεστών:
- Τα αποτελέσματα χρήσης των τελεστών παριστάνονται από τους
παρακάτω πίνακες τιμών:
A | B | A And B | A Or B |
False | False | False | False |
False | True | False | True |
True | False | False | True |
True | True | True | True |
A | B | A Xor B | A Eqv B |
False | False | False | True |
False | True | True | False |
True | False | True | False |
True | True | False | True |
A | B | A Imp B |
False | False | True |
False | True | True |
True | False | False |
True | True | True |
A | Not A |
False | True |
True | False |
- Η προτεραιότητα υπολογισμού των λογικών τελεστών ορίζεται ως εξής:
- Not
- And
- Or
- Xor
- Eqv
- Imp
Παράδειγμα
Ο παρακάτω βρόχος μπορεί να αποτελεί τμήμα του προγράμματος
ελέγχου ενός τραπεζικού μηχανήματος αυτομάτων συναλλαγών:
Dim PIN As Integer
Dim Tries As Integer
Const CorrectPIN = 1234
Const MaxTries = 4
Tries = 0
Do
PIN = InputBox("Πληκτρολογήστε τον κωδικό εισόδου")
Tries = Tries + 1
Loop Until PIN = CorrectPIN Or Tries = MaxTries
Με τον προσδιορισμό Const μπορούμε να αντιστοιχούμε ονόματα σε
σταθερές τιμές.
Με τον τρόπο αυτό το πρόγραμμα διαβάζεται και συντηρείται ευκολότερα.
Λογικές τιμές
Η εντολή if-else
- Μπορούμε να εκτελέσουμε ορισμένες εντολές υπό συνθήκη με τη
δομή ελέγχου If.
- Αυτή χρησιμοποιείται ως εξής:
If συνθήκη Then
εντολή
...
End If
- Οι εντολή που ακολουθεί το If εκτελείται αν η συνθήκη είναι
αληθής.
-
Παράδειγμα (υπολογίζει και τυπώνει την απόλυτη τιμή των αριθμών που διαβάζει
μέχρι να συναντήσει το 0):
Sub main()
Dim Num As Integer
Do
Num = InputBox("Please enter a number")
If Num < 0 Then
Num = -Num
End If
MsgBox "The absolute value is " + Str(Num)
Loop Until Num = 0
End Sub
- Η δομή ελέγχου If μπορεί να ακολουθηθεί και από τη δομή Else
για να προσδιορίσουμε εντολές που θα εκτελεστούν αν η συνθήκη δεν
ισχύει.
Παράδειγμα:
If grade >= 5 Then
MsgBox "Περνάει"
Else
MsgBox "Απορρίπτεται"
End If
- Μπορούμε να συνδυάσουμε συνεχόμενα Else If για πολλαπλούς
ελέγχους. Παράδειγμα:
If grade >= 9 Then
MsgBox "'Αριστα!"
ElseIf grade >= 7 Then
MsgBox "Λίαν καλώς"
ElseIf grade >= 5 Then
MsgBox "Καλώς"
Else
MsgBox "Κακώς"
End If
Ο τύπος της συμβολοσειράς
- Μπορούμε να ορίσουμε μεταβλητές με τύπο
συμβολοσειρά
με τον τύπο string:
Dim Name as String
- Οι μεταβλητές αυτές μπορούν να αποθηκεύσουν μεταβλητό αριθμό από
χαρακτήρες.
- Οι σταθερές τύπου συμβολοσειράς γράφονται με τη χρήση των διπλών εισαγωγικών:
Dim Name as String
Name = "Γιώργος"
- Αν θέλουμε να παραστήσουμε εισαγωγικά σε μια σταθερή συμβολοσειρά τα
γράφουμε με δύο διπλά εισαγωγικά:
Dim Msg as String
Msg = "Πατήστε ""Enter"" για να συνεχίσετε"
Συναρτήσεις για συμβολοσειρές
Στη Visual Basic μπορούμε να χειριστούμε συμβολοσειρές με τη χρήση
διάφορων συναρτήσεων
(έχουμε δει πως μπορούμε να ενώσουμε δύο συμβολοσειρές με τον τελεστή +).
Οι πιο σημαντικές συναρτήσεις είναι οι παρακάτω:
- Len(string)
- Επιστρέφει το μήκος μιας συμβολοσειράς
- Left(string, length)
- Επιστρέφει length χαραρακτήρες από αριστερά
- Right(string, length)
- Επιστρέφει length χαραρακτήρες από δεξιά
- Mid(string, start[, length])
- Επιστρέφει length χαρακτήρες από τη
θέση start (ή όλη τη συμβολοσειρά από τη θέση start και μετά).
- LTrim(string)
- Αφαιρεί κενά στο αριστερό μέρος της συμβολοσειράς
- RTrim(string)
- Αφαιρεί κενά στο δεξί μέρος της συμβολοσειράς
- Trim(string)
- Αφαιρεί κενά αριστερά και δεξιά της συμβολοσειράς
Τέλος, η εντολή
Mid(stringvar, start[, length]) = string
επιστρέπει την αλλαγή ενός μέρους μιας συμβολοσειράς (από τη θέση start
και για length χαρακτήρες) με μια άλλη.
Αριθμητικοί τύποι
Η Visual Basic παρέχει αρκετούς διαφορετικούς τύπους για το χειρισμό αριθμών.
Είναι σημαντικό να επιλέξουμε τον κατάλληλο τύπο σύμφωνα με τις ανάγκες μας.
Ο παρακάτω πίνακας μπορεί να μας οδηγήσει στην κατάλληλη επιλογή:
Integer | -32,768 to 32,767 |
Long (long integer) | -2,147,483,648 to 2,147,483,647 |
Single (single-precision floating-point) | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double (double-precision floating-point) | -1.79769313486232E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
Currency (scaled integer) | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 |
Αξίζει να προσέξουμε τα παρακάτω:
Μαθηματικές συναρτήσεις
Οι βασικές μαθηματικές συναρτήσεις της Visual Basic είναι οι παρακάτω:
- Abs
- Απόλυτη τιμή
- Sgn
- Πρόσημο
- Fix
- Αφαίρεση του δεκαδικού τμήματος (στρογγύλευση προς το 0)
- Int
- Στρογγύλευση προς τα κάτω
- Sqr
- Τετραγωνική ρίζα
- Log
- Φυσικός λογάριθμος
- Exp
- e υψωμένο σε δύναμη
- Rnd
- Ψευδοτυχαίος αριθμός 0 <= χ < 1.
Αρνητικό όρισμα θέτει νέα αρχή για παραγωγή αριθμών, θετικό επιστρέφει
τον επόμενο αριθμό της σειράς.
- Sin
- Ημίτονο
- Cos
- Συνημίτονο
- Tan
- Εφαπτομένη
- Atn
- Αντίστροφη εφαπτομένη
Λογιστικές συναρτήσεις
Η Visual Basic παρέχει μια σειρά από συναρτήσεις για υπολογισμούς
λογιστικής φύσης σύμφωνα με τον παρακάτω πίνακα:
Υπολογισμός | Συνάρτηση |
Calculate the future value of an annuity based on periodic, fixed payments and a fixed interest rate.
|
FV(rate, nper, pmt[, pv[, type]])
|
Calculate the depreciation of an asset for a specific time period using the double-declining balance method or some other method you specify.
|
DDB(cost, salvage, life, period[, factor])
|
Calculate the interest payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
IPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the internal rate of return for a series of periodic cash flows (payments and receipts).
|
IRR(values()[, guess])
|
Calculate the modified internal rate of return for a series of periodic cash flows (payments and receipts).
|
MIRR(values(), finance_rate, reinvest_rate)
|
Calculate the number of periods for an annuity based on periodic, fixed payments and a fixed interest rate.
|
NPer(rate, pmt, pv[, fv[, type]])
|
Calculate the net present value of an investment based on a series of periodic cash flows (payments and receipts) and a discount rate.
|
NPV(rate, values())
|
Calculate the payment for an annuity based on periodic, fixed payments and a fixed interest rate.
|
Pmt(rate, nper, pv[, fv[, type]])
|
Calculate the principal payment for a given period of an annuity based on periodic, fixed payments and a fixed interest rate.
|
PPmt(rate, per, nper, pv[, fv[, type]])
|
Calculate the present value of an annuity based on periodic, fixed payments to be paid in the future and a fixed interest rate.
|
PV(rate, nper, pmt[, fv[, type]])
|
Calculate the interest rate per period for an annuity.
|
Rate(nper, pmt, pv[, fv[, type[, guess]]])
|
Calculate the straight-line depreciation of an asset for a single period.
|
SLN(cost, salvage, life)
|
Calculate the sum-of-years' digits depreciation of an asset for a specified period.
|
SYD(cost, salvage, life, period)
|
Μετατροπή αριθμών σε συμβολοσειρές
Η συνάρτηση Format επιτρέπει τον ακριβή καθορισμό της μετατροπής
αριθμητικών τιμών σε συμβολοσειρές.
Η σύνταξή της είναι:
Format(έκφραση[, εμφάνιση])
όπου η "εμφάνιση" είναι μια συμβολοσειρά που καθορίζει θα μετατραπεί η
αντίστοιχη έκφραση σύμφωνα με τους παρακάτω κανόνες:
- 0
- Εμφανίζει ένα ψηφίο ή 0
- #
- Εμφανίζει ένα ψηφίο ή κενό
- .
- Καθορίζει το σημείο εμφάνισης των δεκαδικών τιμών
- ,
- Καθορίζει το διαχωρισμό των χιλιάδων
- %
- Εμφανίζει το πηλίκο του αριθμού με το 100 ως ποσοστό
- E+
- Εμφανίζει τον αριθμό σε εκθετική μορφή με πρόσημο στους θετικούς εκθέτες
- E-
- Εμφανίζει τον αριθμό σε εκθετική μορφή χωρίς πρόσημο στους θετικούς εκθέτες
- "σύμβολα"
- Εμφανίζει τα σύμβολα μέσα στα εισαγωγικά
Παράδειγμα:
Sub main()
Dim x As Currency
x = 1500000
MsgBox ("Κερδίσατε " + Format(x, "0,0.00 ""EUR""!"))
End Sub
Εμφανίζει:
Ορισμός διαδικασίας
- Για να οργανώσουμε καλύτερα τον κώδικα που γράφουμε, αλλά και
για να μπορούμε να χρησιμοποιούμε τα ίδια τμήματα του κώδικα
πολλές φορές μπορούμε να ορίσουμε ένα σύνολο από εντολές ως
μια διαδικασία (procedure)
(στη Visual Basic υπορουτίνα (subroutine)).
- Μπορούμε να ορίσουμε δικές μας διαδικασίες με τον εξής τρόπο:
Sub όνομα διαδικασίας()
δηλώσεις τοπικών μεταβλητών;
εντολές
end Sub
- Στο πρόγραμμα η κλήση (call) της διαδικασίας
γίνεται κάθε φορά που εμφανίζεται μια εντολή με το όνομα της διαδικασίας
που ορίσαμε.
Στο σημείο αυτό η εκτέλεση συνεχίζει με τις εντολές της διαδικασίας,
και, όταν αυτές ολοκληρωθούν, η εκτέλεση
επιστρέφει στο σημείο απ' όπου ξεκίνησε.
-
Παράδειγμα:
Sub main()
hello
MsgBox "Back from hello"
hello
End Sub
' Display hello world
Sub hello()
MsgBox "Hello, world"
End Sub
-
Κάθε διαδικασία έχει ένα όνομα.
Στο πρόγραμμά μας χρησιμοποιούμε το όνομα της διαδικασίας όταν θέλουμε
να εκτελεστεί ο αντίστοιχος κώδικας.
- Η εντολή exit sub μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της διαδικασίας.
Στο σημείο εκείνο σταματά η εκτέλεση της διαδικασίας και ο
έλεγχος ροής (control flow) του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
- Η διαδικασία Main είναι αυτή από την οποία ξεκινά η εκτέλεση του
προγράμματος.
Ορίσματα
- Μπορούμε να μεταβάλουμε τη λειτουργικότητα μιας διαδικασίας με
τη χρήση ορισμάτων.
Κάθε όρισμα (argument) μεταφέρεται από το σημείο
που καλούμε τη διαδικασία μέσα στη διαδικασία μέσω μιας ειδικής μεταβλητής.
- Τα ορίσματα της διαδικασίας είναι μια σειρά από ονόματα και τύπους
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια διαδικασία οι μεταβλητές που ορίστηκαν ως όρισμα
παίρνουν τις τιμές που δόθηκαν κατά την κλήση.
- Παράδειγμα:
Sub main()
StrongMessage "Hello", 5, "*"
StrongMessage "world", 10, "!"
End Sub
' Display the message msg prefixed by n instances of the string s
Sub StrongMessage(msg As String, n As Integer, s As String)
Dim head As String
' Could use String(s, n) here
For i = 1 To n
head = head + s
Next i
MsgBox head + msg + head
End Sub
Ορισμός συνάρτησης
- Μπορούμε ακόμα να ορίσουμε δικές μας συναρτήσεις με τον εξής τρόπο:
Function όνομα συνάρτησης(δηλώσεις παραμέτρων) as τύπος αποτελέσματος
δηλώσεις τοπικών μεταβλητών;
εντολές
όνομα = τιμή
end Function
- Οι παράμετροι της συνάρτησης είναι μια σειρά από τύπους και ονόματα
μεταβλητών χωρισμένα με κόμμα.
- Όταν καλείται μια συνάρτηση οι μεταβλητές που ορίστηκαν ως παράμετροι
παίρνουν τις τιμές που δόθηκαν στο όρισμα κατά την κλήση.
- Για να θέσουμε την τιμή που επιστρέφει η συνάρτηση αναθέτουμε μια
τιμή στο όνομά της (δεν ορίζουμε αντίστοιχη μεταβλητή).
- Παράδειγμα:
Sub main()
MsgBox "64!=" + Str(factorial(45))
End Sub
' Return n!
Function factorial(n As Integer) As Double
Dim i As Integer
Dim r As Double ' result
r = 1
For i = 1 To n
r = r * i
Next i
factorial = r
End Function
- Η εντολή exit function μπορεί να εμφανιστεί σε οποιοδήποτε σημείο της συνάρτησης.
Στο σημείο εκείνο σταματά η εκτέλεση της συνάρτησης και ο
έλεγχος ροής του προγράμματος
συνεχίζει από το σημείο που κλήθηκε η συνάρτηση.
Στοιχεία αντικεμενοστρεφούς προγραμματισμού
- Κάθε οντότητα είναι ένα αντικείμενο (object).
- Υπολογισμοί γίνονται όταν ένα αντικείμενο στείλει ένα
μήνυμα (message) σε άλλο αντικείμενο
(ή - σύμφωνα με την επικρατέστερη ορολογία -
καλέσει μια μέθοδο (method) ενός άλλου αντικειμένου.)
Μια μέθοδος μπορεί να έχει ως όρισμα στοιχεία που είναι απαραίτητα
για την εκτέλεση του υπολογισμού.
- Κάθε αντικείμενο έχει τη δική του μνήμη για να αποθηκεύει την
κατάστασή του.
Οι μεταβλητές στις οποίες αποθηκεύεται η κατάσταση αυτή
καλούνται ιδιότητες (properties)
(ή μεταβλητές στιγμιότυπου (instance variables)).
- Κάθε αντικείμενο αποτελεί στιγμιότυπο (instance)
μιας κλάσης.
Η κλάση (class) είναι μια ομάδα από ομοειδή αντικείμενα.
- Η κλάση είναι ο χώρος στον οποίο ορίζεται η συμπεριφορά των αντικειμένων.
Όλα τα αντικείμενα μιας κλάσεις μοιράζονται την ίδια συμπεριφορά
(εκτελούν τις ίδιες μεθόδους).
- Οι κλάσεις μπορούν να οργανωθούν σε μια δενδρική δομή
που ορίζει κληρονομικότητα (inheritance).
Ιδιότητες και μέθοδοι που έχουν οριστεί σε μια μητρική κλάση
κληρονομούνται και είναι προσβάσιμες και από κάθε
υποκλάση (subclass) της.
Προγραμματισμός με αντικείμενα
Σύνδεση με το Excel
Η σύνδεση με το Excel μας επιτρέπει να δημιουργήσουμε αυτόματα
φύλλα εργασίας ή να διαβάσουμε υπάρχοντα.
Η πρόσβαση στο Excel γίνεται μέσα από το αντικείμενο Excel.Application
και τις κλάσεις που το αποτελούν.
Ο παρακάτω πίνακας των βασικών κλάσεων προέρχεται από την τεκμηρίωση
που παρέχει η Microsoft:
Στο παράδειγμα που ακολουθεί δημιουργούμε ένα νέο φύλλο εργασίας,
γεμίζουμε ορισμένα κελιά από έναν πίνακα και άλλα με τυχαίες
τιμές και δημιουργούμε ένα γράφημα από τις τιμές αυτές.
Sub main()
Dim xl As Excel.Application
Dim ws As Excel.Worksheet
Dim wb As Excel.Workbook
Dim regions(4, 1) As String
regions(0, 0) = "Europe"
regions(1, 0) = "Americas"
regions(2, 0) = "Asia"
regions(3, 0) = "Africa"
Set xl = New Excel.Application
xl.Visible = True
Set wb = xl.Workbooks.Add
Set ws = wb.Worksheets(1)
ws.Range("A2:A5") = regions
For i = 2 To 5
ws.Range("B" & Format(i)).Value = i * 110 * Rnd
Next i
Dim chart As Excel.chart
Dim rn As Range
Set rn = ws.Range("A1:B5")
Set chart = wb.Charts.Add
chart.ChartWizard rn, xl3DPie, 7, xlColumns, 1, 1, 1, "Sales by area", "Areas", "Sales"
End Sub
Χειρισμός χρόνου
Το παρακάτω παράδειγμα μας δείχνει πως μπορούμε με πρόγραμμα
να δημιουργήσουμε μια καθυστέριση ορισμένων δευτερολέπτων.
' Delay the specified number of seconds
Sub delay(t As Integer)
Dim i As Integer
For i = 1 To t
delayHalfSecond
Next i
End Sub
' Delay a period between (0-1) second
Sub delayHalfSecond()
Dim start As Date
start = Now
Do While Second(start) = Second(Now)
' Let the computer do something else
DoEvents
Loop
End Sub
Πρόσβαση στο πρόχειρο
Το πρόχειρο (clipboard) των Windows συχνά περιέχει
κείμενο το οποίο έχουμε αντιγράψει, αποκόψει ή θέλουμε να επικολήσουμε
σε άλλες εφαρμογές.
Μπορούμε να έχουμε πρόσβαση στο πρόχειρο με το
αντικείμενο (object) ClipBoard και τη
μέθοδο (method) GetText ως εξής:
Dim Result as String
Result = Clipbboard.GetText
Αντίστοιχα, μπορούμε να κάνουμε το πρόχειρο να περιέχει μια συμβολοσειρά
με τις μεθόδους Clear και SetText:
Clipboard.Clear
Clipboard.SetText("These are the new clipboard contents")
Βιβλιογραφία
- Michael Halvorson
Visual Basic 6 Βήμα προς βήμα.
Εκδόσεις Κλειδάριθμος, Αθήνα.
- David Boctor.
Microsoft Office 2000 Visual Basic Fundamentals.
Microsoft Press, Redmond, WA, USA, 1999.
- J. Glenn Brookshear.
Computer Science, pages 225–284, 319–358.
Addison-Wesley, 8th edition, 2004.
- Desmond Francis
D' Souza and Alan Cameron Wills.
Objects, Components, and Frameworks With UML : The Catalysis
Approach.
Addison-Wesley, 1998.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- Peter M. Maurer.
Components: What if they gave a revolution and nobody came.
IEEE Software, 33(6):28–34, June 2000.
- Urban Müller.
Brainf****: An
eight-instruction turing-complete programming language.
- Oscar Nierstrasz,
Simon Gibbs, and Dennis Tsichritzis.
Component-oriented software development.
Communications of the ACM, 35(9):160–165, September 1992.
- Diomidis Spinellis
and Konstantinos Raptis.
Component mining: A process and its pattern language (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/2000-IST-Components/html/comp.html).
Information and Software Technology, 42(9):609–617, June
2000.
- Diomidis Spinellis.
Explore, excogitate, exploit: Component mining (http://softlab.icsd.aegean.gr/~dspin/pubs/jrnl/1999-Computer-Components/html/comp.html).
IEEE Computer, 32(9):114–116, September 1999.
- Clemens Szyperski.
Component Software: Behind Object-Oriented Programming.
Addison-Wesley, 1998.
- Jeffrey M. Voas.
The challenges of using COTS software in component-based development.
Computer, 31(6):44–45, June 1998.
- Alan Cameron Wills.
Designing component
kits and architectures.
In L. Barroca, J. Hall, and P. Hall, editors, Software Architectures:
Advances and Applications. Springer Verlag, 1999.
Παράρτημα: Χαρακτηριστικές αλγοριθμικές γλώσσες
Σε μια αλγοριθμική (imperative) γλώσσα
το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να
εκτελέσει ο υπολογιστής.
- Fortran, Fortran 9X
- Cobol
- Algol-60
- Basic
- PL/I
- Pascal, Modula-2, Oberon
- C
- Ada
- Smalltalk
- C++
- Awk, Perl, Tcl/Tk
- Java
- Python
Παράρτημα: Χαρακτηριστικές δηλωτικές γλώσσες
Σε μια δηλωτική (declarative) γλώσσα
το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε
να επιλύσουμε.
Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου
ο οποίος χρησιμοποιώντας τη δομή που έχουμε ορίσει καταλήγει
στο επιθυμητό αποτέλεσμα.
Γλώσσες βασισμένες στη λογική
Γλώσσες βασισμένες σε συναρτήσεις
Παράρτημα: Βασικά γλωσσικά εργαλεία
- Προετοιμαστής/Διορθωτής (Editor)
- Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
- Προεπεξεργαστής (Preprocessor)
- Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς
συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα.
Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
- Συμβολομεταφραστής (Assembler)
- Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα
μηχανής.
- Μεταγλωττιστής (Compiler)
- Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
- Διερμηνευτής (Interpreter)
- Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
- Συνδέτης (Linker)
- Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά
σε ένα συνεχές πρόγραμμα.
- Φορτωτής (Loader)
- Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές
σε σχετικές θέσεις μνήμης.
Συνήθως τμήμα του λειτουργικού συστήματος.
- Αποσφαλματωτής (Debuger)
- Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την
εξέταση και αλλαγή μεταβλητών του
και γενικά ενέργειες που αποσκοπούν στην ανίχνευση
λαθών που μπορεί να περιέχει το πρόγραμμα.
- Διερμηνευτής (Interpreter)
- Εκτελεί απευθείας τις εντολές του προγράμματος χωρίς ενδιάμεσο στάδιο
μεταγλώττισης.
Παράρτημα: Είσοδος στοιχείων
Παράρτημα: Βρόχοι με την εντολή loop while
Παράρτημα: Προσδιορισμός της συνθήκης με τη χρήση της Until
- Μερικές φορές είναι πιο φυσικό να εκφράσουμε τη συνθήκη που
τερματίζει το βρόχο αντί για τη συνθήκη που πρέπει να είναι αληθής
για να εκτελείται ο βρόχος.
- Και οι δύο δομές ελέγχου που είδαμε μπορούν να διατυπωθούν με τη
χρήση του προσδιορισμού "Until συνθήκη" αντί για τον προσδιορισμό
"While συνθήκη".
- Έτσι, τα παραδείγματα που έχουμε δει μπορούν να γραφτούν και ως
εξής:
Παράδειγμα do while ... loop
(εμφανίζει στην οθόνη τους αριθμούς από το 0 μέχρι το 4):
Sub main()
Dim i As Integer
i = 0
Do Until i >= 5
MsgBox i
i = i + 1
Loop
End Sub
Παράδειγμα do ... loop while
(θέλουμε ο χρήστης να εισάγει έναν αριθμό μικρότερο του 10):
Sub main()
Dim Number As Integer
Do
Number = InputBox("Δώστε έναν αριθμό μικρότερο του 10")
Loop Until Number < 10
MsgBox "Δώσατε " + Str(Number)
End Sub
Παράρτημα: Έξοδος από το βρόχο
Παράρτημα: H εντολή select
- Η εντολή select μας επιτρέπει να κατευθύνουμε τη ροή του
προγράμματος προς μια συγκεκριμένη τιμή ανάλογα με την
τιμή μιας παράστασης.
- Συντάσσεται ως εξής:
Select Case παράσταση
Case λίστα τιμών1
εντολή1
εντολή1α
...
Case λίστα τιμών2
εντολή2
...
...
Case Else
εντολή ν
...
End Select
- Ανάλογα με ποια από τις τιμές ισούται η τιμή της παράστασης
εκτελούνται οι αντίστοιχες εντολές.
- Αν καμία από τις τιμές δεν ταυτίζεται με την τιμή της παράστασης
τότε εκτελείται η εντολή που ακολουθεί την Case Else (αν υπάρχει), αλλιώς
δεν εκτελείται καμία εντολή.
- Οι τιμές για κάθε case μπορεί να είναι
- μια έκφραση (π.χ. 42 ή i + 9),
- ο ορισμός μιας περιοχής με τη χρήση to (π.χ. 1 to 10)
- μια σύγκριση της τιμής της απόφασης με μια έκφραση με τη χρήση της
λέξης Is (π.χ. Is > 100)
- ή ένα σύνολο από από τα παραπάνω χωρισμένα με , (π.χ. 3 to 5, 50, 90, is > LastVal)
- Παράδειγμα:
Dim Number As Integer
Number = InputBox("Enter a Number")
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5.
MsgBox "Between 1 and 5"
Case 6, 7, 8 ' Number between 6 and 8.
MsgBox "Between 6 and 8"
Case Is > 8 And Number < 11 ' Number is 9 or 10.
MsgBox "Greater than 8"
Case Else ' Other values.
MsgBox "Not between 1 and 10"
End Select
Παράρτημα: Σύγκριση συμβολοσειρών
Με τον τελεστή Like μπορούμε να συγκρίνουμε αν μια συμβολοσειρά
μοιάζει με ένα συγκεκριμένο πρότυπο.
Τα πρότυπα καθορίζονται με τη χρήση των παρακάτω χαρακτήρων:
- ?
- Ταιριάζει με οποιοδήποτε ένα χαρακτήρα
- *
- Ταιριάζει με μηδέν ή περισσότερους χαρακτήρες
- #
- Ταιριάζει με οποιοδήποτε ψηφίο
- [λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα στη λίστα (π.χ. [aeiyuio])
- [!λίστα]
- Ταιριάζει με οποιοδήποτε χαρακτήρα δεν περιέχεται στη λίστα
Η λίστα μπορεί να περιέχει χαρακτήρες ή μια περιοχή χαρακτήρων με τη σύνταξη
χαρακτήρας-χαρακτήρας (π.χ. [A-Z].
Αν θέλουμε η λίστα να περιέχει το -, τότε αυτό πρέπει να εμφανίζεται πρώτο στη
λίστα.
Παράδειγμα (ο βρόχος ελέγχει αν ο ταχυδρομικός κώδικας είναι γραμμένος σωστά):
Sub main()
Dim PostCode As String
Dim CodeOk As Boolean
Do
PostCode = InputBox("Δώστε ταχυδρομικό κώδικα")
CodeOk = (PostCode Like "##[- ]###" Or PostCode Like "###[- ]##")
If Not CodeOk Then
MsgBox "Λάθος ταχυδρομικός κώδικας, δοκιμάστε ξανά."
End If
Loop Until CodeOk
End Sub