Ενδεικτική περιγραφή μαθήματος



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

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

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

Περιεχόμενα. Πρόλογος... 21

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

Περιεχόμενα. Πρόλογος... 17

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η γλώσσα προγραμματισμού C

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

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

Διαδικασιακός Προγραμματισμός

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Διάλεξη 18η: Διαχείρηση Αρχείων

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εισαγωγή στον Προγραμματισμό (με. τη C)

Διαδικασιακός Προγραμματισμός

Επανάληψη για τις Τελικές εξετάσεις

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διαδικασιακός Προγραμματισμός

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Η γλώσσα προγραμματισμού C

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Προγραμματισμός Ι (ΗΥ120)

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραμματισμό για ΗΜΥ

S, (5, -3, 34, -23, 7) ( *, _

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

scanf() scanf() stdin scanf() printf() int float double %lf float

Διαδικασιακός Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στην γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Διαδικασιακός Προγραμματισμός

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

Προγραμματισμός Ι (ΗΥ120)

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Διαδικασιακός Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

for for for for( . */

Συναρτήσεις και διαδικασίες

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Transcript:

ΜΑΘΗΜΑ: ΔΙΔΑΣΚΩΝ: ΤΜΗΜΑ: Προγραμματισμός Η/Υ Συνδουκάς Δημήτριος Διοίκησης Επιχειρήσεων (Γρεβενά) Ενδεικτική περιγραφή μαθήματος 1. Εισαγωγή: Εισαγωγή στον προγραμματισμό, γλώσσες προγραμματισμού, μεταγλωτιστές. Η γλώσσα προγραμματισμού C είναι μία γλώσσα υψηλού επιπέδου, αν και από κάποιους αναφέρεται σαν «ενδιάμεσου επιπέδου»δημιουργήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970, στα εργαστήρια Bell Labs της εταιρείας AT&T. Η ANSI (American National Standard Institute) όρισε επιστημονική επιτροπή για την δημιουργία ενός προτύπου της C, το οποίο να καθορίζει πλήρως τους κανόνες, τα χαρακτηριστικά και τη λειτουργικότητα της γλώσσας. Το πρότυπο ολοκληρώθηκε το 1989 και ονομάστηκε ANSI C. Ενδεικτικά πλεονεκτήματα: Παράγει λογισμικό που τρέχει γρήγορα. Διαθέτει απλό συντακτικό και λίγες δεσμευμένες λέξεις, και είναι ευέλικτη. Φορητότητα κώδικα (εκτελείται σε διαφορετικά λειτουργικά συστήματα). Υποστηρίζει τον δομημένο προγραμματισμό και την δημιουργία και κλήση συναρτήσεων. Υποστηρίζει ακόμη και την ενσωμάτωση assembly κώδικα. Είναι δημοφιλής. Ενδεικτικά μειονεκτήματα: Έλλειψη περιορισμών, με στόχο την ευελιξία και παραγωγή λογισμικού που «τρέχει» γρήγορα, επομένως, ο προγραμματιστής πρέπει να είναι πολύ προσεκτικός κατά τη συγγραφή του προγράμματος, γιατί μπορεί εύκολα να εισάγει λάθη, τα οποία ο μεταγλωττιστής δεν θα του επισημάνει. Δεν είναι αντικειμενοστρεφής γλώσσα. Ένα απλό πρόγραμμα σε C: #include <stdio.h> int main() { } printf( TO PROTO PROGRAMMA!\n ); return 0;

Η οδηγία: #include, Με την οδηγία #include <όνομα_αρχείου> ο μεταγλωττιστής καλείται να συμπεριλάβει (include), δηλαδή να ενσωματώσει, τα περιεχόμενα του αρχείου αυτού στον κώδικα του προγράμματός μας. Η οδηγία: #define,. Το κείμενο των σχολίων περικλείεται στα σύμβολα: /* και */Τα δεδομένα που παρέχουμε στον Η/Υ αλλά και εκείνα που παράγει, επίσης αποθηκεύονται στην RAM. Στις γλώσσες προγραμματισμού, για να διευκολύνεται ο προγραμματιστής, δίνονται ονόματα στις θέσεις μνήμης. Αυτά ονομάζονται μεταβλητές. Τύποι μεταβλητών: char, int, float, double (και void). Απλές πράξεις (+, -, *, /, %). Οι συναρτήσεις: scanf (Η συνάρτηση scanf() χρησιμοποιείται για την είσοδο δεδομένων από ένα αρχείο εισόδου stdin (standard input stream), το οποίο εξ ορισμού συνδέεται με το πληκτρολόγιο), printf (η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων και κειμένου στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη). Εντολές (κωδικοί) μορφοποίησης ή προσδιοριστικά μετατροπής: Τα προσδιοριστικά μετατροπής καθορίζουν πως θα εμφανιστούν στην οθόνη τα δεδομένα μιας printf(), και τα συνηθέστερα είναι τα: %c, %d, %f, %lf. Αριθμητικοί (+, -, *, /, %, ++, --), συγκριτικοί (>, >=, <, <=, ==,!=) και λογικοί τελεστές (&&,,!). Το type cast είναι η τοπική αλλαγή τύπου σε μεταβλητή. 2. Εντολή ελέγχου ροής: if, καθορίζει αν θα εκτελεστούν οι εντολές μέσα στα άγκιστρά της, ανάλογα με το αν ισχύει κάποια συνθήκη (αν είναι true). Στην πλήρη μορφή της, η εντολή ακολουθείται από το else (δηλ. αλλιώς ή διαφορετικά). Οι εντολές του else εκτελούνται αν η συνθήκη του if δεν ισχύει. Εντολή ελέγχου ροής: switch, Χρησιμοποιείται για διακρίνουμε περιπτώσεις ανάλογα με την τιμή μιας μεταβλητής. Η τιμή της μεταβλητής συγκρίνεται διαδοχικά με κάθε σταθερά μέχρι να διαπιστωθεί ισότητα. Στην περίπτωση αυτή εκτελούνται οι εντολές αυτού του case, μέχρι να βρεθεί ένα break. Αν δεν διαπιστωθεί ισότητα με κάποια σταθερά σε case, εκτελούνται οι εντολές του default. Αν δεν υπάρχει default, ο υπολογιστής συνεχίζει με τις εντολές μετά το άγκιστρο κλεισίματος της switch. Εντολή επανάληψης for, χρησιμοποιείται για να πετύχουμε επανάληψη μιας ομάδας εντολών του προγράμματος, συγκεκριμένο αριθμό φορών (συνήθως). Η εντολή συνήθως χρησιμοποιεί έναν μετρητή, για να μετρά τις επαναλήψεις. Εντολή επανάληψης while χρησιμοποιείται όταν δεν γνωρίζουμε τον αριθμό των επαναλήψεων. Η while επαναλαμβάνει τις εντολές που ακολουθούν (μέσα στα άγκιστρα), όσο η συνθήκη μέσα στις παρενθέσεις είναι «αληθής». Η συνθήκη ελέγχεται πριν από κάθε επανάληψη (άρα πριν και από την 1 η ). Αυτό σημαίνει ότι μπορεί να μην γίνει ούτε μία επανάληψη! Εντολή επανάληψης do-while χρησιμοποιείται όταν δεν γνωρίζουμε τον αριθμό των επαναλήψεων. Η do-while επαναλαμβάνει τις εντολές που περικλείει (μέσα στα άγκιστρα), όσο η συνθήκη μέσα στις παρενθέσεις

είναι «αληθής». Η συνθήκη ελέγχεται μετά από κάθε επανάληψη. Αυτό σημαίνει ότι οι εντολές μέσα στα άγκιστρα θα τρέξουν τουλάχιστον μία φορά! Οι εντολές break (όταν η εντολή break εκτελείται μέσα σε έναν επαναληπτικό βρόγχο, σταματά άμεσα τις επαναλήψεις του. Το πρόγραμμα συνεχίζει με τις εντολές που ακολουθούν. Μπορεί να χρησιμοποιηθεί με όλες τις επαναληπτικές εντολές (for, while, do-while)) και continue (όταν η εντολή continue εκτελείται μέσα σε έναν επαναληπτικό βρόγχο, σταματά την τρέχουσα επανάληψη και αρχίζει αμέσως την επόμενη. Αυτό σημαίνει ότι δεν εκτελούνται οι εντολές μέσα στα άγκιστρα που απομένουν να εκτελεστούν για να ολοκληρωθεί η τρέχουσα επανάληψη. Μπορεί να χρησιμοποιηθεί με όλες τις επαναληπτικές εντολές (for, while, do-while)), σε βρόχο επανάληψης. Η εντολή goto στέλνει τον υπολογιστή σε κάποιο σημείο του προγράμματος από όπου θα συνεχίσει να τρέχει εντολές. Η goto συνδυάζεται με κάποια ετικέτα, η οποία «μαρκάρει» ένα σημείο του προγράμματος (είναι κάτι σαν διεύθυνση). Μια ετικέτα (label) έχει ένα όνομα και έπειτα άνω-κάτω τελεία. Εμφωλευμένες εντολές. 3. Πίνακες αριθμών: Ένας πίνακας περιέχει περισσότερες από μία τιμές (δεδομένα). Τα δεδομένα είναι ομοειδή (όλα ακέραιοι, όλα πραγματικοί, όλα χαρακτήρες). Τα δεδομένα αποθηκεύονται σε διαδοχικές θέσεις της μνήμης RAM. Μπορεί να είναι μιας, δύο, ή περισσότερων διαστάσεων. Πίνακες αριθμών μιας και περισσότερων διαστάσεων. Οι πίνακες 2 διαστάσεων αποτελούνται από γραμμές και στήλες. Χρησιμότητα και πλεονεκτήματα. Χειρισμός με εντολές επανάληψης (for). Υπερχείλιση: το μέγεθος δεν μπορεί να αλλάξει δυναμικά όταν το πρόγραμμα τρέχει. Επομένως, ο προγραμματιστής πρέπει να ξέρει τη στιγμή που γράφει το πρόγραμμα πόσα δεδομένα θα αποθηκευθούν στους πίνακες. Ο μεταγλωττιστής δεν ελέγχει για υπερβάσεις των ορίων, ώστε να φτιάξει ένα πρόγραμμα που τρέχει γρήγορα. Ο προγραμματιστής έχει ευθύνη ώστε να μην γίνει υπέρβαση! Πίνακες χαρακτήρων - strings. Ο τύπος char χρησιμοποιείται για την αποθήκευση χαρακτήρων. Οι χαρακτήρες αποθηκεύονται κωδικοποιημένοι σαν ακέραιοι. Η κωδικοποίηση γίνεται σύμφωνα με τον πίνακα ASCII. Μια σταθερά τύπου char πρέπει να περικλείνεται από απλά εισαγωγικά Οι συναρτήσεις χειρισμού τους strcpy, strcat, strcmp, strlen. Το αρχείο string.h. Το NULL. Ένα αλφαριθμητικό (string) είναι μια ακολουθία χαρακτήρων, η οποία τελειώνει με τον ειδικό χαρακτήρα \0. Ο χαρακτήρας \0 ονομάζεται τερματικός χαρακτήρας και υποδεικνύει το τέλος του string. Ονομάζεται και NULL. 4. Δείκτες (pointers). Οι μεταβλητές είναι θέσεις στην μνήμη RAM του υπολογιστή. Η μνήμη RAM αποτελείται από μια σειρά bytes. Τα bytes είναι

αριθμημένα, ξεκινώντας από το 0 και φτάνοντας μέχρι το μέγεθος της RAM στον συγκεκριμένο υπολογιστή. Ο αύξων αριθμός του κάθε byte ονομάζεται διεύθυνσή του στην μνήμη. Είναι δυνατή η προσπέλαση των θέσεων μνήμης στην RAM μέσω δεικτών. Δήλωση δείκτη. Ένας δείκτης περιέχει μια διεύθυνση της μνήμης. Στην ουσία είναι ένα είδος μεταβλητής, αλλά αντί για τα συνηθισμένα δεδομένα περιέχει μια διεύθυνση. Εφόσον περιέχει μια διεύθυνση, λέμε ότι δείχνει σε κάποια θέση της μνήμης και επομένως σε κάποιο δεδομένο στην μνήμη. Ένας δείκτης έχει τύπο ίδιο με εκείνον του δεδομένου στο οποίο δείχνει. Δηλώνουμε έναν δείκτη όπως και μια μεταβλητή, αλλά πριν το όνομά του βάζουμε έναν αστερίσκο * Ο τελεστής & και *. Με * δηλώνουμε έναν δείκτη. Με * αναφερόμαστε στο δεδομένο (τιμή) στο οποίο δείχνει ο δείκτης. Ο τελεστής & δίνει τη διεύθυνση μιας μεταβλητής. Δυναμική δέσμευση και αποδέσμευση μνήμης - πλεονεκτήματα, με τις συναρτήσεις malloc και free. Η συνάρτηση malloc() δεσμεύει μια ποσότητα μνήμης (πλήθος byte) και επιστρέφει τη διεύθυνση του 1 ου byte. Αυτή η διεύθυνση πρέπει να αποθηκευθεί σε έναν δείκτη. Η συνάρτηση free() αποδεσμεύει την ποσότητα μνήμης που δεσμεύτηκε από την malloc(). Την χρησιμοποιούμε όταν δεν χρειαζόμαστε πλέον τα δεδομένα που αποθηκεύσαμε στο δεσμευμένο τμήμα μνήμης. Ο τελεστής sizeof. Το πλήθος των δεδομένων που καταλαμβάνει ένας τύπος δεδομένων (πχ char, int, float, double) υπολογίζεται από τον τελεστή sizeof(). 5. Συναρτήσεις: Μια συνάρτηση είναι ένα ανεξάρτητο τμήμα κώδικα. Συνήθως εκτελεί μια συγκεκριμένη λειτουργία ή υπολογισμό. Μπορεί να επιστρέφει κάποια τιμή, μπορεί όμως και όχι. Αποτελούν τη βάση του δομημένου προγραμματισμού. Δήλωση και ορισμός συνάρτησης. Το πρωτότυπο της συνάρτησης. Η δήλωση μιας συνάρτησης μπορεί να γίνει μέσω του πρωτοτύπου της. Σε μεγάλα προγράμματα, τα πρωτότυπα των συναρτήσεων δηλώνονται σε χωριστό αρχείο (ή αρχεία), με επέκταση ονόματος.h (αρχεία επικεφαλίδας ή header files). Η συμπερίληψη αρχείων επικεφαλίδας σε ένα πρόγραμμα γίνεται με την οδηγία: #include. Βιβλιοθήκες έτοιμων συναρτήσεων. Επιστρεφόμενος τύπος, ο τύπος void. Η εντολή return. Μια συνάρτηση μπορεί να επιστρέψει μία, το πολύ, τιμή. Επομένως, επιστρέφει μία ή καμία τιμή. Αν δεν επιστρέφει τιμή, δηλώνεται σαν τύπου void. Ορίσματα και παράμετροι. Μέσα στις παρενθέσεις μιας συνάρτησης δηλώνουμε τις παραμέτρους της. Οι παράμετροι είναι μεταβλητές. Οι παράμετροι πρέπει να χωρίζονται μεταξύ τους με κόμματα. Κάθε

παράμετρος πρέπει να συνοδεύεται από τον τύπο της, χωριστά. Καλούμε μια συνάρτηση με το όνομά της. Μέσα στις παρενθέσεις γράφουμε τόσες τιμές/μεταβλητές, όσοι και οι παράμετροι. Αυτά ονομάζονται ορίσματα. Οι τιμές των μεταβλητών αντιγράφονται στις αντίστοιχες παραμέτρους. Κλήση συνάρτησης by value (στην κλήση κατ αξία στέλνονται στη συνάρτηση οι τιμές των ορισμάτων. Δηλαδή έχουμε αντιγραφή τιμών από τα ορίσματα στις παραμέτρους. Επομένως, τυχόν αλλαγές στις τιμές των παραμέτρων όσο εκτελείται η συνάρτηση, ΔΕΝ επηρεάζουν τα ορίσματα) και by reference (στην κλήση κατ αναφορά στέλνονται στη συνάρτηση οι διευθύνσεις των ορισμάτων. Η συνάρτηση έχει πρόσβαση στα ορίσματα και τις τιμές τους. Επομένως, τυχόν αλλαγές στις τιμές των παραμέτρων όσο εκτελείται η συνάρτηση, ΕΠΗΡΕΑΖΟΥΝ τα ορίσματα). Για να επιτρέπει μια συνάρτηση «κλήση κατ αναφορά», πρέπει οι παράμετροί της να είναι δηλωμένοι σαν δείκτες, ώστε να δέχονται διευθύνσεις. Οι μεταβλητές χωρίζονται σε 2 κατηγορίες, ανάλογα με την εμβέλειά τους: στις τοπικές μεταβλητές (local variables) στις καθολικές μεταβλητές (global variables). Οι μεταβλητές που δηλώνονται μέσα σε μια συνάρτηση είναι τοπικές. Μια τέτοια μεταβλητή χρησιμοποιείται μόνο μέσα στη συνάρτηση όπου δηλώθηκε. Οι μεταβλητές που δηλώνονται έξω από τις συναρτήσεις είναι καθολικές. Μια τέτοια μεταβλητή χρησιμοποιείται μέσα σε κάθε συνάρτηση του προγράμματος, μετά από το σημείο που δηλώθηκε. Υπάρχει περίπτωση να θέλουμε να «περάσουμε» τα περιεχόμενα ενός πίνακα σε μια συνάρτηση για να τα επεξεργαστεί. Ουσιαστικά εκείνο που περνάμε είναι η διεύθυνση του πίνακα, μόνο. Δηλώνουμε τον πίνακα σαν παράμετρο, παραλείποντας το μέγεθός του. Επειδή στη συνάρτηση μεταβιβάζεται η διεύθυνση του πίνακα: έχουμε κλήση κατ αναφορά. Παράμετροι στην main(): Υπάρχουν προγράμματα στα οποία μπορούμε να δώσουμε δεδομένα μαζί με την εντολή εκκίνησής τους. Η μεταβλητή argc περιέχει το πλήθος των ορισμάτων που πληκτρολογήσαμε στη γραμμή εντολών. Η παράμετρος argv είναι ένας πίνακας δεικτών, που δείχνουν προς τα ορίσματα της γραμμής εντολών. Μέσα σε μια συνάρτηση μπορούμε να καλέσουμε μια άλλη συνάρτηση. Μπορούμε μέσα σε συνάρτηση να καλέσουμε τον εαυτό της. Τότε η συνάρτηση αποκαλείται αναδρομική (recursive). 6. Δομές (structures): Μια δομή είναι ένα «πακέτο» που περιέχει μεταβλητές διάφορων τύπων, οι οποίες αναφέρονται σε μια οντότητα. Μας επιτρέπει να συμπεριλάβουμε μέσα σε ένα «περίβλημα» πολλές μεταβλητές (που αναφέρονται στην ίδια οντότητα) και έτσι διευκολύνει τη συγγραφή προγραμμάτων. struct pelatis { char onoma[20], eponymo[30];

}; int ilikia; double poso_katathesis; float poso_daneiou; Ορισμός δομής και δήλωση μεταβλητής τύπου δομής. Αρχικά δημιουργούμε το πρότυπο της δομής, στο οποίο: δίπλα από τη λέξη struct δηλώνουμε το όνομα της δομής μέσα στα άγκιστρα δηλώνουμε τους τύπους και τα ονόματα των μεταβλητών που περιέχει. Αυτά ονομάζονται πεδία της δομής. Το πρότυπο μιας δομής δεν αποτελεί και δήλωση δομής. Δηλαδή, δεν μπορούμε να αποθηκεύσουμε τιμές χρησιμοποιώντας το πρότυπο. Το πρότυπο είναι σαν το int, το char, το double, κλπ. ΔΕΝ μπορούμε να αποθηκεύσουμε τιμή στο int ΠΡΕΠΕΙ πρώτα να δηλώσουμε μια μεταβλητή. struct pelatis p1, p2; Όταν δηλώνουμε μια μεταβλητή δομής από το πρότυπο, δεσμεύεται μνήμη τουλάχιστον όσο το άθροισμα των μεγεθών των πεδίων που περιέχει. Η καταχώριση τιμών στα πεδία μιας δομής γίνεται με τον τελεστή τελεία. p1.poso_katathesis = 200.50; Εναλλακτικά, μπορούμε να τα αρχικοποιήσουμε μαζί με την δήλωση. struct pelatis p1, p2 = { KOSTAS GEORGIOY, 200.50}; Μια δομή μπορεί να περιέχει δομή (ένθετη δομή ή φωλιασμένη δομή). Για να προσπελάσουμε ένα πεδίο ένθετης (φωλιασμένης) δομής χρησιμοποιούμε δύο φορές τον τελεστή τελεία. Πίνακες δομών και δείκτες. Μπορεί να δηλωθεί και δείκτης σε δομή. struct mathitis *m1; Προσπέλαση στα πεδία γίνεται είτε με την τελεία (και το γνωστό αστεράκι) (*m1).bathmos = 18.5; Είτε με τον τελεστή βελάκι -> m1->bathmos = 18.5; Μπορεί να δηλωθεί πίνακας δομών. Πλεονεκτήματα για τον προγραμματιστή. \Δομές σαν παράμετροι συναρτήσεων. Μπορούμε να έχουμε σαν παράμετρο συνάρτησης μια δομή. Μπορούμε να σχεδιάσουμε μια τέτοια συνάρτηση για κλήση κατ αξία ή κλήση κατ αναφορά. Προτείνεται η κλήση κατ αναφορά, γιατί έτσι το πρόγραμμα τρέχει γρηγορότερα. Χρησιμοποίηση δομών σε δομές δεδομένων. 7. Αρχεία: Αρχεία τύπου text και τύπου binary. Υπάρχουν 2 κατηγορίες αρχείων (files): τα αρχεία κειμένου (text files), και τα δυαδικά αρχεία (binary

files), ανάλογα με τον τρόπο που είναι αποθηκευμένη η πληροφορία σε αυτά. Τα αρχεία κειμένου περιέχουν χαρακτήρες σε κάποια κωδικοποίηση (όπως η ASCII) σε μορφή που μπορούμε να διαβάσουμε. Κάθε γραμμή του αρχείου τελειώνει με έναν ειδικό χαρακτήρα που υποδηλώνει το τέλος της γραμμής, οποίος εξαρτάται από το λειτουργικό σύστημα. Τα δυαδικά αρχεία δεν περιέχουν απαραίτητα αναγνώσιμους χαρακτήρες. Συνήθως, μάλιστα, δεν έχει, επομένως όταν το ανοίγουμε εμφανίζονται «ακαταλαβίστικα». Αρχεία λογισμικού, μουσικής, φωτογραφίας, βίντεο, είναι τέτοια. Τα περιεχόμενά του δεν χωρίζονται σε γραμμές και δεν γίνεται μετατροπή χαρακτήρων. Δεν υπάρχει ειδικός χαρακτήρας που να υποδηλώνει το τέλος του αρχείου. Οι λειτουργίες ανάγνωσης και εγγραφής είναι ταχύτερες. Συνήθως είναι μικρότερου μεγέθους από τα κειμένου. Άνοιγμα, ανάγνωση, εγγραφή και κλείσιμο αρχείου (fopen, fclose, fsanf, fprintf, fread, fwrite). Το άνοιγμα ενός αρχείου γίνεται με τη συνάρτηση fopen(). δείκτης = fopen( διαδρομή και όνομα αρχείου, τρόπος ); όπου ο δείκτης πρέπει να είναι τύπου FILE, η οποία είναι μια δομή (structure). Η διαδρομή περιλαμβάνει τον δίσκο, τους υποκαταλόγους και το όνομα του αρχείου. Πρέπει να είναι μέσα σε διπλά εισαγωγικά. Ο τρόπος υποδεικνύει την κατηγορία του αρχείου (κειμένου ή δυαδικό) και αν ανοίγει για ανάγνωση, εγγραφή, προσθήκη, κλπ. Πρέπει να είναι μέσα σε διπλά εισαγωγικά. Αν το αρχείο ανοίξει επιτυχώς, η fopen() επιστρέφει έναν δείκτη. Ο δείκτης χρησιμοποιείται για κάθε λειτουργία άνω στο αρχείο. Αλλιώς επιστρέφει την τιμή NULL. Ανάγνωση από αρχείο κειμένου: Συνήθως χρησιμοποιούμε την συνάρτηση fscanf(). Έχει ίδιες παραμέτρους με την scanf(), και επιπρόσθετα τον δείκτη του αρχείου (τύπου FILE): fscanf( δείκτης, %κωδικός,..., &μεταβλητή,... ); Η συνάρτηση επιστρέφει το πλήθος των στοιχείων που διαβάστηκαν. Αν φτάσουμε στο τέλος του αρχείου ή συμβεί σφάλμα, επιστρέφει το EOF. Με την συνάρτηση feof() μπορούμε να διαπιστώσουμε ποιο από τα δύο. Για την εγγραφή συνήθως χρησιμοποιούμε τη συνάρτηση fprintf(). Η μορφή της είναι παρόμοια με της printf(), με επιπλέον τον δείκτη στο αρχείο (που είναι τύπου FILE). fprintf( δείκτης, %κωδικός,..., μεταβλητή,... ); Η συνάρτηση επιστρέφει το πλήθος των χαρακτήρων που γράφηκαν, αλλιώς επιστρέφει αρνητικό αριθμό. Δυαδικά αρχεία: Για την ανάγνωση από αρχείο χρησιμοποιείται η fread(). Για την εγγραφή σε αρχείο χρησιμοποιείται η fwrite(). Για την μετακίνηση σε

άλλη θέση στο αρχείο χρησιμοποιείται η fseek(). Για την εύρεση της τρέχουσας θέσης στο αρχείο χρησιμοποιείται η ftell().