ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Email: [email protected] 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές µοιάζουν συνήθως στην Αγγλική γλώσσα και γι αυτό η C++ λέµε ότι είναι γλώσσα υψηλού επιπέδου. Ο υπολογιστής καταλαβαίνει µόνο τη γλώσσα µηχανής (σειρές από 0 και 1). Για να δηµιουργηθεί γλώσσα µηχανής από τις εντολές της γλώσσας πρέπει το πρόγραµµα να µεταφραστεί σε γλώσσα µηχανής. Το σύνολο των εντολών της γλώσσας προγραµµατισµού, που αποκωδικοποιεί τις εντολές του επεξεργαστή κειµένου και τις µετατρέπει σε γλώσσα µηχανής λέγεται µεταφραστής (compiler). Ο Compiler εντοπίζει και τα συντακτικά λάθη τα οποία πρέπει να διορθωθούν πριν την εκτέλεση του προγράµµατος. Αφού το πρόγραµµα µεταφραστεί από τον compiler δηµιουργείται ένα αρχείο το οποίο το αποκαλούµε "αντικείµενο πρόγραµµα" και έχει κατάληξη .OBJ (object σηµαίνει αντικείµενο). Αυτό το αρχείο εισάγεται σε έναν µηχανισµό που ονοµάζεται συνδέτης (linker) ο οποίος το συνδέει µε αρχεία τα οποία τα οποία βοηθούν στο να δηµιουργηθούν τα εκτελέσιµα αρχεία. Έτσι δηµιουργείται το εκτελέσιµο αρχείο το οποίο έχει πάντοτε κατάληξη .EXE (executable σηµαίνει εκτελέσιµο) το οποίο µπορεί να εκτελεστεί και σε υπολογιστές όπου δεν υπάρχει η γλώσσα προγραµµατισµού, απλά είναι εκτελέσιµο. 1.1. Μεταβλητές Μία µεταβλητή είναι ένα συµβολικό όνοµα το οποίο όµως αντιπροσωπεύει ένα κελί της µνήµης RAM και φυσικά µπορεί να δεχτεί µόνο µια τιµή κάθε φορά η οποία όµως µπορεί να µεταβληθεί στη διάρκεια εκτέλεσης του προγράµµατος. Γι αυτό λέγεται και µεταβλητή. Με τη βοήθεια των µεταβλητών αποθηκεύονται τα δεδοµένα που εισάγονται στο πρόγραµµα και τα αποτελέσµατα των υπολογισµών για να εµφανιστούν στην οθόνη ή να χρησιµοποιηθούν στη συνέχεια του προγράµµατος. ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Κάθε µεταβλητή χαρακτηρίζεται από τον τύπο των δεδοµένων που καταχωρεί. Υπάρχουν διάφοροι τύποι δεδοµένων όπως ακέραιοι , αριθµοί κινητής υποδιαστολής, χαρακτήρες κ.λ.π και φυσικά υπάρχουν και οι αντίστοιχες µεταβλητές. Για όνοµα µεταβλητής επιτρέπεται να δώσετε όποιο όνοµα επιθυµείτε αλλά όχι κάποια δεσµευµένη λέξη από τη C++. Πρέπει να σηµειωθεί ότι η C++ είναι ευαίσθητη στη χρήση µικρών ή κεφαλαίων χαρακτήρων. Αυτό σηµαίνει ότι εάν δηλώσουµε µία µεταβλητή µε µικρούς χαρακτήρες δεν µπορούµε να την χρησιµοποιήσουµε στη συνέχεια µε κεφαλαία. 1.2. Ακέραιες µεταβλητές Οι ακέραιες µεταβλητές αποθηκεύουν ακέραιους αριθµούς. Όταν ορίζετε µία ακέραια µεταβλητή θα πρέπει πριν από το όνοµά της να γράψετε τη δεσµευµένη λέξη int. Πχ int aktina; cout << "H aktina einai "<< aktina ; Κρίνεται σκόπιµο τα ονόµατα των µεταβλητών να περιγράφουν τα δεδοµένα που είναι αποθηκευµένα σε αυτές. 1.3. Απόδοση τιµής Οι προτάσεις: aktina = 8; aktina = aktina+1; αποδίδουν ή αλλιώς εκχωρούν τιµές στην µεταβλητή aktina. Τo ίσον (=) είναι µία εντολή που αποδίδει τιµή. H εντολή aktina = aktina+1; Είναι ισοδύναµη της aktina++; 1.4. Μεταβλητές χαρακτήρων Ένας άλλος τύπος µεταβλητής είναι ο char. Οι µεταβλητές τύπου char χρησιµοποιούνται για να αποθηκεύουν χαρακτήρες ASCII όπως οι a, b, +, = κλπ 2 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 3 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Τα αλφαριθµητικά που αποτελούνται από περισσότερους από έναν χαρακτήρες περικλείονται σε διπλά εισαγωγικά. Προσοχή!!!! Στην περίπτωση που ξεχάσουµε να βάλουµε τα εισαγωγικά η γλώσσα υποθέτει ότι χρησιµοποιήσαµε το όνοµα µιας µεταβλητής. 1.5. Μεταβλητές κινητής υποδιαστολής Οι µεταβλητές κινητής υποδιαστολής αποθηκεύουν αριθµούς µε υποδιαστολή. Οι αριθµοί αυτοί έχουν ένα ακέραιο µέρος στα αριστερά της υποδιαστολής και ένα κλασµατικό µέρος στα δεξιά της. Πχ 3.1415927 -5.3 Πρέπει να τονίσουµε ότι στη γλώσσα C++ υπάρχουν τρία είδη µεταβλητών κινητής υποδιαστολής δηλαδή: ο τύπος µεταβλητής float,ο τύπος µεταβλητής double και ο τύπος µεταβλητής long double. Πίνακας 1: Τύποι µεταβλητών της γλώσσας C++ Τύπος µεταβλητής Bytes µνήµης Περιεχόµενο Εύρος τιµών που λαµβάνει char 1 Χαρακτήρες ή ακέραιοι 8 bits signed: -128 έως127 unsigned: 0 έως 255 2 Ακέραιοι 16 bits µήκους. signed: -32768 έως 32767 unsigned: 0 έως 65535 4 Ακέραιοι 32 bits µήκους. signed:-2147483648 έως 2147483647 unsigned: 0 έως 4294967295 short long int - Ακέραιοι. Το µήκος τους εξαρτάται από το µέγεθος της λέξης (Word) του συστήµατος. Σε συστήµατα 32 bits (όπως είναι τα ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 4 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Windows 9x/2000/NT) έχουν µήκος 32 bits (4 bytes). float 4 Αριθµοί κινητής υποδιαστολής. 3.4e + / - 38 (7 digits) double 8 ∆ιπλής ακριβείας αριθµοί κινητής υποδιαστολής. 1.7e + / - 308 (15 digits) 10 Μεγάλοι διπλής ακριβείας αριθµοί κινητής υποδιαστολής. 1.2e + / - 4932 (19 digits) long double Κάθε πρόγραµµα C++ περιέχει πρώτα από όλα τη δήλωση #include <iostream.h> που καλεί τη βιβλιοθήκη εισόδου εξόδου της C++. 2. ΒΑΣΙΚΕΣ ΑΛΓΟΡΙΘΜΙΚΕΣ ∆ΟΜΕΣ – ΣΧΕ∆ΙΑΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ 2.1. Η εντολή If …. ή ΕΑN…….. Η εντολή If …. χρησιµοποιείται όταν θέλουµε να ελέγξουµε την ισχύ µιας συνθήκης (Αληθής ή Ψευδής) και ανάλογα να πράξουµε. Για παράδειγµα, εάν ισχύει η συνθήκη τότε εκτελείται η οµάδα εντολών Α αλλιώς η ροή των εντολών συνεχίζεται χωρίς την εκτέλεση των εντολών της οµάδας Α. Η if ονοµάζεται εντολή ελέγχου ροής του προγράµµατος, επειδή κατά τη διάρκεια της εκτέλεσης του προγράµµατος η ακολουθία των εντολών που θα εκτελεστούν δεν είναι προκαθορισµένη αλλά µεταβάλλεται ανάλογα µε την ισχύ ή µη της συνθήκης (στο παράδειγµα εάν µια µεταβλητή Ι ισούται µε την µεταβλητή Χ). ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Λογικό ∆ιάγραµµα Ροής της if ΝΑΙ I=Υ ΟΧΙ Οµάδα εντολών -Α Ψευδοκώδικας ΕΑΝ (Ι = Υ) Εκτέλεσε την Οµάδα εντλών -Α; ΕΑΝ-ΤΕΛΟΣ; Πρόγραµµα C++ if ( i= = y ) { Οµάδα – Α { Εντολή …. 1 Εντολή …. 2 Εντολή …. 3 ……………….. } } 5 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 6 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 2.2. ∆ΟΜΗ ΕΛΕΓΧΟΥ ΡΟΗΣ (if - else) Η εντολή if ….. else χρησιµοποιείται µε παρόµοιο τρόπο µε την εντολή IF. Έτσι, για παράδειγµα εάν ισχύει η συνθήκη τότε εκτελείται η Οµάδα Εντολών Α ενώ αν δεν ισχύει εκτελείται µια άλλη Οµάδα εντολών Β και στη συνέχεια εκτελείται η υπόλοιπη ακολουθία εντολών του προγράµµατος. ∆ιάγραµµα Ροής ΝΑΙ ΟΧΙ I=Υ Οµάδα-Α Οµάδα-Β Ψευδοκώδικας ΕΑΝ (Ι = Υ) ΤΟΤΕ Εκτέλεσε Οµάδα Εντολών -Α; ΑΛΛΙΩΣ Εκτέλεσε Οµάδα εντολών -Β; ΕΑΝ-ΤΕΛΟΣ; Πρόγραµµα C++ if ( i= = y ) { Οµάδα-Α{ ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 7 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Εντολή …. 1 Εντολή …. 2 Εντολή …. 3 ………… } } else { Οµάδα-Β { Εντολή …. 1 Εντολή …. 2 Εντολή …. 3 ………… } } 2.3. ∆ΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ Τις χρησιµοποιούµε όταν θέλουµε να επαναλάβουµε µια εργασία (δηλαδή την εκτέλεση µιας οµάδας εντολών) περισσότερες από µια φορές. Υπάρχουν δύο βασικές κατηγορίες: αυτή στην οποία ο αριθµός των επαναλήψεων (Μ) είναι σταθερός και προκαθορισµένος και αυτή στην οποία ο αριθµός των επαναλήψεων εξαρτάται από κάποια συνθήκη και δεν είναι προκαθορισµένος. Στην πρώτη κατηγορία (σταθερός αριθµός επαναλήψεων) ανήκει η εντολή FOR και στη δεύτερη οι εντολές WHILE και DO - WHILE ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 8 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 2.3.1. Η ΕΠΑΝΑΛΗΠΤΙΚΗ ∆ΟΜΗ for ∆ιάγραµµα Ροής IÅ1 IÅI+1 Οµάδα Εντολών I <=Μ NAI OXI Στα παρακάτω ας υποθέσουµε ότι Οµάδα Εντολών αφορά την εµφάνιση (εκτύπωση) Ν αριθµών από 1 έως Ν. Ψευδοκώδικας ΓΙΑ Ι:= 1 ΕΩΣ Μ ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Ι); ΓΙΑ-ΤΕΛΟΣ; Πρόγραµµα C++ Μ=5; ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ for ( i=1; i<=Μ; i++ ) cout<< “H timh tou arithmou einai”<< i; 2.3.2. Η ΕΠΑΝΑΛΗΠΤΙΚΗ ∆ΟΜΗ while A. Η εντολή while ∆ιάγραµµα Ροής IÅ1 OXI I <=M IÅI+1 NAI Oµάδα Eντολών Ψευδοκώδικας I:=1; ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ Εκτέλεσε την Οµάδα Εντολών; Ι := Ι + 1; ΕΝΟΣΩ-ΤΕΛΟΣ; Πρόγραµµα C++ Μ=5 9 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 10 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ i=1; while ( i <= Μ ) { Οµάδα Εντολών i++; } 2.3.3. Η επαναληπτική δοµή do-while Όταν έχω do-while η εκτέλεση των εντολών επαναλαµβάνεται όσο ισχύει η συνθήκη (άρα έχουµε επανάληψη όσο η συνθήκη είναι αληθής). Στα παραδείγµατα που ακολουθούν η επανάληψη γίνεται όσο Ι < Μ. ∆ιάγραµµα Ροής IÅ0 IÅI+1 Οµάδα Eντολών NAI I<Μ OXI Ψευδοκώδικας I:=0; ΕΠΑΝΕΛΑΒΕ ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 11 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Ι:= Ι + 1; Οµάδα Εντολών; ΜΕΧΡΙ ( Ι >= Μ ); Πρόγραµµα C++ i=0; do { i++; Οµάδα Εντολών } while ( i < Μ ); 2.3.4. Σύγκριση της for και της while H εντολή for χρησιµοποιείται µόνον όταν ο αριθµός των επαναλήψεων είναι εκ των προτέρων γνωστός. Αν δεν είναι, τότε χρησιµοποιούνται οι while ή do-while. Στην do-while εκτελούνται οι εντολές και µετά γίνεται ο έλεγχος, ενώ στην WHILE αντίστροφα. Έτσι στη do-while οι εντολές θα εκτελεστούν οπωσδήποτε µια φορά, ενώ στη WHILE µπορεί και να µην εκτελεστούν καθόλου. Άσκηση 2.3.4.1 Κάντε ∆Ρ και ψευδοκώδικα και πρόγραµµα C++ που υλοποιούν τη while ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 12 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 3. ΕΦΑΡΜΟΓΕΣ 3.1. ΧΡΗΣΗ ΤΟΥ ΜΕΤΡΗΤΗ Χρησιµοποιείται όταν θέλουµε να µετρήσουµε (για παράδειγµα να βρούµε το πλήθος δεδοµένων που ικανοποιούν µια συνθήκη). Παράδειγµα: Σε µια οµάδα Ν αριθµών θέλω να µετρήσω πόσοι είναι άρτιοι ∆ιάγραµµα Ροής ΑΡΧΗ COUNT Å 0 IÅ1 X ΣΥΝ ΘΗΚΗ NAI COUNT Å COUNT + 1 OXI I <N IÅI+1 NAI OXI ΤΕΛΟΣ Άσκηση 3.1.1 Γράψτε το πρόγραµµα C++ που αντιστοιχεί στο πιο πάνω ∆Ρ. ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 13 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 4. ΧΡΗΣΗ ΑΘΡΟΙΣΤΗ/ ΠΡΟΣΘΕΣΗ ΜΕ ΣΥΝΘΗΚΗ Μια βασική εφαρµογή των επαναληπτικών δοµών είναι η άθροιση αριθµών που ικανοποιούν κάποια συνθήκη από µια οµάδα Ν αριθµών. Στην περίπτωση αυτή το αποτέλεσµα αποθηκεύεται στην µεταβλητή που συνήθως την αποκαλούµε SUM. Επίσης, µπορούµε να χρησιµοποιήσουµε την ίδια δοµή για να αθροίσουµε όλους τους Ν αριθµούς µιας οµάδας, εάν παραλείψουµε τη συνθήκη. ∆ιάγραµµα Ροής ΑΡΧΗ SUM=0 IÅ1 Α ΣΥΝ ΘΗΚΗ NAI SUM Å SUM + A IÅI+1 OXI NAI I <N OXI ΤΕΛΟΣ ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 14 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Ψευδοκώδικας SUM:=0; I:=1; ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ ∆ΙΑΒΑΣΕ (Α) ΕΑΝ ( ΣΥΝΘΗΚΗ ) ΤΟΤΕ SUM := SUM + A; ΕΑΝ-ΤΕΛΟΣ; Ι := Ι + 1; ΕΝΟΣΩ-ΤΕΛΟΣ; Πρόγραµµα C++ sum =0; i=1; while ( i <= N ) { cin>>a; if ( ΣΥΝΘΗΚΗ ) sum += a; i++; } 4.1. Εύρεση µέγιστου - ελάχιστου Παρακάτω θα περιγραφεί ο αλγόριθµος εύρεσης του µέγιστου ή ελάχιστου µιας οµάδας Ν αριθµών. Στη διαδικασία εύρεσης του µεγίστου ο αλγόριθµος αρχίζει θεωρώντας ως µέγιστο (MAX) µια πολύ µικρή τιµή, η οποία στη συνέχεια θα αντικατασταθεί οπωσδήποτε. Εάν λοιπόν οι αριθµοί είναι θετικοί ως αρχική τιµή στον ΜΑΧ βάζουµε το 0. Εάν είναι ακέραιοι βάζουµε τον µικρότερο ακέραιο αριθµό που µπορεί να αναπαρασταθεί στον υπολογιστή δηλαδή το -32768. ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ ∆ιάγραµµα Ροής ΜΑΧ= Πολύ Μικρή Τιµή IÅ1 Α NAI Α > ΜΑΧ ΜΑΧ Å A IÅI+1 OXI I<N NAI OXI ΤΕΛΟΣ Ψευδοκώδικας MAX:= -32768; I:=1; ΕΝΟΣΩ ( Ι <= Ν ) ΕΠΑΝΕΛΑΒΕ ∆ΙΑΒΑΣΕ (Α); ΕΑΝ ( A > MAX ) ΤΟΤΕ MAX := A; ΕΑΝ-ΤΕΛΟΣ; Ι := Ι + 1; 15 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 16 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ ΕΝΟΣΩ-ΤΕΛΟΣ; Πρόγραµµα C++ max = -32768; i=1; while ( i <= N ) { cin>>a; if ( a > max ) max = a; i++; } Το Ελάχιστο βρίσκεται µε ακριβώς τον ίδιο τρόπο, όπου : min = Μια πολύ µεγάλη τιµή (που θα αντικατασταθεί οπωσδήποτε). π.χ. +32767 if ( a < min) min = a; 5. ΠΙΝΑΚΕΣ Οι Πίνακες (Arrays) είναι συλλογές από όµοιες µεταβλητές (δηλαδή µεταβλητές του ίδιου τύπου π.χ. ακέραιοι αριθµοί). Οι Πίνακες επιτρέπουν την αποθήκευση πολλών τιµών ίδιου τύπου και τον οµαδικό χειρισµό των στοιχείων του πίνακα (δηλαδή των όµοιων µεταβλητών) µε έναν ενιαίο τρόπο. 5.1. Πίνακες στη C++ Οι πίνακες είναι µια στατική δοµή δεδοµένων η οποία καταλαµβάνει συγκεκριµένο πλήθος συνεχόµενων θέσεων στη µνήµη του Η/Υ και δέχεται προς αποθήκευση µόνο Οµοειδή δεδοµένα. Άρα λοιπόν: ……..προσοχή κάθε πίνακας δέχεται προς εισαγωγή ΜΟΝΟ ίδιου τύπου δεδοµένα και έχει συγκεκριµένο πλήθος αποθηκευτικών θέσεων Παράδειγµα 5.1.1. ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Έστω ότι έχω τους βαθµούς 30 φοιτητών και θέλω να τους αποθηκεύσω κάπου έτσι ώστε να µπορούν να χρησιµοποιηθούν από το πρόγραµµα. Έστω ότι ο πίνακας λέγεται vathmoi ∆ΗΛΩΣΗ int vathmoi[30]; π.χ. vathmoi[2] =8 σηµαίνει ότι στην 3η θέση αποθηκεύω το 8 Για τη συγκεκριµένη εφαρµογή χρειάζοµαι έναν πίνακα 30 θέσεων 2 7 8 [0][1] [2] …………………………………………………………………………… Ο πίνακας λέµε ότι είναι Στατική δοµή δεδοµένων 5.2. ΕΙΣΑΓΩΓΗ ΤΙΜΩΝ ΣΕ ΠΙΝΑΚΑ Η εισαγωγή τιµών σε πίνακα γίνεται µε τη χρήση της επαναληπτικής δοµής for Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής: for (i=0; i<30; i++) { cout<<”dose ton vathmo”; cin>>vathmoi[i]; } Εισαγωγή τιµής στην 1η θέση του πίνακα cout<<”dose ton vathmo”; cin>>vathmoi[0]; [29] 17 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 18 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Εισαγωγή τιµής στην 2η θέση του πίνακα cout<<”dose ton vathmo”; cin>>vathmoi[1]; ♦ ∆ήλωση Μονοδιάστατου Πίνακα Ψευδοκώδικας A : ARRAY[0..9] OF INTEGER; Πρόγραµµα C++ int a[10]; Σε όλες τις παραπάνω περιπτώσεις δηλώνεται ένας µονοδιάστατος πίνακας 10 ακεραίων αριθµών. Τα στοιχεία του πίνακα είναι τα Α[0], Α[1], Α[2], …, Α[8], Α[9]. ♦ Χρήση των στοιχείων του Πίνακα Ψευδοκώδικας A[0] := 5; A[1] := A[0] + 2; EAN ( A[I] = 0 ) TOTE … ΕΑΝ-ΤΕΛΟΣ; Πρόγραµµα C++ a[0] = 5; a[1] = a[0] + 2; if ( a[i] == 0 ) … ♦ Αποθήκευση τιµών σε µονοδιάστατο πίνακα ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Ψευδοκώδικας ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ ∆ΙΑΒΑΣΕ(Α[Ι]); ΓΙΑ-ΤΕΛΟΣ; Πρόγραµµα C++ for ( i=0; i<=9; i++ ) cin>>a[i] ; ♦ Αθροιση τιµών σε µονοδιάστατο πίνακα Ψευδοκώδικας SUM:=0; ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ SUM := SUM + Α[Ι]; ΓΙΑ-ΤΕΛΟΣ; Πρόγραµµα C++ sum=0; for ( i=0; i<=9; i++ ) sum += a[i]; Άσκηση 5.1.1 Υπολογισµός Εµβαδού Κύκλου #include <iostream.h> void main() { 19 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 20 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ float aktina,emvadon; cout<<”Doste thn Aktina tou Kyklou”; cin>>aktina; emvadon=3.14*aktina*aktina; cout<<”To emvadon einai :”<<emvadon; if (emvadon ==0) cout<<”Den yparxei tetoio emvadon \n”; else cout<<”Apodekth timh gia emvadon \n”; } Άσκηση 5.1.2. ΕΚΦΩΝΗΣΗ Θα κάνουµε ένα πρόγραµµα που θα ζητάει την εισαγωγή 10 στηθαίων διαµέτρων και θα βρίσκει και θα εµφανίζει τον Μέσο όρο τους. #include <iostream.h> void main() { int i; float diam,s,mo; s=0; for (i=1; i<=10; i++) { cout<<"Dose th diametro"; cin>>diam; s=s+diam; } mo=s/10; cout<<"O mesos oros einai : "<<mo ; } ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 21 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ Ας κάνουµε το πρόγραµµά µας πιο έξυπνο……. έτσι ώστε να µη µπορεί ο χρήστης να εισάγει διάµετρο αρνητική ή µηδέν. Αυτό σηµαίνει ότι όσο θα µου εισάγει λάθος διάµετρο τόσο θα ξαναζητάω να την εισάγει από την αρχή. #include <iostream.h> void main() { int i; float diam,s,mo; s=0; for (i=1; i<=10; i++) { cout<<"Dose th diametro"; cin>>diam; while ((diam <0)||(diam==0)) { cout<<"Lathos xanaDose th diametro"; cin>>diam; } s=s+diam; } mo=s/10; cout<<"O mesos oros einai : "<<mo ; } ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 22 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 5.2. ΠΙΝΑΚΑΣ 2 ∆ΙΑΣΤΑΣΕΩΝ Έστω ότι έχω τους βαθµούς 30 φοιτητών για 5 χρόνια, και θέλω να τους αποθηκεύσω κάπου έτσι ώστε να µπορούν να χρησιµοποιηθούν από το πρόγραµµα vathmoi[0][0]=9; 9 Έστω ότι ο πίνακας λέγεται vathmoi ∆ΗΛΩΣΗ int vathmoi[5][30]; γραµµές 5.3. ΕΙΣΑΓΩΓΗ ΤΙΜΩΝ ΣΕ ∆ΙΣ∆ΙΑΣΤΑΤΟ ΠΙΝΑΚΑ Η εισαγωγή τιµών σε δισδιάστατο πίνακα γίνεται µε τη χρήση δύο εµφωλευµένων επαναληπτικών δοµών for Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής: Έστω ότι θέλω η εισαγωγή να γίνει κατ’ έτος δηλαδή ανά γραµµή….. 1η γραµµή, 2η γραµµή , κοκ for (i=0; i<5; i++) { for (j=0; j<30; j++) { cout<<”dose ton vathmo”; cin>>vathmoi[i][j]; } } To i ξεκινάει από την τιµή 0 και παραµένει 0 µέχρι το j να πάρει τιµές από 0 έως και 29. Κάποτε το j θα γίνει 30 αλλά επειδή δεν θα πληρείται η συνθήκη j<30 δεν θα εκτελεστεί η επανάληψη…….. ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 23 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ 5.4. ΕΜΦΑΝΙΣΗ ΤΙΜΩΝ ΠΙΝΑΚΑ Η εµφάνιση τιµών µονοδιάστατου πίνακα γίνεται µε τη χρήση της επαναληπτικής δοµής for……………. ♦ Εκτύπωση τιµών µονοδιάστατου πίνακα Ψευδοκώδικας ΓΙΑ Ι:= 0 ΕΩΣ 9 ΕΠΑΝΑΛΑΒΕ ΤΥΠΩΣΕ(Α[Ι]); ΓΙΑ-ΤΕΛΟΣ; Πρόγραµµα C++ for ( i=0; i<=9; i++ ) cout<<a[i] ); Στο συγκεκριµένο παράδειγµα η εισαγωγή γίνεται ως εξής: for (i=0; i<30; i++) cout<<”το στοιχείο του πίνακα στη θέση ”<<i+1<<”είναι ”<<vathmoi[i]; #include <iostream.h> void main() { int vathmoi[30], i,s; float mo; s=0; for (i=0; i<30; i++) { cout<<”dose ton vathmo tou foithth :”<<i+1; ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ cin>>vathmoi[i]; s=s+vathmoi[i] ; } mo=s/30; cout<<”o mesos oros einai “<<mo; } 24 ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ 25 ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ ΠΑΡΑ∆ΕΙΓΜΑ ΜΕ ΠΙΝΑΚΕΣ ∆ΥΟ ∆ΙΑΣΤΑΣΕΩΝ Έστω ότι έχουµε τους βαθµούς 20 οµάδων στο πρωτάθληµα ποδοσφαίρου για τα τελευταία 8 έτη. Θέλω να βρω τον µέσο όρο της βαθµολογίας κάθε οµάδας και να τον εµφανίσω στην οθόνη. Στην περίπτωση αυτή θα χρησιµοποιήσω πίνακα 2 διαστάσεων µε 20 στήλες και 8 γραµµές. Πίνακας 8Χ20 Οµάδα 1 Για το έτος 1999 35 54 Οµάδα 1 Για το έτος 2000 4 5 6 7 8 9 ∆ήλωση: int omades[8][20]; Εισαγωγή στοιχείων σε πίνακα 2 διαστάσεων #include <iostream.h> void main() { int omades[8][20],i,j,s; float mo; for (i=0; i<20; i++) {s=0; ΣΗΜΕΙΩΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΟΣ Η/Υ 7ο ΕΞΑΜΗΝΟΥ ΜΑΘΗΜΑ 1ο Λάζαρος Σ. Ηλιάδης Αναπληρωτής Καθηγητής ∆ΠΘ for (j=0; j<8; j++) { cout<<”\n Dose timh sth grammh ”<<j+1<<”kai sth sthlh “<<i+1<<” :”; cin>>omades[j][i]; s=s+omades[j][i]; } mo=s/8; cout<<” O mesos oros einai ”<<mo; } } 26
© Copyright 2024 Paperzz