Εισαγωγή στην Python C++ Java. Python. Το πρόγραμμα Hello world σε τρείς γλώσσες προγραμματισμού

Σχετικά έγγραφα
Εισαγωγή στον Προγραμματισμό

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Γλώσσα προγραμματισμού python

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Εισαγωγή στον Προγ/μό Υπολογιστών

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

B. Ενσωμάτωση Ιθαγενών Μεθόδων

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Θέματα Προγραμματισμού Η/Υ

Εισαγωγή στον Προγ/μό Υπολογιστών

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

Εισαγωγικό Φροντιστήριο

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Θέματα Προγραμματισμού Η/Υ

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΡΙΤΗ 13 ΙΟΥΝΙΟΥ 2017

ΗΥ-150. Προγραμματισμός

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στον Προγραμματισμό

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Πληρουορική Γ Γσμμασίοσ

PHP 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Δομές ελέγχου ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

ΗΥ-150. Προγραμματισμός

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στον Προγραμματισμό Μάθημα 4: Αλγόριθμοι και Γλώσσες Προγραμματισμού Δεκέμβριος 2015 Χ. Αλεξανδράκη

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι (ΗΥ120)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Αναφορές, είκτες και Αλφαριθμητικά

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Κλάσεις και Αντικείµενα

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Κλάσεις και αντικείμενα #include <iostream.h<

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Λογικές εκφράσεις και μεταβλητές

Σημειωματάριο Τετάρτης 4 Οκτ. 2017

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Ανάπτυξη και Σχεδίαση Λογισμικού

ΜΑΘΗΜΑΤΑ PYTHON. Καθηγητής Ι. Δημητρίου.

a-shapes στη βιολογία

Προγραμματισμός Η/Υ (ΤΛ2007 )

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δεδομένα, τελεστές, είσοδος/έξοδος

Transcript:

Το πρόγραμμα Hello world σε τρείς γλώσσες προγραμματισμού C++ #include <iostream.h> void main() { cout << "Hello, world!" << endl; } Java public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); } Python print "Hello World!"

Δημιουργήθηκε το 1991 από τον Guido van Rossum. Θεωρείται απόγονος της ABC και δανείζεται στοιχεία από τη Modula-3. Έχει ένα ανοικτό μοντέλο ανάπτυξης που διοικείται από το μη κερδοσκοπικό οργανισμό Python Software Foundation. Το κοινό της γλώσσας είναι ιδιαίτερα ενθουσιώδες. Έχει ευρύτατο φάσμα χρήσης: Google, NASA, YouTube, πρώτος BitTorrent client, Blender, ArcGIS, Civilization IV, Anaconda, Portrage, standard σε κάθε έκδοση του Linux. Cross platform κώδικας (Linux, MacOS, Solaris, windows, )

Multi paradigm: object orientation, structural programming. features of functional programming, Έχει δυναμικούς τύπους και πολύ καλή διαχείριση μνήμης. Είναι εύκολα επεκτάσιμη (small core, large standard library, extensible interpreter). Η σύνταξη είναι καθαρή, αραιή και άμεση. Απορίπτει το motto της Perl: There is more than one way to do it. και υϊοθετεί το: There sould be one -and preferably only one- obvious way to do it.

Θεωρήστε την Python σαν μια ψευδογλώσσα. Οι μεταβλητές δεν έχουν τύπο και δεν χρειάζονται δήλωση. Οι μεταβλητές εμφανίζονται όταν καταχωρούμε σε αυτές και εξαφανίζονται όταν δεν τις χρησιμοποιούμε. Η καταχώρηση γίνεται με τον τελεστή = και η σύγκριση με τον τελεστή == Μπορούμε να καταχωρίσουμε σε πολλές μεταβλητές ταυτόχρονα: x, y, z = 1, 2, 3 first, second = second, first a = b = 123

Τα blocks υποδεικνύονται μόνο μέσω εσοχών (indentation) κειμένου (όχι BEGIN/END ή αγκύλες). Συνηθισμένες δομές ελέγχου: if x < 5 or 10 < x < 20: print "The value is OK." for i in [1,2,3,4,5]: print "This is iteration number", i # Print out the values from 0 to 99 inclusive. for value in range(100): print value x = 10 while x >= 0: print "x is still not negative." x = x-1

Αλληλεπίδραση με το χρήστη: x = input("please enter a number:") print "The square of that number is", x*x Αποθήκευση εισόδου αυτολεξεί σαν αλφαριθμητικό και έλεγχος σφάλματος: x = raw_input("please enter a number:") try: y = int(x) print "The square of that number is", y*y except: print "That was not a number!"

Θεωρήστε τη δομή της λίστας σαν ετερογενή πίνακα: name = ["Poppins", "Mary"] x = [[1,2,3],[y,z],[[[]]]] print len(x) # prints 3 Δεικτοδότηση στις λίστες (το πρώτο στοιχείο έχει δείκτη 0): print name[1], name[0] # prints "Mary Poppins" name[0] = "Shelley" Τεμαχισμός στις λίστες: x = ["super","cali","fragi","listic","expial","idocious"] print x[3:5] # prints ["listic", "expial"] print x[:2] # prints ["super", "cali"] print x[4:] # prints ["expial", "idocious"] print x[-3] # prints "listic"

Τα λεξικά είναι μη ταξινομημένες λίστες και η δεικτοδότηση γίνεται με κλειδιά: book = {'author':"mary Shelley", 'title':"frankenstein",\ 'year':1831} print book['author'] # prints 'Mary Shelley' book['title'] = "Mary Poppins" Τα λεξικά μπορούν να περιέχουν άλλα λεξικά ή και λίστες. Και οι λίστες μπορούν να περιέχουν λεξικά.

Ορισμός συνάρτησης: def square(x): return x * x print square(2) # Prints 4 Οι παράμετροι περνάνε by value : def f(x): x = 0 y = 1 f(x) print y # Prints 1

def addition(x,y): return x+y print addition(1,2) # prints 3 print addition('dobe','dobedo') # prints dobedobedo print addition(1.25, 5.36) # prints 6.61

Δήλωση κλάσης: class Basket: # Always remember the *self* argument def init (self, contents=none): self.contents = contents or [] def add(self, element): self.contents.append(element) def print_me(self): result = "" for element in self.contents: result = result + " " + `element` print "Contains:" + result

Όλες οι μέθοδοι έχουν το έξτρα όρισμα self. Διάφορα προκαθορισμένα ονόματα μεθόδων έχουν ιδιαίτερη σημασία για τα αντικείμενα. Το όνομα init καθορίζει τη συνάρτηση που θα κληθεί όταν δημιουργηθεί ένα αντικείμενο της κλάσης. Τα ορίσματα στις μεθόδους μπορεί να είναι προαιρετικά και να έχουν προκαθορισμένη τιμή: def foo(self, bar=32):... H foo μπορεί να κληθεί με 0 ή 1 όρισμα. Αν δεν δοθεί όρισμα τότε η παράμετρος bar θα έχει την τιμή 32.

Οι μέθοδοι καλούνται σαν object.method(arg1,arg2) Τα backquote (``) μετατρέπουν ένα αντικείμενο στην αλφαριθμητική του αναπαράσταση: element = 1 print `element` # prints 1 print 'element' # prints element Το σύμβολο + ενώνει δύο λίστες. Τα αλφαριθμητικά είναι λίστες χαρακτήρων, επιδέχονται δηλαδή δεικτοδότηση, τεμαχισμό και τη χρήση της συνάρτησης len

Κάθε τιμή μπορεί να χρησιμοποιηθεί σαν λογική τιμή: οι άδειες τιμές [], 0, "" και None αναπαριστούν το false. Οι λογικές εκφράσεις αποτιμούνται με lazy evaluation: a and b, αν το a είναι false επιστρέφει την τιμή του, αλλιώς επιστρέφει την τιμή του b. Αντίστοιχα για το or. Μπορούμε λοιπόν να γράφουμε σύντομα και κομψά: print a or b αντί του if a: print a else: print b

Χρήση της κλάσης Basket: b = Basket(['apple','orange']) b.add("lemon") b.print_me Χρήση της προκαθορισμένης μεθόδου str : Class Basket:... def str (self): result = "" for element in self.contents: result = result + " " + `element` return "Contains:"+result... b = Basket(['apple','orange']) print b

Χρήσιμες συναρτήσεις και κλάσεις τοποθετούνται σε modules που πρέπει να κληθούν για να χρησιμοποιηθούν: Για να χρησιμοποιήσουμε τη μέθοδο split από το standard module string: import string x = string.split(y) είτε: from string import split x = split(y) Τη στιγμή του import εκτελείται όλος ο κώδικας του module. Αν θέλουμε το πρόγραμμα να είναι και module και εκτελέσιμο τότε προσθέτουμε στο τέλος: if name == " main ": go() # any python code

Έλεγχος σφαλμάτων: def safe_division(a,b): try: return a/b except ZeroDivisionError: return None ή try: unsafe_division(a,b): except ZeroDivisionError: print "Something was divided by zero in unsafe_division" Στις περιπτώσεις όπου φυσιολογικά δεν πρέπει να υπάρχει πρόβλημα, αλλά κάποιο πρόβλημα μπορεί να υπάρξει η χρήση των exceptions είναι καλή πρακτική.

Επίσημη σελίδα της Python: http://www.python.org Η αναζήτηση python -monty -snake στο Google επιστρέφει πάνω από 50000000 αποτελέσματα.

Python motto of learning Use the source, Luke. Διαβάστε δηλαδή έτοιμο (καλογραμμένο) Python κώδικα.

Εισαγωγή στη CGAL Computational Geometry Algorithms Library Προώθηση της έρευνας στην Υπολογιστική Γεωμετρία. Στιβαρές υλοποιήσεις γεωμετρικών αλγορίθμων. Yλοποίηση εύχρηστου και χρήσιμου γεωμετρικού κώδικα. Διεθνής αναγνώριση υλοποιήσεων που επεκτείνουν τη βιβλιοθήκη (editorial board, review of submited packages, quality control, )

Εισαγωγή στη CGAL-Python Είναι μια συλλογή python modules, όπου κάθε module αντιστοιχεί σε πακέτο της CGAL. Στην έκδοση 0.9.3.1 που προέκυψε από το περσινό μάθημα περιέχονται μεταξύ άλλων: Γεωμετρικός πυρήνας (2d/3d): σημεία, ευθείες, τμήματα, Τριγωνοποιήσεις (2d/3d): Delaunay, Constrained, Γεωμετρική βελτιστοποίηση: ελάχιστος κύκλος, σφαίρα, Κυρτά περιβλήματα (2d/3d) Alpha Shapes (2d/3d) Πολύγωνα και πολύεδρα Γεωμετρικές δομές δεδομένων: KD-trees,

Εισαγωγή στη CGAL-Python Σύγκριση Python και C++ Python C++ from CGAL.Triangulations_2 import * from CGAL.Kernel import Point_2 as p2 dt=triangulation_2() pts=[p2(0,0),p2(1,0),p2(0,1),p2(1,1)] for p in pts: dt.insert(p) print dt.number_of_vertices() #include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Triangulation_2.h> struct K : CGAL::Exact_predicates_inexact_constructions_kernel {}; typedef CGAL::Triangulation_2<K> Triangulation; typedef K::Point_2 p2; int main() { p2 pts[]={p2(0,0),p2(1,0),p2(0,1),p2(1,1)}; Triangulation t; for (int i=0; i<4; i++) t.insert(pts[i]); std::cout<<t.number_of_vertices()<<std::endl; return 0; }

Εισαγωγή στη CGAL-Python Σύγκριση αλγόριθμου και υλοποίησης Αλγόριθμος Είσοδος: Σύνολο S αποτελούμενο από n σημεία στο επίπεδο. Έξοδος: Η αλυσίδα των ακμών και των κορυφών του ΚΠ2. 1. Τρέχουσα κορυφή r=r0 είναι το "μικρότερο" σημείο. 2. Αρχικοποίηση αλυσίδας κορυφών με r. S=S-{r}. 3. Έστω r η τρέχουσα κορυφή και u που ανήκει στο S ένα οποιοδήποτε σημείο που δεν έχει επιλεγεί ως κορυφή. Για κάθε σημείο t που ανήκει στο S-{u}: αν ισχύει CW(r,u,t), ή αν r,u,t συνευθειακά και u εσωτερικό του (r,t) τότε θέσε u=t 4. Αν u=r0 τερμάτισε, αλλιώς r=u, S=S-{r}, πρόσθεσε στην αλυσίδα των κορυφών το r, συνέχισε στο βήμα 3. Υλοποίηση σε CGAL-Python def jarvis(points): r0 = min(points) hull = [r0] r,u = r0,none rempoints = [x for x in points if x not in hull] while u!= r0 and rempoints: u = random.choice(rempoints) for t in points: if t!= u and \ (orientation(r,u,t) == CLOCKWISE or \ (orientation(r,u,t) == COLLINEAR and \ (u-r).direction() == (t-u).direction())): u = t r = u points.remove(r) hull.append(r) rempoints.remove(r) return hull