ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

Σχετικά έγγραφα
ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

ΠΣ-ΕΡ+ΤΑΠΕ, όπου: ΠΧ είναι η πάγια χρέωση, ύψους Є. ΠΣ είναι το ποσό στρογγυλοποίησης (ΠΣ) του προηγούμενου λογαριασμού.

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

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

Τμήμα Πληροφορικής & Επικοινωνιών

7. Δυναμική διαχείριση μνήμης

Ασκήσεις - Μελέτες περίπτωσης για το μάθημα Προγραμματισμός II

Τμήμα Πληροφορικής & Επικοινωνιών

Προγραμματισμός II. Δυναμική διαχείριση μνήμης

Προγραμματισμός II. Τυχαίοι αριθμοί Διεπαφές

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

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

stdio.h> #include <string.h< string.h> void main() { char *px*

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

Προγραμματισμός II. stdio.h> #include <conio.h< conio.h> #include <stdlib.h< stdlib.h> static int j=0; j=j*n; ("j=%d\t",j); return ((*py.

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

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

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

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

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

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

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

Εισαγωγή στον δομημένο προγραμματισμό

Εισαγωγή στις Συναρτήσεις

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

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

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

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

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

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

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

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

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

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Θεόδωρος Γ. Λάντζος Διάλεξη Νο1

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

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

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

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

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

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

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

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

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

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

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

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

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

Διάλεξη 11η: Δείκτες, μέρος 1

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ

Δείκτες στην C (επανάληψη)

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

Διάλεξη 8η: Αλφαριθμητικά (strings)

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

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

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

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

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

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο Λειτουργικών Συστημάτων Ακ. Έτος Άσκηση 4. Πλήθος οπών <tab> Μέσο μέγεθος σε mb

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

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

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

Transcript:

Τμήμα Πληροφορικής & Επικοινωνιών Εξεταζόμενο μάθημα: Προγραμματισμός ΙI Ονοματεπώνυμο σπουδαστή/άστριας:... Εξάμηνο σπουδών:... Α.Ε.Μ.:... 25/1/2006 ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ Οι εξεταζόμενοι επιτρέπεται να χρησιμοποιήσουν παντός είδους έντυπα βοηθήματα. Tα θέματα επισυνάπτονται στο γραπτό με συμπληρωμένο το πλαίσιο της κορυφής. Θέμα 1 ο (80%) Να γραφεί πρόγραμμα στη γλώσσα C, το οποίο θα επιτελεί τα ακόλουθα: (1) Θα δεσμεύει δυναμικά μνήμη για πίνακες αλφαριθμητικών (δισδιάστατους πίνακες χαρακτήρων). Για το σκοπό αυτό θα αναπτυχθεί η συνάρτηση char **alloc_2(int size 1, int size2). H συνάρτηση θα δέχεται τις διαστάσεις του πίνακα και θα επιστρέφει διπλό δείκτη, ο οποίος θα «δείχνει» στη δεσμευθείσα μνήμη και θα τη διαχειρίζεται όπως ένας κανονικός πίνακας. Η δέσμευση απαιτεί χρήση της συνάρτησης malloc. Για παράδειγμα, το ζεύγος εντολών char **all; και all=alloc_2(2,41); δηλώνει το διπλό δείκτη σε χαρακτήρα με όνομα all και δεσμεύει μνήμη για 2x41 χαρακτήρες, δηλαδή για 2 αλφαριθμητικά μήκους έως 40 θέσεων. Τα 2 αλφαριθμητικά τα διαχειρίζεται ο διπλός δείκτης all. (2) Με χρήση της ανωτέρω συνάρτησης θα δεσμευθεί μνήμη 5 φορές: 2x41 χαρακτήρες, την οποία θα διαχειρίζεται ο δείκτης char **all. 2x16 χαρακτήρες, την οποία θα διαχειρίζεται ο δείκτης char **nm. 2x16 χαρακτήρες, την οποία θα διαχειρίζεται ο δείκτης char **nm_new. 2x26 χαρακτήρες, την οποία θα διαχειρίζεται ο δείκτης char **sr. 2x26 χαρακτήρες, την οποία θα διαχειρίζεται ο δείκτης char **sr_new. (2) Θα δέχεται από το πληκτρολόγιο τα ονοματεπώνυμα δύο φοιτητών, έως 40 χαρακτήρες το καθένα και δοσμένα με κεφαλαία λατινικά γράμματα, και θα τα αποθηκεύει στη μνήμη μέσω του **all. 1/6

(3) Θα διαχωρίζει τα μικρά ονόματα από τα επώνυμα και θα τα αποθηκεύει σε δύο ξεχωριστούς δισδιάστατους πίνακες χαρακτήρων. Tον πίνακα για τα μικρά ονόματα θα τον διαχειρίζεται ο **nm και τον πίνακα για τα επώνυμα ο **sr. Για το διαχωρισμό θα αναπτυχθεί η συνάρτηση void separate(char **pall, char **pnm, char **psr), η οποία θα δέχεται ως ορίσματα τους all, nm, sr, θα επιτελεί το ζητούμενο διαχωρισμό και μέσω της κλήσης κατ αναφορά (o pnm αντιστοιχίζεται στον nm και ο psr αντιστοιχίζεται στον sr) οι nm και sr θα λαμβάνουν τα μικρά ονόματα και τα επίθετα, αντίστοιχα. (4) Θα ταξινομεί αλφαβητικά τα επώνυμα και θα αναδιατάσσει τόσο τα μικρά ονόματα όσο και τα επώνυμα σε δύο νέους πίνακες, που θα τους διαχειρίζονται οι **nm_new και **sr_new. Θα πρέπει να ληφθεί μέριμνα ώστε εάν το ένα επώνυμο είναι υποσύνολο του άλλου (π.χ. ΧΑΤΖISAVVAS και ΧΑΤΖIS) ταξινομείται ως πρώτο το συντομότερο εξ αυτών. Για την κατάταξη θα αναπτυχθεί η συνάρτηση void sort(char **pnm, char **psr, char **pnm_new, char **psr_new), η οποία θα δέχεται ως ορίσματα τους nm, sr, nm_new, sr_new, θα επιτελεί τη ζητούμενη κατάταξη κατ αλφαβητική σειρά, και μέσω της κλήσης κατ αναφορά (o pnm_new αντιστοιχίζεται στον nm_new και ο psr_new αντιστοιχίζεται στον sr_new) οι nm_new και sr_new θα λαμβάνουν τα μικρά ονόματα και τα επίθετα, αντίστοιχα, μετά την κατάταξη. (5) Θα εμφανίζει τους πίνακες nm, sr, nm_new, sr_new στην οθόνη. (6) Για την απελευθέρωση της δεσμευθείσας μνήμης θα αναπτυχθεί η συνάρτηση void free_2(char **deiktis, int size1), η οποία θα δέχεται το όνομα ενός διπλού δείκτη σε χαρακτήρα και την πρώτη διάσταση του πίνακα, στον οποίο αυτός δείχνει, και με χρήση της συνάρτησης free απελευθερώνει την αντίστοιχη μνήμη. Για παράδειγμα, η κλήση της συνάρτησης free_2(all,2); απελευθερώνει τη μνήμη που δεσμεύθηκε στο βήμα (2) με το δείκτη all. Αντίστοιχες κλήσεις της free_2 θα οδηγήσουν στην αποδέσμευση της μνήμης που δεσμεύθηκε στο βήμα (2) με τους διπλούς δείκτες nm, sr, nm_new, sr_new. Δίνεται ότι: Τα ονοματεπώνυμα δόθηκαν σωστά, με κεφαλαία λατινικά γράμματα, και δεν απαιτείται έλεγχος γι αυτό. 2/6

Όταν ο χρήστης πληκτρολογεί ένα ονοματεπώνυμο διαχωρίζει το όνομα από το επώνυμο με απλό κενό. Κάθε μικρό όνομα και επώνυμο είναι απλό, δεν περιέχει διπλά ονόματα, τίτλους ευγενείας ή άλλου είδους προσφωνήσεις. Επαλήθευση: Εάν ο χρήστης δώσει JOAN JAMESON και ANDREW DOE, οδηγούμαστε στους ακόλουθους πίνακες: all[0] = JOAN JAMESON all[1] = ANDREW DOE nm[0] = JOAN nm[1] = ANDREW sr[0] = JAMESON sr[1] = DOE nm_new[0] = ANDREW nm_new[1] = JOAN sr_new[0] = DOE sr_new[1] = JAMESON Θέμα 3 ο (20%) Να περιγραφεί η λειτουργία του ακόλουθου προγράμματος και να δοθούν τα αποτελέσματα. #include <string.h> #include <stdio.h> main(void) FILE *pf; char string[]="department of Informatics and Communications"; char msg[81]; pf=fopen("file1.dat","w+"); fwrite(string,strlen(string),1,pf); fseek(pf, 0, SEEK_SET); fgets(msg,26,pf); printf("%s", msg); fclose(pf); 3/6

// 2006_1_1 #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <assert.h> char **alloc_2_char(int size1, int size2); void free_2_char(char **deikt, int size1); void separate(char **pall, char **pnm, char **psr); void sort(char **pnm, char **psr, char **pnm_new, char **psr_new); void main() char **all,**nm,**nm_new,**sr,**sr_new; int i,j; all=alloc_2_char(2,41); nm=alloc_2_char(2,16); nm_new=alloc_2_char(2,16); sr=alloc_2_char(2,26); sr_new=alloc_2_char(2,26); printf("give first name: "); gets(all[0]); printf("\ngive second name: "); gets(all[1]); separate(all,nm,sr); for (i=0;i<2;i++) printf("\nnm[%d]=%s\tsr[%d]=%s",i,nm[i],i,sr[i]); sort(nm,sr,nm_new,sr_new); for (i=0;i<2;i++) printf("\nnm_new[%d]=%s\tsr_new[%d]=%s",i,nm_new[i],i,sr_new[i]); free_2_char(sr_new,2); free_2_char(sr,2); free_2_char(nm_new,2); free_2_char(nm,2); free_2_char(all,2); getch(); char **alloc_2_char(int size1, int size2) int i; char **deikt; deikt=(char **)malloc(size1*sizeof(char *)); assert(deikt!=null); for (i=0;i<size1;i++) deikt[i]=(char *)malloc(size2*sizeof(char)); assert(deikt[i]!=null); return(deikt); void free_2_char(char **deikt, int size1) 4/6

int i; for (i=(size1-1);i>=0;i--) free(deikt[i]); free(deikt); void separate(char **pall, char **pnm, char **psr) int i,j; for (i=0;i<2;i++) j=0; while (pall[i][j]!=' ') pnm[i][j]=pall[i][j]; j++; pnm[i][j]='\0'; j=0; do psr[i][j]=pall[i][strlen(pnm[i])+j]; j++; while (pall[i][j]!='\0'); void sort(char **pnm, char **psr, char **pnm_new, char **psr_new) int i,j,mikos,count=0; mikos=(strlen(psr[0])<strlen(psr[1]))?strlen(psr[0]):strlen(psr[1]); i=0; do if (psr[0][i]<psr[1][i]) count++; i++; while ((i<mikos) && (!count)); if ((count) (strlen(psr[0])>strlen(psr[1]))) strcpy(psr_new[0],psr[1]); strcpy(psr_new[1],psr[0]); strcpy(pnm_new[0],pnm[1]); strcpy(pnm_new[1],pnm[0]); else for (i=0;i<2;i++) strcpy(psr_new[i],psr[i]); strcpy(pnm_new[i],pnm[i]); 5/6

// 2006_1_2 6/6