Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Σχετικά έγγραφα
(programming interfaceή/και application programming interface API).

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Προεπεξεργαστής C. Προγραμματισμός Ι 1

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

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

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

make Προγραμματισμός II 1

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

Προγραμματισμός Υπολογιστών με C++

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

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

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

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

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

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

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

Ενδεικτικές λύσεις και στατιστικά

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

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

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

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

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Προγραμματισμός ΙI (E)

ιαφάνειες παρουσίασης #6 (β)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

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

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

Προγραμματισμός Ι (HY120)

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Ι (HY120)

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Εισαγωγή στην OpenGL

Δομημένος Προγραμματισμός

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

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

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

Διδάσκων: Παναγιώτης Ανδρέου

Στοίβες με Δυναμική Δέσμευση Μνήμης

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Περιεχόμενα. Πρόλογος... 21

Διάλεξη 22η: Επιπλέον στοιχεία της C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

Διαδικασία Ανάπτυξης Λογισμικού

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

Προγραμματισμός Ι. Συναρτήσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

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

Διαδικασιακός Προγραμματισμός

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Εργαστήριο 2: Πίνακες

Προγραμματισμό για ΗΜΥ

είκτες και Πίνακες (2)

Δομημένος Προγραμματισμός

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

Προγραμματισμός Ι (HY120)

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Αλγόριθμοι Ταξινόμησης Μέρος 1

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

2η Προγραµµατιστική Εργασία

Transcript:

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων Προγραμματισμός II 1 lalis@inf.uth.gr

Βιβλιοθήκες Τμήματα λογισμικού ευρύτερης χρησιμότητας που έχουν σχεδιαστεί με σκοπό να διευκολύνουν την ανάπτυξη πολλών διαφορετικών εφαρμογών Αναπτύσσονται όπως ένα (συμβατικό) ανεξάρτητο τμήμα λογισμικού με ξεχωριστή μετάφραση και (εκ των υστέρων) σύνδεση με τον κώδικα των προγραμμάτων «πελατών» που τις χρησιμοποιούν Οι βιβλιοθήκες χρησιμοποιούνται χωρίς γνώση για την εσωτερική υλοποίηση τους αρχή του black box Τεκμηριώνονται μέσα από αναλυτικές περιγραφές χρήσης της προγραμματιστικής διεπαφής τους βλέπε εγχειρίδια & βιβλία προγραμματισμού Προγραμματισμός II 2 lalis@inf.uth.gr

Αφηρημένος τύπος δεδομένων (ΑΔΤ) Εισαγωγή νέας λειτουργικότητας με την μορφή ενός νέου τύπου δεδομένων που υλοποιείται με βάση την αρχή του black box Ξεχωριστό τμήμα λογισμικού Χρησιμοποιείται μέσω μιας (τεκμηριωμένης) διεπαφής Προγραμματισμός II 3 lalis@inf.uth.gr

Πολύ μεγάλοι ακέραιοι Έστω ότι χρειαζόμαστε ειδικούς ακεραίους που μπορεί να λάβουν πολύ μεγάλες τιμές που υπερβαίνουν (κατά πολύ) τα όρια των μεγάλων ακεραίων που υποστηρίζονται από την γλώσσα/μηχανή Μπορούμε να εισάγουμε ένα νέο τύπο δεδομένων, π.χ. VeryBigInt, με αντίστοιχες λειτουργίες αρχικοποίησης, πρόσθεσης, αφαίρεσης... Ο προγραμματιστής χρησιμοποιεί την παραπάνω λειτουργικότητα χωρίς να νοιάζεται για το πως αυτή υλοποιείται «εσωτερικά» Προγραμματισμός II 4 lalis@inf.uth.gr

διεπαφή για τον τύπο VeryBigInt typedef VeryBigInt; void vbi_set(verybigint *i, char *s); char *vbi_get(verybigint *i); int vbi_add(verybigint *i1, const VeryBigInt *i2); int vbi_diff(verybigint *i1, const VeryBigInt *i2); vbi_set vbi_get vbi_add vbi_sub αντικείμενο VeryBigInt ως black box Προγραμματισμός II 5 lalis@inf.uth.gr

/* ενδεικτική διεπαφή VeryBigInt */ typedef VeryBigInt; int vbi_set(verybigint *i, char *s); /* αρχικοποιεί την μεταβλητή με βάση την ακέραια τιμή που περνιέται ως αλφαριθμητικό, και επιστρέφει 1 / 0 για επιτυχία / αποτυχία */ char *vbi_get(verybigint *i); /* επιστρέφει την τιμή ως αλφαριθμητικό, η μνήμη του οποίου πρέπει να αποδεσμευτεί από τον καλών κώδικα */ int vbi_add(verybigint *i1, const VeryBigInt *i2); /* i1 = i1 + i2 και επιστρέφει 1 για επιτυχία ή 0 αν ξεπεραστεί το υποστηριζόμενο πεδίο τιμών */ int vbi_sub(verybigint *i1, const VeryBigInt *i2); /* i1 = i1 - i2 και επιστρέφει 1 για επιτυχία ή 0 αν ξεπεραστεί το υποστηριζόμενο πεδίο τιμών */ Προγραμματισμός II 6 lalis@inf.uth.gr

int main(int argc, char *argv[]) { int res; VeryBigInt i1,i2; char s[512],*s2; scanf("%511s,s); res = vbi_set(&i1,s); if (!res) { printf("set error for %s\n",s); return; } scanf("%511s,s); res = vbi_set(&i2,s); if (!res) { printf("set error for %s\n",s); return; } res = vbi_add(&i1,&i2); if (!res) { printf("range error\n"); return; } s2 = vbi_get(&i1); printf("%s\n",s2); free(s2); } Προγραμματισμός II 7 lalis@inf.uth.gr

Ενδεικτική υλοποίηση Κάθε μεταβλητή αντιστοιχεί σε ένα πίνακα από χαρακτήρες, στον οποίο αποθηκεύονται τα δεκαδικά ψηφία της τρέχουσας τιμής ως απλοί χαρακτήρες Το πρόσημο της τιμής αποθηκεύεται στον πίνακα Η vbi_set αρχικοποιεί τον πίνακα με βάση το αλφαριθμητικό που περνιέται σαν παράμετρος. Η vbi_get δεσμεύει ένα πίνακα χαρακτήρων στη δυναμική μνήμη και αποθηκεύει την τιμή ως κανονικό (εκτυπώσιμο) αλφαριθμητικό (με τερματικό). Οι vbi_add και vbi_sub υλοποιούν τις πράξεις με συμβολικό τρόπο ψηφίο προς ψηφίο Προγραμματισμός II 8 lalis@inf.uth.gr

VeryBigInt i; vbi_set(&i,"-1234"); 0 N-1 '-' '0' '0' '1' '2' '3' '4' '5' Προγραμματισμός II 9 lalis@inf.uth.gr

Δημιουργία στατικής βιβλιοθήκης Σχεδίαση της προγραμματιστικής διεπαφής Δημιουργία του αντίστοιχου header file π.χ., vbi.h Υλοποίηση της λειτουργικότητας σε αρχείο κώδικα π.χ., vbi.c Μεταγλώττιση και δημιουργία object file π.χ., gcc -Wall -c vbi.c -o vbi.o Δημιουργία βιβλιοθήκης π.χ., ar rcs libvbi.a vbi.o το όνομα πρέπει να αρχίζει με lib και να έχει κατάληξη.a Προγραμματισμός II 10 lalis@inf.uth.gr

Χρήση στατικής βιβλιοθήκης Συμπεριλαμβάνουμε το header file της βιβλιοθήκης π.χ., #include "vbi.h" Χρήση στον κώδικά μας των συναρτήσεων που παρέχει η βιβλιοθήκη όπως τεκμηριώνονται στις οδηγίες χρήσης και το header file Μεταγλώττιση και σύνδεση με την βιβλιοθήκη π.χ. gcc myprog.c -o myprog lvbi -L. Στην εντολή σύνδεσης αφαιρούμε από το όνομα της βιβλιοθήκης το πρόθεμα lib και την κατάληξη.a, ενώ η τοποθεσία του κώδικα της βιβλιοθήκης δίνεται αμέσως μετά το -L Προγραμματισμός II 11 lalis@inf.uth.gr