Προγραμματισμός 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.

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

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

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

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

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

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

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

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

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

Διάλεξη 18η: Διαχείρηση Αρχείων

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

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

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

Εργαστήριο 9: Αρχεία

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

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

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

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

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

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

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

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

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

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

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

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

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

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

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

Περιεχόμενα. Πρόλογος... 21

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

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

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

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

Οι δείκτες στη γλώσσα C

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

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

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

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

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

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

Η βασική συνάρτηση προγράμματος main()

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

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

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

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

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

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

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

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

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

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

12. Συναρτήσεις (Μέρος ΙI)

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

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

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

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

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

Περιεχόμενα. Πρόλογος... 17

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

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

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

Transcript:

Θέμα 1ο (25%) Για το πρόγραμμα που ακολουθεί να περιγραφεί αναλυτικά η λειτουργία του, να δοθούν τα αποτελέσματα και να απεικονισθεί το περιεχόμενο των θέσεων μνήμης που καταλαμβάνουν οι μεταβλητές σε κάθε γραμμή κώδικα. #include <stdio.h< stdio.h> #include <conio.h< conio.h> Δημιουργείται και αρχικοποιείται κατά την #include <stdlib.h< stdlib.h> πρώτη κλήση της συνάρτησης. Εφεξής int func(int *py, int n) { παραμένει στη μνήμη, διατηρώντας την τιμή static int j=0; που απέκτησε κατά την τελευταία κλήση τής j=j*n; func. printf("j=%d ("j=%d\t",j); return ((*py py)+j); // Τέλος της func main() { int i,*px px,, x[5]={0,1,4,9,16; px=x; for (i=0;i<(sizeof(x)/sizeof(x[0]));i=i+2) { printf("i=%d px+%d=% =%d\t",i,i,px+i); printf("*(px+%d)=%d\tfunc=%d tfunc=%d\n",i,*(px+i),func(px+i,(i+1)*(i+1))); n",i,*(px+i),func(px+i,(i+1)*(i+1))); // Τέλος της for system("pause"); "); // Τέλος της main

// 2006_3_1 _1 Προγραμματισμός II

Θέμα 2ο (30% 0%) Να γραφεί πρόγραμμα, το οποίο: (α) Θα διαβάζει έως το τέλος του το δυαδικό αρχείο input_file file.txt,, στο οποίο βρίσκονται αποθηκευμένοι ακέραιοι αριθμοί, και θα υπολογίζει το πλήθος τους, το οποίο θα αποθηκεύει στην ακέραια μεταβλητή size.. (Υπόδειξη( Υπόδειξη: : Για να διαβασθούν τα δεδομένα ένα προς ένα έως το τέλος του αρχείου, χωρίς να είναι γνωστός γ εκ των προτέρων ο αριθμός τους, μπορεί να χρησιμοποιηθεί ένας πίνακας μίας μ θέσης, π.χ. arr[1] [1],, ως προσωρινός χώρος αποθήκευσης του δεδομένου σε κάθε κλήση της fread() (). Λάβετε υπόψη ότι η fread() επιστρέφει έναν ακέραιο που ισούται με τον αριθμό των δεδομένων που ανεγνώσθησαν σε κάθε κλήση της, ανεξάρτητα του αριθμού των δεδομένων που ζητήθηκε να αναγνωσθούν). (β) Θα δεσμεύει μνήμη για size ακέραιους αριθμούς με χρήση της συνάρτησης malloc() ().. Τη μνήμη θα διαχειρίζεται ο δείκτης σε ακέραιο με όνομα array_ptr ptr. (γ) Θα διαβάζει εκ νέου το αρχείο input_file file.txt,, αποδίδοντας τους ακεραίους που περιέχει στον πίνακα array_ptr ptr. (δ) Στη συνέχεια θα καλείται η συνάρτηση void pwr(int *array, int array_size size),, η οποία θα μεταβάλλει τις τιμές των δεδομένων που διαχειρίζεται ο δείκτης array,, υψώνοντας στο τετράγωνο κάθε δεδομένο (κλήση της συνάρτησης μέσα στη main() (): pwr(array array_ptr, size); );).).

(ε) H main() θα τελειώνει με την εγγραφή στο δυαδικό αρχείο output_file file.txt των νέων τιμών των στοιχείων του πίνακα array_ptr ptr,, και την απελευθέρωση της δεσμευθείσας μνήμης με χρήση της συνάρτησης free() (). Σημείωση: H ανάγνωση από αρχείο και η εγγραφή σε αρχείο να γίνεται με χρήση των συναρτήσεων fread() (), fwrite() ().Το δυαδικό αρχείο input_file file.txt θεωρείται πως προϋπάρχει. #include <stdio.h< stdio.h> #include <conio.h< conio.h> #include <assert.h< assert.h> #include <stdlib.h< stdlib.h> void pwr(int *array_ptr, int array_size); void main() { int array[1],cnt,i,*array_ptr,size array_ptr,size=0; /* Ο πίνακας array[1] χρησιμοποιείται για να μπορέσουμε στο πρώτο σκέλος να διαβάσουμε ένα προς ένα τα δεδομένα και να υπολογίσουμε τον αριθμό του*/ FILE *f1; // 1ο σκέλος f1=fopen("input_file.txt","r fopen("input_file.txt","r"); "); while (fread(array,sizeof(int),1,f1)) size++; /* Όσο η fread() δίνει έξοδο διάφορη του μηδενός, δηλαδή διαβάζει ένα στοιχείο, συνέχισε να διαβάζεις από το αρχείο και αύξανε το μετρητή των στοιχείων που περιέχονται σε αυτό*/ fclose(f1);

// 2ο σκέλος f1=fopen("input_file.txt","r fopen("input_file.txt","r"); "); array_ptr ptr=( =(int *)malloc malloc(size*sizeof(int)); assert(array array_ptr!=!=null); // 3ο σκέλος fread( ( array_ptr,sizeof(int),size,f1 ); fclose(f1); // 4ο σκέλος pwr(array_ptr,size); f1=fopen("output_file.txt","w fopen("output_file.txt","w"); "); fwrite(array_ptr,sizeof(int),size,f1); fclose( ( f1 ); // 5ο σκέλος free(array_ptr); system("pause"); "); // Τέλος της main void pwr(int *array_address, int array_size) { int i; for (i=0;i<array_size;i array_size;i++) { array_address[i]= ]=array_address[i]*array_address[i]; // Εναλλακτικά: *(array_address+i array_address+i)=*( )=*(array_address+i)*(*(array_address+i)); // Τέλος της pwr

Τα αποτελέσματα που ακολουθούν εξάγονται εάν προστεθεί πριν και μετά το 4ο σκέλος ο ακόλουθος κώδικας: printf( ( "Before pwr:\n" " ); for (i=0;i<size;i size;i++) printf( ( "array_ptr[%d" array_ptr[%d]=% ]=%d\n",i,array_ptr[i]] ); και printf( ( "After pwr:\n" " ); for (i=0;i<size;i size;i++) printf("array_ptr[%d]=% ]=%d\n",i,array_ptr[i]] );

Θέμα 3ο (45%) Να δημιουργηθεί ο τύπος δεδομένου δομής circle,, που έχει ως μέλη τις τρεις πραγματικές μεταβλητές x (τετμημένη του κέντρου του κύκλου), y (τεταγμένη του κέντρου του κύκλου), r (ακτίνα του κύκλου). Να γραφούν οι ακόλουθες συναρτήσεις: (α) void readcircle(circle *pc, FILE *f1) 1),, η οποία θα διαβάζει από το αρχείο κειμένου, που προσπελαύνεται μέσω του δείκτη f1,, τιμές για τα μέλη της μεταβλητής, στην οποία δείχνει ο δείκτης pc (απαιτείται χρήση του τελεστή βέλους). (β) void printcircle(circle *pc, FILE *f1) 1),, η οποία θα τυπώνει τόσο στην οθόνη όσο και στο αρχείο κειμένου, που προσπελαύνεται μέσω του δείκτη f1,, τα περιεχόμενο της μεταβλητής, στην οποία δείχνει ο δείκτης pc (απαιτείται χρήση του τελεστή βέλους). (γ) float circlearea(circle *pc),, η οποία θα επιστρέφει στην καλούσα συνάρτηση το εμβαδό του κύκλου που περιγράφεται από τη μεταβλητή, στην οποία δείχνει ο δείκτης pc (απαιτείται χρήση του τελεστή βέλους). Να γραφεί ο κώδικας της main() (),, μέσα στην οποία θα δημιουργούνται οι δείκτες αρχείου κειμένου pf1 (για το αρχείο ανάγνωσης input_file file.txt) ) και pf2 (για το αρχείο εγγραφής output_file file.txt), καθώς και οι μεταβλητές τύπου circle με όνομα cir και τύπου float με όνομα area,, και θα καλούνται διαδοχικά οι τρεις συναρτήσεις readcircle(& (&cir, pf1) 1), printcircle(& (&cir, pf2) 2), area=circlearea circlearea(& (&cir).. Ακολούθως το εμβαδό θα τυπώνεται στην οθόνη. Το αρχείο input_file file.txt θεωρείται πως προϋπάρχει στον κατάλογο c:\temp\2006_3_3.. Στον ίδιο κατάλογο να τοποθετηθεί το αρχείο output_file file.txt.

#include <stdio.h< stdio.h> #include <conio.h< conio.h> #include <stdlib.h< stdlib.h> #include <math.h< math.h> struct circle { float x,y,r; ; void readcircle(circle *pc, FILE *f1); void printcircle(circle *pc, FILE *f1); float circlearea(circle *pc); main() { FILE *pf1,*pf2; circle cir; float area; pf1=fopen("c:\\temp temp\\2006_3_3\\input_file.txt","r"); readcircle(&cir,pf1); fclose(pf1); pf2=fopen("c:\\temp temp\\2006_3_3\\output_file.txt","w"); printcircle(&cir,pf2); fclose(pf2); area=circlearea(&cir circlearea(&cir); printf("\ne ne=% =%f\n",area); system("pause"); "); // Τέλος της main

void readcircle(circle *pc, FILE *f1) { fscanf(f1,"%f",&pc (f1,"%f",&pc->x); fscanf(f1,"%f",&pc (f1,"%f",&pc->y); fscanf(f1,"%f",&pc->r); void printcircle(circle *pc, FILE *f1) { printf("\n\nthe nthe x-coordinate is: %f",pc% f",pc->x); printf("\nthe nthe y-coordinate is: %f",pc% f",pc->y); printf("\nthe nthe radius is: %f",pc% f",pc->r); fprintf(f1,"\n\nthe nthe x-coordinate x is: %f",pc% f",pc->x); fprintf(f1,"\nthe nthe y-coordinate y is: %f",pc% f",pc->y); fprintf(f1,"\nthe nthe radius is: %f",pc% f",pc->r); float circlearea(circle *pc) { return(m_pi*pc *pc->r*pc->r); >r); // Τέλος της readcircle // Τέλος της printcircle // Τέλος της circlearea

// 2006_3_3 Προγραμματισμός II