Σημειώσεις όγδοης εβδομάδας

Σχετικά έγγραφα
Σημειώσεις έκτης και έβδομης εβδομάδας

Σημειώσεις ένατης εβδομάδας

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

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

Φροντιςτήριο. Linked-List

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

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

ιαφάνειες παρουσίασης #6 (β)

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Σημειώσεις δεύτερης εβδομάδας

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

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

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

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

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

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

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

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

Διάλεξη 15: Δομές Δεδομένων IV (Διπλά Συνδεδεμένες Λίστες)

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

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

Τύποι Δεδομένων Είσοδος/Έξοδος

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

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Δομές Δεδομένων & Αλγόριθμοι

ιαφάνειες παρουσίασης #9 (α)

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

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

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

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

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

Διάλεξη 22η: Επιπλέον στοιχεία της C

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

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

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

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

{C} Programming. Part 2/2 Advanced Pointers, Structs, Memory Allocation, Examples using structs

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

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

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

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

Δομές δεδομένων (2) Αλγόριθμοι

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

Προγραµµατισµός. Αρχεία

Στοίβες με Δυναμική Δέσμευση Μνήμης

ιαφάνειες παρουσίασης #6 (α)

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

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

Οντοκεντρικός Προγραμματισμός

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

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

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

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

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

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

Συλλογές, Στοίβες και Ουρές

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

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

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

ΕΠΛ232: Εργαστήριο 2

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

scanf() scanf() stdin scanf() printf() int float double %lf float

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

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

Transcript:

Σημειώσεις όγδοης εβδομάδας Για να την δημιουργία σειριακών αρχείων, χρησιμοποιείται η fopen(filename, w ). Το αρχείο δημιουργείται στον ίδιο φάκελο που τρέχει το εκτελέσιμο πρόγραμμα. Το παρακάτω πρόγραμμα, δημιουργεί το αρχείο myaccounts.dat, το οποίο περιέχει έναν ακέραιο, ένα όνομα και ένα float σε κάθε γραμμή, τα οποία διαβάζονται από το πληκτρολόγιο. Για να σταματήσει το πρόγραμμα και να εισαχθεί το EOF από το πληκτρολόγιο, δηλαδή το stdin, σε περιβάλλον Microsoft ο χρήστης πρέπει να πληκτρολογήσει Crtl-Z και enter, ενώ σε περιβάλλον Unix-Linux, Ctrl-D. int main(void){ int account; char name[30]; double balance; FILE *cfptr; if((cfptr=fopen("myaccounts.dat","w"))==null) printf("file could not be opened.\n"); printf("enter account,name,balance.\n"); printf("enter EOF to end input.\n"); scanf("%d%s%lf",&account,name,&balance); while(!feof(stdin)){ fprintf(cfptr,"%d %s %.2f\n", account,name,balance); scanf("%d%s%lf",&account,name,&balance); fclose(cfptr); Για να γραφτεί το αρχείο χρησιμοποιείται η fprintf και για να διαβαστεί η fscanf. Το πρόγραμμα αυτό διαβάζει το αρχείο: int main(void){ int account; char name[30]; double balance; FILE *cfptr; if((cfptr=fopen("myaccounts.dat","r"))==null) printf("file could not be opened.\n"); printf("%-10s%-13s%s\n","account", "Name","Balance"); fscanf(cfptr,"%d%s%lf",&account,name,&balance); Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων Week8 1 costis@teicrete.gr

while(!feof(cfptr)){ printf("%-10d%-13s%7.2f\n", account,name,balance); fscanf(cfptr,"%d%s%lf",&account,name,&balance); fclose(cfptr); Η δομή στοίβας (stack), είναι ειδική μορφή της λίστας, με βασικό χαρακτηριστικό ότι η εισαγωγή και η εξαγωγή κόμβων γίνεται πάντα στην και από την κεφαλή της στοίβας. Οι βασικές λειτουργίες είναι push και pop: /* * Stack Example from Deitel & Deitel */ #include <stdlib.h> struct stacknode { int data; struct stacknode *nextptr; ; typedef struct stacknode StackNode; typedef StackNode* StackNodePtr; void push(stacknodeptr *topptr, int info); int pop(stacknodeptr *topptr); int isempty(stacknodeptr sptr); void printstack(stacknodeptr currentptr); void instructions(void); int main(int argc, char** argv) { StackNodePtr stackptr = NULL; /* Stack top */ int choice; int value; instructions(); scanf("%d", &choice); while (choice!= 3) { switch (choice) { case 1: /* push */ printf("enter a integer: "); scanf("%d", &value); push(&stackptr, value); printstack(stackptr); case 2: /* pop */ if (!isempty(stackptr)) printf("the popped value is: %d.\n", pop(&stackptr)); printstack(stackptr); default: Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων Week8 2 costis@teicrete.gr

printf("invalid choice.\n\n"); instructions(); scanf("%d", &choice); printf("end of run.\n"); return (EXIT_SUCCESS); void instructions(void) { printf("enter your choice:\n" " 1 to push a value on the stack.\n" " 2 to pop a value off the stack.\n" " 3 to end.\n"); void push(stacknodeptr *topptr, int info) { StackNodePtr newptr; newptr=malloc(sizeof(stacknode)); if(newptr!=null) { newptr->data=info; newptr->nextptr=*topptr; *topptr=newptr; else printf("%d not inserted. No " "memory.\n", info); int pop(stacknodeptr *topptr) { StackNodePtr tempptr; int popvalue; tempptr=*topptr; popvalue=(*topptr)->data; *topptr=(*topptr)->nextptr; free(tempptr); return popvalue; int isempty(stacknodeptr topptr) { return topptr == NULL; void printstack(stacknodeptr currentptr) { if (currentptr == NULL) { printf("stack is empty.\n\n"); printf("the stack is:\n"); while (currentptr!= NULL) { printf("%d --> ", currentptr->data); printf("null\n\n"); Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων Week8 3 costis@teicrete.gr

Το παρακάτω παράδειγμα συνδέει δύο λίστες χρησιμοποιώντας συναρτήσεις: /* Concatenate Lists */ /* Deitel & Deitel */ #include <stdlib.h> struct ListNode { char data; struct ListNode *nextptr; ; typedef struct ListNode ListNode; typedef ListNode *ListNodePtr; void concatenate(listnodeptr a, ListNodePtr b); void insert(listnodeptr *sptr, char value); void printlist(listnodeptr currentptr); int main() { ListNodePtr list1ptr = NULL; ListNodePtr list2ptr = NULL; char i; for (i = 'A'; i <= 'C'; i++) { insert(&list1ptr, i); printf("list 1 is: "); printlist(list1ptr); for (i = 'D'; i <= 'F'; i++) { insert(&list2ptr, i); printf("list 2 is: "); printlist(list2ptr); concatenate(list1ptr, list2ptr); printf("the concatenated list is: "); printlist(list1ptr); /* Concatenate two lists */ void concatenate(listnodeptr a, ListNodePtr b) { ListNodePtr currentptr; /* temporary pointer */ currentptr = a; while (currentptr->nextptr!= NULL) { currentptr->nextptr = b; /* concatenate both lists */ /* Insert a new value into the list in sorted order */ void insert(listnodeptr *sptr, char value) { ListNodePtr newptr; Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων Week8 4 costis@teicrete.gr

/* new node */ ListNodePtr previousptr; /* previous node */ ListNodePtr currentptr; /* current node */ /* dynamically allocate memory */ newptr = malloc(sizeof ( ListNode)); /* if newptr does not equal NULL */ if (newptr) { newptr->data = value; newptr->nextptr = NULL; previousptr = NULL; currentptr = *sptr; /* set currentptr to start of list */ /* loop to find correct location in list */ while (currentptr!= NULL && value > currentptr->data) { previousptr = currentptr; /* insert at beginning of list */ if (previousptr == NULL) { newptr->nextptr = *sptr; *sptr = newptr; /* insert node between previousptr and currentptr */ previousptr->nextptr = newptr; newptr->nextptr = currentptr; printf("%c not inserted. No memory available.\n", value); void printlist(listnodeptr currentptr) { if (!currentptr) { printf("list is empty.\n\n"); while (currentptr) { printf("%c ", currentptr->data); printf("*\n\n"); Σημειώσεις Εργαστηρίου Δομών και Αλγορίθμων Week8 5 costis@teicrete.gr