Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

Σχετικά έγγραφα
Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

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

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

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

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

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

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

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

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Η γλώσσα C. Δείκτες (pointers)

Προγραμματισμός Αναδρομή

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

ΗΥ-150. Ταξινόµηση και Αναζήτηση

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης (Κεφάλαιο , KNK-2ED)

Προγραμματισμός Αναδρομή

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

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

SOAP API. Table of Contents

{C} Programming. Part 2/2 Advanced Pointers, Structs, Memory Allocation, Examples using structs

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Σημειώσεις δεύτερης εβδομάδας

The Simply Typed Lambda Calculus

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

C: Από τη Θεωρία στην Εφαρμογή

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

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Προγραμματισμός Επιπλέον στοιχεία της C++

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Μεθόδων Επίλυσης Προβλημάτων

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

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

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

Διάλεξη 9η: Πίνακες (arrays)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Διάλεξη 04: Παραδείγματα Ανάλυσης

Δείκτες (Pointers) (1/2) ΗΥ150 Προγραμματισμός

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

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

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

EE512: Error Control Coding

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

Nowhere-zero flows Let be a digraph, Abelian group. A Γ-circulation in is a mapping : such that, where, and : tail in X, head in

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

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

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

Fractional Colorings and Zykov Products of graphs

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

Ένα απλό πρόγραμμα C

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

ΗΥ-150. Προγραµµατισµός. υναµική ιαχείριση Μνήµης (1/2)

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

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

ΗΥ-150. Πίνακες (Arrays)

Instruction Execution Times

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Η γλώσσα C. Δείκτες (pointers)

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

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

ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Οι παρακάτω λύσεις είναι απολύτως ενδεικτικές

The challenges of non-stable predicates

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

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

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

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

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

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

Φροντιςτήριο. Linked-List

Μεθόδων Επίλυσης Προβλημάτων

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

Transcript:

Lab 1: C/C++ Pointers and time.h Panayiotis Charalambous 1

Send email to totis@cs.ucy.ac.cy Subject: EPL231-Registration Body: Surname Firstname ID Group A or B? Panayiotis Charalambous 2

Code Guidelines: Clean Code Comments Error control Don t Overcomplicate Make it work, THEN optimize Trouble? Email Room 122, Tuesday and Thursday mornings 10% of Grade - Programming Exercises Panayiotis Charalambous 3

Panayiotis Charalambous 4

Pointer: a variable that stores the memory address of another variable Why: Direct Memory Access Speed Memory Handling of complex data types: Strings, Arrays Panayiotis Charalambous 5

Syntax: int *p1; float *p2; char **p3; struct mystruct *p4; void *p5; Panayiotis Charalambous 6

Operators: Address of operator: &var: Returns the memory address of variable var Indirection operator (Dereference a pointer): *ptr: Access the memory contents at the address pointed by pointer ptr. Can we dereference all pointers? NO: think of void pointers! Why: Every variable occupies different amount of memory. Panayiotis Charalambous 7

Addition: Type *ptr = 1000; Type *ptr2 = ptr + 10; ptr2 = ptr + 10 * sizeof(type) Subtraction: Type *ptr = 1000; Type *ptr2 = ptr - 10; ptr2 = ptr - 10 * sizeof(type) Valid for every type except void. Panayiotis Charalambous 8

malloc, calloc, etc./free new / delete Panayiotis Charalambous 9

int main() { } int x = 23; float y = 1.33f; int *p_x; p_x = &x; Address 1000 x 1004 y 1008 p_x 100C Data 23 1.33f 1000 100F Panayiotis Charalambous 10

#include <stdio.h> #include <stdlib.h> void swap_1(int x, int y); void swap_2(int *x, int *y); void swap_1(int x, int y) { int tmp = y; y = x; x = tmp; } fprintf(stdout, "swap_1() called\n"); int main() { int x = 3; int y = 10; } fprintf(stdout, "x = %d, y = %d\n", x, y); swap_1(x, y); fprintf(stdout, "x = %d, y = %d\n", x, y); swap_2(&x, &y); fprintf(stdout, "x = %d, y = %d\n", x, y); return 0; void swap_2(int *x, int *y) { int tmp = *y; *y = *x; *x = tmp; } fprintf(stdout, "swap_2() called\n"); x = 3, y = 10 swap_1() called x = 3, y = 10 swap_2() called x = 10, y = 3 Panayiotis Charalambous 11

PROCESS MEMORY ORGANIZATION SEGMENTS: Code, Text: The binary code Data: Global variables BSS: Static Variables Heap: Dynamically allocated memory Stack: Local storage, function calls, function parameters, return address Panayiotis Charalambous 12

int array_1[100]; int *array_2 = (int *)malloc(100 * sizeof(int)); Both can be accessed using array notation: array_1[5] = 20; array_2[12] = 23; Both can be accessed using pointer notation: *(array_1 + 5) = 20; *(array_2 + 12) = 23; array_1 is stored in the Stack Local Storage Automatically destroyed after leaving scope array_2 is stored in the Heap Dynamic Storage HAS to be freed explicitly: free(array_2); Panayiotis Charalambous 13

Panayiotis Charalambous 14

#include <time.h> clock_t: Used for counting clock ticks. Data type returned by clock(). time_t: Used for counting seconds. Data type returned by time(). struct tm: A non-linear, broken-down calendar representation of time. Panayiotis Charalambous 15

clock_t clock (void); Returns the number of clock ticks elapsed since the program was launched. We can get seconds if we divide this with CLOCKS_PER_SEC (in some systems CLK_PER_SEC) time_t time (time_t *timer); Returns the number of seconds that elapsed since 00:00, 01/01/1970 Panayiotis Charalambous 16

// Variable declarations clock_t start = 0; clock_t finish = 0; float duration = 0.0f; // Time our algorithm start = clock(); runmyalgorithm(); finish = clock(); // Duration of algorithm in seconds duration = (float)(finish - start) / CLOCKS_PER_SEC; // Print results printf("start:%u\n", start); printf("finish:%u\n", finish); printf( "Duration:%5.1f seconds\n", duration); printf( "Duration:%5.0f miliseconds\n", duration*1000); Panayiotis Charalambous 17

Linear & Binary Search Panayiotis Charalambous 18

Δεδομένα Ειςόδου: Πίνακασ Χ με n ςτοιχεία, ταξινομημένοσ από το μικρότερο ςτο μεγαλύτερο, και ακέραιοσ k. Στόχοσ: Να εξακριβώςουμε αν το k είναι ςτοιχείο του Χ. Γραμμική Διερεύνηςη: εξερευνούμε τον πίνακα από τα αριςτερά ςτα δεξιά. int linear( int X[], int n, int k){ int i=0; while ( i < n ) if (X[i] == k) return i; if (X[i] > k) return -1; i++; return -1; } Χρόνοσ εκτέλεςησ: Εξαρτάται από το που (και αν) ο k βρίςκεται ςτον Χ[n]. Χείριςτη περίπτωςη: O(n) Panayiotis Charalambous 19

Δυαδική Διερεύνηςη: βρίςκουμε το μέςο του πίνακα και αποφαςίζουμε αν το k ανήκει ςτο δεξιό ή το αριςτερό μιςό. Επαναλαμβάνουμε την ίδια διαδικαςία ςτο "μιςό" που μασ ενδιαφέρει. int binary( int X[],int n,int k){ int low = 0, high = n-1; int mid; while ( low < high ){ mid = (high + low)/2; if (X[mid] < k) low = mid + 1; else if (X[mid] > k) high = mid - 1; else return mid; } return -1; } Χρόνοσ εκτέλεςησ; O(lg(n)) Panayiotis Charalambous 20

Define a variable MAX=1000 Create a table of size MAX Initialize table from 0-(MAX-1) Implement both linear and binary search Create a menu for entering the k-element Panayiotis Charalambous 21

Program Flow Initialize table Enter k element start = clock(); Execution of linear search finish = clock(); Print the results start = clock(); Execution of binary search finish = clock(); Print the results Panayiotis Charalambous 22

k= 1001 500 2 Change MAX to 1.000.000 or more! Compare and explain the results Panayiotis Charalambous 23

Questions? totis@cs.ucy.ac.cy Panayiotis Charalambous 24