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



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

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

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

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

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Δομές δεδομένων (2) Αλγόριθμοι

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 9 Ο. Διαχείριση αλφαριθμητικών και πράξεις σε επίπεδο bit ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΙΝΑΤΚΑΣ Ι.

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

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

Στοιχειώδης προγραμματισμός σε C++

Τυχαίοι αριθμοί Αλφαριθμητικά και χαρακτήρες

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

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

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

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

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

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

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

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

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

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

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

a = 10; a = k; int a,b,c; a = b = c = 10;

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΑΤΙΣΜΟΣ Α (C++) ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΤΩΝ Δρ. Νικόλαος Ζ. Ζάχαρης

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

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

Δομές Δεδομένων Εισαγωγή παράγωγους τύπους δομών δεδομένων Ορισμός και συζήτηση της έννοιας μέλη ετικέτα Τρόπος δήλωσης και ορισμού

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

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

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

Εισαγωγή στην επιστήμη των υπολογιστών. Πράξεις με μπιτ

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

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

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

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

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

Προγραμματισμός σε C. Πράξεις με bits (bitwise operators)

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

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

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

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

Βασικές Αρχές Προγραμματισμού

5 &6. Τύποι δεδομένων, τελεστές και

Σύνθετοι Τύποι εδοµένων. Προγραµµατισµός Ι 1

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

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

8. Συνθήκες ελέγχου, λογικοί τελεστές

Διάλεξη 19: Χαμηλού Επιπέδου Προγραμματισμός I

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

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

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

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

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

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

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

Transcript:

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

Ενώσεις δεδομένων (union) τι και γιατί Συσκευές με μικρή μνήμη => ανάγκη εξοικονόμησης πόρων Παρατήρηση: αχρησιμοποίητη μνήμη. Έστω τύπος δεδομένων που απαιτεί 8 bytes, π.χ. double 1 2 3 4 5 6 7 8 Όσο/όταν δε χρειάζεται μπορεί να αποθηκεύσει οτιδήποτε απαιτεί <= 8 bytes (char, int, float, double, struct μέχρι 8 bytes) Λύση: μία περιοχή μνήμης από κοινού για περισσότερες μεταβλητές Πρακτικός ορισμός: ένωση δεδομένων = μεταβλητή που μπορεί να αλλάζει τύπους.

#include <stdio.h> #include <string.h> Ενώσεις δεδομένων (union) πώς typedef union Student { int AM; char *name; char *fname; int semester; double grade; } STUDENT; int main(int argc, char **argv) { STUDENT someone; Θα τυπώσει: size of STUDENT is 8 someone's AM = 124 someone's family name is Tadopoulos someone's grade = 8.500000 Αν ήταν struct θα είχε μέγεθος 4 + 4 + 4 + 4 + 8 = 24 } printf("size of STUDENT is %d\n", sizeof(student)); someone.am = 124; printf("someone's AM = %d\n", someone.am); someone.fname="tadopoulos"; printf("someone's family name is %s\n", someone.fname); someone.grade = 8.5; printf("someone's grade = %f\n", someone.grade); return 0;

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

Τύποι απαρίθμησης (enum) Επιτρέπουν αντιστοίχιση ακεραίων σταθερών σε συμβολικά ονόματα. Παράδειγμα 1 enum day {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; typedef enum day DAY;... DAY today, tomorrow;... today = Monday; tomorrow = today + 1; printf("αύριο θα είναι %d\n", tomorrow); /* θα τυπώσει 2 */ Παράδειγμα 2 typedef enum spring_months {March=3, April=4, May=5} SPRING; SPRING this_montht, next_month; Παράδειγμα 3 enum dekades {ena = 1, deka = 10, ekato = 100}; enum dekades x, y, z;

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

Χειρισμός δυαδικών δεδομένων: ψηφιακοί τελεστές Τι είναι: οι ψ. τ. (bitwise operators) βλέπουν τα bits μιας μεταβλητής και επιδρούν σε αυτά. Επιτρέπουν χειρισμούς χαμηλού επιπέδου. Για τι δεδομένα: ακέραια (int και παραλλαγές τους, αλλά και char) Πώς λειτουργούν: α) παίρνουν ένα-ένα τα bits μίας ή δύο μεταβλητών και τα αλλάζουν β) μετατοπίζουν τα ψηφία κατά ορισμένες θέσεις Ποιοι είναι και τι κάνουν: Σύμβολο Όνομα Λειτουργία & ψηφιακό AND 1 & 1 1, αλλιώς 0 ψηφιακό OR 0 0 0, αλλιώς 1 ^ ψηφιακό XOR p ^ q 1 για p == q, αλλιώς 0 ~ συμπλήρωμα ως προς 1 ~1 0, ~0 1 >> τελεστής ολίσθησης μετατόπιση ψηφίων δεξιά << τελεστής ολίσθησης μετατόπιση ψηφίων αριστερά Επιτρέπονται και σύνθετοι τελεστές: &=, =, ^= Χαρακτηριστικά-εφαρμογές: πολύ γρήγοροι, κατάλληλοι για βιβλιοθήκες γραφικών και άλλες εφαρμογές βασισμένες σε ακέραια δεδομένα.

ψ. τ. - παραδείγματα AND: εφαρμογή μάσκας για το μηδενισμό συγκεκριμένων ψηφίων. Π.χ. n = (65) 10 = (01000001) 2 (κωδικός ascii για 'Α') Εφαρμογή της μάσκας (11011111) 2 = (223) 10 αντιστρέφει το έκτο από δεξιά ψηφίο: n1 = n & 223 δίνει n1 = (01100001) 2 = (97) 10 (κωδικός ascii για 'a'). Δηλ. η μάσκα (223) 10 μετατοπίζει κατά (32) 10 και κάνει τα κεφαλαία μικρά. Ανάλογες εφαρμογές και για OR, XOR και συμπλήρωμα ως προς 1. Τελεστές ολίσθησης: στο δυαδικό, μετατόπιση αριστερά = διπλασιασμός, μετατόπιση δεξιά = υποδιπλασιασμός. Χρήση: X >> n (διαίρεση διά 2 n ), Χ << n (πολλαπλασιασμός επί 2 n ) Εξήγηση: έστω χ = 41. Χ >> 3 <=> 00101001 00000101 = 41 / 8 = 5 Χ << 2 <=> 00101001 10100100 = 41 * 4 = 164

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

Αναδρομικές συναρτήσεις Τι είναι: συναρτήσεις που καλούν τον εαυτό τους. Παρατήρηση 1: η αναδρομική κλήση ΔΕΝ συμμορφώνεται με το στυλ του Δομημένου Προγραμματισμού (διαδοχή, επιλογή, επανάληψη). Παρατήρηση 2: κάθε αναδρομικός αλγόριθμος μπορεί να μετασχηματιστεί σε μη αναδρομικό (θεώρημα!). Χρειάζεται;;; Πλεονέκτημα: Επιτρέπει πιο συμπαγή, εύκολο στη γραφή και κατανοητό κώδικα. Παράδειγμα: βλ. υλοποίηση της ταχείας ταξινόμησης (ασκήσεις 10ης εβδομάδας). Μειονέκτημα: κάθε κλήση => νέα αντίγραφα τοπικών μεταβλητών => περισσότερη μνήμη (κίνδυνος εξάντλησης στοίβας).

Παραδείγματα αναδρομής int fact(int n) { int p = 1; if(n > 0) p = n * fact(n-1); return p; } Υπολογισμός παραγοντικού: N! = 1. 2. 3..... N άρα, N! =(Ν- 1)!. N double dpow(double x, int n) { if( x == 0) y = 0.0; else if( n == 0 ) y = 1.0; if (n > 0) y = dpow(x, n-1) * x; else if (n < 0) y = dpow(x, n+1) / x; return y; } Υπολογισμός δύναμης: x n = x x x... x = x n-1. x Παρόμοια, x -n = x -(n-1) / x