ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Σχετικά έγγραφα
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

Προγραμματισμός Ι (HY120)

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

Επεξεργασία Αρχείων Κειµένου

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

Προγραμματισμός Ι (HY120)

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

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Να εκτυπωθούν οι πρώτες Ν σειρές του τριγώνου, χρησιµοποιώντας ένα πίνακα µεγέθους Ν στοιχείων (η Ν-οστή σειρά περιέχει Ν στοιχεία).

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

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Αλγόριθμοι Ταξινόμησης Μέρος 1

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Εργαστήριο 2: Πίνακες

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

είκτες και Πίνακες (2)

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

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Υπολογιστών με C++

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εκφωνήσεις ασκήσεων εργαστηρίου 1

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

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός ΙI (E)

Αρχές Προγραμματισμού

Αρχές Προγραμματισμού

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

Υπολογισμός - Εντολές Επανάληψης

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

H ΓΛΩΣΣΑ C. Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα. ηµήτρης Ψούνης

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

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

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

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

Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 5η: Εντολές Επανάληψης

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διάλεξη 15η: Αναδρομή, μέρος 1ο

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

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

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

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

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

Γλώσσα Προγραμματισμού C

Ενδεικτικές λύσεις και στατιστικά

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός σε C. Πράξεις με bits (bitwise operators)

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός I (Θ)

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

Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα. ΙΙ Τα αρχεία δεδομένων στη C

Αντικειµενοστρεφής Προγραµµατισµός

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Transcript:

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου 2011 Θέµα 1 (α') Η άποψη που εκφράζεται στην εν λόγω πρόταση είναι λανθασµένη. Η πιθανή βελτίωση της ταχύτητας εκτέλεσης των προγραµµάτων λόγω χρήσης εξωτερικών/καθολικών µεταβλητών, για τον περιορισµό των ορισµάτων των συναρτήσεων, είναι αµελητέα µπροστά στη βλάβη που προκαλείται στην αναγνωσιµότητα και συντηρησιµότητα των προγραµµάτων λόγω της χρήσης αυτής. (β') Η εντολή break τερµατίζει βιαίως τη δοµή επανάληψης µέσα στην οποία βρίσκεται, ενώ η εντολή continue τερµατίζει µόνο την τρέχουσα επανάληψη και ο έλεγχος προχωρά στην επόµενη. Ένα παράδειγµα τµήµατος κώδικα: x = 0; for (i = 0 ; i < 10 ; i++) { if (i % 2) continue; if (i > 6) break; x++; printf("%d\n", x); Το παραπάνω τµήµα κώδικα θα εκτυπώσει την τιµή 4. Για τα περιττά i, παρακάµπτεται η επανάληψη και για i από το 7 και µετά, διακόπτεται. Οπότε, η εντολή x++ θα εκτελεσθεί µόνο για i = 0, 2, 4, 6. (γ') Μπορούµε, εκµεταλλευόµενοι οδηγίες προς τον προεπεξεργαστή, να περικλείσουµε το τµήµα κώδικα που θέλουµε να σχολιάσουµε µέσα σε: #if 0... #endif (δ') #define square(n) ((n)*(n)) int bigmod(int b, int p, int m) { int bm; if (p == 0) else if (p % 2 == 0) { bm = bigmod(b, p/2, m); return square(bm) % m; else return ((b % m) * bigmod(b, p-1, m)) % m;

Θέµα 2 (α') void print_inorder(treeptr p) { if (p!= NULL) { print_inorder(p->left); printf("%d ", p->value); print_inorder(p->right); (β') void print_paths(treeptr p) { int path[1000]; print_paths_recur(p, path, 0); void print_paths_recur(treeptr p, int path[], int length) { if (p!= NULL) { path[length] = p->value; length++; if (p->left == NULL && p->right == NULL) print_a_path(path, length); else { print_paths_recur(p->left, path, length); print_paths_recur(p->right, path, length); void print_a_path(int path[], int length) { int i; for (i = 0 ; i < length ; i++) printf("%d ", path[i]);

Θέµα 3 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, j, n, maxnd, nd; if (argc == 1) n = atoi(argv[1]); maxnd = 0;/* Αρχικοποίηση µέχρι στιγµής µεγίστου αθροίσµατος διαιρετών */ for (i = 1 ; i <= n ; i++) { /* Επανάληψη για κάθε i από 1 έως n */ nd = 1; /* Αρχικοποίηση πλήθους διαιρετών του i (το i διαιρεί το i) */ for (j = 1 ; j <= i/2 ; j++) /* Επανάληψη για κάθε πιθανό διαιρέτη */ if (i % j == 0) nd++; /* Βρέθηκε νέος διαρέτης, αύξησε το πλήθος τους */ if (nd > maxnd) { /* Αν το τρέχον πλήθος διαιρετών είναι µεγαλύτερο */ printf("%d ", i); /* από το µέχρι στιγµής µέγιστο, εκτύπωσε το i */ maxnd = nd; /* και ενηµέρωσε το µέχρι στιγµής µέγιστο πλήθος */ return 0;

Θέµα 4 #include <stdio.h> #include <stdlib.h> /* Αποσχολιάστε την παρακάτω γραµµή για την έκδοση µε κατακόρυφη εκτύπωση */ /* #define VERT */ #ifndef VERT int main(int argc, char *argv[]) /* Έκδοση µε οριζόντια εκτύπωση */ { int i, j, k, n, m, g, aliven; char ch, ***grid; /* Ορίζουµε έναν 3-διάστατο πίνακα, αφού θα χρειαστούµε στο τέλος όλες τις καταστάσεις για να τις εκτυπώσουµε οριζόντια */ if (argc!= 4) n = atoi(argv[1]); m = atoi(argv[2]); g = atoi(argv[3]); if ((grid = malloc((g+1) * sizeof(char **))) == NULL) for (i = 0 ; i <= g ; i++) { if ((grid[i] = malloc(n * sizeof(char *))) == NULL) for (j = 0 ; j < n ; j++) if ((grid[i][j] = malloc(m * sizeof(char))) == NULL) printf("please, give initial state\n"); for (j = 0 ; j < n ; j++) { /* Είσοδος αρχικής κατάστασης από το stdin */ for (k = 0 ; k < m ; k++) { ch = getchar(); if (ch!= 'X' && ch!= '.') grid[0][j][k] = ch; getchar(); for (i = 1 ; i <= g ; i++) for (j = 0 ; j < n ; j++) for (k = 0 ; k < m ; k++) { aliven = 0; grid[i][j][k] = grid[i-1][j][k]; /* Αντιγραφή τρέχουσας κατάστασης στην επόµενη */ /* Μέτρησε τους ζωντανούς γείτονες του τρέχοντος κυττάρου */ if (k < m-1 && grid[i-1][j][k+1] == 'X') aliven++; if (j < n-1 && grid[i-1][j+1][k] == 'X') aliven++; if (k > 0 && grid[i-1][j][k-1] == 'X') aliven++; if (j > 0 && grid[i-1][j-1][k] == 'X') aliven++; if (k < m-1 && j < n-1 && grid[i-1][j+1][k+1] == 'X') aliven++; if (k < m-1 && j > 0 && grid[i-1][j-1][k+1] == 'X') aliven++; if (k > 0 && j < n-1 && grid[i-1][j+1][k-1] == 'X') aliven++; if (k > 0 && j > 0 && grid[i-1][j-1][k-1] == 'X') aliven++; if ((aliven < 2 aliven > 3) && grid[i-1][j][k] == 'X') grid[i][j][k] = '.'; /* Το τρέχον κύτταρο πεθαίνει */ if (aliven == 3 && grid[i-1][j][k] == '.') grid[i][j][k] = 'X'; /* Το τρέχον κύτταρο αναγεννάται */ for (i = 0 ; i <= g ; i++) { /* Εκτύπωση όλων των καταστάσεων */ printf("state %-2d", i); if (i < g) { printf(" --> "); for (k = 0 ; k <= m-13; k++) putchar(' ');

for (j = 0 ; j < n ; j++) { for (i = 0 ; i <= g ; i++) { if (i > 0) { putchar(' '); for (k = 0 ; k <= 11-m ; k++) putchar(' '); for (k = 0 ; k < m ; k++) putchar(grid[i][j][k]); for (i = 0 ; i < g ; i++) { for (j = 0 ; j < n ; j++) free(grid[i][j]); free(grid[i]); free(grid); return 0; #else int main(int argc, char *argv[]) /* Έκδοση µε κατακόρυφη εκτύπωση */ { int i, j, st, n, m, g, aliven; char ch, **grid, **newgrid, **temp; /* Ορίζουµε δύο 2-διάστατους πίνακες, για να κρατάµε την τρέχουσα κατάσταση και την επόµενή της */ if (argc!= 4) n = atoi(argv[1]); m = atoi(argv[2]); g = atoi(argv[3]); if ((grid = malloc(n * sizeof(char *))) == NULL) if ((newgrid = malloc(n * sizeof(char *))) == NULL) for (i = 0 ; i < n ; i++) { if ((grid[i] = malloc(m * sizeof(char))) == NULL) if ((newgrid[i] = malloc(m * sizeof(char))) == NULL) printf("please, give initial state\n"); for (i = 0 ; i < n ; i++) { /* Είσοδος αρχικής κατάστασης από το stdin */ for (j = 0 ; j < m ; j++) { ch = getchar(); if (ch!= 'X' && ch!= '.') grid[i][j] = ch; getchar(); for (st = 0 ; st <= g ; st++) { printf("\nstate %d\n", st); /* Εκτύπωση τρέχουσας κατάστασης */ for (i = 0 ; i < n ; i++) { for (j = 0 ; j < m ; j++) printf("%c", grid[i][j]); for (i = 0 ; i < n ; i++) for (j = 0 ; j < m ; j++) { aliven = 0; newgrid[i][j] = grid[i][j]; /* Αντιγραφή τρέχουσας κατάστασης στην επόµενη */ /* Μέτρησε τους ζωντανούς γείτονες του τρέχοντος κυττάρου */

if (j < m-1 && grid[i][j+1] == 'X') aliven++; if (i < n-1 && grid[i+1][j] == 'X') aliven++; if (j > 0 && grid[i][j-1] == 'X') aliven++; if (i > 0 && grid[i-1][j] == 'X') aliven++; if (j < m-1 && i < n-1 && grid[i+1][j+1] == 'X') aliven++; if (j < m-1 && i > 0 && grid[i-1][j+1] == 'X') aliven++; if (j > 0 && i < n-1 && grid[i+1][j-1] == 'X') aliven++; if (j > 0 && i > 0 && grid[i-1][j-1] == 'X') aliven++; if ((aliven < 2 aliven > 3) && grid[i][j] == 'X') newgrid[i][j] = '.'; /* Το τρέχον κύτταρο πεθαίνει */ if (aliven == 3 && grid[i][j] == '.') newgrid[i][j] = 'X'; /* Το τρέχον κύτταρο αναγεννάται */ temp = grid; /* Επόµενη κατάσταση είναι η τρέχουσα */ grid = newgrid; newgrid = temp; for (i = 0 ; i < n ; i++) { free(grid[i]); free(newgrid[i]); free(grid); free(newgrid); return 0; #endif