Download pdf - C 6η διάλεξη

Transcript

1

ΗΜΜΥ (ΠΛΗ) 101ΗΜΜΥ (ΠΛΗ) 101

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ & Η/Υ &

ΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗΦΦ

∆ρ. Κατερίνα Μανιά∆ρ. Κατερίνα Μανιά

Τμήμα ΗΜΜΥ Τμήμα ΗΜΜΥ

Πολυτεχνείο ΚρήτηςΠολυτεχνείο Κρήτης

∆ιδάσκων∆ιδάσκων∆ρ. Κατερίνα Μανιά∆ρ. Κατερίνα Μανιά

Αναοπληρώτρια ΚαθηγήτριαΑναοπληρώτρια Καθηγήτρια

**********ΕΕ--mail: mail: [email protected]@ced.tuc.gr**********Web: Web: http://www.ece.tuc.gr/http://www.ece.tuc.gr/kmaniakmaniaOffice: 145 A14Office: 145 A14Office: 145.A14Office: 145.A14Tel: 28210 37222Tel: 28210 37222

Ιστοσελίδα ΜαθήματοςΙστοσελίδα Μαθήματος::

http://courses.ced.tuc.grhttp://courses.ced.tuc.gr

∆ΙΑΤΑΞΕΙΣ∆ΙΑΤΑΞΕΙΣ

Μία διάταξη είναι μία ταξινομημένη ομάδα Μία διάταξη είναι μία ταξινομημένη ομάδα θέσεων αποθήκευσης δεδομένων με το θέσεων αποθήκευσης δεδομένων με το ίδιο όνομα και διακρίνονται από ένα ίδιο όνομα και διακρίνονται από ένα αριθμό που έπεται του ονόματος τηςαριθμό που έπεται του ονόματος τηςαριθμό που έπεται του ονόματος της αριθμό που έπεται του ονόματος της μεταβλητής και αγκύλες.μεταβλητής και αγκύλες.

intint data[1000];data[1000];

data[0] data[0] έως έως data[999]data[999]

∆ΙΑΤΑΞΕΙΣ∆ΙΑΤΑΞΕΙΣ

KKάθε στοιχείο μίας διάταξης είναι άθε στοιχείο μίας διάταξης είναι ισοδύναμο με μία κανονική ακέραια ισοδύναμο με μία κανονική ακέραια μεταβλητή.μεταβλητή.

intint data[1000];data[1000];intint count;count;count=100;count=100;data[count]=12; /* data[count]=12; /* ίδιο με ίδιο με data[100]=12 */data[100]=12 */

2

ΕΛΕΓΧΟΣ ΡΟΗΣ ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣΠΡΟΓΡΑΜΜΑΤΟΣ

Η προεπιλεγμένη ροή εκτέλεσης ενός Η προεπιλεγμένη ροή εκτέλεσης ενός προγράμματος είναι από την αρχή προς προγράμματος είναι από την αρχή προς το τέλος. το τέλος. Η εκτέλεση αρχίζει στη αρχή τηςΗ εκτέλεση αρχίζει στη αρχή τηςΗ εκτέλεση αρχίζει στη αρχή της Η εκτέλεση αρχίζει στη αρχή της συνάρτησης συνάρτησης main() main() και συνεχίζεται έως και συνεχίζεται έως ότου φτάσει στο τέλος της ότου φτάσει στο τέλος της main().main().H H γλώσσα γλώσσα C C περιλαμβάνει ποικιλία περιλαμβάνει ποικιλία προτάσεων ελέγχου ροής προγράμματος.προτάσεων ελέγχου ροής προγράμματος.

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ (ΒΡΟΧΟΥ)(ΒΡΟΧΟΥ)

Οι εντολές βρόχου (Οι εντολές βρόχου (iterative statements) iterative statements) στη στη CCεπιτρέπουν την επιτρέπουν την επαναληπτική εκτέλεση μιας σειράς επαναληπτική εκτέλεση μιας σειράς εντολώνεντολών όσο κάποιες λογικές συνθήκες ισχύουν. Στη όσο κάποιες λογικές συνθήκες ισχύουν. Στη CCέχουμε τις παρακάτω εντολές βρόχου, που αντιστοιχούν έχουμε τις παρακάτω εντολές βρόχου, που αντιστοιχούν και σε διαφορετικές περιπτώσεις επανάληψηςκαι σε διαφορετικές περιπτώσεις επανάληψης::

–– Εντολή Εντολή whilewhile–– ΕντολήΕντολή dodo--whilewhile–– ΕντολήΕντολή forfor

Η σειρά των εντολών που επαναλαμβάνεται ονομάζεται Η σειρά των εντολών που επαναλαμβάνεται ονομάζεται το το «σώμα» («σώμα» (body)body) της εντολής βρόχουτης εντολής βρόχου. . Η λογική συνθήκη Η λογική συνθήκη ονομάζεται ονομάζεται «συνθήκη» («συνθήκη» (condition)condition). Το σημείο που η . Το σημείο που η επανάληψη σταματά ονομάζεται επανάληψη σταματά ονομάζεται «σταθερό σημείο» «σταθερό σημείο» ((fixed fixed point)point)..

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ

Πριν προχωρήσουμε όμως στη μελέτη της σύνταξης Πριν προχωρήσουμε όμως στη μελέτη της σύνταξης αυτών των εντολών ας μελετήσουμε πρώτα την αυτών των εντολών ας μελετήσουμε πρώτα την κατασκευή τους και γιατί όχι τον αντίστοιχο κατασκευή τους και γιατί όχι τον αντίστοιχο ψευδοκώδικα και τη γραφική ερμηνεία τουςψευδοκώδικα και τη γραφική ερμηνεία τους..Κατασκευή (Κατασκευή (structurestructure) ) δίνει τη γενική ιδέα και την δίνει τη γενική ιδέα και την ερμηνεία μέσω ενός μοντέλου (π.χ. ∆ιαγράμματος ερμηνεία μέσω ενός μοντέλου (π.χ. ∆ιαγράμματος ρμη μ ς μ ( χ γρ μμ ςρμη μ ς μ ( χ γρ μμ ςροής). Η κατασκευή είναι σχετικά ανεξάρτητη της ροής). Η κατασκευή είναι σχετικά ανεξάρτητη της γλώσσας προγραμματισμού.γλώσσας προγραμματισμού.Η εντολή (Η εντολή (statementstatement ή ή commandcommand) ) έχει να κάνει με έχει να κάνει με την συγκεκριμένη γλώσσα προγραμματισμού (π.χ. την συγκεκριμένη γλώσσα προγραμματισμού (π.χ. Σύνταξη της Σύνταξη της CC) και υλοποιεί μία κατασκευή. ) και υλοποιεί μία κατασκευή. Στη Στη CC έχουμε τρεις κατασκευές βρόχου ή έχουμε τρεις κατασκευές βρόχου ή επανάληψης (επανάληψης (iterative structures). iterative structures).

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Εκτελεί ένα Εκτελεί ένα block block κώδικα μίας ή περισσότερων κώδικα μίας ή περισσότερων προτάσεων για μία ή περισσότερες φορές.προτάσεων για μία ή περισσότερες φορές.Ονομάζεται και Ονομάζεται και βρόχος βρόχος forfor επειδή τυπικά η εκτέλεση του επειδή τυπικά η εκτέλεση του προγράμματος επαναλαμβάνεται μέσω αυτής της προγράμματος επαναλαμβάνεται μέσω αυτής της πρότασης περισσότερες από μία φορές.πρότασης περισσότερες από μία φορές.for (for (αρχική τιμήαρχική τιμή;; συνθήκησυνθήκη;; αύξησηαύξηση;;))for (for (αρχική τιμήαρχική τιμή; ; συνθήκησυνθήκη;; αύξησηαύξηση;;))πρότασηπρόταση;;–– αρχική τιμήαρχική τιμή; ; συνθήκησυνθήκη;; αύξησηαύξηση;; είναι εκφράσεις της είναι εκφράσεις της C C και πρόταση είναι μία απλή ή σύνθετη πρόταση της και πρόταση είναι μία απλή ή σύνθετη πρόταση της C.C.

3

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Εκτιμάται η έκφραση Εκτιμάται η έκφραση αρχική. αρχική. Συνήθως είναι μία πρόταση Συνήθως είναι μία πρόταση εκχώρησης η οποία θέτει σε μία μεταβλητή μία εκχώρησης η οποία θέτει σε μία μεταβλητή μία συγκεκριμένη τιμή.συγκεκριμένη τιμή.Εκτιμάται η έκφραση Εκτιμάται η έκφραση συνθήκησυνθήκη. Τυπικά είναι μία έκφραση . Τυπικά είναι μία έκφραση συσχέτισης.συσχέτισης.Εάν η συνθήκη είναι ψευδής (δηλαδή είναι μηδενική)Εάν η συνθήκη είναι ψευδής (δηλαδή είναι μηδενική)Εάν η συνθήκη είναι ψευδής (δηλαδή είναι μηδενική) Εάν η συνθήκη είναι ψευδής (δηλαδή είναι μηδενική) τερματίζεται η πρόταση τερματίζεται η πρόταση for for και η εκτέλεση περνά στην και η εκτέλεση περνά στην πρώτη πρόταση που ακολπρώτη πρόταση που ακολooυθεί.υθεί.Εάν η συνθήκη είναι αληθής εκτελούνται οι προτάσεις της Εάν η συνθήκη είναι αληθής εκτελούνται οι προτάσεις της C C στην πρόταση.στην πρόταση.Η έκφραση Η έκφραση αύξηση αύξηση εκτιμάται και η εκτέλεση επιστρέφει σε εκτιμάται και η εκτέλεση επιστρέφει σε επανεκτίμηση της συνθήκης.επανεκτίμηση της συνθήκης.

for (for (αρχικήαρχική; ; συνθήκησυνθήκη;; αύξησηαύξηση;;))πρότασηπρόταση;;

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main () for (count = 1; count <= 20; count++)

printf(“%d\n”, count);

1

2

3

4

20

Αποδίδεται αρχική τιμή στην count, ελέγχεται η συνθήκη και εκτελείται το σώμα της for, μετά αυξάνεται η count και ξαναελέγχεται η συνθήκη. Συνεχίζεται μέχρι να γίνει ψευδής η συνθήκη.

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main () for (count = 0; count < 20; count+=5)

printf(“%d\n”, count);

return 0;

0

5

10

15

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::Η έκφραση

#include <stdio.h>

int count;

main () count = 0

for (; count < 20; count+=5)

printf(“%d\n”, count);

return 0;

0

5

10

15

Η έκφραση απόδοσης αρχικής τιμής δε χρειάζεται αν η τιμή ελεγχου της for έχει πάρει αρχική τιμή προηγουμένως στο πρόγραμμα

4

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main () count = 0

for (printf(“Counting…”); count < 20; count+=5)

printf(“%d\n”, count);

return 0;

Counting… 0

5

10

15

To printf(“Counting…”)εκτελείται μία φορά στην πρώτη εκτέλεση της πρότασης for

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main () count = 0

for (printf(“Counting…”) ; count < 20;)

printf(“%d\n”, count+=5;);

return 0;

Counting 5

10

15

To printf(“Counting…”)εκτελείται μία φορά στην πρώτη εκτέλεση της πρότασης for

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;int array[1000];

main ()

for (count = 0; count < 1000; array[count++] = 50)

;

Κενή πρόταση, Η τιμή 50 εκχωρείται σε κάθε μέλος της διάταξης. Όλη η εργασία γίνεται στην ίδια τη for

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main ()

for (count = 0; count < 1000 && array[count]; count++)

printf(“%d”, array[count]);

H for σταματά όταν έχουν εκτυπωθεί όλα τα στοιχεία ή όταν συναντήσει ένα στοιχείο με τιμή 0

5

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>

int count;

main ()

for (count = 0; count < 1000 && array[count] != 0;)

printf(“%d”, array[count++]);

H for σταματά όταν έχουν εκτυπωθεί όλα τα στοιχεία ή όταν συναντήσει ένα στοιχείο με τιμή 0

ΕΝΤΟΛΗ ΕΝΤΟΛΗ forfor

Η εντολή Η εντολή for for έχει τη μορφή έχει τη μορφή

for for ((<<αρχικές τιμές>αρχικές τιμές>; <; <έλεγχος τερματισμού>έλεγχος τερματισμού>; ; <έκφραση ανανέωσης τιμών>)<έκφραση ανανέωσης τιμών>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

#include <stdio.h>int i, sum=0;main ()

for (i = 1; i <= 10; i++)

sum = sum + 1;printf(“The sum now is: %d\n”, sum);

printf(“The final sum is:%d\n”, sum);

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΈνα μικρό πρόγραμμα που υπολογίζει το άθροισμα Ένα μικρό πρόγραμμα που υπολογίζει το άθροισμα ∑ ∑ xx3 3

#include <stdio.h>#include <stdio.h>

int number;int number;

int sum = 0;int sum = 0;

main() main()

Χ=10

100

for (number = 10; number <= 100; number++)for (number = 10; number <= 100; number++)

sum = sum + number * number * number;sum = sum + number * number * number;

printf(“The number is %d and the sum is now: %dprintf(“The number is %d and the sum is now: %d\\n”, number, sum);n”, number, sum);

printf(“The final sum is %dprintf(“The final sum is %d\\n”, sum);n”, sum);

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΤο προηγούμενο πρόγραμμα μπορεί να γραφεί και Το προηγούμενο πρόγραμμα μπορεί να γραφεί και ως εξής με χρήση του τελεστή ως εξής με χρήση του τελεστή “,”“,”

#include <#include <stdio.hstdio.h>>intint sum;sum;intint number;number; Ο Τελεστής ,

main() main()

for (sum = 0for (sum = 0,, number = 10; number <= 100; number++)number = 10; number <= 100; number++)

sum = sum + number * number * number;sum = sum + number * number * number;printfprintf(“The number is %d and the sum is now: %d(“The number is %d and the sum is now: %d\\n”, number, sum);n”, number, sum);

printfprintf(“The final sum is %d(“The final sum is %d\\n”, sum);n”, sum);

Με τον τελεστή κόμματος, οι δύο δευτερεύουσες προτάσεις εκτελούνται και ολόκληρη η έκφραση μπορεί να καταχωρηθεί σε μία άλλη μεταβλητή. Η έκφραση εκτιμάται στην τιμή της δεξιάς δευτερεύουσας πρότασης.

6

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΈνα μικρό πρόγραμμα που να υπολογίζει τα τετράγωνα Ένα μικρό πρόγραμμα που να υπολογίζει τα τετράγωνα

αριθμών από το 1 μέχρι αριθμών από το 1 μέχρι nn..

#include <stdio.h>#include <stdio.h>int i, n;int i, n;, ;, ;main() main() printf(“Enter the max number to compute the square: “);printf(“Enter the max number to compute the square: “);

scanf(“%d”, &n); scanf(“%d”, &n); for (i = 1; i <= n; i++)for (i = 1; i <= n; i++)

printf(“%d%dprintf(“%d%d\\n”, i, i*i);n”, i, i*i);

1 12 43 94 16……….

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑ

row = 8, col = 35

Στη σειρά 17 η απόδοση αρχικών τιμών παρακάμπτεται επειδή η αρχική τιμή της row διοχετεύτηκε στη συνάρτηση

ΠΑΡΑΤΗΡΗΣΕΙΣΠΑΡΑΤΗΡΗΣΕΙΣΜη αναθέτετε πολύ επεξεργασία σε Μη αναθέτετε πολύ επεξεργασία σε προτάσεις προτάσεις for. Afor. Aν και μπορείτε να ν και μπορείτε να χρησιμοποιείτε τον τελεστή κόμματος, χρησιμοποιείτε τον τελεστή κόμματος, καλύτερα να βάζετε λειτουργίες στο σώμα καλύτερα να βάζετε λειτουργίες στο σώμα του βρόχου.του βρόχου.του βρόχου.του βρόχου.

Θυμηθείτε το ελληνικό ερωτηματικό αν Θυμηθείτε το ελληνικό ερωτηματικό αν χρησιμοποιείτε μία χρησιμοποιείτε μία for for με μία κενή πρόταση.με μία κενή πρόταση.

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ whilewhile

Όσο ισχύειΌσο ισχύει η η ((λογική έκφραση Α λογική έκφραση Α ––δηλαδή είναι αληθής) δηλαδή είναι αληθής) επανάλαβεεπανάλαβε σειρά εντολών Βσειρά εντολών ΒΤέλος επανάληψηςΤέλος επανάληψης

Συνθήκη

ΑFalse

while AB

Β

Α

True

7

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ whilewhile

main ()main ()count = 1;count = 1;

while (count <=20)while (count <=20)

printf(“%dprintf(“%d\\n”, count);n”, count);count++;count++;

Συνθήκη

ΑFalse

while AB

;;

112233....2020

Β

True

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ whilewhileεπανάλαβεεπανάλαβε σειρά εντολών Βσειρά εντολών Βόσο ισχύει η (λογική έκφραση Α)όσο ισχύει η (λογική έκφραση Α)

Τέλος επανάληψηςΤέλος επανάληψης

Β

do Bwhile A

Η διαφορά από την προηγούμενη κατασκευή είναι ότι η σειρά

λώ Β θ λ ί

Συνθήκη Α

True

False

εντολών Β θα εκτελεστεί τουλάχιστον μία φορά πριν τη λογική συνθήκη Α

ΕΝΤΟΛΗ ΕΝΤΟΛΗ whilewhile

Η εντολή Η εντολή while while έχει τη μορφή έχει τη μορφή while while ((<<λογική έκφραση Α>)λογική έκφραση Α>)

σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

int i = 0;int i = 0;while (i <= 10)while (i <= 10)

printf(“The number is: %dprintf(“The number is: %d\\n”, i);n”, i);i++;i++;

Σημαίνει i = i+1

ΕΝΤΟΛΗ ΕΝΤΟΛΗ whilewhileΗ εντολή Η εντολή while while έχει τη μορφή έχει τη μορφή

while while ((<<λογική έκφραση Α>)λογική έκφραση Α>)σειρά εντολών Βσειρά εντολών Β

ΠαράδειγμαΠαράδειγμα::

intint ctrctr = 0;= 0;i ti t l [10]l [10]intint value[10];value[10];intint nbrnbr = 0= 0;;while (while (ctrctr < 10 && < 10 && nbrnbr != 99)!= 99)

puts(“Enter a number 99 to quit”);puts(“Enter a number 99 to quit”);scanfscanf(“%d”, &(“%d”, &nbrnbr););value[value[ctrctr] = ] = nbrnbr;;ctrctr++;++;

Eπιτρέπει στο χρήστη να εισάγει έως 10 ακέραιες τιμές οι οποίες αποθηκεύονται σε μία διάταξη value. Εάν εισαχθεί το 99 σταματά ο βρόγχος.

8

ΕΝΤΟΛΗ ΕΝΤΟΛΗ whilewhile

while (while (συνθήκη) συνθήκη) πρότασηπρόταση

Εκτιμάται η έκφραση συνθήκη.Εκτιμάται η έκφραση συνθήκη.Εάν η συνθήκη είναι ψευδής (μηδενική τιμή) Εάν η συνθήκη είναι ψευδής (μηδενική τιμή) τερματίζεται η πρότασητερματίζεται η πρόταση whilewhile και η εκτέλεσηκαι η εκτέλεσητερματίζεται η πρόταση τερματίζεται η πρόταση while while και η εκτέλεση και η εκτέλεση περνάει στην πρώτη πρόταση που έπεται περνάει στην πρώτη πρόταση που έπεται της πρότασης.της πρότασης.Εάν η συνθήκη είναι αληθής (μη μηδενική Εάν η συνθήκη είναι αληθής (μη μηδενική τιμή) εκτελούνται οι προτάσεις της τιμή) εκτελούνται οι προτάσεις της C C στο στο block block πρόταση.πρόταση.Η εκτέλεση επιστρέφει στο βήμα 1.Η εκτέλεση επιστρέφει στο βήμα 1.

ΕΝΤΟΛΗ ΕΝΤΟΛΗ whilewhile

while (while (συνθήκη) συνθήκη) πρότασηπρόταση

Μία πρόταση Μία πρόταση while while είναι μία πρόταση είναι μία πρόταση βρόχου επανάληψης μίας πρότασης ή ενός βρόχου επανάληψης μίας πρότασης ή ενός bl kbl k ά ΄ό έά ΄ό έblock block προτάσεων εφ΄όσον παραμένει προτάσεων εφ΄όσον παραμένει αληθής (μη μηδενική) η συνθήκη.αληθής (μη μηδενική) η συνθήκη.Εάν η συνθήκη δεν είναι αληθής, όταν Εάν η συνθήκη δεν είναι αληθής, όταν εκτελεστεί για πρώτη φορά η πρόταση εκτελεστεί για πρώτη φορά η πρόταση while while δεν εκτελούνται ποτέ οι προτάσεις (διαφορά δεν εκτελούνται ποτέ οι προτάσεις (διαφορά μεταξύ μεταξύ while while και και do whiledo while)). .

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΈνα μικρό πρόγραμμα που υπολογίζει ένα άθροισμα των αριθμών Ένα μικρό πρόγραμμα που υπολογίζει ένα άθροισμα των αριθμών από 1 μέχρι 10.από 1 μέχρι 10.

#include <stdio.h>#include <stdio.h>

main() main()

int i = 1;int i = 1;int sum = 0;int sum = 0;while (i <= 10)while (i <= 10)

sum = sum + i;sum = sum + i;i = i+1;i = i+1;

printf(“The sum of numbers from 1 to 10 is: %dprintf(“The sum of numbers from 1 to 10 is: %d\\n”, sum);n”, sum);

sum = sum+i

1 0 1

3 1 2

6 3 3

10 6 4

15 10 5

…. 10

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΈνα μικρό πρόγραμμα που υπολογίζει το άθροισμα των κύβων των Ένα μικρό πρόγραμμα που υπολογίζει το άθροισμα των κύβων των αριθμών 0.4 0.8 1.2 1.6 2.0 2.4αριθμών 0.4 0.8 1.2 1.6 2.0 2.4

##include <stdio.h>include <stdio.h>main() main()

float sum = 0.0;float sum = 0.0;float increment = 0.4;float increment = 0.4;

Λίγο μεγαλύτερη τιμήαπό 2.4 για να προλάβουμεπροβλήματα με roundingerror π χ Στη τελευταία επανάληψη;;

float x = 0.4;float x = 0.4;while (x <= 2.5)while (x <= 2.5)

sum = sum + x*x*x;sum = sum + x*x*x;x = x+ increment;x = x+ increment;

printf(“The sum of the cubes is: %fprintf(“The sum of the cubes is: %f\\n”, sum);n”, sum);

error π.χ. Στη τελευταία επανάληψηη μεταβλητή x να είναι λίγο μεγαλύτερη του 2.4 μιας και οι float μπορεί να έχουν περισσότερα από ένα δεκαδικό

9

ΕΝΤΟΛΗ ΕΝΤΟΛΗ do whiledo whileΗ εντολή Η εντολή do while do while έχει τη μορφή έχει τη μορφή

do do σειρά εντολών Βσειρά εντολών Βwhile while ((<<λογική έκφραση Α>)λογική έκφραση Α>)

Χρησιμοποιείται όταν θέλουμε η σειρά εντολών Β να εκτελεστεί τουλάχιστον Χρησιμοποιείται όταν θέλουμε η σειρά εντολών Β να εκτελεστεί τουλάχιστον μία φορά πριν τον έλεγχο τερματισμού.μία φορά πριν τον έλεγχο τερματισμού.

ΠαράδειγμαΠαράδειγμα::#include <stdio.h>#include <stdio.h>int i = 0;int i = 0;

main()main() do do

printf(“The number is: %dprintf(“The number is: %d\\n”, i);n”, i);i = i + 1;i = i + 1;

while (i <= 10)while (i <= 10)

The number is 0

The number is 1

The number is 10

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΈνα μικρό πρόγραμμα που διαβάζει αριθμούς από τον χρήστη και υπολογίζει το Ένα μικρό πρόγραμμα που διαβάζει αριθμούς από τον χρήστη και υπολογίζει το άθροισμά τους. Το πρόγραμμα θα σταματήσει όταν ο χρήστης δώσει ένα αριθμό άθροισμά τους. Το πρόγραμμα θα σταματήσει όταν ο χρήστης δώσει ένα αριθμό μικρότερο ή ίσο του μηδενόςμικρότερο ή ίσο του μηδενός. . Εάν το άθροισμα είναι αρνητικό τότε επιστρέφουμε Εάν το άθροισμα είναι αρνητικό τότε επιστρέφουμε μηδέν.μηδέν. To sum To sum θα είναι αρνητικόθα είναι αρνητικό αν δώσει ο χρήστης αρνητική τιμή την πρώτη αν δώσει ο χρήστης αρνητική τιμή την πρώτη φορά.φορά.

#include <#include <stdio.hstdio.h>>main() main()

float number;float number;float sum = 0;float sum = 0;

dododo do

printfprintf(“Enter a number: “);(“Enter a number: “);scanfscanf(“%f”, &number);(“%f”, &number);sum = sum + number;sum = sum + number;printfprintf(“(“\\n”); n”); /* /* Πήγαινε στην επόμενη γραμμή στην οθόνη */Πήγαινε στην επόμενη γραμμή στην οθόνη */

while ( !(number == 0 || number < 0) ) while ( !(number == 0 || number < 0) ) /* number != 0 && number > 0 *//* number != 0 && number > 0 */

if( sum <= 0) if( sum <= 0) sum = 0;sum = 0; /* θέσε τη μεταβλητή /* θέσε τη μεταβλητή sum sum ίση πάλι με το μηδέν */ίση πάλι με το μηδέν */printfprintf(“The sum of numbers is: %f(“The sum of numbers is: %f\\n”, sum);n”, sum);

ΙΣΟ∆ΥΝΑΜΙΕΣ ΕΝΤΟΛΩΝ ΙΣΟ∆ΥΝΑΜΙΕΣ ΕΝΤΟΛΩΝ while, forwhile, for

<<αρχική τιμή 1αρχική τιμή 1>>while (<while (<έκφραση τερματισμούέκφραση τερματισμού 22>)>)εντολές 4εντολές 4<<έκφραση αναπροσδιορισμού τιμών 3έκφραση αναπροσδιορισμού τιμών 3>>

for (<for (<αρχική τιμή 1αρχική τιμή 1>; >; <<έκφραση τερματισμούέκφραση τερματισμού 22>; >; <<έκφραση έκφραση αναπροσδιορισμού αναπροσδιορισμού τιμών 3τιμών 3>)>)

εντολές 4εντολές 4

i = 1;i = 1;while (i <= 10) while (i <= 10)

statements;statements;i++;i++;

forfor ((ii = 1; = 1; ii <= 10; <= 10; ii++)++)

statements;statements;

Η for χρησιμοποιείται πιο συχνά επειδή είναι πιο ευανάγνωστη.

ΙΣΟ∆ΥΝΑΜΙΕΣ ΕΝΤΟΛΩΝ ΙΣΟ∆ΥΝΑΜΙΕΣ ΕΝΤΟΛΩΝ while, while, forfor

Η πρόταση Η πρόταση for for είναι καλύτερη όταν ξέρετε ότι είναι καλύτερη όταν ξέρετε ότι πρέπει να δώσετε αρχική τιμή και να κάνετε πρέπει να δώσετε αρχική τιμή και να κάνετε αύξηση στο βρόχο σας.αύξηση στο βρόχο σας.Εάν έχετε μόνο μία συνθήκη που πρέπει να Εάν έχετε μόνο μία συνθήκη που πρέπει να

ί ό έ έί ό έ έικανοποιείται και όχι έναν συγκεκριμένο ικανοποιείται και όχι έναν συγκεκριμένο αριθμό βρόχων, η αριθμό βρόχων, η while while είναι καλή επιλογή. είναι καλή επιλογή. Εάν ξέρετε ότι θα πρέπει να εκτελεσθούν Εάν ξέρετε ότι θα πρέπει να εκτελεσθούν κάποιες προτάσεις τουλάχιστον μία φορά, η κάποιες προτάσεις τουλάχιστον μία φορά, η do …. while do …. while είναι η καλύτερη επιλογή.είναι η καλύτερη επιλογή.Οι έμπειροι προγραμματιστές συνήθως Οι έμπειροι προγραμματιστές συνήθως χρησιμοποιούν τη χρησιμοποιούν τη for for επειδή είναι πιο επειδή είναι πιο ευανάγνωστη.ευανάγνωστη.

10

ΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝ ΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝ ΒΡΟΧΟΥΒΡΟΧΟΥ

Στο πρόγραμμαΣτο πρόγραμμα

int i;int i;for(i = 1; i<=100; i++)for(i = 1; i<=100; i++)

i tf(“Th b i %di tf(“Th b i %d\\ ” i)” i)printf(“The number is %dprintf(“The number is %d\\n”, i);n”, i);

Η μεταβλητή Η μεταβλητή i i είναι διαθέσιμη μετά την εκτέλεση της είναι διαθέσιμη μετά την εκτέλεση της εντολής εντολής for. for. Μερικοί μεταφραστές όμως δεν Μερικοί μεταφραστές όμως δεν θεωρούν τη μεταβλητή θεωρούν τη μεταβλητή i i διαθέσιμη.διαθέσιμη.

ΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝ ΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝ ΒΡΟΧΟΥΒΡΟΧΟΥ

Ας θεωρήσουμε το πρόγραμμαΑς θεωρήσουμε το πρόγραμμα

main()main()

dodo

float float ii = 10.0;= 10.0;t t tt t tstatements;statements;

…………..…………..ii++;++;

while while ii <= 100.0<= 100.0

Η μεταβλητή Η μεταβλητή ii δεν μπορεί να ορισθεί μέσα σ’ ένα εσωτερικό δεν μπορεί να ορισθεί μέσα σ’ ένα εσωτερικό block block εντολής. εντολής. Το πρόγραμμα αυτό είναι λάθος.Το πρόγραμμα αυτό είναι λάθος.

ΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝΒΡΟΧΟΥΒΡΟΧΟΥ

Αντίθετα Αντίθετα ssτο πρόγραμματο πρόγραμμα

main() main() float float ii = 10.0= 10.0dodo

statements;statements;…………..…………..ii++;++;

while while ii <= 100.0<= 100.0

Η μεταβλητή Η μεταβλητή ii έχει ορισθεί στο έχει ορισθεί στο block block του του main. main. Θα μιλήσουμε για το Θα μιλήσουμε για το εύρος και ορίζοντα των δηλώσεων των μεταβλητών αργότερα.εύρος και ορίζοντα των δηλώσεων των μεταβλητών αργότερα.

ΚΑΤΑΣΚΕΥΗ ΕΠΑΝΑΛΗΨΗΣΚΑΤΑΣΚΕΥΗ ΕΠΑΝΑΛΗΨΗΣ

Η Η while (x) while (x) είναι ισοδύναμη με τη είναι ισοδύναμη με τη while (x!=0)while (x!=0)

Μη χρησιμοποιείται τη Μη χρησιμοποιείται τη whilewhile (x) (x) αν δεν αν δεν είναι αναγκαίαείναι αναγκαίαείναι αναγκαίαείναι αναγκαία

Όταν μεταγλωτιστούν, δίνουν και οι δύο Όταν μεταγλωτιστούν, δίνουν και οι δύο τον ίδιο κώδικατον ίδιο κώδικα

11

Eάν η selection δεν είναι ανάμεσα στο 1 και 4, το μενού προβάλεται ξανά και ο χρήστης καλείται να δώσει μία νέα τιμήμία νέα τιμή

ΣΥΝΘΕΤΕΣ ΕΝΤΟΛΕΣ ΒΡΟΧΟΥΣΥΝΘΕΤΕΣ ΕΝΤΟΛΕΣ ΒΡΟΧΟΥ

Σε μερικές περιπτώσεις χρειαζόμαστε να Σε μερικές περιπτώσεις χρειαζόμαστε να έχουμε βρόχους (έχουμε βρόχους (loops)loops) μέσα σε άλλους μέσα σε άλλους βρόχους (βρόχους (nested loops)nested loops)..Γενικά σ’Γενικά σ’ αυτή τη περίπτωση το ζητούμενο αυτή τη περίπτωση το ζητούμενο ή η ρ η ζη μή η ρ η ζη μείναι να προσέχουμε ποιες διαδικασίες είναι να προσέχουμε ποιες διαδικασίες χρειάζονται σε ποιο βρόχο οπότε να μην χρειάζονται σε ποιο βρόχο οπότε να μην έχουμε παράπλευρα φαινόμενα, ή έχουμε παράπλευρα φαινόμενα, ή παραπάνω απ΄ότι χρειάζεται παραπάνω απ΄ότι χρειάζεται πολυπλοκότητα.πολυπλοκότητα.

ΠΑΡΑ∆ΕΙΓΜΑΠΑΡΑ∆ΕΙΓΜΑΑς υλοποιήσουμε ένα πρόγραμμα το οποίο θαΑς υλοποιήσουμε ένα πρόγραμμα το οποίο θαυπολογίζει το άθροισμαυπολογίζει το άθροισμα

#include <#include <stdio.hstdio.h>>main() main()

intint k, x, sum = 0;k, x, sum = 0; (1*2 + 1*3 + … 1*10) +

k=1

5

x=2

10

∑ ∑ κ*∑ ∑ κ*xx

for(k=1; k<= 5; k++) for(k=1; k<= 5; k++)

for(x=2; x<=10; x++for(x=2; x<=10; x++))

sum = sum + k*x;sum = sum + k*x;

(1 2 1 3 … 1 10) (2*2 + 2*3 + ….2*10) +………………………..(5*2 + 5*3 + …5*10)

Το k μένει σταθερό ενώ εκτελείται το εσωτερικό loop αυξάνοντας το χ

ΚΑΤΑΣΚΕΥΗ ΕΠΑΝΑΛΗΨΗΣ 3ΚΑΤΑΣΚΕΥΗ ΕΠΑΝΑΛΗΨΗΣ 3

Σε μερικές περιπτώσεις μας ενδιαφέρει να Σε μερικές περιπτώσεις μας ενδιαφέρει να έχουμε την λογική έκφραση τερματισμού του έχουμε την λογική έκφραση τερματισμού του βρόχου ούτε στην αρχή, ούτε στο τέλος, αλλά βρόχου ούτε στην αρχή, ούτε στο τέλος, αλλά κάπου στη μέση της σειράς εντολών που κάπου στη μέση της σειράς εντολών που εκτελούνται επαναληπτικάεκτελούνται επαναληπτικάεκτελούνται επαναληπτικά.εκτελούνται επαναληπτικά.∆υστυχώς δεν υπάρχει άμεση εντολή στη ∆υστυχώς δεν υπάρχει άμεση εντολή στη C C που που να υλοποιεί αυτή τη περίπτωση (π.χ. Η να υλοποιεί αυτή τη περίπτωση (π.χ. Η κατασκευή 1 υλοποιείται με την εντολή κατασκευή 1 υλοποιείται με την εντολή whilewhile και και forfor ενώ η κατασκευή 2 με την εντολή ενώ η κατασκευή 2 με την εντολή dodo--whilewhile).).Γραφικά η κατασκευή 3 είναιΓραφικά η κατασκευή 3 είναι::

12

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ 3 3 ––ΓΡΑΦΙΚΗ ΠΑΡΑΣΤΑΣΗΓΡΑΦΙΚΗ ΠΑΡΑΣΤΑΣΗ

Η διαφορά από την προηγούμενες κατασκευές είναι ότι η σειρά εντολών Β1 θα εκτελεστεί τουλάχιστον μία φορά

ΣυνθήκηΑTrue

Β1

πριν τη λογική συνθήκη Α η οποία εάν είναι αληθής τότε η επανάληψη σταματά, αλλιώς η σειρά εντολών Β2 θα εκτελεστεί, και ο βρόγχος θα επαναληφθεί.

Β2

False

ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΑΤΑΣΚΕΥΕΣ ΕΠΑΝΑΛΗΨΗΣ 3 3 ––ΓΡΑΦΙΚΗ ΠΑΡΑΣΤΑΣΗΓΡΑΦΙΚΗ ΠΑΡΑΣΤΑΣΗ

ΣυνθήκηΑTrue

False

Β1

Συνθήκη

Β

ΑFalse

Συνθήκη

Α

True

False

Η διαφορά από την προηγούμενες κατασκευές είναι ότι η σειρά εντολών Β1 θα εκτελεστεί τουλάχιστον μία φορά πριν τη λογική συνθήκη Α η οποία εάν είναι αληθής τότε η επανάληψη σταματά, αλλιώς η σειρά εντολών Β2 θα εκτελεστεί, και ο βρόχος θα επαναληφθεί.

Β2TrueΒ

ΥΛΟΠΟΙΗΣΗ ΤΗΣ ΚΑΤΑΣΚΕΥΗΣ 3ΥΛΟΠΟΙΗΣΗ ΤΗΣ ΚΑΤΑΣΚΕΥΗΣ 3

#define TRUE 1#define TRUE 1#define FALSE 0#define FALSE 0

void main() void main() intint flag;flag;

flag = TRUE;flag = TRUE;while (flag)while (flag) /*/* while (flag !=0) */while (flag !=0) */

Η υλοποίηση αυτή απαιτεί μια παραπάνω μεταβλητή (flag) αλλάείναι εύκολα κατανοητή και επεκτάσιμη

Β1

while (flag) while (flag) / / while (flag !=0) /while (flag !=0) /εντολές Β1εντολές Β1;;if (if (λογική συνθήκη Α)λογική συνθήκη Α)

flag = FALSE;flag = FALSE;

elseelse

εντολές Βεντολές Β2;2;

Συνθήκη

Β2

ΑTrue

False

Aν η συνθήκη Α είναι true, πρέπει να κάνω το flag false για να βγει το πρoγραμμα έξω από το βρόγχο while

ΥΛΟΠΟΙΗΣΗ ΤΗΣ ΚΑΤΑΣΚΕΥΗΣ 3ΥΛΟΠΟΙΗΣΗ ΤΗΣ ΚΑΤΑΣΚΕΥΗΣ 3

#define TRUE 1#define TRUE 1

void main() void main()

while (TRUE) /* while (TRUE) /* Συνεχής επανάληψη */Συνεχής επανάληψη */

Αυτό το loop δεν θα σταματούσε ποτέχωρίς το break

εντολές Β1εντολές Β1;;if (if (λογική συνθήκη Α)λογική συνθήκη Α)

break;break;εντολές Βεντολές Β2;2;

Μόνο η πρώτη εντολή break εκτελείται στο if διότι δεν υπάρχουν . Η εντολήbreak σταματά το βρόχο και μεταφέρει τον έλεγχο στην πρώτη εντολή μετά το ΒΡΟΧΟ.

Συνθήκη

Β2

ΑTrue

False

Β1

13

ΛΙΓΑ ΛΟΓΙΑ ΓΙΑ ΤΗΝ ΚΑΤΑΣΚΕΥΗ 3ΛΙΓΑ ΛΟΓΙΑ ΓΙΑ ΤΗΝ ΚΑΤΑΣΚΕΥΗ 3

Φαίνεται και είναι λίγο παράξενη. Όμως την Φαίνεται και είναι λίγο παράξενη. Όμως την συναντάμε αρκετά συχνά ιδιαίτερα όταν συναντάμε αρκετά συχνά ιδιαίτερα όταν διαβάζουμε από ένα αρχείο ή το πρόγραμμα διαβάζουμε από ένα αρχείο ή το πρόγραμμα λαμβάνει στοιχεία από τον χρήστη. λαμβάνει στοιχεία από τον χρήστη. Η πρώτη υλοποίηση χρειάζεται μία επιπλέονΗ πρώτη υλοποίηση χρειάζεται μία επιπλέονΗ πρώτη υλοποίηση χρειάζεται μία επιπλέον Η πρώτη υλοποίηση χρειάζεται μία επιπλέον μεταβλητή αλλά είναι εύκολα κατανοητή. Η μεταβλητή αλλά είναι εύκολα κατανοητή. Η δεύτερη υλοποίηση χρησιμοποιεί την εντολή δεύτερη υλοποίηση χρησιμοποιεί την εντολή breakbreak που χρησιμοποιείται για να τερματίσει που χρησιμοποιείται για να τερματίσει οποιοδήποτε οποιοδήποτε βρόχοβρόχο. Όμως η εντολή . Όμως η εντολή breakbreakμπορεί να δημιουργήσει σύγχυση ιδιαίτερα όταν μπορεί να δημιουργήσει σύγχυση ιδιαίτερα όταν υπάρχουν βρόχοι μέσα σε άλλους βρόχους.υπάρχουν βρόχοι μέσα σε άλλους βρόχους.

XXΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ

∆ΙΑΤΑΞΕΙΣ ΤΑ ΒΑΣΙΚΑ∆ΙΑΤΑΞΕΙΣ ΤΑ ΒΑΣΙΚΑ

Μία διάταξη είναι μία ταξινομημένη ομάδα θέσεων Μία διάταξη είναι μία ταξινομημένη ομάδα θέσεων αποθήκευσης δεδομένων που έχουν το ίδιο όνομα και αποθήκευσης δεδομένων που έχουν το ίδιο όνομα και διακρίνονται μεταξύ τους από ένα δείκτηδιακρίνονται μεταξύ τους από ένα δείκτη –– έναν αριθμό που έναν αριθμό που έπεται του ονόματος της μεταβλητής, περιβεβλημένες απο έπεται του ονόματος της μεταβλητής, περιβεβλημένες απο αγκύλες.αγκύλες.Οι διαταξεις πρέπει να δηλωθούν.Οι διαταξεις πρέπει να δηλωθούν.intint data[1000]data[1000] διάταξη με το όνομαδιάταξη με το όνομα datadata και τύποκαι τύπο intint 10001000intint data[1000],data[1000], διάταξη με το όνομα διάταξη με το όνομα datadata και τύπο και τύπο intint 1000 1000 στοιχείων.στοιχείων.datadata[0] έως [0] έως datadata[999].[999].

intint data[1000];data[1000];intint count;count;count = 100;count = 100;data[count] = 12; /*data[count] = 12; /*ίδιο με ίδιο με data[100] = 12; data[100] = 12; */*/

∆ΙΑΤΑΞΕΙΣ ΤΑ ΒΑΣΙΚΑ∆ΙΑΤΑΞΕΙΣ ΤΑ ΒΑΣΙΚΑ

Μη δηλώνετε διατάξεις με δείκτες Μη δηλώνετε διατάξεις με δείκτες μεγαλύτερους από τον αριθμό τιμών που μεγαλύτερους από τον αριθμό τιμών που χρειάζεστε για οικονομία μνήμης.χρειάζεστε για οικονομία μνήμης.

Ο δ άξ ίζ δ ί 0 όΟ δ άξ ίζ δ ί 0 όΟι διατάξεις αρχίζουν με το δείκτη 0 και όχι Οι διατάξεις αρχίζουν με το δείκτη 0 και όχι 1.1.

14

XXΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ

Μία διάταξη είναι μία συλλογή θέσεων Μία διάταξη είναι μία συλλογή θέσεων αποθήκευσης δεδομένων, που έχουν τον αποθήκευσης δεδομένων, που έχουν τον ίδιο τύπο δεδομένων και το ίδιο όνομα.ίδιο τύπο δεδομένων και το ίδιο όνομα.

Κάθε θέση αποθήκευσης είναι έναΚάθε θέση αποθήκευσης είναι ένα στοιχείοστοιχείοΚάθε θέση αποθήκευσης είναι ένα Κάθε θέση αποθήκευσης είναι ένα στοιχείοστοιχείοτης διάταξης.της διάταξης.

ΜΟΝΟ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣΜΟΝΟ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣ

Μία Μία μονοδιάστατη διάταξη μονοδιάστατη διάταξη έχει ένα όνομα και έχει ένα όνομα και ένα δείκτη (αριθμός) που έπεται του ένα δείκτη (αριθμός) που έπεται του ονόματος.ονόματος.

float expenses [12];float expenses [12];p [ ]p [ ]

H H διάταξη με όνομα διάταξη με όνομα expensesexpenses έχει 12 έχει 12 στοιχεία τύπου στοιχεία τύπου floatfloat..

Τα στοιχεία της διάταξης αρχίζουν από το 0 Τα στοιχεία της διάταξης αρχίζουν από το 0 έως το 11.έως το 11.

Τα στοιχεία της διάταξης αποθηκεύονται σε Τα στοιχεία της διάταξης αποθηκεύονται σε διαδοχικές θέσεις της μνήμης.διαδοχικές θέσεις της μνήμης.

XXΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ

expenses [1] = 100;expenses [1] = 100;

H H πρόταση αποθηκεύει την τιμή 100 στο πρόταση αποθηκεύει την τιμή 100 στο δεύτεροδεύτερο στοιχείο της διάταξης.στοιχείο της διάταξης.

[8][8] [9][9]expenses [8]expenses [8] == expenses [9];expenses [9];

expenses [1+2] = 100; expenses [1+2] = 100; το ίδιο με το ίδιο με expenses expenses [[33] = 100; ] = 100;

expenses[a[2]] = 100; a[2] expenses[a[2]] = 100; a[2] διάταξη διάταξη ακέραιων.ακέραιων.

XXΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ΡΗΣΗ ΑΡΙΘΜΗΤΙΚΩΝ ∆ΙΑΤΑΞΕΩΝ∆ΙΑΤΑΞΕΩΝ

Προσοχή στη χρήση δεικτών διατάξεων Προσοχή στη χρήση δεικτών διατάξεων εκτός ορίων. Ο μεταγλωττιστής δε εκτός ορίων. Ο μεταγλωττιστής δε αναγνωρίζει απαραίτητα ότι είναι δείκτης αναγνωρίζει απαραίτητα ότι είναι δείκτης εκτός ορίων με απρόβλεπτα αποτελέσματα.εκτός ορίων με απρόβλεπτα αποτελέσματα.

Αν θέλαμε να χρησιμοποιήσουμε διάταξη με Αν θέλαμε να χρησιμοποιήσουμε διάταξη με δείκτη από 1 έως δείκτη από 1 έως n, n, τότε θα μπορούσαμε να τότε θα μπορούσαμε να έχουμε διάταξη με ένα παραπάνω στοιχείο έχουμε διάταξη με ένα παραπάνω στοιχείο και να αγνοήσουμε το πρώτο με δείκτη 0.και να αγνοήσουμε το πρώτο με δείκτη 0.

15

Ο sizeof() είναι μοναδιαίος τελεστής και δέχεται ως όρισμα ένα όνομα μεταβλητής ή τύπο δεδομένων μεπιστρέφοντας το μέγεθος σε bytes

ΠΟΛΥ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣΠΟΛΥ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣ

Μία πολυδιάστατη διάταξη έχει Μία πολυδιάστατη διάταξη έχει περισσότερους από ένα δείκτες.περισσότερους από ένα δείκτες.

Μία διδιάστατη έχει 2 δείκτες.Μία διδιάστατη έχει 2 δείκτες.

i ti t h k [8][8]h k [8][8] 64 ί64 ί h kh kintint checker [8][8]; checker [8][8]; με 64 στοιχεία, με 64 στοιχεία, checker checker [0][0],checker[0][1]. … [[0][0],checker[0][1]. … [Σκεφτόμαστε όπως Σκεφτόμαστε όπως τους πίνακες 8 γραμμών και 8 στηλών.]τους πίνακες 8 γραμμών και 8 στηλών.]

Μία τρισδιάστατη διάταξη θα μπορούσε να Μία τρισδιάστατη διάταξη θα μπορούσε να θεωρηθεί ώς ένας κύβος θεωρηθεί ώς ένας κύβος –– αλλά καλύτερα αλλά καλύτερα να αφεθούν στη φαντασία σας!να αφεθούν στη φαντασία σας!

ΠΟΛΥ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣΠΟΛΥ∆ΙΑΣΤΑΤΕΣ ∆ΙΑΤΑΞΕΙΣ

#define MONTHS 12#define MONTHS 12

intint array[MONTHS];array[MONTHS];

Μπορούμε να αλλάξουμε το δείκτη στο Μπορούμε να αλλάξουμε το δείκτη στο #define #define χωρίς χωρίς αλλαγές στο πρόγραμμα.αλλαγές στο πρόγραμμα.

Ισοδύναμη με την πρόταση Ισοδύναμη με την πρόταση intint arrayarray[12[12];];

Κάποιοι μεταγλωττιστές θα βγάλουν λάθος αν αντί για Κάποιοι μεταγλωττιστές θα βγάλουν λάθος αν αντί για DEFINE DEFINE έχουμεέχουμε::

const const intint MONTHS = 12;MONTHS = 12;

intint array[MONTHS];array[MONTHS];

16

ΑΠΟ∆ΟΣΗ ΑΡΧΙΚΩΝ ΤΙΜΩΝ ΑΠΟ∆ΟΣΗ ΑΡΧΙΚΩΝ ΤΙΜΩΝ

int array[4] = 100, 200, 300, 400 ;int array[4] = 100, 200, 300, 400 ;

To To ίδιο αποτέλεσμα μείδιο αποτέλεσμα με::

int array[] = 100, 200, 300, 400 ;int array[] = 100, 200, 300, 400 ;

int array[10] = 1,2,3 ;int array[10] = 1,2,3 ;

MMε απρόσμενα αποτελέσματα για λιγότερα ε απρόσμενα αποτελέσματα για λιγότερα στοιχεία, με λάθος μετταγλωτιστή για στοιχεία, με λάθος μετταγλωτιστή για περισσότερα.περισσότερα.

ΑΠΟ∆ΟΣΗ ΑΡΧΙΚΩΝ ΤΙΜΩΝ ΑΠΟ∆ΟΣΗ ΑΡΧΙΚΩΝ ΤΙΜΩΝ

Πολυδιάστατων διατάξεωνΠολυδιάστατων διατάξεων::intint array [4][3] = 1,2,3,4,5,6,7,8,9,10,11,12 array [4][3] = 1,2,3,4,5,6,7,8,9,10,11,12

;;array[0][0] = 1array[0][0] = 1array[0][0] 1… array[0][0] 1…

array[1][0]=4…array[3][1]=11, array[1][0]=4…array[3][1]=11, array[3][2]=12array[3][2]=12

ΚαλύτεραΚαλύτερα::intint array [4][3] = 1,2,3, 4,5,6, 7,8,9, array [4][3] = 1,2,3, 4,5,6, 7,8,9,

10,11,12 ;10,11,12 ;

AAΠΟΘΗΚΕΥΣΗΠΟΘΗΚΕΥΣΗ

Μία διάταξη 500 στοιχείων τύπου Μία διάταξη 500 στοιχείων τύπου float float απαιτεί 500 * 4 απαιτεί 500 * 4 bytesbytes

17

ΕρωτήσειςΕρωτήσεις

Μπορώ να προσθέσω δύο διατάξεις μαζί?Μπορώ να προσθέσω δύο διατάξεις μαζί?

Πόσες διαστάσεις διάταξης μπορώ να Πόσες διαστάσεις διάταξης μπορώ να έχω?έχω?


Recommended