Introduction to Programming

Diomidis Spinellis
Department of Management Science and Technology
Athens University of Economics and Business
Athens, Greece
dds@aueb.gr

Υλικό και λογισμικό

Ιστορική ανασκόπηση

Η διεργασία του προγραμματισμού

Το περιβάλλον της Visual Basic

Το περιβάλλον υλοποίησης της Visual Basic στο Excel έχει την παρακάτω μορφή:

Πως γράφουμε απλά προγράμματα

Πως το Excel μπορεί να γράψει προγράμματα για εμάς

Το πρώτο μου πρόγραμμα

Το πρώτο πρόγραμμα έχει ως στόχο να εμφανίσει στην οθόνη το μήνυμα "hello, world". Έχει την παρακάτω μορφή:
Sub main()
    MsgBox "hello, world"
End Sub
Για να το εκτελέσουμε, πατάμε το πλήκτρο F5 και, αν δεν έχουμε κάνει κάποιο λάθος, θα δούμε στην οθόνη μας το παρακάτω αποτέλεσμα:

Μορφή του προγράμματος

Σταθερές

Εκτύπωση τιμών

Απλές πράξεις

Οι αριθμητικές τιμές της Visual Basic μπορούν να συνδυαστούν με τη χρήση των παρακάτω τελεστών (operators):
Πράξη Τελεστής της Visual Basic
Πρόσθεση +
Αφαίρεση -
Πολλαπλασιασμός *
Διαίρεση /
Υπόλοιπο ακέραιας διαίρεσης mod
Ύψωση σε δύναμη ^

Παραδείγματα

Μεταβλητές

Τελεστές σύγκρισης

Οι αριθμητικές τιμές της Visual Basic μπορούν να συγκριθούν με τη χρήση των παρακάτω τελεστών:
Σύγκριση Τελεστής της Visual Basic
Ίσο =
Διάφορο <>
Μικρότερο <
Μεγαλύτερο >
Μικρότερο ή ίσο <=
Μεγαλύτερο ή ίσο >=

Παραδείγματα

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

Η εντολή for

Λογικοί τελεστές

Τα λογικά αποτελέσματα στη Visual Basic μπορούν να συνδυαστούν με τη χρήση των παρακάτω λογικών τελεστών:
Λογική πράξη Τελεστής της Visual Basic
σύζευξη (and) (και) And
διάζευξη (or) (ή) Or
άρνηση (not) (όχι) Not
αποκλειστική διάζευξη (exclusive or) Xor
ισοδυναμία (equivalence) Eqv
συνεπαγωγή (implication) 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

Ο τύπος της συμβολοσειράς

Συναρτήσεις για συμβολοσειρές

Στη 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
Εμφανίζει:

Ορισμός διαδικασίας

Ορίσματα

Ορισμός συνάρτησης

Στοιχεία αντικεμενοστρεφούς προγραμματισμού

Προγραμματισμός με αντικείμενα

Σύνδεση με το 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(41) As String

    regions(00) = "Europe"
    regions(10) = "Americas"
    regions(20) = "Asia"
    regions(30) = "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, 111"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")

Βιβλιογραφία

Παράρτημα: Χαρακτηριστικές αλγοριθμικές γλώσσες

Σε μια αλγοριθμική (imperative) γλώσσα το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να εκτελέσει ο υπολογιστής.

Παράρτημα: Χαρακτηριστικές δηλωτικές γλώσσες

Σε μια δηλωτική (declarative) γλώσσα το πρόγραμμα εκφράζει τη δομή του προβλήματος που θέλουμε να επιλύσουμε. Η γλώσσα προγραμματισμού παρέχει τον κατάλληλο μηχανισμό ελέγχου ο οποίος χρησιμοποιώντας τη δομή που έχουμε ορίσει καταλήγει στο επιθυμητό αποτέλεσμα.

Γλώσσες βασισμένες στη λογική

Γλώσσες βασισμένες σε συναρτήσεις

Παράρτημα: Βασικά γλωσσικά εργαλεία

Προετοιμαστής/Διορθωτής (Editor)
Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος.
Προεπεξεργαστής (Preprocessor)
Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα. Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++.
Συμβολομεταφραστής (Assembler)
Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα μηχανής.
Μεταγλωττιστής (Compiler)
Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής.
Διερμηνευτής (Interpreter)
Εκτελεί άμεσα ένα πρόγραμμα σε γλώσσα υψηλού επιπέδου.
Συνδέτης (Linker)
Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά σε ένα συνεχές πρόγραμμα.
Φορτωτής (Loader)
Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές σε σχετικές θέσεις μνήμης. Συνήθως τμήμα του λειτουργικού συστήματος.
Αποσφαλματωτής (Debuger)
Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την εξέταση και αλλαγή μεταβλητών του και γενικά ενέργειες που αποσκοπούν στην ανίχνευση λαθών που μπορεί να περιέχει το πρόγραμμα.
Διερμηνευτής (Interpreter)
Εκτελεί απευθείας τις εντολές του προγράμματος χωρίς ενδιάμεσο στάδιο μεταγλώττισης.

Παράρτημα: Είσοδος στοιχείων

Παράρτημα: Βρόχοι με την εντολή loop while

Παράρτημα: Προσδιορισμός της συνθήκης με τη χρήση της Until

Παράρτημα: Έξοδος από το βρόχο

Παράρτημα: H εντολή 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