Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 5: Τεχνικές Προγραμματισμού

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 5: Τεχνικές Προγραμματισμού"

Transcript

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

2 Σκοποί ενότητας Να εξετάσει πλεονεκτήματα και μειονεκτήματα των τριών σχεδιαστικών επιλογών που χρησιμοποιήσαμε Να παρουσιάσει τεχνικές ελέγχου προγραμμάτων Να προσδιορίσει κανόνες καλής χρήσης των ενοτήτων Να εξετάσει την τεχνική της αναδρομής 2

3 Περιεχόμενα ενότητας Επιλογές Σχεδιασμού ΑΤΔ Έλεγχος Προγραμμάτων Χαρακτηριστικά Ενοτήτων Αναδρομή 3

4 Επιλογές Σχεδιασμού

5 Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης

6 Κύκλος (Ζωής) Λογισμικού (ΑΤΔ) Γενικά Ορισμός ΑΤΔ (Προδιαγραφές) Οργάνωση Δεδομένων Τι κάνει Υλοποίηση Σχεδιασμός (ανεξάρτητος από γλώσσα υλοποίησης) Πώς το κάνει (πίνακες, συνδεδεμένες λίστες, κλπ) Ανάπτυξη (σε Γλώσσα) Ενότητες στην C, java class Δοκιμή και πάλι Παράδειγμα Ορισμός ΑΤΔ Στοίβα Γραμμική Διάταξη Δημιουργία, κενή, ώθηση, εξαγωγή Υλοποίηση Σχεδιασμός πίνακα + κορυφή Συνδεδεμένη Λίστα Ανάπτυξη σε C Ενότητες της C με πλήρη Απόκρυψη Δοκιμή και πάλι 6

7 Τρεις Επιλογές Σχεδιασμού ΑΤΔ 1. Με Πίνακα: Αντιστοιχούμε Στοιχεία του ΑΤΔ σε Πίνακα. 1. TyposStoixeiou List[N]; // ο πίνακας με τα δεδομένα 2. Συναρτήσεις πρόσβασης στα στοιχεία του πίνακα 2. Με Συνδεδεμένους Κόμβους typedef struct Node {TyposStoixeiou data; TyposLink next} Node; // τύπος κόμβου TyposLink Start; // η Αρχή των κόμβων a) Σύνδεση/διαχείριση με pointers-κόμβοι από heap i. typedef Node * TyposLink ; // η σύνδεση-δείκτης ii. Κόμβοι από Heap // διαθέσιμος χώρος iii. New=malloc(sizeof(Node)); free(new); // διαχείριση κόμβων b) Σύνδεση/διαχείριση με θέσεις πίνακα-κόμβοι στοιχεία πίνακα i. typedef int TyposLink; // η σύνδεση-int ii. Node List[Ν]; // όλοι οι κόμβοι σε πίνακα iii. πάρε-κόμβο και αποδέσμευση // διαχείριση 7

8 Σχεδιασμός με Διάταξη Πίνακα (ΔΠ) Πλεονεκτήματα Άμεση Πρόσβαση σε κάθε στοιχείο, π.χ. List[i] Οικονομία Μνήμης σε επίπεδο στοιχείου, το List[i] περιέχει μόνο δεδομένα Εισαγωγές και Διαγραφές στην αρχή ή τέλος υποστηρίζονται αποδοτικά σε σταθερό χρόνο O(1) Μειονεκτήματα Συγκεκριμένο μέγεθος (συντηρητική δήλωση δεν είναι αρκετή ή υπερβολική δήλωση με σπατάλη χώρου) Πολλά Ενδιάμεσα Κενά Στοιχεία, αραιές δομές (π.χ. πολυώνυμο, πίνακες) Εισαγωγές + Διαγραφές από την μέση κοστίζουν (Λίστα O(n)) 8

9 Σχεδιασμός Με Συνδεδεμένους Κόμβους (ΣΚ) Πλεονεκτήματα Μόνο χρήσιμα στοιχεία, δεν έχουμε κενά στοιχεία (πολυώνυμο) Εισαγωγές/Διαγραφές σε σταθερό χρόνο σε/από οποιαδήποτε θέση Μειονεκτήματα Επιπλέον μνήμη σε επίπεδο στοιχείου λόγω σύνδεσης (π.χ. μονής ή διπλά συνδεδεμένης λίστας) Σειριακή Πρόσβαση στα στοιχεία. Η τυχαία πρόσβαση κοστίζει Ο(n). 9

10 Σχεδιασμός Με Συνδεδεμένους Κόμβους (ΣΚ) Struct+Pointers (SP) Πλεονεκτήματα Όλα τα γενικά των ΣΚ Δυναμικό μέγεθος δομής, όσοι κόμβοι απαιτούνται Μειονεκτήματα Όλα τα γενικά των ΣΚ Διαχείριση Heap με malloc + free ευθύνη του προγραμματιστή 10

11 Σχεδιασμός Με Συνδεδεμένους Κόμβους (ΣΚ) Πίνακα + Θέση (ΠΘ) Πλεονεκτήματα Όλα τα γενικά των ΣΚ Χρήσιμος σχεδιασμός όταν δεν έχουμε δυναμική ανάκτηση μνήμης Κάρτες SIM με συγκεκριμένο χώρο για επαφές Αποφεύγουμε δείκτες σε συστήματα ασφαλείας πολλές φορές οι δείκτες δεν συνιστώνται Μειονεκτήματα Όλα τα γενικά των ΣΚ Συγκεκριμένο μέγεθος πίνακα, αλλά με κάποια ευελιξία (π.χ. στα Δένδρα το μέγεθος του πίνακα καθορίζει τον μέγιστο αριθμό των κόμβων ανεξάρτητα βάθους) 11

12 Πώς Επιλέγουμε Διάταξη Πίνακα Γνωστό πλήθος στοιχείων Διάταξη στοιχείων χωρίς πολλά κενά, π.χ. πλήρη πολυώνυμα Όχι μετακινήσεις στοιχείων. Αλγόριθμοι με άμεση πρόσβαση στοιχείων (αναζήτηση, ταξινόμηση) Συχνές τυχαίες προσβάσεις σε σύγκριση με εισαγωγές και διαγραφές Συνδεδεμένοι Κόμβοι (ΣΚ-SP) (ΣΚ-ΠΘ είναι συμβιβασμός) Δεν γνωρίζουμε πλήθος στοιχείων Διάταξη έχει κενά, π.χ. μη πλήρη πολυώνυμα, αραιοί πίνακες, μη ισοζυγισμένα δένδρα Συχνές εισαγωγές και διαγραφές σε σύγκριση με τυχαίες προσβάσεις. 12

13 Υλοποιήσεις Στοίβας, Ουράς, Λίστας Στοίβα Ουρά Λίστα Διάταξη Πίνακα ΣΚ-ΠΘ ΣΚ-SP ΝΑΙ- Γνωστό μέγεθος ΝΑΙ- Γνωστό μέγεθος ΝΑΙ- Γνωστό μέγεθος, άμεση πρόσβαση στα στοιχεία, χωρίς (πολλές) διαγραφές και εισαγωγές. ΌΧΙ-μηδέν όφελος Δεν έχουμε μετακινήσεις, εισαγωγές, διαγραφές από την μέση. Πράξεις με βάσει την κορυφή. ΌΧΙ. Δεν έχουμε μετακινήσεις, εισαγωγές, διαγραφές από την μέση. Πράξεις βάσει εμπρός και πίσω. ΝΑΙ-Γνωστό μέγεθος. Εισαγωγές, διαγραφές από την μέση. Επιτρέπει παραλλαγές ανάλογα με τις απαιτήσεις (είδαμε μόνο μία παραλλαγήμονά συνδεδεμένη) ΝΑΙ- Δυναμικό μέγεθος ΝΑΙ- Δυναμικό μέγεθος ΝΑΙ-Δυναμικό μέγεθος Εισαγωγές, διαγραφές από την μέση Επιτρέπει παραλλαγές (πόσες;) ανάλογα με τις απαιτήσεις 13

14 Παραλλαγές Λίστας με ΣΚ ΠΘ ή SP Απλή ή Διπλά συνδεδεμένη; (κόστος μνήμης χρόνου) Απλή: βασική μνήμη σύνδεσης, Ο(n) για προηγούμενο κόμβο Διπλά: επιπλέον μνήμη σύνδεσης, Ο(1) για προηγούμενο κόμβο Με κεφαλή ή χωρίς; (κόστος ανάπτυξης- μνήμης) Χωρίς: απαιτούνται 2 πράξεις εισαγωγής και 2 διαγραφής Με κεφαλή: 1 πράξη εισαγωγής και 1 διαγραφής με κόστος έναν κόμβο επιπλέον Κυκλική ή μη; (κόστος χρόνου) αν απαιτούνται πράξεις που συνεχίζουμε από το τέλος. Με ένδειξη Τέλους Λίστας ή μη; (κόστος χρόνου μνήμης) Αν γίνονται συχνά εισαγωγές στο τέλος (π.χ. ουρά) 2x2x2x2=16 παραλλαγές (μόνο;) x2 (ΠΘ-SP)= 32 Όλες χρήσιμες υλοποιήσεις. Με πόσες διεπαφές; ( ;) 14

15 Έλεγχος Προγραμμάτων Testing

16 Έλεγχος Λειτουργίας Το Υλικό από το βιβλίο The Practice of Programming (Kernighan & Pike) Chapter 6 16

17 Σφάλματα Παντού On two occasions I have been asked [by members of Parliament!], Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out? I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. Charles Babbage Program testing can be quite effective for showing the presence of bugs, but is hopelessly inadequate for showing their absence. Edsger Dijkstra Beware of bugs in the above code; I have only proved it correct, not tried it. Donald Knuth 17

18 Στόχοι Παρουσιάζουμε External testing (Εξωτερικά) Internal testing (Εσωτερικά) General testing strategies (Γενικές Στρατηγικές) Οι λόγοι Hard to know if a large program works properly When developing a large program, a power programmer expends at least as much effort writing test code as he/she expends writing the program itself A power programmer is comfortable with a wide variety of program testing techniques and strategies 18

19 Program Verification - Απόδειξη Ιδανικά: Prove that your program is correct Can you prove properties of the program? Can you prove that it even terminates?!!! Specification program.c Program Checker? Right/Wrong 19

20 Program Testing Πραγματιστικά: Convince yourself that your program probably works Specification program.c Testing Strategy Probably Right/Wrong 20

21 External vs. Internal Testing Types of testing External testing Designing data to test your program Καθώς γράφουμε το πρόγραμμα σχεδιάζουμε τα δεδομένα με τα οποία θα το ελέγξουμε Internal testing Designing your program to test itself Αναπτύσσουμε κώδικα για αυτό-έλεγχο του προγράμματος καθώς εκτελείται 21

22 External Testing External testing: Designing data to test your program External testing taxonomy (1) Boundary testing (οριακά δεδομένα) (2) Statement testing (έλεγχος εντολών) (3) Path testing (πιθανές ροές εκτέλεσης) (4) Stress testing (μεγάλα και πολλά δεδομένα) Θα τα εξετάσουμε ένα ένα 22

23 Boundary Testing (1) Boundary testing (έλεγχος οριακών δεδομένων) A testing technique using input values at, just below, and just above, the defined limits of an input domain; and with input values causing outputs to be at, just below, and just above, the defined limits of an output domain. Glossary of Computerized System and Software Development Terminology Almost all bugs occur at boundary conditions If a program works for boundary conditions, it probably works for all others 23

24 Boundary Testing Example Code to get line from stdin and put in character array s (example ex1) int i; char s[maxline]; for (i=0; (s[i]=getchar())!= '\n' && i < MAXLINE-1; i++); s[i] = '\0'; printf("string: %s \n", s); Boundary conditions Input starts with '\n' (κενή γραμμή) Prints empty string ( \0 ), so output is 24

25 Boundary Testing Example (cont.) Code to get line from stdin and put in character array int i; char s[maxline]; for (i=0; (s[i]=getchar())!= '\n' && i < MAXLINE-1; i++); s[i] = '\0'; printf("string: %s \n", s); Boundary conditions Line exactly MAXLINE-1 characters long Output is correct, with \0 in s[maxline-1] Line exactly MAXLINE characters long Last character on the line is overwritten, and newline never read Line more than MAXLINE characters long Some characters, plus newline, not read and remain on stdin 25

26 Boundary Testing Example (cont.) Rewrite the code Another boundary condition: EOF int i; char s[maxline]; for (i=0; i<maxline-1; i++) if ((s[i] = getchar()) == '\n') break; s[i] = '\0'; for (i=0; i<maxline-1; i++) if ((s[i] = getchar()) == '\n' s[i] == EOF) break; s[i] = '\0'; What are other boundary conditions? Nearly full Exactly full Over full Λάθος; 26

27 Boundary Testing Example (cont.) for (i=0; ; i++) { int c = getchar(); if (c==eof c=='\n' i==maxline-1) { s[i] = '\0'; break; } else s[i] = c; } There s still a problem...maxline=9 Input: Four score and seven years Output: FourØ score anø sevenø yearsø 27

28 Ασάφειες στις Προδιαγραφές If line is too long, what should happen? Keep first MAXLINE characters, discard the rest? Keep first MAXLINE-1 characters + '\0' char, discard the rest? Keep first MAXLINE-1 characters + '\0' char, save the rest for the next call to the input function? Probably, the specification didn t even say what to do if MAXLINE is exceeded Probably the person specifying it would prefer that unlimited-length lines be handled without any special cases at all Moral: testing has uncovered a design problem, maybe even a specification problem! Define what to do Truncate long lines? Save the rest of the text to be read as the next line? 28

29 Διδάγματα Πολύπλοκες οριακές περιπτώσεις είναι συχνά συμπτώματα κακού σχεδιασμού ή κακών προδιαγραφών. Διευκρινίστε τις προδιαγραφές, αν μπορείτε. Αν δεν μπορείτε να διευκρινίσετε τις προδιαγραφές τότε διορθώστε το πρόγραμμα, όπως νομίζετε. 29

30 Statement Testing (2) Statement testing Testing to satisfy the criterion that each statement in a program be executed at least once during program testing. Glossary of Computerized System and Software Development Terminology 30

31 Statement Testing Example Example pseudocode: Statement testing: Should make sure both if statements and all 4 nested statements are executed if (condition1) statement1; else statement2; if (condition2) statement3; else statement4; Requires two data sets; example: condition1 is true and condition2 is true Executes statement1 and statement3 condition1 is false and condition2 is false Executes statement2 and statement4 31

32 Path Testing (3) Path testing Testing to satisfy coverage criteria that each logical path through the program be tested. Often paths through the program are grouped into a finite set of classes. One path from each class is then tested. Glossary of Computerized System and Software Development Terminology Much more difficult than statement testing For simple programs, can enumerate all paths through the code Otherwise, sample paths through code with random input 32

33 Path Testing Example Example pseudocode: Path testing: Should make sure all logical paths are executed Requires four data sets: condition1 is true and condition2 is true condition1 is true and condition2 is false condition1 is false and condition2 is true condition1 is false and condition2 is false Realistic program => combinatorial explosion!!! Έλεγχος σε μικρότερα τμήματα (Ν+Μ < Ν*Μ) if (condition1) statement1; else statement2; if (condition2) statement3; else statement4; 33

34 Stress Testing (4) Stress testing Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements Glossary of Computerized System and Software Development Terminology What to generate Very large inputs Random inputs (binary, ASCII) Use computer to generate inputs 34

35 Stress Testing Example 1 Example program: Stress testing: Should provide random (binary, ASCII) inputs #include <stdio.h> int main(void) { char c; while ((c = getchar())!= EOF) putchar(c); return 0; } Intention: Copy all characters of stdin to stdout; but note the bug!!! Works for typical (human-generated) ASCII data sets Random (computer-generated?) data set containing byte 255 (decimal), alias (binary), causes loop to terminate before end-of-file 35

36 Stress Testing Example 2 Example program: Stress testing: Should provide very large inputs #include <stdio.h> int main(void) { short charcount = 0; while (getchar()!= EOF) charcount++; printf("%hd\n", charcount); return 0; } Intention: Count and print number of characters in stdin Works for reasonably-sized data sets Fails for (computer-generated?) data set containing more than characters 36

37 The assert Macro assert(expr) #include <assert.h> The assert macro One actual parameter, which should evaluate to true or false If true (non-zero): Do nothing If false (zero): Print message to stderr assert at line x failed Exit the process 37

38 Uses of assert Typical uses of assert Validate formal parameters («προ» συνθήκη) size_t Str_getLength(const char *str) { assert(str!= NULL); } Check for impossible logical flow switch (state) { case START: break; case COMMENT: break; default: assert(0); /* Never should get here */ } Make sure dynamic memory allocation requests worked x=malloc( ); assert(x); (Described later in course) 38

39 Disabling asserts Problem: asserts can be time-consuming Want them in code when debugging, but Might want to remove them from released code Bad solution : When program is finished, delete asserts from code But asserts are good documentation And in the real world no program ever is finished!!! Solution: Define the NDEBUG macro Place #define NDEBUG at top of.c file, before all calls of assert Makes the assert macro expand to nothing Essentially, disables asserts 39

40 Disabling asserts (cont.) Problem: Awkward to place #define NDEBUG in only released code Solution: Define NDEBUG when building -D option of gcc defines a macro gcc -DNDEBUG myfile.c Defines NDEBUG macro in myfile.c, just as if myfile.c contains #define NDEBUG Controversy: Should asserts be disabled in released code? Asserts are very time consuming => yes Asserts are not very time consuming => sometimes unclear Would user prefer (1) exit via assert, or (2) possible data corruption? 40

41 Internal Testing Internal testing: Designing your program to test itself Internal testing techniques (1) Testing invariants (2) Verifying conservation properties (3) Checking function return values (4) Changing code temporarily (5) Leaving testing code intact Εξετάζουμε τις τεχνικές μία-μία 41

42 Testing Invariants (Έλεγχος Αναλλοίωτων Συνθηκών) (1) Testing invariants testing pre-conditions and post-conditions Some aspects of data structures should not vary A function that affects data structure should check those invariants at its leading and trailing edges (προ- και μετά- αλλαγής) Example: doubly-linked list insertion function At leading and trailing edges Traverse doubly-linked list When node x points forward to node y, does node y point backward to node x? Example: binary search tree insertion function At leading and trailing edges Traverse tree Are nodes still sorted? 42

43 Testing Invariants (cont.) Convenient to use assert to test invariants #ifndef NDEBUG int isvalid(mytype object) { Test invariants here. Return 1 (TRUE) if object passes all tests, and 0 (FALSE) otherwise. } #endif void myfunction(mytype object) { assert(isvalid(object)); Manipulate object here. assert(isvalid(object)); } Can use NDEBUG in your code, just as assert does 43

44 Verifying Conservation Properties (Πιστοποίηση Σταθερών Ιδιοτήτων) (2) Verifying conservation properties Generalization of testing invariants A function should check affected data structures at leading and trailing edges Example: Str_concat() function At leading edge, find lengths of two given strings; compute sum At trailing edge, find lengths of resulting string Is length of resulting string equal to sum? Example: List insertion function At leading edge, find old length of list At trailing edge, find new length of list Does new length equal old length + 1? 44

45 Checking Return Values (3) Checking function return values In Java and C++: Method that detects error can throw a checked exception Calling method must handle the exception (or rethrow it) In C: No exception-handling mechanism Function that detects error typically indicates so via return value Programmer easily can forget to check return value Programmer (generally) should check return value 45

46 Checking Return Values (cont.) (3) Checking function return values (cont.) Example: scanf() returns number of values read Bad code int i; scanf("%d", &i); int i; if (scanf("%d", &i)!= 1) /* Error */ Example: printf() can fail if writing to file and disk is full; returns number of characters (not values) written Good code, or overkill??? Bad code??? int i = 100; printf("%d", i); Good code int i = 100; if (printf("%d", i)!= 3) /* Error */ 46

47 Changing Code Temporarily (4) Changing code temporarily Temporarily change code to generate artificial boundary or stress tests Example: Array-based sorting program Temporarily make array very small Does the program handle overflow? Μέγεθος στοίβας για έλεγχο υπερχείλισης Example: Program that uses a hash table Temporarily make hash function return a constant All bindings map to one bucket, which becomes very large Does the program handle large buckets? 47

48 Leaving Testing Code Intact (5) Leaving testing code intact Leave important testing code in the code Maybe surround with #ifndef NDEBUG #endif Control with DNDEBUG gcc option Enables/disables assert macro Also could enable/disable your debugging code (see Testing Invariants example) Beware of conflict: Extensive internal testing can lower maintenance costs Code clarity can lower maintenance costs But Extensive internal testing can decrease code clarity! 48

49 General Testing Strategies General testing strategies (1) Testing incrementally (2) Comparing implementations (3) Automation (4) Bug-driven testing (5) Fault injection Ας τις εξετάσουμε μια-μια 49

50 Testing Incrementally (1) Testing incrementally Test as you write code Add tests as you create new cases Test simple parts before complex parts Test units (i.e., individual modules) before testing the system Do regression testing (έλεγχος προηγουμένων) A bug fix often creates new bugs in a large software system, so Must make sure system has not regressed such that previously working functionality now is broken, so Test all cases to compare the new version with the previous one 50

51 Testing Incrementally (cont.) (1) Testing incrementally (cont.) Create scaffolds and stubs to test the code that you care about Function that calls code that you care about Scaffold: Temporary code that calls code that you care about Code that you care about Function called by code that you care about Function called by code that you care about Stub: Temporary code that is called by code that you care about 51

52 Comparing Implementations (2) Compare implementations Make sure that multiple independent implementations behave the same Example: Compare behavior of your str.h functions vs. standard library string.h functions 52

53 Automation (κώδικας ελέγχου) (3) Automation Testing manually is tedious and unreliable, so Create testing code Scripts and data files to test your programs (recall decomment program testing) Software clients to test your modules (recall Str module testing) Know what to expect Generate output that is easy to recognize as right or wrong Example: Generate output of diff command instead of raw program output Automated testing can provide: Much better coverage than manual testing Bonus: Examples of typical/atypical use for other programmers 53

54 Bug-Driven Testing (4) Bug-driven testing Find a bug => immediately create a test that catches it Facilitates regression testing 54

55 Fault Injection (5) Fault injection Intentionally (temporarily) inject bugs!!! Then determine if testing finds them Test the testing!!! 55

56 Who Tests What Programmers White-box testing Pro: An implementer knows all data paths Con: Influenced by how code is designed/written Quality Assurance (QA) engineers Black-box testing Pro: No knowledge about the implementation Con: Unlikely to test all logical paths Customers Field testing Pros: Unexpected ways of using the software; debug specs Cons: Not enough cases; customers don t like participating in this process; malicious users exploit the bugs 56

57 Περίληψη External testing taxonomy Boundary testing Statement testing Path testing Stress testing Internal testing techniques Checking invariants Verifying conservation properties Checking function return values Changing code temporarily Leaving testing code intact 57

58 Summary (cont.) General testing strategies Testing incrementally Regression testing Scaffolds and stubs Automation Comparing independent implementations Bug-driven testing Fault injection Test the code, the tests and the specification! 58

59 Χαρακτηριστικά Ενοτήτων

60 Στόχοι Πώς να δημιουργήσεις ενότητες υψηλής ποιότητας στην C. Γιατί χρειάζεται; Η αφαίρεση είναι απαραίτητη τεχνική για την ανάπτυξη και κατανόηση μεγάλων, πολύπλοκλων συστημάτων Ο καλός προγραμματιστής γνωρίζει πώς να βρει κατάλληλες αφαιρέσεις σε ένα μεγάλο πρόγραμμα Ο καλός προγραμματιστής γνωρίζει πώς να παρουσιάζει τις αφαιρέσεις σε ένα μεγάλο πρόγραμμα μέσω των ενοτήτων. 60

61 Χαρακτηριστικά Ενοτήτων Μια καλά σχεδιασμένηενότητα 1. Διαχωρίζει διεπαφή και υλοποίηση (μερική απόκρυψη) 2. Ενθυλακώνει δεδομένα (ολική απόκρυψη) 3. Διαχειρίζεται πόρους με συνέπεια 4. Κάνει καλή επιλογή Ονομάτων 5. Έχει ελάχιστη διεπαφή 6. Αναφέρει λάθη στους πελάτες 7. Ορίζει συμβόλαια 8. Έχει υψηλή συνάφεια 9. Έχει ασθενή εξάρτηση 61

62 1. Διαχωρίζει διεπαφή και υλοποίηση Αποκρύπτει την υλοποίηση συναρτήσεων από τους πελάτες (υλοποίηση αφαίρεσης) Επιτρέπει την ανεξάρτητη μεταγλώττιση 62

63 Παράδειγμα Stack: Στοίβα που διαχειρίζεται strings Σχεδιαστική Επιλογή με Δυναμική Συνδεδεμένη Λίστα. Πράξεις new: Δημιουργία νέου Stack free: Απελευθέρωση push: ώθηση top: εξαγωγή στοιχείου κορυφής pop: απόρριψη στοιχείου κορυφής isempty: Return 1 αν η Stack κενό 63

64 Χωρίς απόκρυψη /* stack.c */ struct Node { /* client.c */ const char *item; struct Node *next; }; struct Stack { struct Node *first; }; struct Stack *Stack_new(void) { } void Stack_free(struct Stack *s) { } void Stack_push(struct Stack *s, const char *item) { } char *Stack_top(struct Stack *s) { } void Stack_pop(struct Stack *s) { } int Stack_isEmpty(struct Stack *s) { } #include "stack.c" /* Use the functions defined in stack.c. */ Δεν υπάρχει διεπαφή (ένα αρχείο) Αλλαγή stack.c => rebuild stack.c και πελάτη Χωρίς αφαίρεση, ορισμοί με αχρείαστες λεπτομέρειες είναι ορατοί. 64

65 Η Μερική Απόκρυψη (διεπαφή) Ενότητα Stack αποτελείται από δυο αρχεία - Το stack.h (the interface) δηλώνει functions and ορίζει data structures (ο τύπος στοιχείου είναι char*) /* stack.h */ struct Node { const char *item; struct Node *next; }; struct Stack { struct Node *first; }; struct Stack *Stack_new(void); void Stack_free(struct Stack *s); void Stack_push(struct Stack *s, const char *item); char *Stack_top(struct Stack *s); void Stack_pop(struct Stack *s); int Stack_isEmpty(struct Stack *s); 65

66 Μερική Απόκρυψη (υλοποίηση) Το stack.c (η υλοποίηση) ορίζει functions #include stack.h Έλεγχος μεταγλωττιστή Οι συναρτήσεις έχουν πρόσβαση στα δεδομένα /* stack.c */ #include "stack.h" struct Stack *Stack_new(void) { } void Stack_free(struct Stack *s) { } void Stack_push(struct Stack *s, const char *item) { } char *Stack_top(struct Stack *s) { } void Stack_pop(struct Stack *s) { } int Stack_isEmpty(struct Stack *s) { } 66

67 Μερική Απόκρυψη (χρήση) Πελάτης #include την διεπαφή Αν αλλάξει το stack.c => μεταγλώττιση μόνο του stack.c, όχι του πελάτη. Καλύτερη αφαίρεση (οι προσβάσεις στην δομή μπορούν να γίνουν μέσω συναρτήσεων) /* client.c */ #include "stack.h" /* Use the functions declared in stack.h. */ 67

68 2. Ενθυλάκωση Δεδομένων (Ολική Απόκρυψη) Η πρόσβαση στη δομή αποκλειστικά μέσω συναρτήσεων Πληρης απόκρυψη λεπτομερειών υλοποίησης Συναρτήσεις για πρόσβαση Οι πελάτες δεν έχουν πρόσβαση απευθείας στα δεδομένα. Όφελος: Ευκρίνεια - μέσω της αφαίρεσης Ασφάλεια - οι πελάτες δεν μπορούν να καταστρέψουν αντικείμενα Ευελιξία Επιτρέπει αλλαγές στην υλοποίηση, ακόμα και στα δεδομένα, χωρίς να επηρεάζονται οι πελάτες. 68

69 Πρόβλημα με Μερική απόκρυψη /* stack.h */ struct Node { const char *item; struct Node *next; }; struct Stack { struct Node *first; }; Ορισμοί στο.h struct Stack *Stack_new(void); void Stack_free(struct Stack *s); void Stack_push(struct Stack *s, const char *item); char *Stack_top(struct Stack *s); void Stack_pop(struct Stack *s); int Stack_isEmpty(struct Stack *s); Διεπαφή αποκαλύπτει υλοποίηση με συνδεδεμένη λίστα Ο πελάτης μπορεί να αλλάξει/προσπελάσει απευθείας τα δεδομένα, πιθανά να τα αλλοιώσει. struct Stack S; S->item = NULL; 69

70 Ολική Απόκρυψη /* stack.h */ typedef struct Stack * Stack_T; Stack_T Stack_new(void); void Stack_free(Stack_T s); void Stack_push(Stack_T s, const char *item); char *Stack_top(Stack_T s); void Stack_pop(Stack_T s); int Stack_isEmpty(Stack_T s); Μετακίνηση ορισμού στο.c και χρήση δείκτη Αδιαφανής (opaque) δείκτης Stack_T Stack_T ο νέος τύπος Ο πελάτης δεν έχει πρόσβαση στα δεδομένα άμεσα; Τα δεδομένα είναι αδιαφανή. Stack_T S; S->item=NULL (syntax error). 70

71 Stdio /* stdio.h */ struct FILE { int cnt; /* characters left */ char *ptr; /* next character position */ char *base; /* location of buffer */ int flag; /* mode of file access */ int fd; /* file descriptor */ }; Μερική απόκρυψη Αλλά δεν χρειάζεται να δούμε τους ορισμούς 71

72 3. Διαχειρίζεται πόρους με συνέπεια Ελευθερώνει πόρους μόνο αν τους έχει δεσμεύσει. Π.χ malloc <=> free opens file <=> closes file Δέσμευση και αποδέσμευση σε διαφορετικά επίπεδα έχει κινδύνους Δεν κάνουμε free => memory leak (διαρροή) Δεν κάνουμε malloc => dangling pointer (αιωρούμενος), seg fault Δεν κλείνουμε close file => μη αποδοτική χρήση πόρου Δεν ανοίγουμε to open file => dangling pointer (αιωρούμενος), seg fault 72

73 Παράδειγμα Stack: Ποιος δεσμεύει και αποδεσμεύει τα strings; Αποδεκτές Επιλογές (1) Client allocates and frees strings Stack_push() δεν δημιουργεί string, δέχεται δείκτη. Stack_pop() δεν ελευθερώνει το string Stack_free() δεν ελευθερώνει τα strings (2) Stack object allocates and frees strings Stack_push() δημιουργεί string Stack_pop() ελευθερώνει το string Stack_free() ελευθερώνει τα strings Η επιλογή μας η (1) για να έχουμε γενικό ορισμό του Stack. Μη αποδεκτές επιλογές: Ο πελάτης δημιουργεί string, Stack ελευθερώνει Stack δημιουργεί strings, ο πελάτης ελευθερώνει 73

74 4. Καλή επιλογή Ονομάτων Ονόματα με συνέπεια Όνομα συνάρτησης περιέχει το όνομα της δομής Βοηθάει στην συντήρηση του προγράμματος Μειώνει πιθανότητα σύγκρουσης ονομάτων Οι συναρτήσεις να έχουν συνεπή διάταξη παραμέτρων Βοηθάει στην κλήση τους 74

75 Παραδείγματα Stack (+) Συναρτήσεις ξεκινούν με πρόθεμα Stack_ (+) πρώτη παράμετρος τύπος δομής string (+) ξεκινούν με str (+) Προορισμός πρώτη, προέλευση δεύτερη; Μιμείται απόδοση τιμής stdio (-) Μερικές συναρτήσεις ξεκινούν f, άλλες όχι (-) Μερικές συναρτήσεις έχουν πρώτη παράμετρο FILE. Άλλες (e.g. putc()) διαφορετική. 75

76 5. Έχει ελάχιστη διεπαφή Δήλωση στο.h εφόσον Είναι απαραίτητη ή Βολική Περισσότερες συναρτήσεις σημαίνει υψηλότερο κόστος συντήρησης και χρόνο μάθησης 76

77 Παράδειγμα Στοίβα /* stack.h */ typedef struct Stack *Stack_T ; Stack_T Stack_new(void); void Stack_free(Stack_T s); void Stack_push(Stack_T s, const char *item); char *Stack_top(Stack_T s); void Stack_pop(Stack_T s); int Stack_isEmpty(Stack_T s); Όλες απαραίτητες 77

78 Αν προσθέταμε την Παράδειγμα Stack void Stack_clear(Stack_T s); Ακυρώνει όλα τα στοιχεία Δεν είναι απαραίτητη; Ο πελάτης μπορεί με συνεχόμενα pop() να επιτύχει το ίδιο Ίσως βολική 78

79 Παράδειγμα String /* string.h */ /* απαραίτητες*/ size_t strlen(const char *s); char *strncpy(char *dest, const char *src, size_t n); char *strncat(char *dest, const char *src, size_t n); char *strncmp(const char *s, const char *t, size_t n); char *strstr(const char *haystack, const char *needle); /* βολικές και αποδοτικές */ char *strcpy(char *dest, const char *src); char *strcat(char *dest, const char *src); char *strcmp(const char *s, const char *t); n functions are necessary 79

80 Παράδειγμα stdio /* απαραίτητες */ FILE *fopen(const char *filename, const char *mode); int fclose(file *f); int fflush(file *f); int fgetc(file *f); int putc(int c, FILE *f); int fscanf(file *f, const char *format, ); int fprintf(file *f, const char *format, ); /* βολικές */ int getchar(void); int printf(const char *format, ); int putchar(int c); int scanf(const char *format, ); /* τίποτα από τα δυο */ int getc(file *f); 80

81 6. Αναφέρει λάθη Αναφέρει λάθη στους πελάτες Η ενότητα διαπιστώνει λάθη, το οποία χειρίζεται ο πελάτης Τα λάθη τα χειρίζεται καλύτερα ο πελάτης 81

82 Αναφορά λαθών στην C Εντοπισμός λάθους if statement assert macro Αναφορά στον πελάτη Με καθολική μεταβλητή Ξεχνάμε να ελέγξουμε (δεν φαίνεται άμεσα) Δεν ενδείκνυται για πολυνηματικές εφαρμογές Επιστροφή τιμής Ποια τιμή να επιλέξουμε για λάθος Επιπλέον παράμετρος-σημαία (flag) Μια επιπλέον παράμετρος Κλήση assert macro? Εντοπίζει, αλλά δεν ανακάμπτει Δεν υπάρχει ιδανική επιλογή 82

83 Αναφορά λαθών στην C (συνεχ.) Διαφοροποιούμε Λάθη χρήστη (User errors) Errors made by human user Example: Bad data in stdin Example: Bad command-line argument Errors that easily could happen To detect: Use if statement To report: Use return value or (by-pointer-value) parameter Λάθη Προγραμματιστή (Programmer errors) Errors made by a programmer Errors that never should happen Example: Call Stack_pop() with NULL stack, empty stack To detect and report: Use assert The distinction sometimes is unclear Example: Write to file fails because disk is full 83

84 Αναφορά λαθών στην C (συνεχ.) Stack /* stack.c */ Stack functions: void Stack_push(Stack_T s, const char *item) { struct Node *p; assert(s!= NULL); p = (struct Node*)malloc(sizeof(struct Node)); assert(p!= NULL); p->item = item; p->next = s->first; s->first = p; } Consider invalid parameter to be programmer error Consider malloc() failure to be programmer error Detect/report no user errors 84

85 string Παραδείγματα No error detection or reporting stdlib Example: NULL parameter to strlen() => probable seg fault Uses return values to indicate failure Note awkwardness of scanf() Sets global variable errno to indicate cause of failure 85

86 7. Ορίζει συμβόλαια A module should establish contracts with its clients Contracts should describe what each function does, esp: Οι λόγοι Meanings of parameters Valid/invalid parameter values Meaning of return value Side effects Establishing contracts facilitates cooperation between multiple programmers on a team Establishing contracts assigns blame to violators Catch errors at the door! Better that the boss yells at the programmer who is your client rather than at you!!! 86

87 Ορισμός συμβολαίων στην C Προτείνουμε Με σχόλια Η υλοποίηση ακολουθεί τα σχόλια 87

88 Παράδειγμα Stack /* stack.h */ char *Stack_top(Stack_T s); /* Return the top item of stack s. It is a checked runtime error for s to be NULL or empty. */ Comment defines contract: Meanings of function s parameters s is the pertinent stack Valid/invalid parameter values s cannot be NULL or empty Meaning of return value The return value is the top item Side effects (None, by default) 88

89 8. Συνάφεια Υψηλή Συνάφεια Οι συναρτήσεις να έχουν σχέση μεταξύ τους Βοηθάει την αφαίρεση 89

90 Υψηλή Συνάφεια Παραδείγματα Stack (+)All functions are related to the encapsulated data string (+) Most functions are related to string handling (-) Some functions are not related to string handling memcpy(), memmove(), memcmp(), memchr(), memset() (+) But those functions are similar to string-handling functions stdio (+) Most functions are related to I/O (-) Some functions don t do I/O sprintf(), sscanf() (+)But those functions are similar to I/O functions 90

91 9. Ασθενής Εξάρτηση Τι σημαίνει Να συνδέεται λίγο με άλλες ενότητες Διάδραση εσωτερικά σε ενότητες πιο έντονες από διάδραση μεταξύ ενοτήτων Παρατηρήσεις Συντήρηση : Με ασθενή εξάρτηση το πρόγραμμα αλλάζει πιο εύκολα Επαναχρησιμοποίηση: Η ασθενή εξάρτηση βοηθάει στην επαναχρησιμοποίηση σε άλλα προγράμματα Εμπειρία Ενότητες έχουν λιγότερα λάθη 91

92 Ασθενής Εξάρτηση Παράδειγμα Σχεδιασμός Airplane Airplane Κλήση συνάρτησης getlat() Simulator f() move() getlat() getlon() getalt() setlat() Simulator f() getlon() getalt() setlat() setlon() setlon() setalt() setalt() move() Πελάτης καλεί πολλές συναρτήσεις Δυνατή Εξάρτηση - σχεδιασμός Πελάτης καλεί λίγες συναρτήσεις Ασθενής εξάρτηση - σχεδιασμός 92

93 Ασθενής Εξάρτηση-Παράδειγμα Many function calls One function call Κατά την εκτέλεση-ασθενής εξάρτηση Client f() sort() Collection getn() setn() Client f() Collection getn() setn() sort() Πολλές κλήσεις Δυνατή Εξάρτηση Λίγες Κλήσεις Ασθενής Εξάρτηση 93

94 Ασθενής Εξάρτηση-Παράδειγμα Συντήρηση-εξάρτηση Changed together often Client My Module Client My Module f1() f1() f2() f2() f3() f3() Εξάρτηση συντήρησης Δυνατή εξάρτηση στην συντήρηση Όχι αλλαγές Ασθενής εξάρτηση στην συντήρηση 94

95 Επιτυγχάνοντας Ασθενή Εξάρτηση Μετακίνηση κώδικα Από πελάτες σε ενότητα Από ενότητα σε πελάτες Από πελάτες και ενότητες σε νέες ενότητες 95

96 Αναδρομή

97 Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο. Πού χρειάζεται; Πολλές μαθηματικές συναρτήσεις ορίζονται αναδρομικά. Δεν είναι προφανές πώς μπορούν να οριστούν αλλιώς. Πολλά προβλήματα λύνονται εύκολα αναδρομικά και δύσκολα μη αναδρομικά 97

98 Τρίγωνο Sierpinski Μη αναδρομικός ορισμός; 98

99 Δύο παρεξηγήσεις «Είναι δύσκολο να κατανοηθεί» Όχι, απλά απαιτείται εξάσκηση «Δεν είναι αποδοτική (χάσιμο χρόνου, χώρου)» Κριτήριο η ευκολία για τον άνθρωπο, όχι την μηχανή. Η αποδοτικότητα εξαρτάται από την επιλογή αλγορίθμου (καλή και κακή χρήση αναδρομικότητας). Θα δούμε δύο παραδείγματα. 99

100 Σκέψου Αναδρομικά Χωρίζουμε τη λύση σε τρία μέρη i. Κάνε κάποια δουλειά προς την λύση ii. Χρησιμοποίησε την μέθοδο για ένα (ή περισσότερα) μικρότερα υπο-προβλήματα σε ένα (ή περισσότερα) υποσύνολο δεδομένων iii. Ένωσε το i) και ii) Πρέπει να περιλαμβάνει μια τετριμμένη περίπτωση για το i), που να μην απαιτείται η ii) ώστε να σταματάει η αναδρομικότητα 100

101 Παράδειγμα: Παραγοντικό Αναδρομικός Ορισμός του n!, n>=0 0! = 1 n! = n * (n-1)! Αναδρομικός Ορισμός Υποπρογράμματος «Λίγη δουλειά»: ένας πολλαπλασιασμός και μια αφαίρεση Βήμα Διακοπής (stopping case) το 0! -«Υποπρόβλημα»: Αναδρομικό Βήμα (recursive step) (n-1)! -Ενώνουμε τα δύο

102 Αναδρομικός Υπολογισμός του 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1* 0! 0! = 1 Χρησιμοποιώντας την τιμή 1 του 0! (βήμα διακοπής) είναι δυνατός ο υπολογισμός του 3! επιστρέφοντας στον υπολογισμό του 1!, του 2! και τέλος του 3! όπως φαίνεται στο παρακάτω σχήμα 3! = 3 * 2! = 3 * 2 = 6 2! = 2 * 1! = 2 * 1 = 2 1! = 1 * 0! = 1 * 1 = 1 0! = 1 Βήμα Διακοπής 102

103 Ο αναδρομικός αυτός ορισμός μπορεί να υλοποιηθεί εύκολα όπως φαίνεται στο παρακάτω υποπρόγραμμα: long par(int n) { long timi; if (n == 0) /* βήμα διακοπής */ timi = 1; else /* αναδρομικό βήμα n! = n * (n-1)!*/ timi = n * par(n - 1); // επιστροφή (Α) return (timi); } 103

104 paragontiko = par(3); 6 To n είναι 3 timi = 3* par(2) επιστροφή Αποτέλεσμα 2 To n είναι 2 timi = 2* par(1) επιστροφή Αποτέλεσμα 1 Παρουσιάζεται ο τρόπος λειτουργίας του αναδρομικού υποπρογράμματος, όπου κάθε πλαίσιο σχετίζεται με την εγγραφή ενεργοποίησης (activation record). To n είναι 1 timi = 1* par(0) επιστροφή Αποτέλεσμα 1 To n είναι 0 timi = 1 επιστροφή 104

105 Υλοποίηση Αναδρομής { /*κύριο πρόγραμμα*/ x = par(3); /* program address B */ } παράμετροι 3 B Διεύθυνση επιστροφής συνάρτησης 1 η κλήση της par(3) στο main (B) 2 Α 3 B 2 η κλήση της par(2) στην par (A) 105

106 3 η και 4 η κλήσεις της par(1) και par(0) στην par (A) 0 Α 1 Α 2 Α 3 B Τερματισμός 4 ης κλήσης της par(0) στην par (A) Επιστροφή τιμής 0!==1 Επιστροφή ροής προγράμματος στην διεύθυνση Α 1 Α 2 Α 3 B 1 Α 106

107 Τερματισμός 3 ης κλήσης της par(1) στην par (A) Επιστροφή τιμής 1!==1*0!==1 Επιστροφή ροής προγράμματος στην διεύθυνση Α 2 Α 3 B 1 Α Τερματισμός 2 ης κλήσης της par(2) στην par (A) Επιστροφή τιμής 1!==2*1!==2 Επιστροφή ροής προγράμματος στην διεύθυνση Α 3 Β 2 Α Τερματισμός 1 ης κλήσης της par(3) στην main (B) Επιστροφή τιμής 3!==3*2!=6 Επιστροφή ροής προγράμματος στην διεύθυνση B 6 Β 107

108 Οπτικοποίηση Χρόνου - Χώρου Συναρτήσεων Χρόνος Κλήσεων, Διάρκεια Εκτέλεσης και Απαιτούμενη μνήμη) Space E B Proc A C Main Proc D Proc D Proc D Proc D Time 108

109 Πολυπλοκότητα Ο(?) Παραγοντικού Αναδρομή-Επανάληψη Χρήση αναδρομικών συναρτήσεων Α. Με αναδρομή timi = n * par (n - 1) : Δυο κύριες πράξεις *, - T Α (n) = 2 + T(n - 1) = T(n - 2) = T(0) = 2*n+1 T Α (n) = O(n) Β. Με επανάληψη n! = 1*1 * 2 * 3 *... * n, μια κύρια πράξη * T Ε (n) = =(n+1)*1=n+1 T Ε (n) = O(n) T Α (n) = T Ε (n) = O(n) 109

110 Αριθμοί Fibonacci Fibn = Fibn-1 + Fibn-2 Αναδρομική Υλοποίηση long Fib (long n) { long Fibnum; if (n <= 0) Fibnum = 0; else if (n == 1) Fibnum = 1; else Fibnum = Fib (n - 1) + Fib (n - 2); } return (Fibnum); 110

111 Πολυπλοκότητα Αναδρομικής Υλοποίησης Fibnum = Fib (n - 1) + Fib (n - 2); 3 βασικές πράξεις -, +, - Τ(n) = 3 + T(n - 1) + T(n - 2) = 3 + [3 + T(n - 2) + T(n - 3)] + T(n - 2) = 6 + 2Τ(n-2) + Τ(n - 3), για n>=3 T(n) >= 2T(n - 2) >= 2 2 T(n - 4) >=... >= 2 n/2 T(0), αν n άρτιο ή T(n) >= 2T(n - 2) >= 2 2 T(n - 4) >=... >= 2 (n-1)/2 T(1), αν n περιττό Αλλά Τ(0) = Τ(1) = 1, συνεπώς T Α (n) = O(2 n/2 ) για όλα τα n >=2 Αναδρομικές Συναρτήσεις Αναλυτικές Λύσεις (μάθημα Πολυπλοκότητα) 111

112 long efib (long n) /* Επαναληπτικό υποπρόγραμμα για τον υπολογισμό του n-ιοστού αριθμού Fibonacci*/ { long Fib1, Fib2, Fib3, i; } Fib1 = 0; Fib2 = 1; for (i = 3;i<=n;i++) { Fib3 = Fib1 + Fib2; Fib1 = Fib2; Fib2 = Fib3; } return(fib2); T E = = 1*(n+1)= n+ 1= O(n) 112

113 The Ackermann function Η συνάρτηση Ackermann ορίζεται αναδρομικά για μη-αρνητικούς ακέραιους m, n ως εξής 113

114 Η υλοποίηση απλή long ack(int m, int n) { if (m == 0) return (n+1) ; else if (n = =0) return ack(m-1, 1) ; else return ack(m-1, ack(m, n-1)) ; } 114

115 ... Αλλά η συμπεριφορά της A(1, 2) = A(0, A(1,1)) = A(0, A(0, A(1,0))) = A(0, A(0, A(0,1))) = A(0, A(0, 2)) = A(0, 3) = 4 115

116 A(4, 3) = A(3, A(4, 2)) = A(3, A(3, A(4, 1))) = A(3, A(3, A(3, A(4, 0)))) = A(3, A(3, A(3, A(3, 1)))) = A(3, A(3, A(3, A(2, A(3, 0))))) = A(3, A(3, A(3, A(2, A(2, 1))))) = A(3, A(3, A(3, A(2, A(1, A(2, 0)))))) = A(3, A(3, A(3, A(2, A(1, A(1, 1)))))) = A(3, A(3, A(3, A(2, A(1, A(0, A(1, 0))))))) = A(3, A(3, A(3, A(2, A(1, A(0, A(0, 1))))))) = A(3, A(3, A(3, A(2, A(1, A(0, 2)))))) = A(3, A(3, A(3, A(2, A(1, 3))))) = A(3, A(3, A(3, A(2, A(0, A(1, 2)))))) = A(3, A(3, A(3, A(2, A(0, A(0, A(1, 1))))))) = A(3, A(3, A(3, A(2, A(0, A(0, A(0, A(1, 0)))))))) = A(3, A(3, A(3, A(2, A(0, A(0, A(0, A(0, 1)))))))) = A(3, A(3, A(3, A(2, A(0, A(0, A(0, 2)))))) = A(3, A(3, A(3, A(2, A(0, A(0, 3))))) = A(3, A(3, A(3, A(2, A(0, 4))))) = A(3, A(3, A(3, A(2, 5)))) =... = A(3, A(3, A(3, 13))) =... = A(3, A(3, 65533)) =... A(3, 65533) επιστρέφει , αριθμός μεγαλύτερος από τον αριθμό των ατόμων σε όλο τον ορατό κόσμο. Κατόπιν, αυτός ο αριθμός χρησιμοποιείται ως δύναμη του 2 για το τελικό αποτέλεσμα. 116

117 Πιθανές Παγίδες Λάθος συνθήκη τερματισμού (do while) Ατέρμων Βρόχος Συνεχής Αναδρομή Δεν γίνεται Έλεγχος τερματισμού Χρησιμοποιούμε αναδρομή με μη αποδεκτές παραμέτρους 117

118 Μη τερματίζουσα Αναδρομή Δεν ικανοποιείται η συνθήκη τερματισμού Κλήση par(-1) ενώ ελέγχουμε (n==0) Συμπτώματα: συνεχείς κλήσεις έως ότου εξαντληθεί η μνήμη Δεν αλλάζουν οι παράμετροι της αναδρομής, N=f(N). Δεν υπάρχει πρόοδος. 118

119 Αφαίρεση της Γραμμικής Αναδρομής (αναδρομή με μια μόνο αναδρομική κλήση) Με χρήση Στοίβας void grammiki_anadromi (long n) { if (συνθήκη (n)) μη αναδρομική περίπτωση (n); else { προηγούμενες πράξεις (n); grammiki_anadromi (F(n)); μετέπειτα πράξεις (n); } } 119

120 void epanaliptiki (long n) { typos_stoiva stoiva; dimiourgia(stoiva); while (!συνθήκη (n)) { προηγούμενες πράξεις (n); othisi (stoiva, n); n = F(n); } } μη αναδρομική περίπτωση (n); while (!keni(stoiva)) { exagogi(stoiva, &n); μετέπειτα πράξεις (n); } 120

121 Τέλος Ενότητας

122 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 122

123 Σημειώματα

124 Σημείωμα Αναφοράς Copyright Εθνικόν και Καποδιστριακόν Πανεπιστήμιον Αθηνών, Κοτρώνης Ιωάννης. «Δομές Δεδομένων και Τεχνικές Προγραμματισμού. Ενότητα 5: Τεχνικές Προγραμματισμού». Έκδοση: Αθήνα Διαθέσιμο από τη δικτυακή διεύθυνση: 124

125 Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 125

126 Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους. 126

Χαρακτηριστικά ενοτήτων

Χαρακτηριστικά ενοτήτων Χαρακτηριστικά ενοτήτων 1 Στόχοι Πώς να δημιουργήσεις ενότητες υψηλής ποιότητας στην C. Γιατί χρειάζεται; Η αφαίρεση είναι απαραίτητη τεχνική για την ανάπτυξη και κατανόηση μεγάλων, πολύπλοκλων συστημάτων

Διαβάστε περισσότερα

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο. Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο. Πού χρειάζεται; Πολλές μαθηματικές συναρτήσεις ορίζονται αναδρομικά. Δεν είναι

Διαβάστε περισσότερα

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός; Αναδροµή (Recursion) Πώς να λύσουµε ένα πρόβληµα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί µε τον ίδιο τρόπο. Πού χρειάζεται; Πολλές µαθηµατικές συναρτήσεις ορίζονται αναδροµικά. εν είναι

Διαβάστε περισσότερα

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012 Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012 Κύκλος (Ζωής) Λογισμικού (ΑΤΔ) Γενικά Ορισμός ΑΤΔ (Προδιαγραφές) Οργάνωση Δεδομένων Τι κάνει Υλοποίηση Σχεδιασμός (ανεξάρτητος

Διαβάστε περισσότερα

Μηχανική Μάθηση Hypothesis Testing

Μηχανική Μάθηση Hypothesis Testing ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Μηχανική Μάθηση Hypothesis Testing Γιώργος Μπορμπουδάκης Τμήμα Επιστήμης Υπολογιστών Procedure 1. Form the null (H 0 ) and alternative (H 1 ) hypothesis 2. Consider

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 8: C++ ΒΙΒΛΙΟΗΚΗ STL, ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Δομές Δεδομένων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές

Διαβάστε περισσότερα

HY150a Φροντιστήριο 3 24/11/2017

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 3

Δομές Δεδομένων Ενότητα 3 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 3: Στοίβα Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ενότητα 1: Elements of Syntactic Structure Το περιεχόμενο του μαθήματος διατίθεται με άδεια

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 10η: Basics of Game Theory part 2 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 10η: Basics of Game Theory part 2 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Ψηφιακή Οικονομία Διάλεξη 0η: Basics of Game Theory part 2 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών Best Response Curves Used to solve for equilibria in games

Διαβάστε περισσότερα

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Συναρτήσεις-Δομές Ελέγχου : 1. Συναρτήσεις Χρήστη 2. Έλεγχος Ροής Προγράμματος 3.

Διαβάστε περισσότερα

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Συστήματα Διαχείρισης Βάσεων Δεδομένων ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Συστήματα Διαχείρισης Βάσεων Δεδομένων Φροντιστήριο 9: Transactions - part 1 Δημήτρης Πλεξουσάκης Τμήμα Επιστήμης Υπολογιστών Tutorial on Undo, Redo and Undo/Redo

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 3 ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι. Ελεγκτές συνθηκών ή περιπτώσεων:

Διαβάστε περισσότερα

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

ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ενότητα 11: The Unreal Past Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 4

Δομές Δεδομένων Ενότητα 4 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ενότητα 12: Συνοπτική Παρουσίαση Ανάπτυξης Κώδικα με το Matlab Σαμαράς Νικόλαος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων Προγραμματισμός Η/Υ Ενότητα 8: Ειδικά Θέματα Αλγορίθμων Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση

Διαβάστε περισσότερα

The Simply Typed Lambda Calculus

The Simply Typed Lambda Calculus Type Inference Instead of writing type annotations, can we use an algorithm to infer what the type annotations should be? That depends on the type system. For simple type systems the answer is yes, and

Διαβάστε περισσότερα

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής Να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο μια ακολουθία S από n (n 40) ακέραιους αριθμούς και επιστρέφει ως έξοδο δύο ακολουθίες από θετικούς ακέραιους

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 8: Αρχεία και Δομές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Goals of this Lecture. Generics(Γενικότητα) Generic Data Structures Example. Generic Data Structures Example

Goals of this Lecture. Generics(Γενικότητα) Generic Data Structures Example. Generic Data Structures Example Generics(Γενικότητα) Μπορούμε να κατασκευάσουμε ΑΤΔ που επιτρέπει χρήση με διαφορετικούς Τύπους Δεδομένων στο ίδιο πρόγραμμα; Π.χ. Μια στοίβα με char* και μια με int Goals of this Lecture Help you learn

Διαβάστε περισσότερα

Τεχνολογία Λογισμικού

Τεχνολογία Λογισμικού ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα #10: Συγγραφή προγραμμάτων Σταμέλος Ιωάννης Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα είναι μικρότεροι το 1000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Διάρκεια: 3,5 ώρες Καλή

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Εισαγωγή στην C++ ΔΙΔΑΣΚΟΝΤΕΣ:Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής H Γλώσσα C++ ΙΣΤΟΡΙΑ 1967:

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 7η: Consumer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 7η: Consumer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Ψηφιακή Οικονομία Διάλεξη 7η: Consumer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών Τέλος Ενότητας Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί

Διαβάστε περισσότερα

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ενότητα 5: Ειδικές Μεταβλητές-Χειρισμός Αρχείων Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Ειδικές Μεταβλητές-Χειρισμός Αρχείων

Διαβάστε περισσότερα

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Ψηφιακή Οικονομία Άσκηση αυτοαξιολόγησης 4 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών CS-593 Game Theory 1. For the game depicted below, find the mixed strategy

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Πίνακες & Δείκτες ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πίνακες Πίνακες Τα στοιχεία

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός Προγραμματισμός Η/Υ Ενότητα 3: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Κατανόηση της έννοιας της διεργασίας

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Χειρισμός Εξαιρέσεων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Templates ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 8: Λειτουργικά Συστήματα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Συγχωνευτική Ταξινόμηση (Merge Sort) 7 2 9 4 2 4 7 9 7 2 2 7 9 4

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής Προγραμματισμός Η/Υ Ενότητα 4: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Έλεγχος της ροής ενός προγράμματος

Διαβάστε περισσότερα

Πληροφορική ΙΙ Θεματική Ενότητα 11

Πληροφορική ΙΙ Θεματική Ενότητα 11 Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Πληροφορική ΙΙ Θεματική Ενότητα 11 Συμβολοσειρές Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το

Διαβάστε περισσότερα

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #5: Δομές επιλογής Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Δομές επιλογής MATLAB Programming Α. Καλαμπούνιας Η δομή επιλογής if Η δομή if στο

Διαβάστε περισσότερα

Instruction Execution Times

Instruction Execution Times 1 C Execution Times InThisAppendix... Introduction DL330 Execution Times DL330P Execution Times DL340 Execution Times C-2 Execution Times Introduction Data Registers This appendix contains several tables

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Σύγκριση JAVA-C ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΣΥΓΚΡΙΣΗ JAVA - C ΤΥΠΟΙ

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 8η: Producer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 8η: Producer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Ψηφιακή Οικονομία Διάλεξη 8η: Producer Behavior Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών Firm Behavior GOAL: Firms choose the maximum possible output (technological

Διαβάστε περισσότερα

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

ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ενότητα 3: Phrases to use in business letters and e-mails Το περιεχόμενο του μαθήματος διατίθεται

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 2 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις Άσκηση 1 Έστω ότι µια

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Προγραμματισμός Η/Υ Βασικές Προγραμματιστικές Δομές ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος Δομή Ελέγχου Ροής (IF) Η εντολή IF χρησιμοποιείται όταν

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 7: C++ TEMPLATES, ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ, ΕΞΑΙΡΕΣΕΙΣ Υπερφόρτωση Τελεστών ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ

Διαβάστε περισσότερα

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ενότητα 6: Προβλήματα ΤΝ και Lisp Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Προβλήματα ΤΝ και Lisp 1. Αναζήτηση και Στρατηγικές

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Δομές Ελέγχου ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές Ελέγχου Εισαγωγή Πριν

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης Προγραμματισμός Η/Υ Ενότητα 5: Νίκος Καρακαπιλίδης, Καθηγητής Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών Σκοποί ενότητας Έλεγχος της ροής του προγράμματος

Διαβάστε περισσότερα

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

ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑ ΣΤΗΝ ΑΓΓΛΙΚΗ ΓΛΩΣΣΑ Ενότητα 9: Inversion Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός

Διαβάστε περισσότερα

(C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved. Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.

Διαβάστε περισσότερα

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

PRESENTATION TITLE PRESENTATION SUBTITLE

PRESENTATION TITLE PRESENTATION SUBTITLE COURSE TUTORS : Advanced Materials Processing : D. Mataras, C. Galiotis PRESENTATION TITLE PRESENTATION SUBTITLE A. Student Outline 2 What is my material and why is it interesting? My Application Detailed

Διαβάστε περισσότερα

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch: HOMEWORK 4 Problem a For the fast loading case, we want to derive the relationship between P zz and λ z. We know that the nominal stress is expressed as: P zz = ψ λ z where λ z = λ λ z. Therefore, applying

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 7: Υπορουτίνες Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction)

Διαβάστε περισσότερα

Πληροφορική ΙΙ Ενότητα 1

Πληροφορική ΙΙ Ενότητα 1 Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Πληροφορική ΙΙ Ενότητα 1: Εισαγωγή Θεματική Ενότητα: Εισαγωγή στον Προγραμματισμό Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός

Διαβάστε περισσότερα

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required) Phys460.nb 81 ψ n (t) is still the (same) eigenstate of H But for tdependent H. The answer is NO. 5.5.5. Solution for the tdependent Schrodinger s equation If we assume that at time t 0, the electron starts

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Διάλεξη 17: Έλεγχος Λογισμικού

Διάλεξη 17: Έλεγχος Λογισμικού Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 17: Έλεγχος Λογισμικού (Κεφάλαιο 24.1-24.2, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 17-1 Μεγάλης

Διαβάστε περισσότερα

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Όλοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα μικρότεροι του 10000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Αν κάπου κάνετε κάποιες υποθέσεις

Διαβάστε περισσότερα

Ιστορία νεότερων Μαθηματικών

Ιστορία νεότερων Μαθηματικών Ιστορία νεότερων Μαθηματικών Ενότητα 3: Παπασταυρίδης Σταύρος Σχολή Θετικών Επιστημών Τμήμα Μαθηματικών Περιγραφή Ενότητας Ιταλοί Αβακιστές. Αλγεβρικός Συμβολισμός. Άλγεβρα στην Γαλλία, Γερμανία, Αγγλία.

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 9: Αναδρομή Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Αναδροµή 24 Αναδροµή Πληροφορική Ι Μ. ρακόπουλος 24 Αναδροµικές µέθοδοι Μια µέθοδος καλεί τον εαυτό της

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 9: Μνήμη Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

Ευφυής Προγραμματισμός

Ευφυής Προγραμματισμός Ευφυής Προγραμματισμός Ενότητα 3: Ειδικές Παράμετροι-Είσοδος & Έξοδος Ιωάννης Χατζηλυγερούδης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Περιεχόμενα ενότητας Ειδικές Παράμετροι-Είσοδος & Έξοδος

Διαβάστε περισσότερα

2 Composition. Invertible Mappings

2 Composition. Invertible Mappings Arkansas Tech University MATH 4033: Elementary Modern Algebra Dr. Marcel B. Finan Composition. Invertible Mappings In this section we discuss two procedures for creating new mappings from old ones, namely,

Διαβάστε περισσότερα

Ψηφιακή Οικονομία. Διάλεξη 11η: Markets and Strategic Interaction in Networks Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

Ψηφιακή Οικονομία. Διάλεξη 11η: Markets and Strategic Interaction in Networks Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Ψηφιακή Οικονομία Διάλεξη 11η: Markets and Strategic Interaction in Networks Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών Course Outline Part II: Mathematical Tools

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Αναζήτηση και ταξινόµηση 7 Αναζήτηση (search) Πρόβληµα: αναζήτηση της καταχώρησης key στη

Διαβάστε περισσότερα

Ηλεκτρονικοί Υπολογιστές

Ηλεκτρονικοί Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 9: Πίνακες στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Προγραμματισμός Η/Υ 4 η ενότητα: Δομές Δεδομένων Τμήμα Τεχνολόγων Περιβάλλοντος ΤΕΙ Ιονίων Νήσων Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative

Διαβάστε περισσότερα

Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής

Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής Μανώλης Τζαγκαράκης, Βικτωρία Δασκάλου Σχολή Οργάνωσης

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ Ι Σημειώσεις MATLAB Ενότητα 4 ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 4 Σημειώσεις βασισμένες στο

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Συναρτήσεις 60 Ροή ελέγχου Είναι η σειρά µε την οποία εκτελούνται οι εντολές. Μέχρι τώρα, «σειριακή»,

Διαβάστε περισσότερα

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Αλφαριθμητικά και Αρχεία Αλφαριθμητικά (strings) Αρχεία (files) τα βασικά στοιχεία Αλφαριθμητικά της C Συμβολοσειρές (= ακολουθίες

Διαβάστε περισσότερα

Generics (Γενικότθτα)

Generics (Γενικότθτα) Generics (Γενικότθτα) Μποροφμε να καταςκευάςουμε ΑΤΔ που επιτρζπει χριςθ με διαφορετικοφσ Τφπουσ Δεδομζνων ςτο ίδιο πρόγραμμα; Π.χ. Μια ςτοίβα με char* και μια με int 1 Goals of this Lecture Help you learn

Διαβάστε περισσότερα

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Άσκηση αυτοαξιολόγησης 3-4 Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητες 3 & 4: ένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 10: Συναρτήσεις Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

derivation of the Laplacian from rectangular to spherical coordinates

derivation of the Laplacian from rectangular to spherical coordinates derivation of the Laplacian from rectangular to spherical coordinates swapnizzle 03-03- :5:43 We begin by recognizing the familiar conversion from rectangular to spherical coordinates (note that φ is used

Διαβάστε περισσότερα

Διοικητική Λογιστική

Διοικητική Λογιστική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Διοικητική Λογιστική Ενότητα 10: Προσφορά και κόστος Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ

ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ Ενότητα 6: Infinitives and Gerunds Σταυρούλα Ταβουλτζίδου ΜΗΧ/ΚΩΝ ΠΕΡΙΒΑΛ.&ΜΗΧ/ΚΩΝ ΑΝΤΙΡ.ΤΕ-ΜΗΧ/ΚΩΝ ΑΝΤΙΡΡΥΠΑΝΣΗΣ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 5 η Άσκηση Συγχώνευση & απαρίθμηση Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης

Διαβάστε περισσότερα

Modbus basic setup notes for IO-Link AL1xxx Master Block

Modbus basic setup notes for IO-Link AL1xxx Master Block n Modbus has four tables/registers where data is stored along with their associated addresses. We will be using the holding registers from address 40001 to 49999 that are R/W 16 bit/word. Two tables that

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 8 Ξένα Σύνολα

Διαβάστε περισσότερα

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β 3.4 SUM AND DIFFERENCE FORMULAS Page Theorem cos(αβ cos α cos β -sin α cos(α-β cos α cos β sin α NOTE: cos(αβ cos α cos β cos(α-β cos α -cos β Proof of cos(α-β cos α cos β sin α Let s use a unit circle

Διαβάστε περισσότερα

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων Εξάμηνο 7 ο Procedures and Functions Stored procedures and functions are named blocks of code that enable you to group and organize a series of SQL and PL/SQL

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές δεδομένων Ενότητα 7η: Ουρές Προτεραιότητας Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου 2 Ουρές

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 9: C++ ΕΙΣΟΔΟΣ - ΕΞΟΔΟΣ / ΑΛΦΑΡΙΘΜΗΤΙΚΑ / ΑΡΧΕΙΑ Διαχείριση Αρχείων ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Διαβάστε περισσότερα

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 2 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ

ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ ΟΡΟΛΟΓΙΑ -ΞΕΝΗ ΓΛΩΣΣΑ Ενότητα 3: Relatives Σταυρούλα Ταβουλτζίδου ΜΗΧ/ΚΩΝ ΠΕΡΙΒΑΛ.&ΜΗΧ/ΚΩΝ ΑΝΤΙΡ.ΤΕ-ΜΗΧ/ΚΩΝ ΑΝΤΙΡΡΥΠΑΝΣΗΣ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

Διδακτική Πληροφορικής

Διδακτική Πληροφορικής Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Διδακτική Πληροφορικής Ενότητα 12: Επίλυση προβλημάτων σε προγραμματιστικό περιβάλλον Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 4: Δομές Ελέγχου Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι She selects the option. Jenny starts with the al listing. This has employees listed within She drills down through the employee. The inferred ER sttricture relates this to the redcords in the databasee

Διαβάστε περισσότερα

Lecture 2. Soundness and completeness of propositional logic

Lecture 2. Soundness and completeness of propositional logic Lecture 2 Soundness and completeness of propositional logic February 9, 2004 1 Overview Review of natural deduction. Soundness and completeness. Semantics of propositional formulas. Soundness proof. Completeness

Διαβάστε περισσότερα

Τεχνολογία Πολιτισμικού Λογισμικού

Τεχνολογία Πολιτισμικού Λογισμικού Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Τεχνολογία Πολιτισμικού Λογισμικού Ενότητα 12: SQL και πολιτισμικά δεδομένα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Αλφαριθμητικά θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Πληροφορική ΙΙ Θεματική Ενότητα 5

Πληροφορική ΙΙ Θεματική Ενότητα 5 Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Πληροφορική ΙΙ Θεματική Ενότητα 5 Λογικοί Τελεστές Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 2: Τύποι μεταβλητών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

Βάσεις Περιβαλλοντικών Δεδομένων

Βάσεις Περιβαλλοντικών Δεδομένων Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Βάσεις Περιβαλλοντικών Δεδομένων Ενότητα 11: SQL ερωτήματα ενεργειών Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται

Διαβάστε περισσότερα