ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομές Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Σχετικά έγγραφα
ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. πέρα απο απλές μεταβλητές... ΔΟΜΕΣ. Παράδειγμα #1: διάνυσμα. Ορισμός δομής

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολή if. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Μαθηματικά και Φυσική με Υπολογιστές

Γενικά Μαθηματικά Ι. Ενότητα 9: Κίνηση Σε Πολικές Συντεταγμένες. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Υπολογιστές Ι. Άδειες Χρήσης. Υποπρογράμματα. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Υπολογιστές Ι. Άδειες Χρήσης. Μεταβλητές και πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Υπολογιστές Ι. Άδειες Χρήσης. Συναρτήσεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Σύγxρονη Φυσική II. Κεντρικά Δυναμικά Διδάσκων : Επίκ. Καθ. Μ. Μπενής

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

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

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

Υπολογιστές Ι. Άδειες Χρήσης. Πολυδιάστατοι πίνακες. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τάξεις Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Γενικά Μαθηματικά Ι. Ενότητα 5: Παράγωγος Πεπλεγμένης Συνάρτησης, Κατασκευή Διαφορικής Εξίσωσης. Λουκάς Βλάχος Τμήμα Φυσικής

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Μικροβιολογία & Υγιεινή Τροφίμων

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

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

Γενικά Μαθηματικά Ι. Ενότητα 14: Ολοκλήρωση Κατά Παράγοντες, Ολοκλήρωση Ρητών Συναρτήσεων Λουκάς Βλάχος Τμήμα Φυσικής

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Γενική Φυσική Ενότητα: Κινητική

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

ΦΥΣΙΚΗ. Ενότητα 2: ΔΙΑΝΥΣΜΑΤΑ ΚΑΙ ΣΥΣΤΗΜΑΤΑ ΣΥΝΤΕΤΑΓΜΕΝΩΝ. Αν. Καθηγητής Πουλάκης Νικόλαος ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε.

Ενότητα: Δακτύλιοι, Ακέραιες Περιοχές, Σώματα. Διδάσκων: Καθηγητής Μαρμαρίδης Νικόλαος - Θεοδόσιος

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

Εφαρμοσμένη Στατιστική

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

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ. ΕΝΟΤΗΤΑ: Διανύσματα στους Rn, Cn, διανύσματα στο χώρο (1) ΔΙΔΑΣΚΩΝ: Βλάμος Παναγιώτης ΙΟΝΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Γενικά Μαθηματικά Ι. Ενότητα 16: Ολοκλήρωση Τριγωνομετρικών Συναρτήσεων, Γενικευμένα Ολοκληρώματα Λουκάς Βλάχος Τμήμα Φυσικής

Γενικά Μαθηματικά Ι. Ενότητα 17: Αριθμητική Ολοκλήρωση, Υπολογισμός Μήκους Καμπύλης Λουκάς Βλάχος Τμήμα Φυσικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Ενότητα: Ο Δακτύλιος Πολυωνύμων μιας Μεταβλητής. Διδάσκων: Καθηγητής Μαρμαρίδης Νικόλαος - Θεοδόσιος

Οικονομετρία. Πολλαπλή Παλινδρόμηση. Στατιστικός έλεγχος γραμμικού συνδυασμού συντελεστών. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

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

Διανύσματα στις 3 Διαστάσεις

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Σύγxρονη Φυσική II. Το άτομο του Υδρογόνου Διδάσκων : Επίκ. Καθ. Μ. Μπενής

Γενικά Μαθηματικά Ι. Ενότητα 1: Συναρτήσεις και Γραφικές Παραστάσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Σύγxρονη Φυσική II. Ατομική Δομή ΙΙΙ Διδάσκων : Επίκ. Καθ. Μ. Μπενής

Εκμετάλλευση και Προστασία των Υπόγειων Υδατικών Πόρων

Λογισμός 3. Ενότητα 19: Θεώρημα Πεπλεγμένων (γενική μορφή) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

Εφαρμοσμένη Βελτιστοποίηση

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Πληροφορική. Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες.

ΤΑΞΕΙΣ. Ορισμός τάξης. Στο προηγούμενο κεφάλαιο γενικεύσαμε τις μεταβλητές Δομές: σύνθετες μεταβλητές Συναρτήσεις που δέχονται και επιστρέφουν δομές

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ. ΕΝΟΤΗΤΑ: Διανυσματικοί Χώροι (1) ΔΙΔΑΣΚΩΝ: Βλάμος Παναγιώτης ΙΟΝΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ιστορία της μετάφρασης

Μαθηματική Ανάλυση ΙI

Γενικά Μαθηματικά Ι. Ενότητα 19: Υπολογισμός Εμβαδού και Όγκου Από Περιστροφή (2 ο Μέρος) Λουκάς Βλάχος Τμήμα Φυσικής

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Μιγαδικός λογισμός και ολοκληρωτικοί Μετασχηματισμοί

Θεωρία Πιθανοτήτων & Στατιστική

Οικονομετρία. Ψευδομεταβλητές Δύο ή περισσότερες ψευδομεταβλητές που επιδρούν στην σταθερά της συνάρτησης. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

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

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

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

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Μονοδιάστατοι πίνακες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ηλεκτρισμός & Μαγνητισμός

ΦΥΣΙΚΗ. Ενότητα 1: Εισαγωγή στη Φυσική-Ακρίβεια & Σημαντικά Ψηφία- Βαθμωτά Μεγέθη-Διανυσματικά Μεγέθη

Γενικά Μαθηματικά Ι. Ενότητα 13: Ακτίνα Σύγκλισης, Αριθμητική Ολοκλήρωση, Ολοκλήρωση Κατά Παράγοντες. Λουκάς Βλάχος Τμήμα Φυσικής

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Κβαντική Θεωρία ΙΙ. Πρόσθεση Στροφορμών Διδάσκων: Καθ. Λέανδρος Περιβολαρόπουλος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Κβαντική Θεωρία ΙΙ. Συστήματα Πολλών Σωματίων Διδάσκων: Καθ. Λέανδρος Περιβολαρόπουλος

Γενικά Μαθηματικά Ι. Ενότητα 2: Τριγωνομετρικές, Εκθετικές και Σύνθετες Συναρτήσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

Τίτλος Μαθήματος: Εργαστήριο Φυσικής Ι

ΦΥΣΙΚΗ. Ενότητα 2: Ταχύτητα - Επιτάχυνση

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

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Γενική Φυσική. Ενότητα 1: Κινητική. Γεώργιος Βούλγαρης Σχολή Θετικών Επιστημών Τμήμα Μαθηματικών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Υπολογιστές Ι. Άδειες Χρήσης. Εντολή IF. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συναρτήσεις πολλών μεταβλητών Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Σύγxρονη Φυσική II. Κβαντομηχανική σε τρεις διαστάσεις Διδάσκων : Επίκ. Καθ. Μ.

Προγραμματισμός Η/Υ. 8 η ενότητα: Περιβαλλοντικά και μαθηματικά προβλήματα. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων

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

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

Κβαντική Επεξεργασία Πληροφορίας

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

Προηγμένος έλεγχος ηλεκτρικών μηχανών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Άδειες Χρήσης ΥΠΟΛΟΓΙΣΤΕΣ ΙI Δομές Διδάσκοντες: Αν Καθ Δ Παπαγεωργίου, Αν Καθ Ε Λοιδωρίκης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creatve Commons Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ πέρα απο απλές μεταβλητές ΔΟΜΕΣ Μέχρι εδώ έχουμε δεί δύο τύπους μεταβλητών: nt (ακέραιος, 4 bytes) double (ρητός διπλής ακρίβειας, 8 bytes) Σε πολλά προβλήματα χρειαζόμαστε πάνω απο μια μεταβλητή για να καθορίσουμε ένα μέγεθος Πχ δίανυσμα (3 ρητοί: x, y, ) μιγαδικός ( ρητοί: real, magnary) άτομο (5 ρητοί: x, y,, m, q) Πράξεις με αυτά τα μεγέθη σημαίνει Πράξεις με πολλές μεταβλητές το αποτέλεσμα εμπεριέχει πολλές μεταβλητές 1 Είναι βολικό να δημιουργήσουμε νέες, πολυσύνθετες μεταβλητές Ορισμός δομής Παράδειγμα #1: διάνυσμα Νέου τύπου μεταβλητή: Ορίζεται απο τον προγραμματιστή Εμπεριέχει οποιοδήποτε αριθμό και συνδιασμό άλλων μεταβλητών διαφόρων τύπων Στην δήλωση μιας δομής χρησιμοποιείται η δευσμευμένη λέξη της C++: struct Γενικός τρόπος δήλωσης struct όνομα{ τύπος μεταβλητή1 ; τύπος μεταβλητή ; struct vector{ double x; double y; double ; ; Στο «όνομα» χρησιμοποιούμε κάτι που είναι περιγραφικό Επιλέξαμε «vector» Στο εξής, το vector καθιστά νέο τύπο δηλαδή, στο εξή υπάρχουν: nt, double, vector Μέσα στο σώμα της δομής, ορίζουμε τα μέλη της δομής τύπο και όνομα χρησιμοποιούμε ονόματα που είναι περιγραφικά για τις x,y, συνιστώσες, χρησιμοποιούμε απλά x, y, 3 4 ; Ο ορισμός δομής είναι εντολή, άρα τελειώνει με ερωτηματικό

Δήλωση μεταβλητών δομής Προσπέλαση μελών δομής Ο ορισμός της δομής γίνεται πρίν την man Στο κυρίως πρόγραμμα δηλώνουμε μια μεταβλητή δομής όπως και στις απλές μεταβλητές Πχ Για να δηλώσουμε δύο διανύσματα: #nclude <ostream> usng namespace std; struct vector { double x, y, ; ; vector v, u; 5 Πράξεις επιτρέπονται μόνο μεταξύ απλών μεταβλητών δηλαδή μεταξύ των μελών της δομής Πως όμως φτάνουμε στα απλά μέλη της δομής; χρησιμοποιούμε τον τελεστή της τελείας χρησιμοποιούμε τα ίδια σύμβολα με αυτά που ορίσαμε Πχ για ανάθεση τιμών σε διάνυσμα #nclude <ostream> usng namespace std; struct vector {double x, y, ;; vector v, u; vx = 30; vy = 40; v = 50; ux = 110; uy = 10; u = 130; 6 Είσοδος/έξοδος τιμών δομής Πράξεις μεταξύ δομών Μπορούμε να εισάγουμε και κατευθείαν απο το πληκτρολόγιο Παράδειγμα: cout<< εισάγετε τις συνιστώσες διανύσματος << endl; cn >> vx >> vy >> v; Μπορούμε να εξάγουμε τιμές στην οθόνη Παράδειγμα: cout<< οι συνιστώσες του διανύσματος είναι << endl; cout << ux << << uy << << u << endl; ΠΡΟΣΟΧΗ: οι συναρτήσεις cout και cn δέχονται μόνο απλές μεταβλητές, ΟΧΙ δομές Τα παρακάτω είναι ΛΑΘΟΣ: cn >> v; Cout << u; 7 8 Μόνο η πράξη «=» επιτρέπεται μεταξύ μεταβλητών της ίδιας δομής γίνεται μια προς μια αντιγραφή των μελών της μιας στην άλλη cn >> vx >> vy >> v; u = v; cout << ux << << uy << << u << endl; Στην πράξη, αυτό που εκτελείται είναι cn >> vx >> vy >> v; ux = vx; uy = vy; u = v; cout << ux << << uy << << u << endl; Καμία άλλη πράξη, πχ «+, -, *, /» δεν επιτρέπεται

Παράδειγμα #1: πρόσθεση διανυσμάτων Άλλα παραδείγματα δομών #nclude <ostream> usng namespace std; struct vector {double x, y, ;; vector v, u, w; cout << εισάγετε συνιστώσες διανυσμάτων << endl; cn >> vx >> vy >> v; cn >> ux >> uy >> u; wx = vx + ux; wy = vy + uy; w = v + u; cout << οι συνιστώσες του αθροίσματος είναι << endl; cout << wx << << wy << << w << endl; 9 Σύμβολα και ονοματολογία είναι επιλογή του προγραμματιστή Σημαντικό να περιγράφουν το μέγεθος στο οποίο αντιστοιχούν Δομή για μιγαδικούς Δομή για ιόντα struct complex{ double real, mag; ; struct on{ double x, y,, m, q; ; Δομή για προϊόντα σε αποθήκη, που περιλαμβάνει κωδικό προϊόντος, έτος κατασκευής, τιμή πώλησης struct tem{ nt code, year; double prce; ; 10 Πίνακες δομών Παράδειγμα #: μέσος όρος του μέτρου διανυσμάτων (1/) Όταν ορίζουμε μια δομή, ορίζουμε μια νέου τύπου μεταβλητή Όπως και στις απλές μεταβλητές, μπορούμε να ορίσουμε πίνακα απο τις νέες μεταβητές Η προσπέλαση γίνεται πάλι με την τελεία, αμέσως μετά την δεικτοδότηση του πίνακα Παράδειγμα: δήλωση πίνακα με 1000 διανύσματα vector v[1000]; v[0]x = 30; v[0]y = 40; v[0] = 50; v[1]x = 30; v[1]y = 40; v[1] = 50; 11 Πρόγραμμα που διαβάζει n διανύσματα, και υπολογίζει τον μέσο όρο των μέτρων τους #nclude <ostream> usng namespace std; struct vector {double x, y, ;; nt n; vector v[1000]; cout << "εισάγετε τον αριθμό διανυσμάτων << endl; cn >> n; f(n==0) cout << ο μέσος όρος είναι 0 << endl; else f (n > 1000) cout << πιό λίγα διανύσματα <<endl; else { for (nt =0; <n; ++) 1 cn >> v[]x >> v[]y >> v[];

Παράδειγμα #: μέσος όρος του μέτρου διανυσμάτων (/) Δομές μέσα σε δομές double s = 0; for (nt =0; <n; ++) s += sqrt(v[]x * v[]x + v[]y * v[]y + v[] * v[]); cout << ο μέσος όρος είναι << s/n << \n ; Μια δομή συνιστά μια νέα μεταβλητή Με την σειρά της, μια δομή μπορεί να αποτελέσει μέλος μιας πιο σύνθετης δομής Παράδειγμα: ιόν με θέση, μάζα και φορτίο struct vector { double x, y, ; ; struct on{ vector r; double m, q; ; 13 Διαδοχική προσπέλαση γίνεται με διαδοχικές τελείες 14 Παράδειγμα #3: Δομή για ιόντα (1/) Παράδειγμα #3: Δομή για ιόντα (/) Πρόγραμμα που διαβάζει n ιόντα, και υπολογίζει τη συνολική μάζα και φορτίο, και τη μέση απόσταση απο την αρχή των αξόνων #nclude <ostream> usng namespace std; struct vector { double x, y, ; ; struct on { vector r; double m, q; ; nt n; on a[1000]; f (n < 1 n > 1000) return 1; for (nt =0; <n; ++) cn >> a[]rx >> a[]ry >> a[]r >> a[]m >> a[]q; double sm = 0; double sq = 0; double sd = 0; for (nt =0; <n; ++){ sm += a[]m; sq += a[]q; sd += sqrt(v[]rx * v[]rx + v[]ry * v[]ry + v[]r * v[]r); cout << "εισάγετε τον αριθμό των ιόντων << endl; cn >> n; 15 cout << η συνολική μάζα είναι << sm << endl; cout << το συνολικό φορτίο είναι << sq << endl; cout << η μέση απόσταση είναι << sd/n << endl; 16

Παράδειγμα #4: πράξεις με μιγαδικούς Παράδειγμα #4: πράξεις με μιγαδικούς (1/) Πρόγραμμα που διαβάζει δύο μιγαδικούς, και τυπώνει το άθροισμα, την διαφορά, και το γινόμενό τους ~ = 1 ~ ~ + ~ 1 ~ ~ 1 ~ ~ 1 ( = r r + = ( = ( = ( 1 1 + + r r 1 ) + ( ) + ( + ) ( ) + ( r 1 1 + + 1 ) ) + ) = r ) 17 #nclude <ostream> usng namespace std; struct complex { double real, mag; ; complex 1,, sum, df, prod; cout << "εισάγετε δύο μιγαδικούς << endl; cn >> eal >> 1mag; cn >> real >> mag; sumreal = eal + real; summag = 1mag + mag; dfreal = eal real; dfmag = 1mag mag; 18 Παράδειγμα #4: πράξεις με μιγαδικούς (/) Γιατί δεν επιτρέπονται άλλες πράξεις; endl; prodreal = eal*real - 1mag*mag; prodmag = eal*mag + 1mag*real; cout << το άθροισμα είναι << endl; cout << sumreal << << summag << endl; cout << η διαφορά είναι << endl; cout << dfreal << << dfmag << endl; cout << το γινόμενο είναι << endl; cout << prodreal << << prodmag << 19 Ανάλογα το φυσικό πρόβλημα που επιλύουμε, μια πράξη μπορεί να έχει διαφορετικό νόημα Παράδειγμα, ο πολλαπλασιασμός: Σε διανύσματα, το εσωτερικό γινόμενο είναι ρητός r a r b = a b + a b + a b = ρητός αριθμός x x y y Σε μιγαδικούς, το γινόμενο είναι μιγαδικός ~ ~ 1 ( r = ( 1 1 + ) ( ) + ( r Στην C++ ο χρήστης μπορεί να «προγραμματίσει» τις πράξεις μεταξύ μεταβλητών δομής Με χρήση συναρτήσεων Με ολοκληρωμένο ορισμό αντικειμένων (τάξεις) + + ) = 1 r ) = μιγαδικός 0

Συναρτήσεις με δομές Ορισμός, δήλωση και κλήση μιας συνάρτησης με δομές γίνεται όπως και με τις απλές μεταβλητές Στην λίστα εισόδου μπορούμε να έχουμε δομές Στην έξοδο μπορούμε να έχουμε δομή Οι πράξεις μέσα στην συνάρτηση γίνονται όπως είδαμε πριν με τον τελεστή της τελείας Παράδειγμα: συνάρτηση που υπολογίζει το μέτρο διανύσματος double magntude (vector v){ double d = sqrt(vx*vx + vy*vy + v*v); return d; 1 Παράδειγμα #5: συναρτήσεις για πρόσθεση και αφαίρεση και γινόμενο διανυσμάτων vector sum (vector v, vector u){ vector w; wx = vx + ux; wy = vy + uy; w = v + u; return w; vector df (vector v, vector u){ vector w; wx = vx - ux; wy = vy - uy; w = v - u; return w; double product (vector v, vector u){ return vx*ux + vy*uy + v*u; Υπερφόρτωση συναρτήσεων: πολυμορφισμός Μπορούμε να γράψουμε μια βιβλιοθήκη με συναρτήσεις για κάθε είδους μεταβλητής double sum (double x, double y){ μια απλούς ρητούς return x + y; complex sum (complex 1, complex ){ complex 3; 3real = eal + real; για μιγαδικούς 3mag = 1mag + mag; return 3; vector sum (vector v, vector u){ vector w; wx = vx + ux; για διανύσματα wy = vy + uy; w = v + u; return w; 3 Παράδειγμα #6: Πλήρες πρόγραμμα για πράξεις με διανύσματα (1/) Πρόγραμμα που διαβάζει δύο διανύσματα, και τυπώνει το μέτρο του καθενός, το μέτρο του αθροίσματος, το μέτρο της διαφοράς, καθώς και και το εσωτερικό τους γινόμενο #nclude <ostream> usng namespace std; struct vector {double x, y, ;; vector sum (vector, vector); vector df (vector, vector); double product (vector, vector); double magntude (vector); vector v, u; cout << εισάγετε συνιστώσες διανυσμάτων << endl; cn >> vx >> vy >> v; cn >> ux >> uy >> u; 4

Παράδειγμα #6: Πλήρες πρόγραμμα για πράξεις με διανύσματα (/) Μια συνάρτηση μπορεί να καλεί άλλη συνάρτηση cout << τα μέτρα των διανυσμάτων είναι << endl; cout << magntude(v) << << magntude(u) << endl; cout << το μέτρο του αθροίσματος είναι << endl; cout << magntude( sum(v, u) ); cout << το μέτρο της διαφοράς είναι << endl; cout << magntude( df(v, u) ); cout << το γινόμενο είναι << endl; cout << product(v, u); Παράδειγμα: συνάρτηση που υπολογίζει τη γωνία μεταξύ δύο διανυσμάτων r r r r r r a b a b = a b cosθ θ = a cos r r a b double angle (vector a, vector b){ double theta, m1, m; m1 = magntude(a); m = magntude(b); f (m1 == 0 m == 0) theta = 0; else f (m1*m == 0) theta = 90; else theta = acos( product(a,b)/(m1*m) )* 180/acos(-10); 5 return theta; 6 Δείκτες σε δομές Εισαγωγή πίνακα δομής σε συνάρτηση Όπως και στις απλές μεταβλητές, μπορούμε να δηλώσουμε δείκτη σε μεταβλητή δομής χρησιμοποιώντας τον τελεστή αστέρι «*» Ο δείκτης είναι η διεύθυνση του πρώτου στοιχείου της δομής παράδειγμα, δείκτης σε διάνυσμα struct vector { double x, y, ; ; vector v, *p; // ανάθεση διεύθυνσης p = &v; 7 Όπως και στην περίπτωση των πινάκων απλών μεταβλητών, ένας πίνακας δομής εισέρχεται ώς δείκτης Παράδειγμα: μέσος όρος των μέτρων ενός πίνακα διανυσμάτων double ave_magn(vector *v, nt n){ double s = 0; for (nt =0; <n; ++) s += sqrt(v[]x * v[]x + v[]y * v[]y + v[] * v[]); return s/n; 8

Παράδειγμα #7: μέσος όρος μέτρων διανυσμάτων #nclude <ostream> #nclude <cmath> usng namespace std; struct vector {double x, y, ;; double ave_magn(vector *, nt); nt n; vector v[1000]; cout << "εισάγετε τον αριθμό διανυσμάτων << endl; cn >> n; Πλήρες πρόγραμμα που υπολογίζει τον μέσο όρο των μέτρων ενός πίνακα διανυσμάτων f(n==0 n>1000) return 1; for (nt =0; <n; ++) cn>>v[]x>>v[]y>>v[]; cout << ave_magn(v, n) <<endl; 9 Παράδειγμα #8:# ιόντα Πρόγραμμα που διαβάζει n ιόντα και υπολογίζει το κέντρο μάζας, την ολική ηλεκτροστατική ενέργεια, και την δύναμη που ασκείται σε κάθε ιόν Θα χρειαστούμε: Την δομή για ιόντα Συνάρτηση για κέντρο μάζας Συνάρτηση για απόσταση δύο ιόντων Συνάρτηση για ηλεκτροστατική ενέργεια ενός ιόντος Συνάρτηση για την συνολική δύναμη που νοιώθει ένα ιόν = 1 q q E j 0 n j r r = j j q q ( x x ) n x = 1 j j j r r 3 = 0 j j F 30 Παράδειγμα #8:# συναρήσεις για ιόντα (1/5) Δομή για ιόντα struct vector { double x, y, ; ; struct on { vector r; double m, q; ; Συνάρτηση για κέντρο μάζας Το κέντρο μάζας έχει x, y, συντεταγμένες vector Στην είσοδο δέχεται πίνακα με ιόντα Υπολογίζει και τις τρεις συνιστώσες x m μ x =, και παρόμοια για μ y, m μ 31 Παράδειγμα #8:# συναρήσεις για ιόντα (/5) Συνάρτηση για κέντρο μάζας vector centermass (on *a, nt n){ vector cm; double m; cmx = cmy = cm = m = 0; for (nt =0; <n; ++){ cmx += a[]rx * a[]m; cmy += a[]ry * a[]m; cm += a[]r * a[]m; m += a[]m; cmx = cmx / m; cmy = cmy / m; cm = cm / m; return cm; μ = x x m m 3

Παράδειγμα #8:# συναρήσεις για ιόντα (3/5) Παράδειγμα #8:# συναρήσεις για ιόντα (4/5) Συνάρτηση για απόσταση δύο διανυσμάτων double dst (vector v, vector u){ return sqrt( pow(vx-ux, ) + pow(vy-uy, ) + pow(v-u, )); ή με τις συναρτήσεις df και magntude double dst (vector v, vector u){ return magntude( df(v, u) ); r r d = v u Συνάρτηση για ηλεκτροστατική ενέργεια ενός ιόντος = 1 q q E j 0 n j r r = j j double energy (on *a, nt n, nt j){ double e = 0; for (nt =0; <n; ++) f(!= j) e += a[]q * a[j]q / dst(a[j]r, a[]r); return e; 33 34 Παράδειγμα #8:# συναρήσεις για ιόντα (5/5) n q q j ( x x j F j r r Hλεκτροστατική δύναμη πάνω σε ιόν vector force (on *a, nt n, nt j){ vector f, f; fx = fy = f = 0; for (nt =0; <n; ++) f(!= j){ = 1 = 0 j j x ) 3 fx = a[]q*a[j]q * (a[j]rx - a[]rx)/ pow( dst(a[j]r, a[]r), 3); fy = a[]q*a[j]q * (a[j]ry - a[]ry)/ pow( dst(a[j]r, a[]r), 3); f = a[]q*a[j]q * (a[j]r - a[]r)/ pow( dst(a[j]r, a[]r), 3); Παράδειγμα #8:# πρόγραμμα για ιόντα (1/3) Πλήρες πρόγραμμα για ιόντα #nclude <ostream> #nclude <cmath> usng namespace std; struct vector { double x, y, ; ; struct on { vector r; double m, q; ; vector sum (vector, vector); vector df (vector, vector); double magntude (vector); double dst (vector, vector); f = sum(f, f); return f; 35 vector centermass (on *, nt); double energy (on *, nt, nt); vector force (on *, nt, nt); συνεχίζεται 36

Παράδειγμα #8:# πρόγραμμα για ιόντα (/3) nt n; on a[1000]; vector f, m; cout << "εισάγετε τον αριθμό των ιόντων << endl; cn >> n; f (n < 1 n > 1000) return 1; for (nt =0; <n; ++) cn >> a[]rx >> a[]ry >> a[]r >> a[]m >> a[]q; Παράδειγμα #8:# πρόγραμμα για ιόντα (3/3) for (nt =0; <n; ++){ cout << το ιόν << << έχει ενέργεια <<endl; cout << energy(a, n, ); f = force(a, n, ); cout << και υφίσταται δύναμη << endl; cout << fx << << fy << << f << endl; m = centermass(a, n); cout << το κέντρο μάζας έχει συντεταγμένες <<endl; cout << mx << << my << << m <<endl; 37 συνεχίζεται 38 Παράδειγμα #9:# : μοριακή δυναμική Παράδειγμα #9:# : μοριακή δυναμική: εξισώσεις κίνησης Έχουμε χτίσει όλη τη βάση ώστε να δημιουργήσουμε έναν κώδικα μοριακής δυναμικής: ιόντα, λόγω των μεταξύ τους δυνάμεων εκτελούν τροχιές στον χώρο Χρειαζόμαστε για κάθε ιόν: Θέση (διάνυσμα) Μάζα (ρητός) Φορτίο (ρητός) Ταχύτητα (διάνυσμα) Επιτάχυνση (διάνυσμα) Ολοκλήρωση εξισώσεων κίνησης: Ανάπτυγμα Taylor για την απόσταση r r r 1 r ( t + Δt ) = ( t ) + v ( t ) Δt + a( t )( Δt ) Ανάπτυγμα για την ταχύτητα r r r v ( t + Δt ) = v ( t ) + a( t ) Δt Η πλήρης δομή για ένα ιόν ΣΗΜΕΙΩΣΗ: εφαρμόζοντας αυτούς τους τύπους επιτυγχάνουμε λύση με ακρίβεια πρώτης τάξης, όχι ικανοποιητική Με μικρή struct vector { double x, y, ; ; τροποποίηση μπορούμε να επιτύχουμε ακρίβεια δεύτερης struct on { vector r, vel, acc; double m, q; ; 39 τάξης, αλλά δεν είναι επι του παρόντως 40

Παράδειγμα #9:# : μοριακή δυναμική: συνάρτηση για πολλαπλασιασμό διανύσματος με ρητό Θα χρειαστεί να πολλαπλασιάσουμε διάνυσμα με ρητό Πχ Χρειαζόμαστε μια συνάρτηση για να το κάνει αυτό vector mult(vector r, double f){ rx *= f; ry *= f; r *= f; return r; r x x f f y y f f Υπάρχει πάντα η πιθανότητα κάποιος να την καλέσει λάθος, εισάγοντας πρώτα τον ρητό και μετά το διάνυσμα Για να μην προκαλέσει λάθος αυτό, μπορούμε να υπερφορτώσουμε την συνάρτηση δηλώνοντάς την δεύτερη φορά vector mult(double f, vector r){ rx *= f; ry *= f; r *= f; return r; Τώρα όπως και να την καλέσει κανείς, είναι σωστό! r v dt 41 Παράδειγμα #9:# : μοριακή δυναμική: η στιγμιαία επιτάχυνση σε κάθε ιόν vod acceleraton (on *a, nt n){ Χρειαζόμαστε μια συνάρτηση για να υπολογίζει την στιγμιαία επιτάχυνση σε κάθε ιόν r r a = f / m for (nt =0; <n; ++) a[]acc = mult( force(a,n,), 10/a[]m); 4 Παράδειγμα #9:# : μοριακή δυναμική: ανανέωση ταχύτητας κάθε ιόντος Παράδειγμα #9:# : μοριακή δυναμική: ανανέωση θέσης κάθε ιόντος Χρειαζόμαστε μια συνάρτηση για να υπολογίζει την νέα ταχύτητα του κάθε ιόντος r r r v ( t + Δt ) = v ( t ) + a( t ) Δt vod velocty (on *a, nt n, double dt){ for (nt =0; <n; ++){ vector v1 = mult( a[]acc, dt ); Χρειαζόμαστε μια συνάρτηση για να υπολογίζει την νέα θέση του κάθε ιόντος r r r 1 r ( t + Δt ) = ( t ) + v ( t ) Δt + a( t )( Δt ) vod poston (on *a, nt n, double dt){ for (nt =0; <n; ++){ vector r1 = mult( a[]vel, dt); vector r = mult( a[]acc, 05*dt*dt); a[]vel = sum( a[]vel, v1 ); 43 a[]r = sum( a[]r, sum(r1, r)); 44

Παράδειγμα #9:# : μοριακή δυναμική Δείκτες σε δομές: Μια προσεκτικότερη ματιά: ανάθεση τιμών μέσω δείκτη Έχοντας δώσει αρχικές τιμές σε θέση, μάζα και φορτίο, το κυρίως πρόγραμμα όσο αναφορά την δυναμική εξέλιξη του συστήματος των ιόντων είναι πολύ απλό: nt n, nsteps; on a[1000]; double dt; for (nt j=0; j<nsteps; ++j){ acceleraton (a, n); poston (a, n, dt); velocty (a, n, dt); 45 Χρησιμοποιούμε και πάλι το αστέρι και την τελεία Επειδή η τελεία έχει μεγαλύτερη προτεραιότητα, απαραίτητες είναι οι παρενθέσεις vector v, *p; p = &v; cn >> (*p)x >> (*p)y >> (*p); το *(px) όπως και το px δεν έχουν νόημα καθώς το p είναι δείκτης Πιο συμπαγής συμβολισμός η C++ μας προσφέρει έναν πιο συμπαγή συμβολισμό με τον τελεστή του βέλους «->» vector v, *p; p = &v; cn >> p->x >> p->y >> p->; Το βέλος «δείχνει» στα «συστατικά» της δομής 46 Δείκτες όταν έχουμε δομές μέσα σε δομές Χρησιμότητα δεικτών σε δομές Για πρόσβαση σε αριθμητικές τιμής μέσω δείκτη, χρησιμοποιούμε το βέλος για το πρώτο «επίπεδο», και κατόπιν την τελεία, όσες φορές χρειαστεί struct vector { double x, y, ; ; struct on { vector r; double m, q; ; on a, *p; p = &a; p->rx = 30; p->ry = 40; p->r = 50; p->m = 60; p->q = 70; 47 Πολλές δομές μπορεί να είναι μεγάλες Τότε, εάν εισέρχονται σε συνάρτηση, η δημιουργία αντιγράφων μπορεί να είναι χρονοβόρα Λύση είναι να εισάγουμε έναν δείκτη προς την δομή Παράδειγμα, η συνάρτηση sum για πρόσθεση δύο διανυσμάτων vector sum (vector *v, vector *u){ vector w; wx = v->x + u->x; wy = v->y + u->y; w = v-> + u->; return w; Στο κυρίως πρόγραμμα θα καλεστεί vector v, u, w; w = sum (&v, &u); 48

Πίνακας δομής και δείκτες Όπως και στην περίπτωση των απλών μεταβλητών, ένας πίνακας έχει πολλά κοινά με έναν δείκτη Το όνομα του πίνακα είναι δείκτης στο πρώτο του στοιχείο Ισχύει η αριθμητική δεικτών Παράδειγμα, πίνακας διανυσμάτων struct vector { double x, y, ; ; vector v[1000]; vector *p; p = v; p = &v[0]; ταυτόσημα v[]x = 3; (p+)->x = 3; p[]x = 3; ταυτόσημα 49

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

Σημείωμα Ιστορικού Εκδόσεων Έργου Σημειώματα Το παρόν έργο αποτελεί την έκδοση 10 Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 10 διαθέσιμη εδώ http://ecourseuogr/course/vewphp?d=17

Σημείωμα Αναφοράς Σημείωμα Αδειοδότησης Copyrght Πανεπιστήμιο Ιωαννίνων, Διδάσκοντες: Αν Καθ Δ Παπαγεωργίου, Αν Καθ Ε Λοιδωρίκης «ΥΠΟΛΟΓΙΣΤΕΣ ΙI Δομές» Έκδοση: 10 Ιωάννινα 014 Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourseuogr/course/vewphp?d=17 Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creatve Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 40 [1] ή μεταγενέστερη [1] https://creatvecommonsorg/lcenses/by-sa/40/