ΠΑΝΕΠΙΣΗΜΙΟ ΠΑΣΡΩΝ ΠΟΛΤΣΕΥΝΙΚΗ ΥΟΛΗ ΣΜΗΜΑ ΜΗΥΑΝΙΚΩΝ ΗΛΕΚΣΡΟΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΑΓΩΓΗ ΣΟ ΔΙΑΔΙΚΑΣΙΚΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ 3 ο ΕΣ ΑΚΗΕΩΝ
Οι αςκήςειρ ατσού σοτ υτλλαδίοτ καλύπσοτν σα παπακάσψ θέμασα και δίνονσαι ενδεικσικά οι ανσίςσοιφερ ενόσησερ ςσο βιβλίο The GNU C Programming Tutorial μποπείσε ςτμβοτλετσείσε (http://crasseux.com/books/ctutorial/). ποτ Στναπσήςειρ (κευάλαιο Functions) Πίνακερ (κευάλαιο Αrrays) Δείκσερ Το σπίσο ςύνολο αςκήςεψν θα εξεσαςθεί μαζί με σο σέσαπσο σην εβδομάδα 07-13/01/13 (ο κάθε υοισησήρ θα εξεσαςσεί σην ώπα σοτ σμήμασορ σοτ, για κάθε τποεπώσημα ο υοισησήρ θα ππέπει να έφει σο ανσίςσοιφο απφείο κώδικα C αποθηκετμένο ςσο λογαπιαςμό σοτ ςσο diogenis.ceid.upatras.gr σο οποίο θα ππέπει να έφει μεσαγλψσσιςσεί φψπίρ ςυάλμασα, ενώ για σο ςύνολο σψν επψσημάσψν θα ππέπει να έφει υέπει και μια εκστπψμένη αναυοπά με σιρ απανσήςειρ σοτ). Άςκηςη 1η Γπάχσε ππόγπαμμα σο οποίο να δηλώνει ένα μονοδιάςσασο πίνακα μεγέθοτρ N όποτ θα σον γεμίζει με ςσοιφεία και ςση ςτνέφεια θα καλεί μία ςτνάπσηςη ποτ θα ανσιςσπέυει σα ςσοιφεία σοτ πίνακα και θα εκστπώνει σον απφικό και σον ανεςσπαμμένο πίνακα. To μέγεθορ σοτ πίνακα Ν θα οπίζεσαι μέςψ σηρ οδηγίαρ #define σοτ πποεπεξεπγαςσή. Παπάδειγμα: Original array: 0 1 2 3 4 5... 19 Inverted array: 19 18 17 16... 0 Άςκηςη 2η Γπάχσε ππόγπαμμα ποτ θα κασαςκετάζει δτναμικά έναν πίνακα θεσικών ακεπαίψν. Το ππόγπαμμα θα πεπιμένει έναν ακέπαιο απιθμό, μέφπιρ όσοτ δοθεί απνησικόρ απιθμόρ. Κασόπιν θα εκστπώνει σα ςσοιφεία ποτ ειςήφθηκαν, ση διεύθτνςη ςση μνήμη όποτ βπίςκεσαι ο πίνακαρ, ση διεύθτνςη ςση μνήμη όποτ βπίςκεσαι σο ππώσο ςσοιφείο σοτ πίνακα, ση διεύθτνςη ςση μνήμη όποτ βπίςκεσαι σο σελετσαίο ςσοιφείο σοτ πίνακα και σο μέγεθορ σοτ πίνακα ςε bytes. Σση ςτνέφεια σο ππόγπαμμα θα σαξινομεί σα ςσοιφεία με φπήςη σηρ qsort() (http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/), και σέλορ θα επαναεκστπώνει σιρ πληπουοπίερ για σο μέγεθορ σοτ πίνακα και σιρ διετθύνςειρ πίνακα, ππώσοτ και σελετσαίοτ ςσοιφείοτ. Παπάδειγμα ειςόδοτ για πίνακα 5 ςσοιφείψν :
Enter a positive integer value (give negative to end): 5 Enter a positive integer value (give negative to end): 4 Enter a positive integer value (give negative to end): 10 Enter a positive integer value (give negative to end): 2 Enter a positive integer value (give negative to end): 1 Enter a positive integer value (give negative to end): -1 Numbers entered: numbers[0] = 5 numbers[1] = 4 numbers[2] = 10 numbers[3] = 2 numbers[4] = 1 Length Of Array= 5 Array address [0x103900840] First element address [0x103900840] Last element address [0x103900850] Array holds 20 bytes Sorted Numbers numbers[0] = 1 numbers[1] = 2 numbers[2] = 4 numbers[3] = 5 numbers[4] = 10 Length Of Array= 5 Array address [0x103900840] First element address [0x103900840] Last element address [0x103900850] Array holds 20 bytes Άςκηςη 3η Σφεδιάςσε αλγόπιθμο ο οποίορ διαβάζει ένα ςύνολο από αλυαπιθμησικά και: (i) κασαγπάυει ατσό με σο μικπόσεπο μήκορ, (ii) σα διασάςςει, με βάςη σην λεξικογπαυική διάςσαςη, φπηςιμοποιώνσαρ σον αλγόπιθμο διάσαξηρ ποτ αναυέπεσαι ςσην άςκηςη 2. Άςκηςη 4η Ζησείσαι η ανάπστξη ππογπάμμασορ ποτ ςσο κύπιο ςώμα οπίζεσαι και απφικοποιείσαι έναρ πίνακαρ 10 ακέπαιψν ςσοιφείψν ποτ ανσιςσοιφούν ςσοτρ μιςθούρ 10 τπαλλήλψν, ενώ δύο ςτναπσήςειρ (ςσιρ οποίερ θα πεπνιέσαι ο πίνακαρ ςαν όπιςμα) θα επιςσπέυοτν η μία σο μεγαλύσεπο μιςθό και η δεύσεπη σο μέςο όπο σηρ μιςθοδοςίαρ. Άςκηςη 5η Δημιοτπγείςσε διςδιάςσασο πίνακα με σιμέρ ποτ δίνονσαι από σο φπήςση σόςο για σιρ διαςσάςειρ όςο για σο πεπιεφόμενο σψν κελιών και ςση ςτνέφεια τπολογίςσε σο άθποιςμα σηρ διαγψνίοτ σοτ πίνακα. Ο τπολογιςμόρ σοτ αθποίςμασορ ππέπει να γίνεσαι με κλήςη ςτνάπσηςηρ σην οποία εςείρ θα οπίςεσε.
Άςκηςη 6η Να κασαςκετάςεσε ππόγπαμμα σο οποίο να κάνει ση μεσασποπή δεκαδικών χηυίψν (0 9) ςσον κώδικα Μοπρ και ανσίςσπουα. Στγκεκπιμένα ο φπήςσηρ θα επιλέγει σον σύπο σηρ μεσασποπήρ ποτ θέλει να κάνει και κασόπιν θα ειςάγει είσε μία ςειπά δεκαδικών χηυίψν είσε μία ςειπά σελείερ / παύλερ και σο ππόγπαμμα θα εκστπώνει σον ιςοδύναμο κώδικα Μοπρ ή σα ιςοδύναμα χηυία ανσίςσοιφα. Παπάδειγμα εκσέλεςηρ σοτ ππογπάμμασορ (με ένσονα η είςοδορ σοτ φπήςση): 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 1 Dwse ari8mo : 2009 O isodynamos kwdikas Morse einai :..--- ----- ----- ----. 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 2 Dwse kwdika Morse:.--------.--...---.. O isodynamos ari8mos einai : 1978 1 - Ari8mos se kwdika Morse 2 - Kwdikas Morse se ari8mo 0 Eksodos 0 Υπόδειξη: Εςψσεπικά ςσο ππόγπαμμά ςαρ μποπείσε να αποθηκεύεσε ςε ένα δτςδιάςσασο πίνακα σην αναπαπάςσαςη σψν χηυίψν ςε κώδικα Μοπρ (http://en.wikipedia.org/wiki/morse_code). Άςκηςη 7η Να τλοποιήςεσε 2 ςτναπσήςειρ οι οποίερ θα δέφονσαι ψρ είςοδο σπειρ μονοδιάςσασοτρ πίνακερ ακεπαίψν A, B, C και θα τπολογίζοτν η μία σο άθποιςμα (A+B) και η άλλη ση διαυοπά (Α-Β) και θα αποθηκεύοτν σο αποσέλεςμα ςσον πίνακα C. Οι ςτναπσήςειρ θα καλούνσαι από κτπίψρ ππόγπαμμα όποτ θα δηλώνονσαι οι A, B, C μεγέθοτρ n (όποτ n ςσαθεπά), θα δίνονσαι από σον φπήςση οι σιμέρ για σοτρ Α και Β και μεσά σην κλήςη κάθε ςτνάπσηςηρ θα εκστπώνεσαι ο C.
Δώςσε δύο τλοποιήςειρ μία με πίνακερ και μία με δείκσερ και δτναμική δέςμετςη μνήμηρ. Άςκηςη 8η O μέγιςσορ κοινόρ διαιπέσηρ δύο απιθμών x, y μποπεί να τπολογιςσεί ςύμυψνα με σον αλγόπιθμο σοτ Eτκλείδη ψρ εξήρ: έςσψ x>y (αν x<y εναλλάςςοτμε σοτρ δύο απιθμούρ), αν σο y είναι 0 σόσε σο x είναι ο μέγιςσορ κοινόρ διαιπέσηρ, διαυοπεσικά βαλε ςση θέςη σοτ x σο y, ανσικασέςσηςε σο y με σο τπόλοιπο σηρ διαίπεςήρ σοτ x με σο y, και επανέλαβε σον έλεγφο. Υλοποιείςσε ςτνάπσηςη ποτ τπολογίζει σο μέγιςσο κοινό διαιπέση δύο απιθμών με βάςη σον ςτγκεκπιμένο αλγόπιθμο, και δώςσε μία επαναληπσική και μία αναδπομική τλοποίηςη. Άςκηςη 9η Να τλοποιηθεί ππόγπαμμα ςε C σο οποίο παπάγει N στφαίοτρ απιθμούρ με σιμέρ από σο 0 μέφπι σο 9 και ςσην ςτνέφεια τπολογίζει σο ιςσόγπαμμα σψν παπαπάνψ απιθμών, δηλαδή πόςερ υοπέρ εμυανίζεσαι ο κάθε έναρ από ατσούρ. Για σον ςκοπό ατσό να τλοποιηθούν οι ακόλοτθερ ςτναπσήςειρ: 1. void random_vector(int array[], int N): παπάγει N στφαίοτρ απιθμούρ από 0 ψρ 9 και σοτρ αποθηκεύει ςσον πίνακα array. 2. void calculate_hist(int array[], int N, int hist[10]): αποθηκεύει ςσον πίνακα hist, σο πλήθορ σψν απιθμών ποτ βπίςκονσαι ςσο διάντςμα array, δηλαδή σο hist[j] αποθηκεύει σο πλήθορ εμυανίςεψν σοτ απιθμού j ςσο πίνακα array. 3. void print_hist(int hist[10]): στπώνει ςσην οθόνη σο ιςσόγπαμμα με γπαυικό σπόπο (ακολοτθεί παπάδειγμα) Παπάδειγμα εκσέλεςηρ: Doste to N: 100 0: ********** (10) 1: ******************** (20) 2: ********** (10) 3: *******(7) 4: ******* (7) 5: ********(8) 6: ******** (8) 7: ********** (10) 8: ************ (12) 9: ******** (8) (ςσιρ παπενθέςειρ ευανίζεσαι σο πλήθορ εμυάνιςηρ σοτ ανσίςσοιφοτ απιθμού ςσον πίνακα array) Άςκηςη 10η Ο αλγόπιθμορ ςτμπίεςηρ RLE (Run Length Encoding) δέφεσαι μία ςτμβολοςειπά ειςόδοτ και ση ςτμπιέζει ανσικαθιςσώνσαρ ςση ςτμβολοςειπά ςτνεφόμενερ
επαναλήχειρ σοτ ίδιοτ ςτμβόλοτ με πλήθορ εμυανίςεψν πάνψ από 1, με σο πλήθορ εμυανίςεψν και σο ςύμβολο, για παπάδειγμα, η ςτμβολοςειπά aaaxxxtttefjjjj ςτμπιέζεσαι από σην 3a3x3tef4j. Υλοποιείςσε ςτνάπσηςη ποτ δέφεσαι ςαν όπιςμα ςτμβολοςειπά και σην ανσικαθιςσά με ση ςτμπιεςμένη αναπαπάςσαςη σηρ. Πποςέξσε όσι όσαν ένα ςύμβολο εμυανίζεσαι μόνο σοτ, παπαμένει ψρ έφει ςση ςτμπιεςμένη αναπαπάςσαςη. Άςκηςη 11η Έςσψ η αναδπομική ςφέςη a n=(3a 2 n-1-1)/a n-1, με α 0=1, ποτ οπίζει μία ακολοτθία απιθμών. (α) Υλοποιείςσε αναδπομική ςτνάπσηςη ποτ παίπνει ςαν όπιςμα μια ακέπαια σιμή n και επιςσπέυει σην σιμή a n. (β) Έςσψ S(n)=a 0+a 1+ +a n. Υλοποιείςσε ςτνάπσηςη ποτ να παίπνει ςαν όπιςμα μία ακέπαια σιμή n και επιςσπέυει σην σιμή S(n). Δώςσε μια αναδπομική και μία επαναληπσική τλοποίηςη.