τι περιέχει αυτό το κεφάλαιο...
Ας ξεκινήσουμε με τον ορισμό ενός πίνακα. Πίνακας είναι μια ομάδα απο στοιχεία που έχουν κοινό τύπο! Η C μας δίνει την ευκολία να χρησιμοποιούμε πίνακες όταν έχουμε ασκήσεις με ίδιο τύπο δεδομένων. Αυτό είναι σημαντικό και θα εξηγήσω γιατί! Όταν δημιουργούμε έναν πίνακα δεν μπορούμε να πούμε για παράδειγμα ότι το πρώτο στοιχείο θα είναι ακέραιος, το δεύτερο ένας χαρακτήρας και το τρίτο πάλι ακέραιος! Σε έναν πίνακα πρέπει υποχρεωτικά όλα τα στοιχεία του να είναι ΙΔΙΟΥ ΤΥΠΟΥ! Έτσι αν αποφασίουμε απο την αρχή να έχουμε ένα πίνακα με ακεραίους όλα τα στοιχεία θα είναι ακέραιοι (integers). Αυτή ήταν και η πιο σημαντική ιδιότητα ενός πίνακα. Τώρα, υπάρχουν δύο τύποι πινάκων. Οι στατικοί και οι δυναμικοί. Τι είναι το καθένα? Οι στατικοί πίνακες είναι αυτοί που ορίζονται απο την αρχή του προγράμματος μας δηλαδή όταν ορίζουμε τις μεταβλητές σε καποιο σημείο απο κάτω ορίζουμε και τον πίνακα και το ΜΕΓΕΘΟΣ ΤΟΥ ΔΕΝ ΑΛΛΑΖΕΙ. Με άλλα λόγια σε όλο το πρόγραμμα ο πίνακας θα έχει μέγεθος n ή nxn, ανάλογα την διάσταση. Ο δυναμικός πίνακας απο την άλλη όπως λέει και το πρόγραμμα μπορεί να αλλάξει μέγεθος. Είναι πολύ χρήσιμο γιατί μπορεί να μην ξέρουμε εξ-αρχής το μέγεθος ενός πίνακα, έτσι βάζουμε ένα αυθαίρετο και αργοτερα κάνουμε έναν έλεγχο. Εάν δεν μας "βολεύει" το τρέχων μέγεθος το αυξάνουμε με κατάληλα εργαλεία(θα το δούμε αργότερα αυτό). Θα καταλήξω στο ότι και οι δύο τρόποι είναι χρήσιμοι ανάλογα με το πρόβλημα. Βέβαια απο επίπεδο χρήστη ο στατικός είναι πιό εύκολος να δημιουργηθεί (για έναν αρχάριο ακόμη προγραμματιστή). Νομίζω ότι είναι αρκετά αυτά για μια εισαγωγή οπότε συνεχίζω να σας δείξω πως δημιουργούμε πίνακες. Προσέξτε πως οι παρακάτω τρόποι είναι ενδεικτικοί και βεβαίως κάποιος μπορεί να έχει το ίδιο αποτέλεσμα με διαφορετικό τρόπο.
Σαν σχήμα πιστεύω πως όλοι ξέρουμε τί είναι ένας πίνακας. Κάποια κολλημένα κουτάκια! Οπότε έστω πως έχουμε έναν πίνακα

έγραψε:κάτι που ξέχασα και είναι τρομερά σημαντικό να αναφέρω!
ΣΤΗΝ C ΜΕΤΡΑΜΕ ΑΠΟ ΤΟ ΜΗΔΕΝ ! ! !
κάθε κουτάκι μέσα έχει μια τιμή. Είτε αυτή είναι NULL(τίποτα δηλαδή) είτε κάτι άλλο(μπορεί να είναι και χαρακτήρας!). Για να προσπελάσουμε(να δούμε) το τί έχει κάποιο κουτάκι χρησιμοποιούμε το όνομα του πίνακα και μετά το κελί. Δηλαδή στο παραπάνω παράδειγμα,
- Κώδικας: Επιλογή όλων
Α[0]=1;
Α[1]=3;
Α[2]=5;
Α[3]=5;
Α[4]=100;
Εάν θέλουμε να αλλάξουμε κάποια τιμή πως θα το κάνουμε? Πολύ απλά με,
- Κώδικας: Επιλογή όλων
Α[0]=3;
έχουμε στο πρώτο μας κελί αντί για 1, 3 κοκ Δέν νομίζω πως είναι κάτι το τρομερό οπότε δεν θα επιμείνω! Αντίστοιχα δουλεύουμε και με διδιάστατους πίνακες μόνο που, στους διδιάστατους πίνακες κάθε κελί χαρακτηρίζεται απο το όνομα που πίνακα όπως και παραπάνω και μετά βάλουμε δύο μεταβλητές. Μία για τις γραμμές και μία για τις στήλες! Με άλλα λόγια για να προσπελάσουμε το κελί με γραμμή μηδέν και στήλη 4 και να του εκχωρείσουμε την τιμή 83 γράφουμε,
- Κώδικας: Επιλογή όλων
Α[0][4]=83;
Πρόσέξτε πως τα i & j που συνήθως χρησιμοποιούμε μέσα στο for loop δεν είναι τίποτα άλλο απο μεταβλητές! Έχετε στο νού σας αυτή τη πρόταση! Αυτό που θέλω να πώ μπορούμε να διατρέξουμε για παράδειγμα μόνο την πρώτη στήλη έχοντας σταθερό το j(μεταβλητή που παίρνει τιμές για τις στήλες) θα κάνουμε κάτι σαν,
- Κώδικας: Επιλογή όλων
for(i=0; i<n; i++){ /* τρέχουμε για κάθε γραμμή με την μεταβλητή i καθώς το j είναι σταθερό */
A[ i ][ 0 ] = value; /* εκχωρούμε σε κάθε γραμμή αρχίζοντας απο το 0 μια τιμή. Αντί για value βάλτε 4; και θα έχετε όλη την πρώτη στήλη γεμάτη με 4άρια! */
}
Είδατε? Δεν χρειάζεται να "παίζουμε" πάντα δύο for! Προσπαθήστε να πιάσετε την πρόταση που είπα παραπάνω και θα τους παίζετε στα δάχτυλα σε λίγο...
Πίνακες στην γλώσσα προγραμματισμού C χωρίζονται σε δύο κατηγορίες:
α) Στατικοί πίνακες
β) Δυναμικοί πίνακες
έγραψε:Μια μικρή επανάληψη με τους ορισμούς...
Στατικοί πίνακες...
Είναι οι πίνακες που όπως λέει και η λεξη έχουν μια στατική ή σταθερή δομή απο όταν αρχίζει το πρόγραμμά μας μέχρι να τελειώσει.
Δυναμικοί πίνακες...
Αντίθετα με τους στατικούς, οι δυναμικοί προσφέρουν τη δυνατότητα στο χρήστη να μεταβάλλει το μέγεθός τους. πχ. εάν έχουμε έναν πίνακα 3x2 ΔΥΝΑΜΙΚΑ φτιαγμένο μπορούμε να τον αλλάξουμε σε 8x10!
έγραψε:Θα ασχοληθούμε μόνο με μονοδιάστατους και διδιάστατους πίνακες γιατί περισσότερες διαστάσεις ξεφεύγουν απο το ανθρώπινο νού και είναι ποιό δύσκολο να τις φανταστούμε. Τέλοςπάντων δύσκολα θα πέσει άκσηση με 3++ διαστάσεις.
Δημιουργία μονοδιάστατου πίνακα
- Κώδικας: Επιλογή όλων
/* Δημιουργία μονοδιάσταστου πίνακα Α */
/* Δώστε τιμές στον πίνακα */
#include <stdio.h>
#include <stdlib.h>
#define n 5
int main(void){
int i, number;
int A[n];
printf("Please type numbers for the A array:n");
for(i=0; i<n; i++){
printf("A[%d]: n", i);
scanf("%d", &number);
A[i]=number;
}
for(i=0; i<n; i++){
printf("A[%d]: %dn", i, A[i]);
}
return 0;
}
Δημιουργία διδιάστατου πίνακα
- Κώδικας: Επιλογή όλων
/* Δημιουργία διδιάστατου πίνακα B */
/* Δώστε τιμές στον πίνακα */
#include <stdio.h>
#include <stdlib.h>
#define n 3
#define m 2
int main(void){
int i, j, number;
int B[n][m];
printf("Please type numbers for the B array:n");
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("B[%d][%d]: n", i, j);
scanf("%d", &number);
B[i][j]=number;
}
}
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("B[%d][%d]: %dn", i, j, B[i][j]);
}
}
return 0;
}
Δημιουργία μονοδιάστατου πίνακα(δυναμικά)
- Κώδικας: Επιλογή όλων
/* Δημιουργία μονοδιάστατου πίνακα B δυναμικά*/
/* Δώστε τιμές στον πίνακα */
#include <stdio.h>
#include <stdlib.h>
#define n 3
int main(void){
int i, number;
int *B;
B=(int *)malloc(n*sizeof(int));
printf("Please type numbers for the B dynamic array:n");
for(i=0; i<n; i++){
printf("B[%d]: n", i);
scanf("%d", &number);
B[i]=number;
}
for(i=0; i<n; i++){
printf("B[%d]: %dn", i, B[i]);
}
return 0;
}
Δημιουργία διδιάστατου πίνακα(δυναμικά)
- Κώδικας: Επιλογή όλων
/* Δημιουργία διδιάστατου πίνακα B δυναμικά*/
/* Δώστε τιμές στον πίνακα */
#include <stdio.h>
#include <stdlib.h>
#define n 3
#define m 2
int main(void){
int i, j, number;
int **B;
B=(int **)malloc(n*sizeof(int *));
for(i=0; i<n; i++){
B[i]=(int *)malloc(m*sizeof(int));
}
printf("Please type numbers for the B dynamic array:n");
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("B[%d][%d]: n", i, j);
scanf("%d", &number);
B[i][j]=number;
}
}
for(i=0; i<n; i++){
for(j=0; j<m; j++){
printf("B[%d][%d]: %dn", i, j, B[i][j]);
}
}
return 0;
}
Σχετικά με την malloc που βλέπετε παραπάνω μπορείτε να δείτε περισσότερες πληροφορίες στο http://forum.ubuntu-gr.org/viewtopic.php?f=61&t=17400&p=175538#p175538
ΚΑΛΗ ΣΥΝΕΧΕΙΑ ! ! !