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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SOAP API. Table of Contents

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

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

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

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

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

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

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

Instruction Execution Times

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

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

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

EE512: Error Control Coding

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

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

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

The Simply Typed Lambda Calculus

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

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

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

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

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

Partial Trace and Partial Transpose

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

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

Fractional Colorings and Zykov Products of graphs

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

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

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

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

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

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

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

Modbus basic setup notes for IO-Link AL1xxx Master Block

Homework 3 Solutions

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

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

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

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

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

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

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

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

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

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

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

Ordinal Arithmetic: Addition, Multiplication, Exponentiation and Limit

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

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

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

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

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

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

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

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

Section 8.3 Trigonometric Equations

derivation of the Laplacian from rectangular to spherical coordinates

6.1. Dirac Equation. Hamiltonian. Dirac Eq.

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

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

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

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

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 Friday mornings 20% 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"); void swap_2(int *x, int *y) { int tmp = *y; } *y = *x; *x = tmp; fprintf(stdout, "swap_2() 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; 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); Also: You can write: int array_1[] = {1, 2, 3} You CANNOT write: int *array_2 = {1, 2, 3} Panayiotis Charalambous 13

Panayiotis Charalambous 14

#include <time.h> clock_t: Data type returned by clock(). Generally defined as long int. time_t: Data type returned by time(). Generally defined as long int. struct tm: A non-linear, broken-down calendar representation of time. 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 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

clock_t start; Record the start time of the algorithm clock_t finish; Record the end time of the algorithm float duration; duration is the program time execution duration = finish start; To convert to seconds duration = (float)(finish - start) / CLOCKS_PER_SEC; 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 17

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); 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 18

1. Initialize program variables 2. start = clock(); 3. Execute Algorithm 4. finish = clock(); 5. Print the results Panayiotis Charalambous 19

Linear & Binary Search

Δεδομένα Ειςόδου: Πίνακασ Χ με 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) 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 21

Δυαδική Διερεύνηςη: βρίςκουμε το μέςο του πίνακα και αποφαςίζουμε αν το 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)) 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 22

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 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 23

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 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 24

k= 1001 500 2 Change MAX to 1.000.000 or more! Compare and explain the results 14 September 2006 ΕΠΛ231-Δομέσ Δεδομένων και Αλγόριθμοι 25