ΠΑΝΕΠΙΣΗΜΙΟ ΠΑΣΡΩΝ ΠΟΛΤΣΕΥΝΙΚΗ ΥΟΛΗ ΣΜΗΜΑ ΜΗΥΑΝΙΚΩΝ ΗΛΕΚΣΡΟΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΑΓΩΓΗ ΣΟ ΔΙΑΔΙΚΑΣΙΚΟ ΠΡΟΓΡΑΜΜΑΣΙΜΟ 4 ο ΕΣ ΑΚΗΕΩΝ
Οι αςκήςειρ ατσού σοτ υτλλαδίοτ καλύπσοτν σα παπακάσψ θέμασα και δίνονσαι ενδεικσικά οι ανσίςσοιφερ ενόσησερ ςσο βιβλίο The GNU C Programming Tutorial μποπείσε ςτμβοτλετσείσε (http://crasseux.com/books/ctutorial/). ποτ Δείκσερ Δομέρ Απφεία Σο σέσαπσο ςύνολο αςκήςεψν θα εξεσαςθεί μαζί με σο σπίσο σην εβδομάδα 07-13/01/13 (ο κάθε υοισησήρ θα εξεσαςσεί σην ώπα σοτ σμήμασορ σοτ, για κάθε τποεπώσημα ο υοισησήρ θα ππέπει να έφει σο ανσίςσοιφο απφείο κώδικα C αποθηκετμένο ςσο λογαπιαςμό σοτ ςσο diogenis.ceid.upatras.gr σο οποίο θα ππέπει να έφει μεσαγλψσσιςσεί φψπίρ ςυάλμασα, ενώ για σο ςύνολο σψν επψσημάσψν θα ππέπει να έφει υέπει και μια εκστπψμένη αναυοπά με σιρ απανσήςειρ σοτ). Η σελετσαία άςκηςη σοτ υτλλαδίοτ είναι πποαιπεσική, φψπίρ βαθμολογική ςτνειςυοπά, για όςοτρ υοισησέρ θέλοτν και έφοτν φπόνο να αςφοληθούν. Άςκηςη 1η Γπάχσε ένα ππόγπαμμα ποτ θα ζησάει από σο φπήςση έναν απιθμό Ν και ςση ςτνέφεια θα δημιοτπγεί μία απλά διαςτνδεδεμένη λίςσα ακεπαίψν απιθμών L1 με απιθμούρ σοτρ οποίοτρ θα ζησάει από σο φπήςση. Επίςηρ θα δημιοτπγεί και μια άλλη διαςτνδεδεμένη λίςσα ίςοτ μήκοτρ L2, σηρ οποίαρ κάθε ςσοιφείο πποκύπσει με βάςη σην ςτνάπσηςη f(x)=x 3, ςε ςφέςη με σο ανσίςσοιφο ςσοιφείο σηρ ππώσηρ λίςσαρ. Π.φ. για L1 = {1, 4, 6, 10} και f(x)=x 3, σόσε L2 = {1, 64, 216, 1000}. σο σέλορ σο ππόγπαμμα θα στπώνει σιρ λίςσερ L1 και L2. Παπάδειγμα εκσέλεςηρ: How many elements in the list? 4 Element 1: 1 Element 2: 4 Element 3: 6 Element 4: 10 List L1: 1 4 6 10 List L2: 1 64 216 1000 Άςκηςη 2η Γπάχσε ππόγπαμμα ποτ μεσπάει σον απιθμό σψν bytes ποτ πεπιέφει ένα απφείο. Σο όνομα σοτ απφείοτ θα δίνεσαι από σον φπήςση. Άςκηςη 3η
Γπάχσε μία ςτνάπσηςη replace(input, initial, replacement) η οποία παίπνει ψρ παπάμεσπο σα αλυαπιθμησικά input, initial και replacement και επιςσπέυει ένα νέο αλυαπιθμησικό ςσο οποίο όλερ οι εμυανίςειρ σοτ initial ςσο input έφοτν ανσικασαςσαθεί με σο replacement. Η ςτνάπσηςη θα ππέπει να δοτλεύει με αλυαπιθμησικά οποιοτδήποσε μήκοτρ (επομένψρ φπηςιμοποιήςσε δείκσερ). Σο κτπίψρ ππόγπαμμα θα ζησάει από σο φπήςση σπία αλυαπιθμησικά μεγέθοτρ σο πολύ Ν (σο Ν θα σο δίνει επίςηρ ο φπήςσηρ) και θα στπώνει σο αποσέλεςμα σηρ replace. Π.φ. (με ένσονα η είςοδορ σοτ φπήςση): Dwse megisto mege8os string: 30 Dwse string eisodou (mege8os to poly 30): 123456789012345678901234 Dwse string pros antikatastasi(mege8os to poly 30): 456 Dwse neo string (mege8os to poly 30): TesseraPenteEksi 123TesseraPenteEksi7890123TesseraPenteEksi78901234 Άςκηςη 4η αρ ζησείσαι να τλοποιήςεσε μία απλή εκδοφή σοτ επισπαπέζιοτ παιφνιδιού Mastermind (http://en.wikipedia.org/wiki/mastermind_(board_game)), φψπίρ γπαυικό πεπιβάλλον. Σα διαθέςιμα φπώμασα είναι έξι (κόκκινο, μπλε, ππάςινο, κίσπινο, μψβ, άςππο), και αναπαπίςσανσαι από σα κευαλαία λασινικά γπάμμασα R,B,G,Y,P,W. Σο ππόγπαμμα απφικά ζησά από σον φπήςση σο μήκορ σοτ κπτυού κψδικού (επισπέπεσαι από 1 έψρ 100) και παπάγει μία στφαία ακολοτθία σψν παπαπάνψ φπψμάσψν (πιθανά με επαναλαμβανόμενα φπώμασα) η οποία είναι ο κπτυόρ κψδικόρ. ση ςτνέφεια απφίζει η διαδικαςία όποτ ο φπήςσηρ δίνει ακολοτθίερ φπψμάσψν με σο καθοπιςμένο μήκορ και σο ππόγπαμμα σοτ απανσά με 2 πληπουοπίερ: Σον απιθμό σψν φπψμάσψν ποτ βπήκε ςψςσά όςον αυοπά θέςη και φπώμα, και σον απιθμό σψν φπψμάσψν ποτ βπήκε ςψςσά αλλά ςε λάθορ θέςη. Αν ο φπήςσηρ βπει όλα σα φπώμασα ςση ςψςσή θέςη, σο ππόγπαμμα σοτ ανακοινώνει όσι νίκηςε (και πόςερ πποςπάθειερ φπειάςσηκε). Αν ο φπήςσηρ ανσί για σην ακολοτθία φπψμάσψν πληκσπολογήςει SURRENDER σο ππόγπαμμα σοτ ανακοινώνει όσι έφαςε και υανεπώνει σον κψδικό. Αν ςε κάποια ακολοτθία ο φπήςσηρ πληκσπολογήςει μη έγκτπο γπάμμα σο ππόγπαμμα αγνοεί σην ςτγκεκπιμένη ακολοτθία. Παπάδειγμα εκσέλεςηρ: Please define secret code length: 6 Try 1: RRRWWB Color and position correct: 1 Only color correct: 2 Try 2: RBBBBH
Error sequence, please try again. Try 2: RBBBBB Color and position correct: 3 Only color correct: 0 Try 3: RBBRBB Color and position correct: 4 Only color correct: 0 Try 4: RBGRBGGG Code sequence has to be exactly 6 colors Try 4: RBGRBG Color and position correct: 6 Only color correct: 0 Congratulations! You have won the game after 4 tries. Παπάδειγμα εκσέλεςηρ όποτ ο φπήςσηρ φάνει: Please define secret code length: 6 Try 1: BWWGGG Color and position correct: 2 Only color correct: 2 Try 2: SURRENDER You have lost the game. The secret code was GWBYGB. Παπαγψγή στφαίψν φπψμάσψν: Για σην παπαγψγή στφαίψν απιθμών (φπψμάσψν) φπηςιμοποιήςσε σην γεννήσπια στφαίψν απιθμών rand() σηρ γλώςςαρ C όπψρ ςσο παπακάσψ παπάδειγμα. #include <stdlib.h> #include <time.h> // ζςνάπηηζη για ηην παπαγωγή ηςσαίος απιθμού μέζα ζε // καθοπιζμένο πεδίο ηιμών [low, high] int RandomInteger(int low, int high) { int k; double d; d = (double) rand() / ((double)rand_max + 1); k = (int) (d * (high low + 1)); return (low + k); } int main() { int i, number; } // απσικοποίηζη γεννήηπιαρ παπαγωγήρ ηςσαίων απιθμών srand((int)time(null)); // κλήζη ηηρ RandomInteger για ηην παπαγωγή 10 ηςσαίων // απιθμών ζηο πεδίο ηιμών [1,9] for (i = 0; i < 10; i++) { number = RandomInteger(1, 9); printf( %d\n, number); }
Άςκηςη 5η Υσιάξε ππόγπαμμα σο οποίο θα μεσασπέπει σα πεπιεφόμενα ενόρ απφείοτ και θα σα επαναυέπει με σην εξήρ απλή μέθοδο. Σο κλειδί θα είναι ένα string σο οποίο θα δίνεσαι από σο φπήςση και από σο οποίο σο ππόγπαμμα θα δημιοτπγεί ένα άθποιςμα Α πποςθέσονσαρ σοτρ κψδικούρ ASCII σψν φαπακσήπψν σοτ. Ο φπήςσηρ θα δίνει επίςηρ ένα απφείο, ςε κάθε φαπακσήπα σοτ οποίοτ σο ππόγπαμμα θα πποςθέσει σο άθποιςμα Α δημιοτπγώνσαρ έσςι νέοτρ φαπακσήπερ. Η επαναυοπά σοτ απφείοτ γίνεσαι με αυαίπεςη σοτ αθποίςμασορ Α για να πποκύχοτν οι απφικοί φαπακσήπερ. Σο ππόγπαμμα θα παποτςιάζει ένα μενού ςσο οποίο ο φπήςσηρ θα επιλέγει αν θέλει να κάνει μεσασποπή ή επαναυοπά ενόρ απφείοτ φπηςιμοποιώνσαρ σο string ποτ θα δίνει. Άςκηςη 6η Υσιάξσε ένα απλό παιφνίδι κπεμάλαρ ψρ εξήρ: ε ένα απφείο με όνομα words.txt κασαγπάυονσαι αγγλικέρ λέξειρ, μία ςε κάθε γπαμμή σοτ απφείοτ. Ατσό σο απφείο σο υοπσώνει σο ππόγπαμμα και σο αποθηκεύει ςε ένα πίνακα δομών φπήςιμψν για σο παιφνίδι. Η ςτγκεκπιμένη δομή κοτβαλά σην λέξη, σον απιθμό σψν υανεπών (open) γπαμμάσψν, και ένα δτναμικό πίνακα ποτ πεπιέφει σιρ υανεπέρ θέςειρ πάνψ ςση λέξη. Όλα σα άλλα γπάμμασα ππέπει να παποτςιάζονσαι ψρ κπτμμένα (ςύμβολο _ ). Η δομή μποπεί να είναι ψρ εξήρ: struct game_word{ char *word; int open_letters_count; int *open_letters; }; Η απφικοποίηςη σοτ πίνακα ππέπει να επιβάλει σο άνοιγμα 3 στφαίψν θέςεψν για κάθε μια εγγπαυή σοτ. ση ςτνέφεια ο φπήςσηρ επιλέγει είσε να παίξει με μια στφαία επιλεγμένη λέξη ή να οδηγηθεί ςσον σεπμασιςμό σοτ παιφνιδιού. Κασα σο παιφνίδι ο φπήςσηρ δίνει ένα-ένα σα γπάμμασα ώςσε να ςτμπληπώςει ση λέξη. ε κάθε σέσοια είςοδο η ςψςσή ειςαγψγή εμυανίζει σην ανανεψμένη λέξη, με σο λάθορ γπάμμα να μην σιμψπείσαι, δηλαδή να μην τπάπφει κάποιορ μεσπησήρ λάθορ πποςπαθειών. Σέλορ με ση ςψςσή ςτμπλήπψςη μιαρ λέξηρ, ατσή αυαιπείσαι από σην λίςσα και σο παιφνίδι ςτνεφίζεσαι. Παπάδειγμα όποτ ςσο ππόγπαμμα έφει υοπσψθεί απφείο 12 λέξεψν ποτ πεπιέφει μεσαξύ άλλψν λέξεψν σο standard : Loaded words : 12 Τhree letters appear for each word. Type 1 to play a new word (12 available words).
Type 2 to exit. Word is " a rd". Letter : a Word is " a ard". Letter : b Word is " a ard". Letter : s Word is "s_a ard". Letter : t Word is "sta ard". Letter : m Word is "sta ard". Letter : n Word is "stan_ard". Letter : d You found word :"standard". Removing it from list Type 1 to play a new word (11 available words). Type 2 to exit. :2 Exiting. Άςκηςη 7η αρ ζησείσε να αποθηκεύςεσε ςε έναν πίνακα μεγέθοτρ Ν ςσοιφεία σύποτ struct employee. Κάθε καινούπιο ςσοιφείο αποθηκεύεσαι ςσην σελετσαία άδεια θέςη σοτ πίνακα και μποπεί να διαγπαυεί μόνο σο σελετσαίο ςσοιφείο ποτ έφει ειςαφθεί ςσον πίνακα. Δίνεσαι: struct employee { char *firstname; char *lastname; int age; };
Τλοποιήςσε σιρ παπακάσψ ςτναπσήςειρ: // δημιοςπγία ηος πίνακα // επιζηπέθει πίνακα με Ν ζηοισεία ηύπος struct employee* struct employee* create( int *pos); // ειζαγωγή ζηοισείος item ζηον πίνακα pin void ins(struct employee* pin, int *pos, struct employee* item); // διαγπαθή ζηοισείος από ηον πίνακα struct employee* del(struct employee* pin, int *pos); // εκηύπωζη πίνακα void printpin(struct employee* pin, int *pos); // ηαξινόμηζη πίνακα // field : ηο πεδίο με βάζη ηο οποίο θέλοςμε να γίνει η ηαξινόμηζη // direction : αν η ηαξινόμηζη θα είναι αύξοςζα ηόηε (direction=1) // Αν θα είναι θθίνοςζα (direction=-1) ανηίζηοισα. void sort(struct employee* pin, int *pos, char *field, int direction); Γπάχσε σην main() η οποία εμυανίζει μενού επιλογών ςσο φπήςση: 1. Ειζαγωγή ζηοισείων ςπαλλήλος 2. Διαγπαθή ζηοισείων ςπαλλήλος 3. Εμθάνιζη όλων ηων ςπαλλήλων 4. Ταξινόμηζη Πίνακα 5. Έξοδορ Ανάλογα με σην επιλογή σοτ φπήςση ζησούνσαι σα απαπαίσησα ςσοιφεία (π.φ. για σην Ειςαγψγή σοιφείψν ζησούνσαι από σον φπήςση σο όνομα, επώντμο και ηλικία) και καλείσαι η κασάλληλη ςτνάπσηςη.
ΠΡΟΑΙΡΕΣΙΚΗ ΑΚΗΗ (ΦΩΡΙ ΒΑΘΜΟΛΟΓΙΚΗ ΤΝΕΙΥΟΡΑ, για όςοτρ θέλοτν και έφοτν φπόνο να αςφοληθούν) Να τλοποιήςεσε ένα απλό diff/patch ππόγπαμμα σο οποίο θα έφει ση δτνασόσησα να ςτγκπίνει δύο απφεία ειςόδοτ και να κασαγπάυει ςε ένα νέο απφείο σιρ γπαμμέρ ςσιρ οποίερ διαυέποτν. Επίςηρ θα έφει και μια δεύσεπη λεισοτπγία όποτ θα δέφεσαι ένα απφείο ειςόδοτ και ένα απφείο διαυοπών και θα παπάγει σο διαυοποποιημένο απφείο. Η ππώση λεισοτπγία θα εκσελείσαι με σην παπάμεσπο γπαμμήρ ενσολών diff και η δεύσεπη με σην patch. file_old.txt file_new.txt diff.txt Hello, How are you? I hope all is well. br, Joe Hello, How do you do? I hope all is well. Best regards, Joe ---Line 2 file_old.txt How are you? file_new.txt How do you do? ---Line 4 file_old.txt br, file_new.txt Best regards, Παπακάσψ είναι ενδεικσικοί σπόποι φπήςηρ σοτ ππογπάμμασορ με σα παπαπάνψ απφεία (θεψπώνσαρ όσι σο εκσελέςιμο με σο ππόγπαμμα ονομάζεσαι ask5): ask5 diff file_old.txt file_new.txt (Θα παπάγει σο απφείο diff.txt) ask5 patch file_old.txt diff.txt (Θα παπάγει σο απφείο file_new.txt)