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

Σχετικά έγγραφα
Εισαγωγή στον Προγραμματισμό

Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών. ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δομές

Εισαγωγή στον δομημένο προγραμματισμό

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

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

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

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

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

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

Περιεχόμενα. Πρόλογος...7. Πρόλογος της πρώτης έκδοσης Εισαγωγή...13

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

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

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

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

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

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

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

Δομές δεδομένων (Structures) Εισαγωγή στη C++

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

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

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

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

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

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

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

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

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

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

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

Προγραμματισμός Υπολογιστών με C++

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Εισαγωγή στον δομημένο προγραμματισμό

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

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

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Υπολογιστών με C++

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

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

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

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

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

Πίνακες (Arrays) Εισαγωγή στη C++

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

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

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

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

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 6 Ο. Συναρτήσεις Τοπικές, καθολικές, στατικές μεταβλητές Μεταβλητές τύπου extern και register Αναδρομή

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

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

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

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

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

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

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

Πρόλογος Εισαγωγικά Στοιχεία... 13

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Οι δείκτες στη γλώσσα C

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

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Transcript:

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 8ο Τμήμα Διοίκησης Επιχειρήσεων Παλαιό ΕΠΔΟ α εξάμηνο Β. Φερεντίνος

ΔΟΜΕΣ (STRUCTURES) 161 Οι δομές ομαδοποιούν ένα σύνολο μεταβλητών (πιθανόν διαφορετικών τύπων) κάτω από ένα ενιαίο όνομα. Τα στοιχεία φοιτητών όπως όνομα, διεύθυνση, email, βαθμολογία κτλ, μπορούν να ομαδοποιηθούν σε μία δομή. Οι βασικές διαφορές των δομών από τους πίνακες: Ενώ όλα τα στοιχεία ενός πίνακα είναι του ίδιου τύπου, τα στοιχεία μιας δομής μπορούν να είναι διαφόρων τύπων τα στοιχεία ενός πίνακα προσδιορίζονται από τη θέση τους στον πίνακα, ενώ κάθε μέλος μιας δομής μπορεί να έχει το δικό του όνομα και να προσδιορίζεται με αυτό

Ορισμός δομής 162 struct <όνομα_δομής> { <τύπος_1ου_μέλους> <όνομα_1ου_μέλους>; <τύπος_2ου_μέλους> <όνομα_2ου_μέλους>;... <τύπος_v-ου_μέλους> <όνομα_v-ου_μέλους>; Δομή: σύνθετος τύπος μεταβλητής που μπορεί να εμπεριέχει πολλές απλές μεταβλητές, διαφόρων τύπων.

Παράδειγμα δομής (1) 163 Η δομή ενός σημείου στο επίπεδο, που εμπεριέχει δύο πραγματικές μεταβλητές x και y που αντιστοιχούν στις συντεταγμένες του σημείου: struct point { float x; float y;

Παράδειγμα δομής (2) 164 Ο ορισμός της δομής που προαναφέρθηκε αποτελεί τη δημιουργία ενός καλουπιού για τη δημιουργία συγκεκριμένων δομών του συγκεκριμένου τύπου. Η δήλωση struct ορίζει μόνο το περιεχόμενο της δομής και όχι κάποιο χώρο στη μνήμη. Η δημιουργία συγκεκριμένης δομής πραγματοποιείται με την εντολή: struct <όνομα_δομής> <όνομα_μεταβλητής_δομής>; struct point a, b; Η δήλωση αυτή ορίζει τις δομές a και b τύπου point. Είναι μια δήλωση συντακτικά ισοδύναμη με δηλώσεις του τύπου: int a, b;

Αρχικοποίηση και αναφορά σε μέλη δομής 165 Τα μέλη μιας δομής μπορούν να αρχικοποιηθούν κατά τη δήλωσή της. struct point p1 = {5.5, 2.5 Η αναφορά σε κάποιο συγκεκριμένο μέλος μιας δομής γίνεται με τη χρήση του τελεστή. ως εξής: <όνομα_μεταβλητής_δομής>.<όνομα_μέλους> για τη δομή p (δηλαδή, το σημείο p), struct point p; με τον τελεστή. μπορούν να πραγματοποιηθούν: απόδοση τιμών στις συντεταγμένες: p.x = 5.0; p.y = 3.5; εκτύπωση συντεταγμένων: printf("%f, %f", p.x, p.y); απόσταση από το σημείο (0, 0): float dist; dist = sqrt(p.x * p.x + p.y * p.y);

Συσχετίσεις 166 Δεν υπάρχει σύγχυση ονομάτων δομών και μελών, με ονόματα μεταβλητών ή μελών άλλων δομών: struct point { float x; float y; int point, x, y; struct joint { int x; int y; // δομή // μεταβλητές // δομή

Παράδειγμα 167 Μια δομή book για την καταχώρηση βιβλίων σε ένα βιβλιοπωλείο: struct book { char title[60]; char writer[30]; char isbn[17]; float price; // τιμή int code; // τίτλος // συγγραφέας // ISBN // κωδικός προϊόντος Δημιουργία μιας μεταβλητής-δομής τύπου book: struct book book1 = {"Το MATLAB στην Υπολογιστική Επιστήμη", "C.F. Van Loan, K.-Y. D. Fan", "978-960-973-200-0", 40.50, 1);

Σύνθετες (ένθετες) δομές (1) 168 Με δεδομένη τη δομή για σημεία : struct point { float x; float y; Μια δομή για ορθογώνια παραλληλόγραμμα θα μπορούσε να είναι η εξής: struct rect { struct point pt1; struct point pt2;

Σύνθετες (ένθετες) δομές (2) 169 Για ένα συγκεκριμένο ορθογώνιο : struct rect r1; η πρόσβαση στις συντεταγμένες (x,y) του κάθε σημείου του γίνεται ως εξής: r1.pt1.x = 2.5; r1.pt1.y = 3.0; r1.pt2.x = 10.2; r1.pt2.y = 8.5; Φυσικά, η δημιουργία του συγκεκριμένου ορθογωνίου θα μπορούσε να είχε γίνει και με την εντολή: struct rect r1 = {2.5, 3.0, 10.2, 8.5 όπου οι δύο πρώτες τιμές αφορούν τις μεταβλητές x και y της δομής pt1 και οι δύο τελευταίες τις μεταβλητές x και y της δομής pt2.

Δομές και Συναρτήσεις (1) 170 Οι δομές μπορούν να μεταβιβάζονται ως ορίσματα σε συναρτήσεις ή να επιστρέφονται από συναρτήσεις. Συνάρτηση που δημιουργεί δομή (τύπου point) και την επιστρέφει: struct point makepoint(float x, float y) { } struct point temp; temp.x = x; temp.y = y; return temp; Παράδειγμα χρήσης της: struct rect area; struct point middle; struct point makepoint(double, double);... area.pt1 = makepoint(0.0, 0.0); area.pt2 = makepoint(50.0, 50.0); middle = makepoint((area.pt1.x + area.pt2.x)/2, (area.pt1.x + area.pt2.x)/2);

Δομές και Συναρτήσεις (2) 171 Συνάρτηση που δέχεται δύο δομές και επιστρέφει νέα δομή (ουσιαστικά επιστρέφει το άθροισμα δύο δομών point, προσθέτοντας τις συντεταγμένες των δύο σημείων ): struct point addpoint(struct point p1, struct point p2) { p1.x += p2.x; p1.y += p2.y; return p1; } Οι δομές p1 και p2 περνούν με τιμή στη συνάρτηση, όπως όλα τα ορίσματα στη C.

Δομές και Συναρτήσεις (3) 172 Συνάρτηση που δέχεται δύο δομές διαφορετικού τύπου και επιστρέφει ακέραιο (ελέγχει εάν ένα σημείο βρίσκεται στο εσωτερικό ενός ορθογωνίου) int pt_in_rect(struct point p, struct rect r) { } return p.x > r.pt1.x && p.x < r.pt2.x && p.y > r.pt1.y && p.y < r.pt2.y;

Παράδειγμα 173 Ένα ολοκληρωμένο πρόγραμμα που ελέγχει εάν δύο δεδομένα σημεία βρίσκονται στο εσωτερικό ενός δεδομένου ορθογωνίου: include <stdio.h> // Ορισμοί δομών: struct point { float x; float y; struct rect { struct point pt1; struct point pt2; // Δήλωση της συνάρτησης: int pt_in_rect(struct point p, struct rect r); (συνεχίζεται)

174 Παράδειγμα // Η συνάρτηση main: void main() { struct rect r1 = {2, 3, 4, 5 // Η συνάρτηση pt_in_rect: int pt_in_rect(struct point p, struct rect r) { return p.x > r.pt1.x && p.x < r.pt2.x && p.y > r.pt1.y && p.y < r.pt2.y; } // Δημιουργία ενός ορθογωνίου struct point p1 = {3,4 // Δημιουργία του σημείου (3,4) struct point p2 = {0,1 // Δημιουργία του σημείου (0,1) int in1, in2; in1 = pt_in_rect(p1, r1); in2 = pt_in_rect(p2, r1); // Έλεγχος εάν τα σημεία είναι εσωτερικά στο r1 } printf("%d, %d", in1, in2); // Εκτύπωση των αποτελεσμάτων // (το "1" σημαίνει ότι βρίσκεται στο εσωτερικό, το "0" όχι) Το πρόγραμμα θα εκτυπώσει: 1, 0

Πίνακες Δομών (1) 175 Μπορούν να δημιουργηθούν πίνακες τα στοιχεία των οποίων να είναι δομές. Έστω οι δομές grades και student ως εξής: struct grades{ int c, cpp, java; struct student{ int am; char *name; struct grades v; Η δομή grades αναφέρεται στους βαθμούς τριών μαθημάτων (C, C++ και Java), ενώ η δομή student αναφέρεται στα στοιχεία ενός φοιτητή (αριθμό μητρώου, όνομα και βαθμούς στα συγκεκριμένα τρία μαθήματα).

Πίνακες Δομών (2) 176 Πλέον, μπορούμε να δημιουργήσουμε έναν πίνακα π.χ. 10 φοιτητών, ως εξής: struct student std[10]; Τα στοιχεία του πίνακα std είναι δομές τύπου student. Η αναφορά στα στοιχεία του πίνακα γίνεται πάλι με τον τελεστή. ως εξής: std[0].am = 999; std[0].name = "Όνομα 1"; std[0].v.c = 8; std[0].v.cpp = 7; std[0].v.java = 10; Αυτά αφορούν την απόδοση τιμών στα στοιχεία του πρώτου φοιτητή (στοιχείο του πίνακα με δείκτη 0).

Πίνακες Δομών (3) 177 Η δήλωση (ορισμός), δημιουργία και αρχικοποίηση των στοιχείων του πίνακα δομών θα μπορούσε να γίνει πιο σύντομα, σε ένα βήμα, ως εξής: struct student{ int am; char *name; struct grades v; } std[10] = { {999, "Όνομα 1", 8, 7, 10}, {888, "Όνομα 2", 6, 5, 3}...

Πίνακες Δομών (4) 178 Ή, εάν έχει ήδη ορισθεί ο τύπος της δομής student όπως πριν: struct student{ int am; char *name; struct grades v; θα μπορούσε απλά να συντομευθεί η δημιουργία και η αρχικοποίηση του πίνακα std: struct student std[10] = { {999, "Όνομα 1", 8, 7, 10}, {888, "Όνομα 2", 6, 5, 3}...