Οι πίνακες (Arrays) στη γλώσσα C είναι μια δομή δεδομένων που μας επιτρέπει να αποθηκεύσουμε μια ομάδα στοιχείων του ίδιου τύπου με συνεχόμενες θέσεις μνήμης. Οι πίνακες στη C έχουν σταθερό μέγεθος, που ορίζεται κατά τη δήλωσή τους, και τα στοιχεία τους αποθηκεύονται με βάση τη θέση τους (index).
Για παράδειγμα, ο παρακάτω κώδικας δημιουργεί έναν πίνακα με όνομα “numbers” που περιέχει 5 ακέραιους αριθμούς:
int numbers[5] = {2, 4, 6, 8, 10};
Οι ακέραιοι αριθμοί 2, 4, 6, 8 και 10 αποθηκεύονται στις πέντε διαδοχικές θέσεις μνήμης του πίνακα “numbers”.
Για να έχουμε πρόσβαση σε ένα συγκεκριμένο στοιχείο του πίνακα, αναφερόμαστε στο όνομα του πίνακα ακολουθούμενο από τον δείκτη (index) του στοιχείου που θέλουμε να προσπελάσουμε. Για παράδειγμα:
int thirdNumber = numbers[2];
Η παραπάνω γραμμή κώδικα προσπελαύνει το τρίτο στοιχείο του πίνακα “numbers” και το αποθηκεύει στη μεταβλητή “thirdNumber”.
Οι πίνακες στη C μπορούν επίσης να χρησιμοποιηθούν με βρόχους,
όπως ο βρόχος for, για να εκτελεστεί μια ενέργεια για κάθε στοιχείο του πίνακα. Μπορούμε να προσπελάσουμε τα στοιχεία ενός πίνακα, χρησιμοποιώντας τον δείκτη τους ως μετρητή στον βρόχο.
Οι πίνακες στη C αποτελούν ένα ισχυρό εργαλείο για την οργάνωση και επεξεργασία συναφών δεδομένων.
Για να εισαγάγετε τιμές σε αυτόν, χρησιμοποιήστε μια λίστα χωρισμένη με κόμματα, μέσα σε αγκύλες:
#include <stdio.h> int main() { int numbers[5] = {1, 2, 3, 4, 5}; printf("%d\n", numbers[0]); // Εκτύπωση του πρώτου στοιχείου του πίνακα printf("%d\n", numbers[2]); // Εκτύπωση του τρίτου στοιχείου του πίνακα return 0; }
Ο κώδικας αυτός ανήκει στη γλώσσα προγραμματισμού C και περιλαμβάνει τις εξής ενέργειες:
- Περιλαμβάνεται η βιβλιοθήκη
<stdio.h>
για τη χρήση της συνάρτησηςprintf
. - Ορίζεται η συνάρτηση
main
ως η κύρια συνάρτηση του προγράμματος. - Δημιουργείται ένας πίνακας με το όνομα
numbers
που περιλαμβάνει 5 ακεραίους αριθμούς. - Χρησιμοποιείται η συνάρτηση
printf
για να εκτυπώσει το πρώτο και το τρίτο στοιχείο του πίνακα. - Η συνάρτηση
main
επιστρέφει την τιμή 0, υποδεικνύοντας επιτυχή ολοκλήρωση του προγράμματος.
Το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι:
1 3
Αυτό συμβαίνει επειδή ο κώδικας χρησιμοποιεί τη συνάρτηση printf
για να εκτυπώσει τα πρώτο και τρίτο στοιχείο του πίνακα numbers
. Ο πίνακας numbers
περιλαμβάνει τους ακέραιους αριθμούς 1, 2, 3, 4, 5. Η εντολή printf("%d\n", numbers[0])
εκτυπώνει το πρώτο στοιχείο του πίνακα, που είναι το 1, και η εντολή printf("%d\n", numbers[2])
εκτυπώνει το τρίτο στοιχείο του πίνακα, που είναι το 3. Το \n
χρησιμοποιείται για να προχωρήσει στην επόμενη γραμμή μετά από κάθε εκτύπωση.
Για να αποκτήσετε πρόσβαση σε ένα στοιχείο του πίνακα, αναφερθείτε στον αριθμό ευρετηρίου του.
Οι ευρετήριοι του πίνακα ξεκινούν από 0: [0] είναι το πρώτο στοιχείο. Το [1] είναι το δεύτερο στοιχείο, κ.λπ.
Η παρακάτω δήλωση αποκτά πρόσβαση στην τιμή του πρώτου στοιχείου [0] στον πίνακα myNumbers:
#include <stdio.h> int main() { int myNumbers[3] = {10, 20, 30}; // Δημιουργία ενός πίνακα με τρία στοιχεία και αρχικές τιμές 10, 20, 30 printf("%d\n", myNumbers[0]); // Εκτύπωση του πρώτου στοιχείου του πίνακα (10) return 0; }
Στο παραπάνω παράδειγμα, ο πίνακας myNumbers περιέχει τις τιμές 10, 20 και 30. Η συνάρτηση printf χρησιμοποιείται για να εκτυπώσει την πρώτη τιμή του πίνακα (index 0), η οποία είναι ο αριθμός 10. Αυτή η τιμή εκτυπώνεται στην οθόνη.
Για να αλλάξετε την τιμή ενός συγκεκριμένου στοιχείου, αναφερθείτε στον αριθμό ευρετηρίου του:
#include <stdio.h> int main() { int myNumbers[3] = {10, 20, 30}; printf("%d\n", myNumbers[1]); // Εκτύπωση του δεύτερου στοιχείου του πίνακα myNumbers myNumbers[1] = 40; // Αλλαγή της τιμής του δεύτερου στοιχείου του πίνακα σε 40 printf("%d\n", myNumbers[1]); // Εκτύπωση της νέας τιμής του δεύτερου στοιχείου του πίνακα return 0; }
Στο παραπάνω παράδειγμα, ο πίνακας myNumbers αρχικοποιείται με τις τιμές 10, 20 και 30. Η συνάρτηση printf χρησιμοποιείται για να εκτυπώσει τη δεύτερη τιμή του πίνακα (index 1), η οποία είναι ο αριθμός 20. Στη συνέχεια, η τιμή του δεύτερου στοιχείου του πίνακα αλλάζει από 20 σε 40, και η συνάρτηση printf χρησιμοποιείται ξανά για να εκτυπώσει την ανανεωμένη δεύτερη τιμή του πίνακα (index 1), η οποία είναι το 40.
[adinserter block=”2″]
Μπορείτε να διατρέξετε τα στοιχεία του πίνακα με τη βοήθεια της επανάληψης for.
Το παρακάτω παράδειγμα εμφανίζει όλα τα στοιχεία στον πίνακα myNumbers:
#include <stdio.h> int main() { int myNumbers[3] = {10, 20, 30}; // Δήλωση και αρχικοποίηση ενός πίνακα με 3 ακέραιες τιμές int i; // Μεταβλητή για την επανάληψη του πίνακα for (i = 0; i < 3; i++) { printf("%d\n", myNumbers[i]); // Εκτύπωση της τιμής κάθε στοιχείου του πίνακα } return 0; // Επιστροφή της τιμής 0 για ορθή ολοκλήρωση του προγράμματος }
Ο παραπάνω κώδικας γράφεται σε γλώσσα C και περιλαμβάνει τα εξής σημεία:
#include <stdio.h>
: Η δήλωση αυτή εισάγει τη βιβλιοθήκηstdio.h
, η οποία παρέχει συναρτήσεις εισόδου/εξόδου, όπως ηprintf
.int main()
: Η κύρια συνάρτηση του προγράμματος. Όλος ο κώδικας εκτελείται μέσα σε αυτήν τη συνάρτηση.int myNumbers[3] = {10, 20, 30};
: Δήλωση και αρχικοποίηση ενός πίνακα με τρεις ακέραιες τιμές.int i;
: Δήλωση μιας μεταβλητήςi
που θα χρησιμοποιηθεί για την επανάληψη του πίνακα.for (i = 0; i < 3; i++) { ... }
: Μια επανάληψηfor
που επαναλαμβάνεται τρεις φορές, αυξάνοντας την τιμή της μεταβλητήςi
κατά ένα σε κάθε επανάληψη.printf("%d\n", myNumbers[i]);
: Η συνάρτησηprintf
χρησιμοποιείται για την εκτύπωση της τιμής του κάθε στοιχείου του πίνακα. Η%d
αντιπροσωπεύει τον ακέραιο τύπο δεδομένων που εκτυπώνεται και το\n
αντιπροσωπεύει έναν χαρακτήρα νέας γραμμής για να διαχωρίσει τις εκτυπώσεις.return 0;
: Επιστρέφει την τιμή 0, υποδεικνύοντας ότι το πρόγραμμα ολοκληρώθηκε επιτυχώς.
Το αποτέλεσμα στην οθόνη θα είναι:
10 20 30
Κάθε γραμμή αντιστοιχεί σε ένα στοιχείο του πίνακα myNumbers
και εκτυπώνεται με τη χρήση της συνάρτησης printf
.
Μια άλλη συνηθισμένη μέθοδος για τη δημιουργία πινάκων είναι να καθορίσετε το μέγεθος του πίνακα και να προσθέσετε στοιχεία αργότερα:
#include <stdio.h> int main() { int myNumbers[5]; // Δήλωση ενός πίνακα με 5 ακεραίες θέσεις int i; myNumbers[0] = 10; // Αποθήκευση της τιμής 10 στην πρώτη θέση του πίνακα myNumbers[1] = 20; // Αποθήκευση της τιμής 20 στη δεύτερη θέση του πίνακα myNumbers[2] = 30; // Αποθήκευση της τιμής 30 στην τρίτη θέση του πίνακα myNumbers[3] = 40; // Αποθήκευση της τιμής 40 στην τέταρτη θέση του πίνακα myNumbers[4] = 50; // Αποθήκευση της τιμής 50 στην πέμπτη θέση του πίνακα for (i = 0; i < 5; i++) { printf("%d\n", myNumbers[i]); // Εκτύπωση των τιμών του πίνακα } return 0; }
Ο παραπάνω κώδικας δημιουργεί έναν πίνακα με 5 ακεραίες θέσεις με όνομα myNumbers
. Στη συνέχεια, αποθηκεύει τις τιμές 10, 20, 30, 40 και 50 στις αντίστοιχες θέσεις του πίνακα.
Στον επόμενο βρόχο for
, οι τιμές του πίνακα εκτυπώνονται μία προς μία χρησιμοποιώντας τη συνάρτηση printf
. Τέλος, ο κώδικας επιστρέφει την τιμή 0, υποδηλώνοντας ότι το πρόγραμμα ολοκληρώθηκε επιτυχώς.
Το αποτέλεσμα που θα εμφανιστεί στην οθόνη αν εκτελέσετε τον παραπάνω κώδικα θα είναι:
10 20 30 40 50
Κάθε γραμμή αντιπροσωπεύει μία τιμή του πίνακα myNumbers
που εκτυπώνεται με τη χρήση της συνάρτησης printf
. Ο κώδικας εκτυπώνει τις τιμές του πίνακα μία προς μία, από την πρώτη θέση έως την πέμπτη θέση.
Πολυδιάστατοι πίνακες είναι πίνακες που περιέχουν άλλους πίνακες ως στοιχεία τους. Μπορούν να ερμηνευτούν ως πίνακες με πολλές διαστάσεις, όπως πίνακες με σειρές και στήλες.
Για παράδειγμα, ένας δισδιάστατος πίνακας μπορεί να θεωρηθεί ως ένας πίνακας με σειρές και στήλες, όπως ένας πίνακας που αναπαριστά το πρόγραμμα ενός σχολείου, με τις σειρές να αντιπροσωπεύουν τους μαθητές και τις στήλες να αντιπροσωπεύουν τα μαθήματα.
Οι πολυδιάστατοι πίνακες μας επιτρέπουν να αποθηκεύουμε και να ανακτούμε δεδομένα με πιο πολύπλοκο τρόπο από τους μονοδιάστατους πίνακες. Μπορούμε να προσπελάσουμε τα στοιχεία των πολυδιάστατων πινάκων χρησιμοποιώντας δύο ή περισσότερες δείκτες.
Οι πολυδιάστατοι πίνακες είναι χρήσιμοι όταν χρειαζόμαστε πιο πολύπλοκες δομές για να αποθηκεύσουμε και να επεξεργαστούμε τα δεδομένα μας στη γλώσσα προγραμματισμού C.
[adinserter block=”3″]
Ένας δισδιάστατος πίνακας αναφέρεται επίσης ως πίνακας με δύο διαστάσεις ή πίνακας με σειρές και στήλες. Αντίθετα με έναν μονοδιάστατο πίνακα, ο δισδιάστατος πίνακας οργανώνεται σε γραμμές και στήλες, σχηματίζοντας έναν πίνακα με δύο διαστάσεις.
Μπορούμε να φανταστούμε έναν δισδιάστατο πίνακα ως ένα πλεγμά ή πίνακα σειρών και στηλών, όπου κάθε στοιχείο του πίνακα αντιστοιχεί σε ένα στοιχείο του πλέγματος. Για παράδειγμα, μπορούμε να έχουμε έναν δισδιάστατο πίνακα που αναπαριστά μια εικόνα με τις γραμμές να αντιπροσωπεύουν τα ύψη των εικονοστοιχείων και τις στήλες να αντιπροσωπεύουν τις πλάτης των εικονοστοιχείων.
Οι δισδιάστατοι πίνακες επιτρέπουν την αποθήκευση και επεξεργασία δεδομένων με πιο πολύπλοκο τρόπο από τους μονοδιάστατους πίνακες. Μπορούμε να αποκτήσουμε πρόσβαση σε οποιοδήποτε στοιχείο του δισδιάστατου πίνακα χρησιμοποιώντας δύο δείκτες, έναν για τη γραμμή και έναν για τη στήλη.
Οι δισδιάστατοι πίνακες είναι χρήσιμοι όταν χρειαζόμαστε πιο πολύπλοκες δομές για να αποθηκεύσουμε και να επεξεργαστούμε δεδομένα στη γλώσσα προγραμματισμού C.
Για να δημιουργήσετε έναν δισδιάστατο πίνακα ακεραίων, δείτε το παρακάτω παράδειγμα:
#include <stdio.h> int main() { int matrix[3][3] = { {1, 2, 3}, // Αρχικοποίηση του πίνακα με τις τιμές 1, 2, 3 στην πρώτη γραμμή {4, 5, 6}, // Αρχικοποίηση του πίνακα με τις τιμές 4, 5, 6 στη δεύτερη γραμμή {7, 8, 9} // Αρχικοποίηση του πίνακα με τις τιμές 7, 8, 9 στην τρίτη γραμμή }; int i, j; for (i = 0; i < 3; i++) { // Επανάληψη για κάθε γραμμή του πίνακα for (j = 0; j < 3; j++) { // Επανάληψη για κάθε στήλη του πίνακα printf("%d ", matrix[i][j]); // Εκτύπωση του στοιχείου στη συγκεκριμένη θέση του πίνακα } printf("\n"); // Αλλαγή γραμμής μετά την ολοκλήρωση κάθε γραμμής του πίνακα } return 0; }
Ο κώδικας δημιουργεί έναν 3×3 πίνακα με ονομασία “matrix” και αρχικοποιεί τις τιμές του με τους αριθμούς 1 έως 9. Στη συνέχεια, χρησιμοποιεί έναν εμφωλευμένο βρόχο for για να εκτυπώσει τα στοιχεία του πίνακα στην οθόνη. Κάθε στοιχείο του πίνακα εκτυπώνεται χρησιμοποιώντας τη συνάρτηση printf(), και έπειτα αλλάζει η γραμμή για να εκτυπωθεί η επόμενη σειρά του πίνακα.
Το αποτέλεσμα που εμφανίζεται στην οθόνη είναι ο πίνακας 3×3 με τις τιμές:
1 2 3 4 5 6 7 8 9
Ο κώδικας επιστρέφει την τιμή 0, που υποδηλώνει ότι η main συνάρτηση ολοκληρώθηκε με επιτυχία.
Για να αποκτήσετε πρόσβαση σε ένα στοιχείο ενός δισδιάστατου πίνακα, πρέπει να καθορίσετε την ευρετηριακή θέση του στοιχείου χρησιμοποιώντας δύο αριθμούς ευρετηρίου. Ο πρώτος αριθμός ευρετηρίου αναφέρεται στη σειρά του πίνακα, ενώ ο δεύτερος αριθμός ευρετηρίου αναφέρεται στη στήλη του πίνακα. Με τη συνδυασμένη χρήση αυτών των δύο αριθμών, μπορείτε να προσδιορίσετε μοναδικά τη θέση ενός στοιχείου στον πίνακα και να έχετε πρόσβαση σε αυτό.
Η παρακάτω εντολή αποκτά πρόσβαση στην τιμή του στοιχείου στην πρώτη σειρά (0) και την τρίτη στήλη (2) του πίνακα matrix.
matrix[0][2]
Για να αλλάξετε την τιμή ενός στοιχείου σε έναν δισδιάστατο πίνακα, πρέπει να αναφερθείτε στον αριθμό ευρετηρίου του στοιχείου σε κάθε διάσταση του πίνακα.
Για παράδειγμα, αν έχουμε έναν πίνακα με όνομα “array” και θέλουμε να αλλάξουμε την τιμή του στοιχείου στη θέση (i, j), όπου i είναι ο δείκτης για τη γραμμή και j είναι ο δείκτης για τη στήλη, μπορούμε να χρησιμοποιήσουμε την παρακάτω σύνταξη:
array[i][j] = νέα_τιμή;
Με αυτόν τον τρόπο, η τιμή του συγκεκριμένου στοιχείου αλλάζει στη νέα τιμή που καθορίσαμε.
Το ακόλουθο παράδειγμα θα αλλάξει την τιμή του στοιχείου στην πρώτη σειρά (0) και την πρώτη στήλη (0):
matrix[0][0] = 42;
Για να εξετάσετε ή να εκτελέσετε ενέργειες σε όλα τα στοιχεία ενός δισδιάστατου πίνακα, χρειάζεστε δύο επαναλήψεις, μία για κάθε διάσταση του πίνακα. Ο πρώτος βρόχος ελέγχει τις γραμμές του πίνακα, ενώ ο δεύτερος βρόχος ελέγχει τα στοιχεία κάθε γραμμής.
Οι δύο βρόχοι επανάληψης συνεργάζονται για να εξετάσουν και να εκτελέσουν κώδικα για κάθε στοιχείο του πίνακα. Ο πρώτος βρόχος αρχικοποιείται με την πρώτη διάσταση (γραμμές) και ο δεύτερος βρόχος εκτελείται εντός αυτού. Μετά την εκτέλεση του δεύτερου βρόχου για μια γραμμή, ο πρώτος βρόχος αυξάνεται κατά ένα και επαναλαμβάνει την διαδικασία για την επόμενη γραμμή.
Αυτή η διπλή επανάληψη σας επιτρέπει να εξετάσετε και να εκτελέσετε ενέργειες σε κάθε στοιχείο του πίνακα με τη σειρά τους.
Το ακόλουθο παράδειγμα εμφανίζει όλα τα στοιχεία του πίνακα matrix:
#include <stdio.h> int main() { int matrix[3][3] = { {1, 2, 3}, // Πρώτη γραμμή του πίνακα {4, 5, 6}, // Δεύτερη γραμμή του πίνακα {7, 8, 9} // Τρίτη γραμμή του πίνακα }; int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%d ", matrix[i][j]); // Εκτύπωση του στοιχείου στη θέση (i, j) του πίνακα } printf("\n"); // Νέα γραμμή μετά το τέλος μιας γραμμής του πίνακα } return 0; }
Ο παραπάνω κώδικας σε C δημιουργεί έναν πίνακα matrix
με διάσταση 3×3 και τον εμφανίζει στην οθόνη. Ο πίνακας αρχικοποιείται με ακέραιες τιμές από το 1 έως το 9.
Η εσωτερική δομή επανάληψης for
χρησιμοποιείται για να προσπελάσει και να εκτυπώσει κάθε στοιχείο του πίνακα. Οι μεταβλητές i
και j
χρησιμοποιούνται ως δείκτες για τις γραμμές και τις στήλες του πίνακα.
Μετά από κάθε εκτύπωση γραμμής του πίνακα, εμφανίζεται ένα νέο γραμματοσειρά (\n
) για να μεταβούμε στην επόμενη γραμμή.
Τέλος, η main
συνάρτηση επιστρέφει την τιμή 0 για να υποδείξει ότι το πρόγραμμα ολοκληρώθηκε χωρίς σφάλματα.
Το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι ο πίνακας matrix
που περιέχει τους ακέραιους αριθμούς από το 1 έως το 9, τοποθετημένους σε μορφή 3×3. Η έξοδος θα είναι η εξής:
1 2 3 4 5 6 7 8 9
Κάθε αριθμός του πίνακα είναι χωρισμένος από ένα κενό διάστημα. Κάθε γραμμή του πίνακα εκτυπώνεται σε μια νέα γραμμή.