Θέµα 1ο (25%) Για το πρόγραµµα που ακολουθεί να περιγραφεί αναλυτικά η λειτουργία του και να απεικονισθεί το περιεχόµενο των θέσεων µνήµης που καταλαµβάνουν οι µεταβλητές σε κάθε γραµµή κώδικα. Χάριν απλότητας να θεωρηθεί ότι οι µεταβλητές ς καταλαµβάνουν διαδοχικές θέσεις µνήµης. #include <stdio.h< stdio.h> #include <string.h< string.h> void main() char *px* px,, *py* py,, b[40]; int i; char a[] = "Department of Informatics and Communications"; printf( ( "ad(px" ad(px)=%d ad(py)=%d ad(a[0])=%d\n",&px,&py,&a[0] ); strncpy(b,a,20); for (i =0; i<(strlen(a) strlen(a)-strlen(b)); i++) printf( ( "a[%d" a[%d]=% ]=%c\n",i,a[i]] ); px=b; printf( "\npx=%d" npx=%d\n",px); n",px); for (i=12; i<(strlen(b)-1); i++) *(px+i px+i)=*(px+(strlen(b) )=*(px+(strlen(b)-(i+1)));(i+1))); printf( ( "string_length(b)" string_length(b)-%d=%d px+%d=%c =%c\n",i+1,strlen(b) n",i+1,strlen(b)-(i+1),i,*( (i+1),i,*(px+i)) ); py=px; printf( "\n*px=%c" *py=%c",*px,*py);
// 2005_1_1 οµηµένος Προγραµµατισµός
Θέµα 2ο (75%) Να αναπτυχθεί πρόγραµµα διαχείρισης στοιχείων εργαζοµένων που θα επιτελεί τα παρακάτω: α) Θα δηµιουργεί τύπο δεδοµένου δοµής personnelt,, που θα περιλαµβάνει στοιχεία εργαζοµένων, µε τα ακόλουθα µέλη: Ονοµατεπώνυµο (σε µεταβλητή τύπου δοµής): Όνοµα και επώνυµο ξεχωριστά ιεύθυνση (σε µεταβλητή τύπου δοµής): Όνοµα οδού, αριθµός οδού, πόλη, ταχ. κώδικας. Τηλέφωνα (σε µεταβλητή τύπου δοµής): Τηλέφωνο εργασίας, κινητό τηλέφωνο Θέση (σε µεταβλητή τύπου δοµής): Τίτλος, κωδικός αριθµός εργαζόµενου, τοµέας της επιχείρησης στον οποίο εργάζεται, αριθµός γραφείου, ονοµατεπώνυµο ο προϊσταµένου, ηµεροµηνία πρόσληψης (ηµέρα, µήνας, έτος), µισθός (θα απαιτηθεί ένθετη δοµή για την ηµεροµηνία πρόσληψης) β) Τα δεδοµένα για 10 εργαζόµενους θα διαβάζονται από το πληκτρολόγιο λόγιο µε χρήση συνάρτησης void get_employee employee(personneltpersonnelt *pers_ptr) και θα αποθηκεύονται στον πίνακα pers[10] τύπου personnelt. γ) Στη συνέχεια θα δίνεται κάποιος κωδικός αριθµός εργαζόµενου (code( code) ) από το πληκτρολόγιο και θα αναζητείται στον πίνακα. Αν ο κωδικός αντιστοιχεί σε υπάρχοντα κωδικό εργαζόµενου, τότε θα εµφανίζονται στην οθόνη οι πληροφορίες του αντίστοιχου εργαζόµενου, αλλιώς θα εµφανίζεται ένα ανάλογο µήνυµα. Η όλη λειτουργία αναζήτησης θα επιτελείται µέσω της συνάρτησης void search_employee employee(int code, personnelt person[10]) [10]).Να περιγραφεί συνοπτικά η λειτουργία των ακόλουθων προγραµµάτων και να δοθούν τα αποτελέσµατά τους.
#include<conio.h conio.h> #include<stdio.h stdio.h> #define N 10 // Αριθµός υπαλλήλων struct nmt char name[40],surname[40]; ; struct addresst char street_name[40], city[40]; int street_number,zip_code; ; struct telet char office_number[14],home_number[14]; ; struct hiredatet int year,month,date; ;
struct job_descriptiont char title[40], sector[100], boss_name[40]; int code_number,office_number,salary; hiredatet hire; ; struct personnelt nmt nm; addresst addr; telet tele; job_descriptiont job; ; void get_employee(personnelt *pers_ptr); void search_employee(int i, personnelt person[n]); void main() personnelt pers[n]; int i; for (i=0;i<n;i N;i++) get_employee(&pers[i]); printf("\ngive ngive an employee's code_number: : "); scanf("%d",&i); search_employee(i,pers);
void get_employee(personnelt *pers_ptr) printf("\t\tadd tadd new employee:\n"); printf("\nemployee's nemployee's name: "); scanf("%s",pers_ptr->nm.name nm.name); printf("\nsurname nsurname: : "); scanf("%s",pers_ptr->nm.surname nm.surname); printf("\t\nemployee's nemployee's job details:"); printf("\ncode ncode number: "); scanf("%d",&pers_ptr->job.code_number job.code_number); printf("\nsalary nsalary: : "); scanf("%d",&pers_ptr->job.salary job.salary); printf("\nyear nyear of recruitment: "); scanf("%d",&pers_ptr->job.hire.year job.hire.year);
void search_employee(int code, personnelt person[n]) int j=0; int index=-1; while ((j<n) && (index==-1)) if (code==person[j].job.code_number person[j].job.code_number) ) index=j; j++; if (index==-1) printf("\nthe nthe given code_number does not match to an existing one\n"); n"); else printf("\n\t\tsearch tsearch results:\n"); printf("\nemployee's nemployee's name: %s",person[index].nm.name% s",person[index].nm.name); printf("\nsurname nsurname: : %s",person[index].nm.surname% s",person[index].nm.surname); printf("\t\njob njob details:"); printf("\ncode ncode number: %d",person[index].job.code_number% d",person[index].job.code_number); printf("\nsalary nsalary: : %d",person[index].job.salary% d",person[index].job.salary); printf("\nyear nyear of recruitment: %d",person[index].job.hire.year% d",person[index].job.hire.year);
// 2005_1_2 οµηµένος Προγραµµατισµός