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

Σχετικά έγγραφα
ιαφάνειες παρουσίασης #5 (β)

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

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

DRAFT ιαφάνειες παρουσιάσεων

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

Η ιστορία της C. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

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

Χαρακτηριστικά της C

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

Ηιστορία της C. ιαφάνειες παρουσιάσεων. Χαρακτηριστικά της C. Εκτέλεση προγραµµάτων. Hello world!

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

Γλώσσα Προγραμματισμού C

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

Προγραμματισμός Δομές Δεδομένων

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

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

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

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

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Διάλεξη 19η: Δομές δεδομένων

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

ΕΠΛ232: Εργαστήριο 2

Εισαγωγή στον Προγραμματισμό (με. τη C)

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

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

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

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

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

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Σημειώσεις όγδοης εβδομάδας

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

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

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

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

Δεδομένα, Τύποι και Τιμές

Περαιτέρω για Συναρτήσεις

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

Σημειώσεις ένατης εβδομάδας

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

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

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

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

Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University)

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

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

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Σημειώσεις έκτης και έβδομης εβδομάδας

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Συναρτήσεις και Πίνακες

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

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

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Διάλεξη 5: Δείκτες και Συναρτήσεις

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

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

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Χρήσεις Στοίβας ΣΤΟΙΒΑ. Ορισμός Στοίβας (stack) Βασική Λειτουργικότητα

Διάλεξη 11η: Δείκτες, μέρος 1

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

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

Περιεχόμενα. Λίγα λόγια για αυτή την έκδοση... 23

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

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

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

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

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

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

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 2: ΑΤΔ Στοίβα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Transcript:

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ http://www.softlab.ntua.gr/~nickie/courses/progtech/ ιδάσκοντες: Γιάννης Μαΐστρος (maistros@cs.ntua.gr) Στάθης Ζάχος (zachos@cs.ntua.gr) (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης #9 (α)! είκτες σε συναρτήσεις!υλοποίηση αριθµητικών εκφράσεων 1

είκτες σε συναρτήσεις " Παράδειγµα 1 int f (int n); int (*p) (int n); p = &f; printf("%d", (*p)(3)); " Παράδειγµα 2 double (*q) (double) = &sqrt; " είκτες ισοδύναµοι µε συναρτήσεις p = f; printf("%d", p(3)); 2

Ολοκλήρωση double integral (double a, double b, double (*f) (double)) { const double step = 1e-6; double result = 0.0; double x; κακός αλγόριθµος!... for (x=a; x<=b; x += step) result += f(x) * step; return result; result = integral(0, 3.14159, sin); 3

Ταξινόµηση φυσαλίδας (i) " Τα δεδοµένα: # void * a πού βρίσκονται # int n πόσα είναι # int size τί µέγεθος έχει καθένα # comparison f πώς γίνεται η σύγκριση " Η σύγκριση των δεδοµένων typedef int (*comparison) (void * x, void * y); 4

Ταξινόµηση φυσαλίδας (ii) void bsort (void * a, int n, comparison f, int size) { int i, j; for (i = 0; i < n; i++) for (j = n-1; j > i; j--) { unsigned char * px = (unsigned char *) a + (j-1) * size; unsigned char * py = (unsigned char *) a + j * size; 5

Ταξινόµηση φυσαλίδας (iii) " (συνέχεια) if (f(px, py) > 0) { int k; for (k = 0; k < size; k++) { unsigned char temp = *px; *px++ = *py; *py++ = temp; 6

Ταξινόµηση φυσαλίδας (iv) " Συνάρτηση σύγκρισης για ακέραιους int intcompare (void * x, void * y) { return *((int *) x) - *((int *) y); " Κλήση για πίνακα ακεραίων int x[] = { 44, 55, 12, 42,... ;... bsort(x, n, intcompare, sizeof(int)); 7

Υλοποίηση αριθµητικών εκφράσεων " Έκφραση: δυαδικό δένδρο ειδικής µορφής " Κόµβοι τριών ειδών: # αριθµητικές σταθερές (φύλλα) # τελεστές µε ένα τελούµενο # τελεστές µε δύο τελούµενα " Πληροφορία: # τιµή σταθεράς, ή # σύµβολο τελεστή " Σύνδεσµοι: # τελούµενα 8

Κόµβος δένδρου typedef struct ExprNode_tag { enum { EXP_const, EXP_unop, EXP_binop code; union { double constant; struct { char op; struct ExprNode_tag *arg; unop; struct { char op; struct ExprNode_tag *arg1, *arg2; binop; data; ExprNode, *expr; 9

Κατασκευή σταθερών expr exprconst (double constant) { ExprNode * e = (ExprNode *) malloc(sizeof(exprnode)); if (e == NULL) { printf("out of memory\n"); exit(1); e->code = EXP_const; e->data.constant = constant; return e; 10

Κατασκευή τελεστών µε δύο τελούµενα expr exprbinop (expr arg1, char op, expr arg2) { ExprNode * e = (ExprNode *) malloc(sizeof(exprnode)); if (e == NULL) { printf("out of memory\n"); exit(1); e->code = EXP_binop; e->data.binop.op = op; e->data.binop.arg1 = arg1; e->data.binop.arg2 = arg2; return e; 11

Παράδειγµα κατασκευής " Έκφραση: 3 * (24 / 2) + (9-3) expr e = exprbinop( exprbinop( exprconst(3),'*', exprbinop( exprconst(24), '/', exprconst(2) ) ), '+', exprbinop( exprconst(9), '-', exprconst(3) ) ); + * 3 / 9 3 24 2 12

Καταστροφή έκφρασης void exprfree (expr e) { switch (e->code) { case EXP_unop: exprfree(e->data.unop.arg); break; case EXP_binop: exprfree(e->data.binop.arg1); exprfree(e->data.binop.arg2); break; free(e); 13

Εκτύπωση έκφρασης (i) void exprprint (expr e) { switch (e->code) { case EXP_const: printf("%lg", e->data.constant); break; case EXP_unop: printf("(%c", e->data.unop.op); exprprint(e->data.unop.arg); printf(")"); break; 14

Εκτύπωση έκφρασης (ii) " (συνέχεια) case EXP_binop: printf("("); exprprint(e->data.binop.arg1); printf("%c", e->data.binop.op); exprprint(e->data.binop.arg2); printf(")"); break; 15

Υπολογισµός έκφρασης (i) double exprcalc (expr e) { switch (e->code) { case EXP_const: return e->data.constant; case EXP_unop: switch (e->data.unop.op) { case '+': return exprcalc(e->data. unop.arg); case '-': return - exprcalc(e->data. unop.arg); 16

Υπολογισµός έκφρασης (ii) " (συνέχεια) case EXP_binop: switch (e->data.binop.op) { case '+': return exprcalc(e->data. binop.arg1) + exprcalc(e->data. binop.arg2); case '-': return exprcalc(e->data. binop.arg1) - exprcalc(e->data. binop.arg2);... 17