Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. Ο ΑΤΔ ΓΡΑΦΗΜΑ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. Ο ΑΤΔ ΓΡΑΦΗΜΑ"

Transcript

1 1.1 Εισαγωγή 1. Ο ΑΤΔ ΓΡΑΦΗΜΑ Σε προηγούμενα κεφάλαια είδαμε γραμμικές δομές δεδομένων (στοίβα, ουρά, λίστα), στις οποίες κάθε στοιχείο μπορεί να έχει το πολύ ένα επόμενο και το πολύ ένα προηγούμενο, αλλά και μη γραμμική δομή (δένδρο), όπου κάθε στοιχείο μπορεί να έχει περισσότερα του ενός επόμενα στοιχεία αλλά το πολύ ένα προηγούμενο στοιχείο (ιεραρχική δομή). Η γενίκευση της ιεραρχικής δομής επιτυγχάνεται αν επιτραπεί σε κάθε στοιχείο να έχει περισσότερα του ενός προηγούμενα στοιχεία. Ένα γράφημα αποτελεί μια τέτοια δομή όπου κάθε στοιχείο μπορεί να μην έχει κανένα να έχει ένα ή να έχει πολλά προηγούμενα και επόμενα στοιχεία. Στην καθημερινότητα συναντάμε πολύ συχνά την έννοια του γραφήματος. Γράφημα μπορούμε να θεωρήσουμε ένα σύνολο τοποθεσιών που θέλουμε να επισκεφτούμε για παράδειγμα, με τις διαδρομές που ενώνουν τις τοποθεσίες αυτές. Οι λίστες και τα δένδρα πρακτικά αποτελούν πρακτικά υποσύνολα των γραφημάτων αφού μπορούν να αναπαραχθούν από αυτά. Σε πρακτικό επίπεδο στην πληροφορική, τα γραφήματα μπορούν να βοηθήσουν σε πολλούς τομείς, με εκτεταμένη χρήση να υπάρχει στα δίκτυα όπως είναι λογικό αλλά και στο χώρο του web, σε ιστοσελίδες όπου αντιστοιχεί κάθες κόμβος του γραφήματος με μια ιστοσελίδα και κάθε ακμή σε μια υπερσύνδεση από μια σελίδα σε μια άλλη. 1.2 Ορισμός Ο ΑΤΔ Γράφημα ορίζεται ως μια συλλογή ομοίων αντικειμένων με δικτυακή δομή, εκ των οποίων το καθένα μπορεί να συνδέεται με όσα άλλα από τα υπόλοιπα χρειάζεται, με αμφίδρομη ή μονόδρομη σχέση Δεδομένα Ο ΑΤΔ Γράφημα G (V, E) αποτελείται από ένα σύνολο V, μια σχέση E και ένα σύνολο πράξεων που επιδρούν πάνω στα 2 αυτά σύνολα. Το V είναι το σύνολο των κορυφών του γραφήματος ενώ το E το σύνολο των ακμών του γραφήματος Πράξεις Οι βασικές πράξεις του ΑΤΔ Γράφημα είναι: Graph_dimioyrgia: Δημιουργεί ένα κενό γράφημα. Graph_geitoniki: ελέγχει αν 2 κόμβοι του γραφήματος συνδέονται μεταξύ τους με ακμή, εκτός και αν οι κόμβοι ή ένας από τους κόμβους δεν υπάρχει. Graph_enimerosi: αλλάζει τα δεδομένα που είναι αποθηκευμένα σε ένα κόμβο του γραφήματος, εκτός και αν ο κόμβος δεν υπάρχει. Graph_anaktisi: επιστρέφει τα δεδομένα που είναι αποθηκευμένα σε ένα κόμβο του γραφήματος, εκτός και αν κόμβος δεν υπάρχει. Graph_eisagogi_korifis: εισάγει ένα νέο κόμβο στην λίστα των κόμβων του γραφήματος, εκτός και αν δεν υπάρχει χώρος (για τις υλοποιήσεις με λίστα κορυφών και πίνακα). Δ.Μήλιος 1

2 Graph_diagrafi_korifis: διαγράφει ένα κόμβο από την λίστα των κόμβων του γραφήματος, εκτός και αν δεν υπάρχει ο κόμβος. Graph_eisagogi_akmis: εισάγει μια ακμή μεταξύ 2 κόμβων στο γράφημα, εκτός και αν υπάρχει ήδη ή δεν υπάρχουν οι κόμβοι ή ένας από τους 2 κόμβους δεν υπάρχει. Graph_diagrafi_akmis: διαγράφει μια ακμής μεταξύ 2 κόμβων από το γράφημα, εκτός και αν δεν υπάρχει η ακμή ή δεν υπάρχουν οι κόμβοι ή δεν υπάρχει ένας από τους 2 κόμβους. 1.3 Υλοποιήσεις Θα παρουσιαστούν 3 τρόποι υλοποίησης του ΑΤΔ Γράφημα, με πίνακα, με λίστα ακμών και τέλος με λίστα κορυφών. Διευκρινίζεται ότι και στις 3 υλοποιήσεις υπάρχουν υλοποιημένες στα αρχεία Δοκιμής της καθεμιάς υλοποίησης συναρτήσεις για αναζήτηση κατά βάθος και κατά πλάτος του γραφήματος Υλοποίηση 1 η : Υλοποίηση μη Κατευθυνόμενο Γράφημα χωρίς βάρη με πίνακα Σε αυτή την υλοποίηση χρησιμοποιείται μια δομή που περιέχει ένα δισδιάστατο πίνακα για το ρόλο του γειτονικού πίνακα, ένα μονοδιάστατο πίνακα τύπου στοιχείου γραφήματος που αντιστοιχεί στους κόμβους του γραφήματος και αποθηκεύει ότι δεδομένα θέλουμε να βρίσκονται σε κάθε κόμβο και μια μεταβλητή τύπου int που κρατάει τον αριθμό των κόμβων που βρίσκονται στο γράφημα ανά πάσα στιγμή Αρχεία Διεπαφής-Υλοποίησης Στο αρχείο Διεπαφής ορίζεται η δομή που επεξηγήθηκε από πάνω αλλά κυρίως εντοπίζεται το include του τύπου στοιχείου γραφήματος το οποίο δεν περιλαμβάνει συγκεκριμένο μονοπάτι που να προσδιορίζει το αρχείο του τύπου στοιχείου γραφήματος αλλά περιγράφει τον ρόλο του συγκεκριμένου include. Τέλος δηλώνεται και ο μέγιστος αριθμός στοιχείων του γραφήματος. Προφανώς υπάρχουν και οι δηλώσεις των συναρτήσεων-πράξεων του γραφήματοςπράγμα αυτονόητο για ένα αρχείο Διεπαφής, όμως καλό είναι να διευκρινιστεί πως στην συγκεκριμένη υλοποίηση υπάρχει μια extra συνάρτηση-πράξη που δεν έχει αναφερθεί στις βασικές πράξεις και αφορά μόνο την υλοποίηση με πίνακα (δεν έχει υλοποιηθεί στις άλλες 2 υλοποιήσεις). Αυτή η συνάρτηση είναι η Graph_metavatiko_graphima η οποία παίρνει παραμέτρους 2 γραφήματα και κάνει το δεύτερο μεταβατικό γράφημα του πρώτου. Ακολουθεί ο κώδικας του αρχείου Διεπαφής: #ifndef GARRAY #define GARRAY #include "to antistoixo.h typou stoixeiou" /*edo analoga tin efarmogi i to test tou tipou stoixeiou mpainei to antoistixo.h tou tipou stoixeiou */ Δ.Μήλιος 2

3 /*dhlwseis typwn*/ #define PLITHOS 100 typedef int typos_pinaka[plithos][plithos]; typedef TStoixeioyGraph data_arr[plithos]; typedef struct { typos_pinaka geit_pin; /*pinakas geitonikon koryfon*/ data_arr dedomena; /*dedomena kathe korifis tou grafhmatos*/ int ar_koryfon; graphima; /*dhlwseis synarthsewn*/ /*dhmioyrgia*/ void Graph_dimiourgia(graphima *G); /*prakseis elegxoy*/ int Graph_geitoniki(graphima G, int p, int q, int *error); /*prakseis pros8eshs/apomakrynshs*/ void Graph_eisagogi_akmis(graphima *G, int p, int q, int *error); int Graph_diagrafi_akmis(graphima *G, int p, int q, int *error); void Graph_eisagogi_korifis(graphima *G, int *p,tstoixeioygraph stoixeio, int *error); void Graph_diagrafi_korifis(graphima *G, int p, int *error); void Graph_metavatiko_graphima(graphima *A, graphima *P); /*prakseis dedomenwn*/ void Graph_enimerosi(graphima *G, int p, TStoixeioyGraph stoixeio, int *error); void Graph_anaktisi(graphima G, int p, TStoixeioyGraph *val, int *error); #endif /*#ifndef GARRAY */ Ακολουθεί ο κώδικας του αρχείου Υλοποίησης: #include <stdio.h> #include <stdlib.h> #include "Garray.h" /*orismos synarthsewn*/ Δ.Μήλιος 3

4 void Graph_dimiourgia(graphima *G) {/* Pro: kamia * Meta: Dhmioyrgia enos kenoy grafhmatos */ G->ar_koryfon=0; int Graph_geitoniki(graphima G, int p, int q, int *error) {/* Pro: Oi koryfes anhkoyn sto synolo twn koryfwn toy grafhmatos G * Meta: An yparxei akmh apo thn koryfh p sthn q tote h synarthsh epistrefei 1 * diaforetika epistrefei -1 */ *error=0; if ( (p<0) (p>g.ar_koryfon-1) (q<0) (q>g.ar_koryfon-1) )//ektos orion { *error=1; G p->q*/ return -1; return (G.geit_pin[p][q]); /*den apaiteitai allagh gia katey8ynomeno Δ.Μήλιος 4

5 void Graph_eisagogi_akmis(graphima *G, int p, int q, int *error) {/* Pro: Oi koryfes q,p anhkoyn sto synolo twn koryfwn toy grafhmatos G kai h akmh * (p,q) den anhkei sto mh katey8hnomeno grafhma *G * Meta: An h (p,q) den einai akmh toy grafhmatos tote eisagetai sto *G * diaforetika epistrefei error=1 */ *error=0; if ( (p<0) (p>g->ar_koryfon-1) (q<0) (q>(g->ar_koryfon-1)) )//ektos orion { *error=1; return; if (Graph_geitoniki(*G,p,q,error)) //an iparxei idi akmi metaksi auton ton koryfon { *error=1; G p->q*/ return; { *error=0; G->geit_pin[p][q] = 1; G->geit_pin[q][p] = 1;/*afaireitai gia thn ylopoihsh katey8ynomenoy Δ.Μήλιος 5

6 int Graph_diagrafi_akmis(graphima *G, int p, int q, int *error) {/* Pro: H (p,q) einai akmh toy mh katey8ynomenoy grafhmatos *G * Meta: An h (p,q) einai akmh toy grafhmatos tote diagrafetai h (p,q) * apo to *G kai h synarthsh epistrefei 1, diaforetika epistrefei 0 */ *error=0; if ( (p<0) (p>(g->ar_koryfon-1)) (q<0) (q>(g->ar_koryfon-1)) ) { *error=1; return 0; if (!Graph_geitoniki(*G,p,q,error)) G p->q*/ return 0; { *error=0; G->geit_pin[p][q] = 0; G->geit_pin[q][p] = 0;/*afaireitai gia thn ylopoihsh katey8ynomenoy return 1; void Graph_eisagogi_korifis(graphima *G, int *p,tstoixeioygraph stoixeio, int *error) {/* Pro: to grafhma *G den exei megisto plh8os koryfwn * Meta: Eisagetai sto grafhma *G h koryfh G->arkrfon xwris ayth na synde8ei me tis * alles koryfes, o *p ginetai isos me aythn */ int i; *error=0; if (G->ar_koryfon == PLITHOS) //ksepernaei to megisto plithos stoixeion { *error=1; return; { (G->ar_koryfon)++; *p = G->ar_koryfon -1; /*Teleytaia koryfh*/ for (i=0;i<=*p;i++) { G->geit_pin[*p][i]= 0; /*Nea grammh*/ G->geit_pin[i][*p]= 0; /*Nea sthlh*/ TSgraph_setValue(&(G->dedomena[*p]), stoixeio); Δ.Μήλιος 6

7 void Graph_diagrafi_korifis(graphima *G, int p, int *error) {/* Pro: H koryfh p anhkein sto synolo twn koryfwn toy grafhmatos *G * Meta: An h koryfh p anhkein sto synolo twn koryfwn toy grafhmatos *G, * tote ayth diagrafetai ka8ws kai oles oi akmes poy thn periexoyn. * Meta apo aytes tis diagrafes to grafhma exei ws koryfes toy tis * 0,1,..., G->arkrfon-1 */ int i,j; *error=0; if ( (p<0) (p>(g->ar_koryfon-1)) )//ektos orion { *error=1; return; { /*metakinhsh ths i+1 grammhs pros ta panw*/ for (i=p;i<=(g->ar_koryfon - 2);i++) for (j=0;j<=(g->ar_koryfon - 1);j++) G->geit_pin[i][j] = G->geit_pin[i+1][j]; /*metakinhsh ths i+1 sthlhs pros ta aristera*/ for (i=p;i<=(g->ar_koryfon - 2);i++) for (j=0;j<=(g->ar_koryfon- 2);j++) G->geit_pin[j][i] = G->geit_pin[j][i+1]; /*metakinhsh twn dedomenwn pros ta aristera*/ for (i=p;i<=(g->ar_koryfon- 2);i++) TSgraph_setValue(&(G->dedomena[i]), G->dedomena[i+1]); G->ar_koryfon--; Δ.Μήλιος 7

8 void Graph_metavatiko_graphima(graphima *A,graphima *P) {/* Pro: Dhmioyrgia toy grafhmatos A * Meta: To grafhma P einai to metabatiko grafhma toy A */ int i,j,k; typos_pinaka PP; for(i=0;i<=(a->ar_koryfon-1);i++) for(j=0;j<=(a->ar_koryfon-1);j++) (P->geit_pin)[i][j]=(A->geit_pin)[i][j]; for(k=0;k<=(a->ar_koryfon-1);k++) { for(i=0;i<=(a->ar_koryfon-1);i++) for(j=0;j<=(a->ar_koryfon-1);j++) PP[i][j] = (P->geit_pin)[i][j]; for(i=0;i<=(a->ar_koryfon-1);i++) if (PP[i][k]) for(j=0;j<=(a->ar_koryfon-1);j++) if (PP[k][j]) (P->geit_pin)[i][j] = 1; void Graph_enimerosi(graphima *G, int p, TStoixeioyGraph stoixeio, int *error) {/* Pro: Dhmioyrgia toy grafhmatos G * Meta: Enimerosi tis korifis pou deixnei to "p" me tin timi tou "stoixeio" */ *error=0; if ( (p<0) (p>g->ar_koryfon-1) ) //ektos orion { *error=1; return; TSgraph_setValue(&(G->dedomena[p]), stoixeio); Αρχεία Δοκιμής Στα αρχεία δοκιμής περιλαμβάνεται το αρχείο main που χρησιμοποιείται ως αρχείο test για τις πράξεις της ATΔ Γραφήμα. Στο αρχείο main περιλαμβάνονται και οι συναρτήσεις: Δ.Μήλιος 8

9 episkepsi, vathos, diadromi_v, platos, diadromi_p. Έχει αναφερθεί ήδη πιο πάνω πως και οι 3 Υλοποιήσεις που υπάρχουν σε αυτό το κεφάλαιο δίνουν την δυνατότητα στο χρήστη να κάνει αναζήτηση κατά βάθος και κατά πλάτος, για αυτό το σκοπό υπάρχουν οι 4 τελευταίες συναρτήσεις ενώ η episkepsi απλά εκτυπώνει τα περιεχόμενα του κόμβου του οποίου τον δείκτη παίρνει παράμετρο. Όμως για να υλοποιηθεί συγκεκριμένα η αναζήτηση κατά πλάτος χρησιμοποιούνται και πράξεις του ΑΤΔ Ουρά και συγκεκριμένα στις 3 Υλοποίησεις που παρουσιάζονται γίνεται χρήση των πράξεων της ουράς με κενό (gap). Έτσι στα αρχεία Δοκιμής περιλαμβάνονται και τα αρχεία Υλοποίησης-Διεπαφής του τύπου στοιχείου Ουράς (int) και τα αρχεία Υλοποίησης-Διεπαφής της υλοποίησης της ουράς με κενό (για τον κώδικα των αρχείων αυτών ανατρέχτε στο 4 ο κεφάλαιο στις ενότητες και ) Ακολουθεί ο κώδικας του αρχείου δοκιμής: void print_options(void); void episkepsi(graphima G,int i); void vathos(graphima G); void diadromi_v(graphima G, int i,int episk[]); void platos(graphima G); void diadromi_p(graphima G, int k,int episk[]); TOuras oura_korifon; int main(void) { int option, i, j,created,out_err; graphima G, A; int p, q, error, apot; TStoixeioyGraph x; error=0; created=0; do{ print_options(); scanf("%d", &option); switch(option) {case 1: case 2: Graph_dimiourgia(&G); created=1; printf("to grafhma dimiourgithike!\n"); { printf("\nden uparxei grafima gia na elegxthei ama iparxoun geitonikes korifes!\n"); Δ.Μήλιος 9

10 tou!\n"); printf("dwse ton ari8mo ths prwths koryfhs: "); scanf("%d", &p); printf("dwse ton ari8mo ths deyterhs koryfhs: "); scanf("%d", &q); apot=graph_geitoniki(g, p, q, &error); if(error) { printf("\nerror! La8os ari8mos koryfhs!\n"); case 3: { if(apot) printf("oi koryfes einai geitonikes!\n"); printf("oi koryfes DEN einai geitonikes!\n"); { printf("\nden uparxei grafima gia na enimerothei kapoia koryfh printf("dwse ton ari8mo ths koryfhs pou 8es na enhmerwseis: "); scanf("%d", &p); printf("dwse ena stoixeio gia na eisax8ei sthn koryfh: "); out_err=tsgraph_readvalue(stdin,&x); if(!out_err) {printf("\n error stin readvalue!\n"); Graph_enimerosi(&G, p, x, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); printf("h koryfh enhmerothike!\n"); case 4: { printf("\nden uparxei grafima gia na parthoun ta dedomena apo kapoia koryfh tou!\n"); printf("dwse ton ari8mo ths koryfhs pou 8es ta dedomena: "); Δ.Μήλιος 10

11 scanf("%d", &p); Graph_anaktisi(G, p, &x, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); { out_err=tsgraph_writevalue(stdout,x); if(out_err <0) {printf("\n error stin writevalue!\n"); case 5: { printf("\nden uparxei grafima gia na diagrafei kapoia koryfh tou!\n"); printf("dwse ton ari8mo ths koryfhs pou 8es na diagrapseis: "); scanf("%d", &p); Graph_diagrafi_korifis(&G, p, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); printf("h koryfh diagrafhke!\n"); case 6: { printf("\nden uparxei grafima gia na diagrafei kapoia akmh tou!\n"); printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros diagrafh: "); scanf("%d", &p); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros diagrafh: "); scanf("%d", &q); apot=graph_diagrafi_akmis(&g, p, q, &error); if(error) {printf("\nerror! La8os ari8mos koryfhs!\n"); { if(apot) Δ.Μήλιος 11

12 !\n");!\n"); "); "); printf("h akmh diagrafhke!\n"); printf("den yparxei ayth h akmh!\n"); case 7: { printf("\nden uparxei grafima gia na eisaxthei kapoia koryfh printf("dwse ena stoixeio gia na eisax8ei sth nea koryfh: "); out_err=tsgraph_readvalue(stdin,&x); if(!out_err) { printf("\n error stin readvalue!\n"); Graph_eisagogi_korifis(&G, &p,x,&error); if(error) printf("\nerror! Den yparxei mnhmh!\n"); { printf("eishx8h h koryfh me dedomena "); out_err=tsgraph_writevalue(stdout,x); if(out_err <0) {printf("\n error stin writevalue!\n"); case 8: { printf("\nden uparxei grafima gia na eisaxthei kapoia akmh printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros eisagwgh: scanf("%d", &p); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros eisagwgh: scanf("%d", &q); Graph_eisagogi_akmis(&G, p, q, &error); if(error) Δ.Μήλιος 12

13 hdh!\n"); case 9: printf("\nerror! La8os ari8mos koryfhs 'h h akmh yparxei printf("h akmh eishx8h!\n"); { printf("\nden uparxei grafima gia na dimiourgithei metavatiko grafima pano se auto!\n"); G\n"); Graph_metavatiko_graphima(&G, &A); printf("\nto grafhma A einai twra to metavatiko grafhma toy case 10: { printf("\nden uparxei grafima gia na ektipothei o geitonikos tou pinakas!\n");!\n");!\n"); for(i=0;i<g.ar_koryfon;i++) { printf("\n"); case 11: for(j=0;j<g.ar_koryfon;j++) printf("%d ", G.geit_pin[i][j]); { printf("\nden uparxei grafima gia ginei anazitisi kata vathos vathos(g); case 12: { printf("\nden uparxei grafima gia ginei anazitisi kata platos platos(g); Δ.Μήλιος 13

14 while(option); return 0; void print_options(void) { printf("\n\n1. Dhmioyrgia grafhmatos\n\ 2. Elegxos geitonikwn koryfwn\n\ 3. Enhmerwsh dedomenwn koryfhs\n\ 4. Anakthsh dedomenwn koryfhs\n\ 5. Diagrafh koryfhs\n\ 6. Diagrafh akmhs\n\ 7. Eisagwgh koryfhs\n\ 8. Eisagwgh akmhs\n\ 9. Dhmioyrgia metavatikoy grafhmatos\n\ 10.Ektypwsh geitonikou pinaka\n\ 11:Anazhthsh prwta kata ba8os\n\ 12:Anazhthsh prwta kata platos\n\ Dwste thn epilogh sas(1-12, 0 gia eksodo):"); void episkepsi(graphima G,int i) { int error; TStoixeioyGraph x; Graph_anaktisi(G, i, &x, &error); TSgraph_writeValue(stdout,x); /*kata ba8os anazhthsh*/ void vathos(graphima G) {/* Pro: Dhmioyrgia toy grafhmatos G * Meta: H synarthsh diadromi paragei thn prwta kata ba8os anazhthsh twn koryfwn */ int episkeftike[plithos]; int i; for(i=0;i<=g.ar_koryfon-1;i++) episkeftike[i] = 0; for (i=0;i<=g.ar_koryfon-1;i++) if (!episkeftike[i]) Δ.Μήλιος 14

15 diadromi_v(g,i,episkeftike); void diadromi_v(graphima G, int i,int episk[]) {/* Pro: i einai mia koryfh toy grafhmatos * Meta: H episkepsh ths koryfhs i kai twn geitonikwn ths exei teleiwsei me thn * anazhthsh prwta kata ba8os. */ int j,error; error=0; episkepsi(g,i); /*episkepsh ths i koryfhs*/ episk[i]=1; for(j=0;j<=g.ar_koryfon-1;j++) if (Graph_geitoniki(G,i,j,&error) && (!episk[j])) diadromi_v(g,j,episk); void platos(graphima G) {/* Pro: Dhmioyrgia toy grafhmatos G * Meta: H synarthsh diadromi paragei thn prwta kata platos anazhthsh twn koryfwn */ int episkeftike[plithos]; int i; for(i=0;i<=g.ar_koryfon-1;i++) episkeftike[i] = 0; Oyra_dimiourgia(&oura_korifon); for (i=0;i<=g.ar_koryfon-1;i++) if (!episkeftike[i]) diadromi_p(g,i,episkeftike); void diadromi_p(graphima G, int k,int episk[]) {/* Pro: i einai mia koryfh toy grafhmatos * Meta: Ektelesthke h prwta kata platos * diadromh h opoia arxise apo thn koryfh k toy grafhmatos */ int w,i, error; error=0; episk[k] = 1; Δ.Μήλιος 15

16 Oyra_prosthesi(&oura_korifon,k,&error); while (!Oyra_keni(oura_korifon)) { Oyra_apomakrynsh(&oura_korifon,&i,&error); episkepsi(g,i); for(w=0;w<=g.ar_koryfon-1;w++) if (Graph_geitoniki(G,i,w,&error) && (!episk[w])) { episk[w] = 1; Oyra_prosthesi(&oura_korifon,w,&error); ενώ τα αρχεία Διεπαφής-Υλοποίησης, εκτός πάντα του path για τον τύπο στοιχείου, ίδια με τα πρότυπα αρχεία Εφαρμογές Η μόνη εφαρμογή που θα δούμε για την υλοποίηση με πίνακα είναι αυτή της εφαρμογής του αλγορίθμου του Dijkstra Dijkstra O Dijkstra εφαρμόζεται σε κατευθυνόμενο γράφημα με βάρη οπότε έχουν τροποποιηθεί όπου χρειάζεται οι συναρτήσεις πράξεις του ΑΤΔ Γράφημα για να υποστηρίξουν το ότι γίνεται αναφορά σε κατευθυνόμενο γράφημα και με βάρη (η υλοποίηση ήταν μη κατευθυνόμενο και χωρίς βάρη). Ο αλγόριθμος του Dijkstra δηλώνεται και υλοποιείται ως συνάρτηση στο αρχείο main της εφαρμογής. Η εφαρμογή αυτή κάνει χρήση και του ΑΤΔ Σύνολο που δεν έχει μελετηθεί στην παρούσα εργασία αλλά κατ εξαίρεση για αυτή την εφαρμογή χρησιμοποιούνται τα αρχεία Διεπαφής-Υλοποίησης της. Ακολουθεί ο κώδικας του αρχείου Εφαρμογής: #include <stdio.h> #include "Garray_Kat.h" #include "TStoixeioyGraph.h" #include "Set.h" void print_options(void); void Dijkstra(graphima G,int korifi,int * error); #define INFINITY int main(void) { int option, i, j,out_err,created; typos_varoys var; Δ.Μήλιος 16

17 graphima G, A; int p, q, error, apot; TStoixeioyGraph x; created=0; error=0; var=0; do{ print_options(); scanf("%d", &option); switch(option) {case 1: case 2: Graph_dimiourgia(&G); created=1; printf("to grafhma dimiourgithike!\n"); { printf("\nden uparxei grafima gia na elegxthei ama iparxoun geitonikes korifes!\n"); tou!\n"); printf("dwse ton ari8mo ths prwths koryfhs: "); scanf("%d", &p); printf("dwse ton ari8mo ths deyterhs koryfhs: "); scanf("%d", &q); apot=graph_geitoniki(g, p, q, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); { if(apot) case 3: printf("oi koryfes einai geitonikes!\n"); printf("oi koryfes DEN einai geitonikes!\n"); { printf("\nden uparxei grafima gia na enimerothei kapoia koryfh printf("dwse ton ari8mo ths koryfhs pou 8es na enhmerwseis: "); Δ.Μήλιος 17

18 scanf("%d", &p); printf("dwse ena stoixeio gia na eisax8ei sthn koryfh: "); out_err=tsgraph_readvalue(stdin,&x); if(!out_err) { printf("\n error stin readvalue!\n"); Graph_enimerosi(&G, p, x, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); case 4: printf("h koryfh enhmerothike!\n"); { printf("\nden uparxei grafima gia na parthoun ta dedomena apo kapoia koryfh tou!\n"); tou!\n"); printf("dwse ton ari8mo ths koryfhs pou 8es ta dedomena: "); scanf("%d", &p); Graph_anaktisi(G, p, &x, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); {out_err=tsgraph_writevalue(stdout,x); if(out_err <0) { printf("\n error stin writevalue!\n"); case 5: { printf("\nden uparxei grafima gia na diagrafei kapoia koryfh printf("dwse ton ari8mo ths koryfhs pou 8es na diagrapseis: "); scanf("%d", &p); Graph_diagrafi_korifis(&G, p, &error); if(error) Δ.Μήλιος 18

19 !\n"); "); ");!\n"); printf("\nerror! La8os ari8mos koryfhs!\n"); printf("h koryfh diagrafhke!\n"); case 6: { printf("\nden uparxei grafima gia na diagrafei kapoia akmh tou printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros diagrafh: scanf("%d", &p); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros diagrafh: scanf("%d", &q); apot=graph_diagrafi_akmis(&g, p, q, &error); if(error) printf("\nerror! La8os ari8mos koryfhs!\n"); {if(apot) printf("h akmh diagrafhke!\n"); printf("den yparxei ayth h akmh!\n"); case 7: { printf("\nden uparxei grafima gia na eisaxthei kapoia koryfh printf("dwse ena stoixeio gia na eisax8ei sth nea koryfh: "); out_err=tsgraph_readvalue(stdin,&x); if(!out_err) { printf("\n error stin readvalue!\n"); Graph_eisagogi_korifis(&G, &p,x,&error); if(error) printf("\nerror! Den yparxei mnhmh!\n"); { printf("eishx8h h koryfh me dedomena "); Δ.Μήλιος 19

20 !\n"); "); "); hdh!\n"); case 8: out_err=tsgraph_writevalue(stdout,x); if(out_err <0) {printf("\n error stin writevalue!\n"); { printf("\nden uparxei grafima gia na eisaxthei kapoia akmh printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros eisagwgh: scanf("%d", &p); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros eisagwgh: scanf("%d", &q); printf("dwse to baros ths akmhs pros eisagwgh: "); scanf("%d", &var); Graph_eisagogi_akmis(&G, p, q, var, &error); if(error) printf("\nerror! La8os ari8mos koryfhs 'h h akmh yparxei printf("h akmh eishx8h!\n"); case 9: { printf("\nden uparxei grafima gia na dimiourgithei metavatiko grafima pano se auto!\n"); G!\n"); Graph_metavatiko_graphima(&G, &A); printf("\nto grafhma A einai twra to metavatiko grafhma toy case 10: { printf("\nden uparxei grafima gia na ektipothei o geitonikos tou pinakas!\n"); Δ.Μήλιος 20

21 for(i=0;i<g.ar_koryfon;i++) { printf("\n"); case 11: for(j=0;j<g.ar_koryfon;j++) printf("%3d ", G.geit_pin[i][j]); { printf("\nden uparxei grafima gia na efarmostei se kapoia korifi tou o Dijkstra!\n"); printf("dwse ton ari8mo ths koryfhs sthn opoia tha efarmostei o Dijkstra: "); scanf("%d", &p); Dijkstra(G,p,&error); if(error) while(option); return 0; printf("\nerror! La8os ari8mos koryfhs!\n"); void print_options(void) { printf("\n\n1. Dhmioyrgia grafhmatos\n\ 2. Elegxos geitonikwn koryfwn\n\ 3. Enhmerwsh dedomenwn koryfhs\n\ 4. Anakthsh dedomenwn koryfhs\n\ 5. Diagrafh koryfhs\n\ 6. Diagrafh akmhs\n\ 7. Eisagwgh koryfhs\n\ 8. Eisagwgh akmhs\n\ 9. Dhmioyrgia metavatikoy grafhmatos\n\ 10.Ektypwsh geitonikou pinaka\n\ 11.Efarmogh algori8moy Dijkstra\n\n\ Dwste thn epilogh sas(1-11, 0 gia eksodo):"); Δ.Μήλιος 21

22 void Dijkstra(graphima G,int korifi,int * error) { /* * Pro: To G einai katey8ynomeno grafhma me barh * Meta: Eyresh toy syntomoteroy monopatipy apo thn koryfh 0 toy grafhmatos * G pros ka8e allh koryfh toy kai epistrofh toy apotelesmatos ston */ * pinaka D typos_synolou S; /*to synolo eidikwn koryfwn*/ int i,j,w; int elaxisti_apostasi, apost_w_j; int apostasi[plithos]; int monopati[plithos]; w=infinity; *error=0; if ( (korifi<0) (korifi>g.ar_koryfon-1) ) { *error=1; return; ESdimiourgia(S); ESeisagogi(korifi,S); /*Arxikes times gia ta syntomotera monopatia efoson yparxoyn akmes apo thn koryfh 0*/ for(j=0;j<=g.ar_koryfon-1 ;j++) { if(j!=korifi) {if (G.geit_pin[korifi][j] == 0) { { apostasi[j] = INFINITY; monopati[j] = -1; apostasi[j] = G.geit_pin[korifi][j]; monopati[j] = korifi; Δ.Μήλιος 22

23 for(i=0;i<=g.ar_koryfon-1;i++) { if(i!=korifi) {/*epilogh mias koryfhs w apo to V-S tetoia wste apostasi[w]=min*/ elaxisti_apostasi = INFINITY; for(j=0,j!=korifi;j<=g.ar_koryfon-1;j++) { if(j!=korifi) { if ((!ESmelos(j,S))&&(0<apostasi[j])&&(apostasi[j]<elaxisti_apostasi)) { { elaxisti_apostasi = apostasi[j]; w = j; /*pros8esh ths w sto S*/ if(eseisagogi(w,s)) /*enhmerwsh twn timwn gia ton pinaka apostasi*/ for(j=0,j!=korifi;j<=g.ar_koryfon-1;j++) { if(j!=korifi) { if(g.geit_pin[w][j]==0) apost_w_j=infinity; apost_w_j=g.geit_pin[w][j]; if ((!ESmelos(j,S))&&((apostasi[w]+apost_w_j)<apostasi[j])) { apostasi[j] = apostasi[w]+apost_w_j; monopati[j] = w; printf("\n\neyresh syntomoteroy monopatioy"); printf("\nkoryfh-mhkos Monopatioy-Prohgoymenh\n"); for(i=0;i<=g.ar_koryfon-1;i++) Δ.Μήλιος 23

24 { if(i!=korifi) printf("%6d %17d %11d\n",i,apostasi[i],monopati[i]); Ακολουθεί ο κώδικας του αρχείου Διεπαφής του ΑΤΔ Σύνολο: #ifndef SET #define SET /*dhlwseis typwn*/ #define min_stoixeio 1 #define max_stoixeio 100 #define megisto_plithos max_stoixeio-min_stoixeio+1 typedef int typos_synolou[megisto_plithos]; /*dhlwseis synarthsewn*/ void ESdimiourgia (typos_synolou synolo); void ESkatholiko (typos_synolou synolo); int ESeisagogi (int stoixeio, typos_synolou synolo); int ESdiagrafi (int stoixeio, typos_synolou synolo); int ESmelos (int stoixeio, typos_synolou synolo); int ESkeno_synolo int ESisa_synola int ESyposynolo (typos_synolou synolo); (typos_synolou s1, typos_synolou s2); (typos_synolou s1, typos_synolou s2); void ESenosi_synolou enosi); void EStomi_synolou tomi); (typos_synolou s1, typos_synolou s2, typos_synolou (typos_synolou s1, typos_synolou s2, typos_synolou void ESdiafora_synolou(typos_synolou s1, typos_synolou s2, typos_synolou diafora); #endif /*#ifndef SET */ Ακολουθεί ο κώδικας του αρχείου Υλοποίησης του ΑΤΔ Σύνολο: #include <stdio.h> Δ.Μήλιος 24

25 #include <stdlib.h> #include "Set.h" /*orismos synarthsewn*/ /**************************************************************************** ** Skopos: Dhmioyrgia synolwn ***************************************************************************** */ void ESdimiourgia(typos_synolou synolo) /*Dhmioyrgei ena keno synolo*/ { int i; for (i=min_stoixeio;i<=max_stoixeio;i++) ESdiagrafi(i, synolo); void ESkatholiko(typos_synolou synolo) /*Dhmioyrgei to ka8oliko synolo*/ { int i; for (i=min_stoixeio;i<=max_stoixeio;i++) ESeisagogi(i,synolo); /**************************************************************************** ** Skopos : Prakseis panw sto synolo Dexontai : ena stoixeio kai ena synolo Epistrefoyn : >0 (true) sthn periptwsh epityxias kai 0 diaforetika ***************************************************************************** */ int ESeisagogi(int stoixeio, typos_synolou synolo) /*Eisagwgh enos stoixeioy sto synolo*/ { if ( ( min_stoixeio<= stoixeio )&&( stoixeio<=max_stoixeio ) ) { synolo[stoixeio-min_stoixeio]=1; return 1; Δ.Μήλιος 25

26 return 0; int ESdiagrafi(int stoixeio, typos_synolou synolo) /*Diagrafh enos stoixeioy apo to synolo*/ { if ( (min_stoixeio <= stoixeio) && (stoixeio <= max_stoixeio) ) { synolo[stoixeio-min_stoixeio]=0; return 1; return 0; int ESmelos(int stoixeio, typos_synolou synolo) /*Elegxei an ena stoixeio einai melos toy synoloy*/ { if ( (min_stoixeio <= stoixeio) && (stoixeio <= max_stoixeio) ) return synolo[stoixeio-min_stoixeio]; return 0; /**************************************************************************** ** Skopos Dexontai : synola Epistrefoyn : Sxeseis, elegxoi synolwn : 1(true)/0(false) ***************************************************************************** */ int ESkeno_synolo(typos_synolou synolo) /*Elexgei an ena synolo einai keno*/ { int i; for(i = min_stoixeio; i<=max_stoixeio; i++) { if (ESmelos(i,synolo)) return 0; return 1; Δ.Μήλιος 26

27 int ESisa_synola(typos_synolou s1, typos_synolou s2) /*Elegxei an dyo synola einai isa*/ { int i; for(i = min_stoixeio; i<=max_stoixeio; i++) { if ( ESmelos(i,s1)!= ESmelos(i,s2) ) return 0; /*kapoio stoixeio den einai koino*/ return 1; int ESyposynolo(typos_synolou s1,typos_synolou s2) /*Elegxei an ena synolo einai yposynolo enos alloy*/ { int i; for(i = min_stoixeio; i<=max_stoixeio; i++) { if ( ESmelos(i,s1) &&!ESmelos(i,s2) ) return 0; /*false*/ return 1; /**************************************************************************** ** Skopos Dexontai : dyo synola Epistrefoyn : Prakseis metaksy synolwn : ena synolo ***************************************************************************** */ void ESenosi_synolou(typos_synolou s1,typos_synolou s2,typos_synolou enosi) /*Dhmioyrgei thn enwsh 2 synolwn*/ { int i; for (i=min_stoixeio;i<=max_stoixeio;i++) enosi[i-min_stoixeio] = ESmelos(i,s1) ESmelos(i,s2); Δ.Μήλιος 27

28 void EStomi_synolou(typos_synolou s1,typos_synolou s2,typos_synolou tomi) /*Dhmioyrgei thn tomh 2 synolwn*/ { int i; ESkeno_synolo(tomi); for (i=min_stoixeio;i<=max_stoixeio;i++) tomi[i-min_stoixeio] = ESmelos(i,s1) && ESmelos(i,s2); void ESdiafora_synolou(typos_synolou s1,typos_synolou s2,typos_synolou diafora) /*Dhmioyrgei th diafora 2 synolwn*/ { int i; for (i=min_stoixeio;i<=max_stoixeio;i++) diafora[i-min_stoixeio] = ESmelos(i,s1) &&!ESmelos(i,s2); Ακολουθεί ο κώδικας του αρχείου Διεπαφής του ΑΤΔ κατευθυνόμενο Γράφημα με βάρη: #ifndef GARRAY #define GARRAY #include "TStoixeioyGraph.h" /*dhlwseis typwn*/ #define PLITHOS 100 typedef int typos_pinaka[plithos][plithos]; typedef TStoixeioyGraph data_arr[plithos]; typedef struct { typos_pinaka geit_pin; /*pinakas geitonikon koryfon*/ data_arr dedomena; /*dedomena kathe korifis tou grafhmatos*/ int ar_koryfon; graphima; typedef int typos_varoys; Δ.Μήλιος 28

29 /*dhlwseis synarthsewn*/ /*dhmioyrgia*/ void Graph_dimiourgia(graphima *G); /*prakseis elegxoy*/ int Graph_geitoniki(graphima G, int p, int q, int *error); /*prakseis pros8eshs/apomakrynshs*/ void Graph_eisagogi_akmis(graphima *G, int p, int q, typos_varoys varos, int *error); int Graph_diagrafi_akmis(graphima *G, int p, int q, int *error); void Graph_eisagogi_korifis(graphima *G, int *p,tstoixeioygraph stoixeio, int *error); void Graph_diagrafi_korifis(graphima *G, int p, int *error); void Graph_metavatiko_graphima(graphima *A, graphima *P); /*prakseis dedomenwn*/ void Graph_enimerosi(graphima *G, int p, TStoixeioyGraph stoixeio, int *error); void Graph_anaktisi(graphima G, int p, TStoixeioyGraph *val, int *error); #endif /*#ifndef GARRAY */ Ακολουθεί ο κώδικας του αρχείου Υλοποίησης του ΑΤΔ κατευθυνόμενο Γράφημα με βάρη: #include <stdio.h> #include <stdlib.h> #include "Garray_Kat.h" /*orismos synarthsewn*/ void Graph_dimiourgia(graphima *G) {/* Pro: kamia * Meta: Dhmioyrgia enos kenoy grafhmatos */ G->ar_koryfon=0; Δ.Μήλιος 29

30 int Graph_geitoniki(graphima G, int p, int q, int *error) {/* Pro: Oi koryfes anhkoyn sto synolo twn koryfwn toy grafhmatos G * Meta: An yparxei akmh apo thn koryfh p sthn q tote h synarthsh epistrefei 1 * diaforetika epistrefei -1 */ *error=0; if ( (p<0) (p>g.ar_koryfon-1) (q<0) (q>g.ar_koryfon-1) )//ektos orion { *error=1; G p->q*/ return -1; return (G.geit_pin[p][q]); /*den apaiteitai allagh gia katey8ynomeno void Graph_eisagogi_akmis(graphima *G, int p, int q, typos_varoys varos, int *error) {/* Pro: Oi koryfes q,p anhkoyn sto synolo twn koryfwn toy grafhmatos G kai h akmh * (p,q) den anhkei sto mh katey8hnomeno grafhma *G * Meta: An h (p,q) den einai akmh toy grafhmatos tote eisagetai sto *G * diaforetika epistrefei error=1 */ *error=0; if ( (p<0) (p>g->ar_koryfon-1) (q<0) (q>g->ar_koryfon-1) ) //ektos orion { *error=1; return; if (Graph_geitoniki(*G,p,q,error)) //an iparxei idi akmi metaksi auton ton koryfon { *error=1; return; { *error=0; G->geit_pin[p][q] = varos; /*G->geit_pin[q][p] = 1;*/ /*afaireitai gia thn ylopoihsh katey8ynomenoy G p->q*/ Δ.Μήλιος 30

31 int Graph_diagrafi_akmis(graphima *G, int p, int q, int *error) {/* Pro: H (p,q) einai akmh toy mh katey8ynomenoy grafhmatos *G * Meta: An h (p,q) einai akmh toy grafhmatos tote diagrafetai h (p,q) * apo to *G kai h synarthsh epistrefei 1, diaforetika epistrefei 0 */ *error=0; if ( (p<0) (p>g->ar_koryfon-1) (q<0) (q>g->ar_koryfon-1) ) //ektos orion { *error=1; return 0; if (!Graph_geitoniki(*G,p,q,error)) //an den iparxei akmi return 0; { *error=0; G->geit_pin[p][q] = 0; /*G->geit_pin[q][p] = 0;*/ /*afaireitai gia thn ylopoihsh katey8ynomenoy G p->q*/ return 1; Δ.Μήλιος 31

32 void Graph_eisagogi_korifis(graphima *G, int *p,tstoixeioygraph stoixeio, int *error) {/* Pro: to grafhma *G den exei megisto plh8os koryfwn * Meta: Eisagetai sto grafhma *G h koryfh G->arkrfon xwris ayth na synde8ei me tis * alles koryfes, o *p ginetai isos me aythn */ int i; *error=0; if (G->ar_koryfon == PLITHOS) //an kseperna to megisto plithos stoixeion { *error=1; return; { (G->ar_koryfon)++; *p = G->ar_koryfon -1; /*Teleytaia koryfh*/ for (i=0;i<=*p;i++) { G->geit_pin[*p][i]= 0; /*Nea grammh*/ G->geit_pin[i][*p]= 0; /*Nea sthlh*/ TSgraph_setValue(&(G->dedomena[*p]), stoixeio); Δ.Μήλιος 32

33 void Graph_diagrafi_korifis(graphima *G, int p, int *error) {/* Pro: H koryfh p anhkein sto synolo twn koryfwn toy grafhmatos *G * Meta: An h koryfh p anhkein sto synolo twn koryfwn toy grafhmatos *G, * tote ayth diagrafetai ka8ws kai oles oi akmes poy thn periexoyn. * Meta apo aytes tis diagrafes to grafhma exei ws koryfes toy tis * 0,1,..., G->arkrfon-1 */ int i,j; *error=0; if ( (p<0) (p>g->ar_koryfon-1) )//ektos orion { *error=1; return; { /*metakinhsh ths i+1 grammhs pros ta panw*/ for (i=p;i<=g->ar_koryfon - 2;i++) for (j=0;j<=g->ar_koryfon - 1;j++) G->geit_pin[i][j] = G->geit_pin[i+1][j]; /*metakinhsh ths i+1 sthlhs pros ta aristera*/ for (i=p;i<=g->ar_koryfon - 2;i++) for (j=0;j<=g->ar_koryfon - 2;j++) G->geit_pin[j][i] = G->geit_pin[j][i+1]; /*metakinhsh twn dedomenwn pros ta aristera*/ for (i=p;i<=g->ar_koryfon - 2;i++) TSgraph_setValue(&(G->dedomena[i]), G->dedomena[i+1]); G->ar_koryfon--; Δ.Μήλιος 33

34 void Graph_metavatiko_graphima(graphima *A,graphima *P) {/* Pro: Dhmioyrgia toy grafhmatos A * Meta: To grafhma P einai to metabatiko grafhma toy A */ int i,j,k; typos_pinaka PP; for(i=0;i<=(a->ar_koryfon-1);i++) for(j=0;j<=plithos-1;j++) (P->geit_pin)[i][j]=(A->geit_pin)[i][j]; for(k=0;k<=(a->ar_koryfon-1);k++) { for(i=0;i<=(a->ar_koryfon-1);i++) for(j=0;j<=(a->ar_koryfon-1);j++) PP[i][j] = (P->geit_pin)[i][j]; for(i=0;i<=(a->ar_koryfon-1);i++) if (PP[i][k]) for(j=0;j<=(a->ar_koryfon-1);j++) if (PP[k][j]) (P->geit_pin)[i][j] = 1; Δ.Μήλιος 34

35 void Graph_enimerosi(graphima *G, int p, TStoixeioyGraph stoixeio, int *error) {/* Pro: Dhmioyrgia toy grafhmatos G * Meta: Enimerosi tis korifis pou deixnei to "p" me tin timi tou "stoixeio" */ int out_err; *error=0; if ( (p<0) (p>g->ar_koryfon-1) ) //ektos orion { *error=1; return; TSgraph_setValue(&(G->dedomena[p]), stoixeio); void Graph_anaktisi(graphima G, int p, TStoixeioyGraph *val, int *error) {/* Pro: Dhmioyrgia toy grafhmatos G * Meta: Anaktisi ton dedomenon tis korifis pou deixnei to "p" stin timi "val" */ *error=0; if ( (p<0) (p>g.ar_koryfon-1) ) //ektos orion *error=1; TSgraph_setValue(val, G.dedomena[p]); Υλοποίηση 2 η : Υλοποίηση μη Κατευθυνόμενο Γράφημα χωρίς βάρη με λίστα ακμών Στην υλοποίηση αυτή έχουμε μια λίστα κόμβων του γραφήματος (korifi) όπου κάθε κόμβος εξυπηρετεί και σαν κεφαλή για μια λίστα ακμών που συνδέονται με τον συγκεκριμένο κόμβο. Κάθε κόμβος ακμής (akmi) περιέχει 2 δείκτες. Ένα προς τον επόμενο κόμβο της ακμής (epomenos) και ένα προς ένα κόμβο του γραφήματος για να δηλώσει το άλλο άκρο της ακμής που αναπαριστά (akro). Η δομή που αναπαριστά κόμβους κορυφών (korifi) περιέχει τα δεδομένα του κόμβου που είναι τύπου στοιχείου γραφήματος, ένα δείκτη στον επόμενο κόμβο του γραφήματος και ένα στον πρώτο κόμβο της λίστας ακμών της συγκεκριμένης κορυφής (kefali) και ένα ακέραιο (episkeftike) που δείχνει αν ο κόμβος έχει επισκεφτεί για περιπτώσεις αναζήτησης (βάθος, πλάτος). Δ.Μήλιος 35

36 Αρχεία Διεπαφής-Υλοποίησης Στο αρχείο Διεπαφής ορίζονται 2 δομές (korifi, akmi) που εξηγήθηκαν περιγραφικά από πάνω και 2 δείκτες σε αυτές τις δομές (kdktis για την λίστα κόμβων και adktis για την λίστα ακμών) αλλά κυρίως εντοπίζεται το include του τύπου στοιχείου γραφήματος το οποίο δεν περιλαμβάνει συγκεκριμένο μονοπάτι που να προσδιορίζει το αρχείο του τύπου στοιχείου γραφήματος αλλά περιγράφει τον ρόλο του συγκεκριμένου include. Τέλος δηλώνεται και ο μέγιστος αριθμός στοιχείων του γραφήματος. Προφανώς υπάρχουν και οι δηλώσεις των συναρτήσεων-πράξεων του γραφήματοςπράγμα αυτονόητο για ένα αρχείο Διεπαφής, όμως καλό είναι να διευκρινιστεί πως στην συγκεκριμένη υλοποίηση υπάρχουν κάποιες extra συναρτήσεις-πράξεις που δεν έχουν αναφερθεί στις βασικές πράξεις και αφορούν μόνο την υλοποίηση με λίστα ακμών. Αυτές οι συναρτήσεις είναι οι εξής: Graph_keni_k, Graph_keni_a, Graph_proxorise_k, Graph_proxorise_a, Graph_diagrafi_listas, Graph_katastrofi. Περιληπτικά μπορούμε να πούμε πως οι συναρτήσεις με την σειρά που αναφέρθηκαν αφορούν: έλεγχο για κενή λίστα κόμβων ( Graph_keni_k), έλεγχο για κενή λίστα ακμών ( Graph_keni_a), μετάβαση στον επόμενο κόμβο λίστας κόμβων (Graph_proxorise_k), μετάβαση στον επόμενο κόμβο λίστας ακμών (Graph_proxorise_a), διαγραφή μιας λίστας ακμών (Graph_diagrafi_listas), καταστροφή του γραφήματος (Graph_katastrofi). Ακολουθεί ο κώδικας του αρχείου Διεπαφής: #ifndef GEDGE #define GEDGE #include "to antistoixo.h typou stoixeiou" /*edo analoga tin efarmogi i to test tou tipou stoixeiou mpainei to antoistixo.h tou tipou stoixeiou */ /*dhlwseis typwn*/ typedef struct korifi typedef struct akmi *kdktis; *adktis; typedef struct korifi { TStoixeioyGraph dedomena; int episkeftike; kdktis epomenos; /*epomenos kombos listas koryfwn*/ adktis kefali; /*deikths listas akmwn*/ korifi; typedef struct akmi { kdktis akro; /*akro akmhs*/ adktis epomenos;/*epomenos kombos listas akmwn*/ akmi; /*lista akmon*/ Δ.Μήλιος 36

37 typedef kdktis graphima; /*dhlwseis syanrthsewn*/ /*prakseis listwn*/ int Graph_keni_k(kdktis lista); int Graph_keni_a(adktis lista); void Graph_proxorise_k(kdktis *p); void Graph_proxorise_a(adktis *p); void Graph_enimerosi(TStoixeioyGraph stoixeio, kdktis p); void Graph_anaktisi(kdktis p, TStoixeioyGraph *val); void Graph_diagrafi_komvou(kdktis v, adktis *kefali); void Graph_diagrafi_listas(adktis *kefali); /*dhmioyrgia/katastrofi*/ void Graph_dimiourgia(graphima *G); void Graph_katastrofi(graphima * G); /*Prakseis elegxoy*/ int Graph_geitoniki(graphima G, kdktis p, kdktis q); /*prakseis pros8eshs/apomakrynshs*/ void Graph_diagrafi_korifis(graphima *G, kdktis p); void Graph_eisagogi_korifis(graphima *G, TStoixeioyGraph stoixeio); int Graph_eisagogi_akmis(graphima *G, kdktis p, kdktis q); int Graph_diagrafi_akmis(graphima *G, kdktis p, kdktis q); #endif /*#ifndef GEDGE */ Ακολουθεί ο κώδικας του αρχείου Υλοποίησης: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include "Gedge.h" /*orismos synarthsewn*/ Δ.Μήλιος 37

38 int Graph_keni_k(kdktis lista) {/* Pro: Dhmioyrgia listas * Meta: epistrefei 1 an h lista einai kenh, diaforetika 0 */ return ( lista == NULL ); int Graph_keni_a(adktis lista) {/* Pro: Dhmioyrgia listas * Meta: epistrefei 1 an h lista einai kenh, diaforetika 0 */ return ( lista == NULL ); void Graph_proxorise_k(kdktis *p) {/* Pro: O deikths p deixnei ena kombo sth lista * Meta: O deikths p deixnei ston epomeno kombo sth lista */ *p = (*p)->epomenos; void Graph_proxorise_a(adktis *p) {/* Pro: O deikths p deixnei ena kombo sth lista * Meta: O deikths p deixnei ston epomeno kombo sth lista */ *p = (*p)->epomenos; void Graph_enimerosi(TStoixeioyGraph stoixeio, kdktis p) {/* Pro: O deikths p deixnei ena kombo koryfh * Meta: Eisagei to stoixeio ston kombo pou deixnei o p */ TSgraph_setValue(&(p->dedomena), stoixeio); void Graph_anaktisi(kdktis p, TStoixeioyGraph *val) {/* Pro: O deikths p deixnei ena kombo koryfh * Meta: h synarthsh epistrefei to periexomeno toy komboy poy deixnei o p */ TSgraph_setValue(val, p->dedomena); void Graph_dimiourgia(graphima *G) {/* Pro: kamia * Meta: Dhmioyrgia enos kenoy grafhmatos */ *G=NULL; Δ.Μήλιος 38

39 void Graph_katastrofi(graphima * G) {/* Pro: exei dhmioyrgh8ei to grafhma *G * Meta: exei katastrafei olokliro to grafhma *G */ kdktis trexon; trexon= *G; while (!Graph_keni_k(trexon)) { Graph_diagrafi_korifis(G,trexon); trexon=*g; int Graph_geitoniki(graphima G, kdktis p, kdktis q) {/* Pro: Oi koryfes anhkoyn sto synolo twn koryfwn toy grafhmatos G * Meta: An yparxei akmh apo thn koryfh p sthn q tote h synarthsh epistrefei 1 * diaforetika epistrefei 0. * SHMEIWSH: H synarthsh paramenei ws exei se periptwsh Katey8ynomenoy G p- >q */ int telos; /*elegxos gia th sarwsh ths listas akmwn toy p*/ adktis trexon; /*deikths gia th sarwsh ths listas akmwn toy p*/ int geit; geit=0; trexon = p->kefali; /*afethria apo thn kefalh ths listas akmwn toy p*/ telos = 0; while( (!telos) && (!Graph_keni_a(trexon)) ) { if (trexon->akro == q ) /*bre8hke to tairi toy q sth lista akmwn*/ { telos = 1; geit = 1; Graph_proxorise_a(&trexon); return geit; Δ.Μήλιος 39

40 void Graph_diagrafi_korifis(graphima *G, kdktis p) {/* Pro: exei dhmioyrgh8ei to grafhma *G * Meta: exei diagrafei apo to grafhma *G h koryfh poy deixnei o p */ kdktis trexon,protrexon,prop; prop=null; protrexon=null; trexon = *G; /*o trexon diatrexei th lista koryfwn*/ while (!Graph_keni_k(trexon)) { /*den xreiazetai h anazhthsh ths (p,p) akmhs*/ if (p!=trexon) /*diagrafh ths (trexon,p) an yparxei*/ Graph_diagrafi_komvou(p,&(trexon->kefali)); prop=protrexon; protrexon=trexon; Graph_proxorise_k(&trexon); /*proxwrhse sthn epomenh koryfh*/ Graph_diagrafi_listas(&(p->kefali)); if(prop!=null) prop->epomenos=p->epomenos; *G=p->epomenos; free(p); p=null; Δ.Μήλιος 40

41 void Graph_diagrafi_komvou(kdktis v, adktis *kefali) {/* Pro: O deikths v deixnei ena kombo koryfh * Meta: Entopizei kai diagrafei ton kombo ths listas akmwn poy 3ekina * apo ton *kefali toy opoioy to akro einai iso me v */ adktis pros; if (!Graph_keni_a(*kefali)) { if ((*kefali)->akro==v)/*diagrafh komboy*/ { pros = *kefali; Graph_proxorise_a(kefali); free(pros); /*de bre8hke o kombos synexizetai h anazhthsh*/ Graph_diagrafi_komvou(v,&((*kefali)->epomenos)); void Graph_diagrafi_listas(adktis *kefali) {/* Pro: O deikths kefalh exei mia timh * Meta: diagrafei oloys toys komboys mias listas akmwn poy 3ekina * apo ton *kefali */ if (!Graph_keni_a(*kefali)) { Graph_diagrafi_listas(&((*kefali)->epomenos)); free(*kefali); *kefali = NULL; void Graph_eisagogi_korifis(graphima *G, TStoixeioyGraph stoixeio) {/* Pro: exei dhmioyrgh8ei to grafhma *G * Meta: Eisagetai enas neos kombos sthn arxh ths listas koryfwn me dedomena stoixeio */ kdktis p; p = malloc(sizeof(struct korifi)); TSgraph_setValue(&(p->dedomena), stoixeio); /*Syndeei ton kombo sthn arxh ths listas koryfwn toy G*/ p->epomenos = *G; p->kefali = NULL; /*H lista akmwn toy p einai kenh*/ *G = p; /*o kombos poy deixnei o p einai h nea kefalh ths listas koryfwn toy *G*/ Δ.Μήλιος 41

42 int Graph_eisagogi_akmis(graphima *G, kdktis p, kdktis q) {/* Pro: Oi deiktes p,q deixnoyn se komboys koryfes toy grafhmatos G kai h akmh * (p,q) den anhkei sto grafhma *G * Meta: An h (p,q) den einai akmh toy grafhmatos tote eisagetai sto *G */ adktis pros; if (!Graph_geitoniki(*G,p,q)) { /*Diathreitai h kefalh ths listas akmwn ths p*/ pros = p->kefali; /*Dhmioyrgia kefalhs gia nea lista akmwn*/ p->kefali = malloc(sizeof(struct akmi)); /*Syndesh aytoy toy komboy me to p*/ p->kefali->akro = q; /*Syndesh me thn kefalh ths listas akmwn toy q*/ p->kefali->epomenos = pros; /*Epanalambanontai ta parapanw gia to q. Afairountai se periptwsh Katey8ynomenoy G p->q*/ pros = q->kefali; q->kefali = malloc(sizeof(struct akmi)); q->kefali->akro = p; q->kefali->epomenos = pros; return 1; return 0; Δ.Μήλιος 42

43 int Graph_diagrafi_akmis(graphima *G, kdktis p, kdktis q) {/* Pro: exei dhmioyrgh8ei to grafhma *G. Oi p,q deixnoyn koryfes * toy grafhmatos *G. * Meta: diagrafei mia akmh metaksy twn koryfwn poy deixnoyn oi p,q * toy grafhmatos *G */ if (Graph_geitoniki(*G,p,q)) { /*Diagrafh apo th lista akmwn toy p*/ Graph_diagrafi_komvou(q,&(p->kefali)); /*Diagrafh apo th lista akmwn toy q Afaireitai se periptwsh Katey8ynomenoy G p->q*/ Graph_diagrafi_komvou(p,&(q->kefali)); return 1; return 0; Αρχεία Δοκιμής Στα αρχεία Δοκιμής περιλαμβάνεται το αρχείο main που χρησιμοποιείται ως αρχείο test για τις πράξεις της ATΔ Γραφήμα. Στο αρχείο main περιλαμβάνονται και οι συναρτήσεις: episkepsi, vathos, diadromi_v, platos, diadromi_p, ektos_orion. Ο ρόλος όλων εκτός της τελευταίας έχει αναλυθεί και στην προηγούμενη υλοποίηση. Η ektos_orion όμως είναι μια συνάρτηση που καλείται όπου θεωρείται απαραίτητο στο αρχείο Δοκιμής για να ελέγξει αν ο αριθμός του κόμβου που δίνει ο χρήστης για να γίνει οποιαδήποτε πράξη πάνω του ανήκει στο γράφημα. Στα αρχεία Δοκιμής περιλαμβάνονται και τα αρχεία Υλοποίησης-Διεπαφής του τύπου στοιχείου Ουράς (int) και τα αρχεία Υλοποίησης-Διεπαφής της υλοποίησης της ουράς με κενό (για τον κώδικα των αρχείων αυτών ανατρέχτε στο 4 ο κεφάλαιο στις ενότητες και ) Ακολουθεί ο κώδικας του αρχείου Δοκιμής: #include <stdio.h> #include "Gedge.h" #include "../../TS/TStoixeioyGraph.h" #include "Qgap.h" #include "TStoixeioyOyras.h" void print_options(void); int ektos_orion(int i,int korifes); void episkepsi(kdktis i); void vathos(graphima G); void diadromi_v(kdktis p); Δ.Μήλιος 43

44 void platos(graphima G); void diadromi_p(kdktis p); TOuras oura_korifon; int main(void) { int option,created,out_err,num_korifon; graphima G; kdktis p, q; int p_num, q_num, error, apot; TStoixeioyGraph x; num_korifon=0; error=0; created=0; p=g; q=g; do{ print_options(); scanf("%d", &option); switch(option) {case 1: case 2: Graph_dimiourgia(&G); created=1; printf("to grafima dimiourgithike!\n"); { printf("\nden uparxei grafima gia na elegxthei ama iparxoun geitonikes korifes!\n"); printf("dwse ton ari8mo ths prwths koryfhs: "); scanf("%d", &p_num); printf("dwse ton ari8mo ths deyterhs koryfhs: "); scanf("%d", &q_num); if(ektos_orion(p_num,num_korifon) ektos_orion(q_num,num_korifon) ) { printf("\nerror! La8os ari8mos koryfhs!\n"); p=g; Δ.Μήλιος 44

45 tou!\n"); q=g; for(;q_num>0;q_num--) q=q->epomenos; for(;p_num>0;p_num--) p=p->epomenos; apot=graph_geitoniki(g, p, q); if(apot) case 3: printf("oi koryfes einai geitonikes!\n"); printf("oi koryfes DEN einai geitonikes!\n"); { printf("\nden uparxei grafima gia na enimerothei kapoia koryfh printf("dwse ton ari8mo ths koryfhs pou 8es na enhmerwseis: "); scanf("%d", &p_num); if(ektos_orion(p_num,num_korifon) ) p=g; { printf("\nerror! La8os ari8mos koryfhs!\n"); for(;p_num>0;p_num--) p=p->epomenos; printf("dwse ena stoixeio gia na eisax8ei sthn koryfh: "); out_err=tsgraph_readvalue(stdin,&x); if(!out_err) { printf("\n error stin readvalue!\n"); Graph_enimerosi(x, p); printf("h koryfh enhmerothike!\n"); case 4: { printf("\nden uparxei grafima gia na parthoun ta dedomena apo kapoia koryfh tou!\n"); printf("dwse ton ari8mo ths koryfhs pou 8es ta dedomena: "); Δ.Μήλιος 45

46 scanf("%d", &p_num); if(ektos_orion(p_num,num_korifon) ) { printf("\nerror! La8os ari8mos koryfhs!\n"); p=g; for(;p_num>0;p_num--) p=p->epomenos; Graph_anaktisi(p, &x); printf("ta dedomena toy komboy einai:"); out_err=tsgraph_writevalue(stdout,x); if(out_err <0) { printf("\n error stin writevalue!\n"); case 5: { printf("\nden uparxei grafima gia na diagrafei kapoia koryfh tou!\n"); printf("dwse ton ari8mo ths koryfhs pou 8es na diagrapseis: "); scanf("%d", &p_num); if(ektos_orion(p_num,num_korifon) ) { printf("\nerror! La8os ari8mos koryfhs!\n"); p=g; for(;p_num>0;p_num--) p=p->epomenos; Graph_diagrafi_korifis(&G, p); printf("h koryfh diagrafhke!\n"); num_korifon--; case 6: { printf("\nden uparxei grafima gia na diagrafei kapoia akmh tou!\n"); printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros diagrafh: "); Δ.Μήλιος 46

47 "); scanf("%d", &p_num); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros diagrafh: scanf("%d", &q_num); if(ektos_orion(p_num,num_korifon) ektos_orion(q_num,num_korifon) )!\n");!\n"); "); "); p=g; q=g; { printf("\nerror! La8os ari8mos koryfhs!\n"); for(;q_num>0;q_num--) q=q->epomenos; for(;p_num>0;p_num--) p=p->epomenos; apot=graph_diagrafi_akmis(&g, p, q); if(apot) case 7: printf("h akmh diagrafhke!\n"); printf("den yparxei ayth h akmh!\n"); { printf("\nden uparxei grafima gia na eisaxthei kapoia koryfh printf("dwse ena stoixeio gia na eisax8ei sth nea koryfh: "); TSgraph_readValue(stdin,&x); Graph_eisagogi_korifis(&G, x); printf("h koryfh eishx8h!\n"); num_korifon++; case 8: { printf("\nden uparxei grafima gia na eisaxthei kapoia akmh printf("dwse ton ari8mo ths 1hs koryfhs ths akmhs pros eisagwgh: scanf("%d", &p_num); printf("dwse ton ari8mo ths 2hs koryfhs ths akmhs pros eisagwgh: Δ.Μήλιος 47

48 scanf("%d", &q_num); if(ektos_orion(p_num,num_korifon) ektos_orion(q_num,num_korifon) )!\n");!\n"); {printf("\nerror! La8os ari8mos koryfhs!\n"); p=g; q=g; for(;q_num>0;q_num--) q=q->epomenos; for(;p_num>0;p_num--) p=p->epomenos; apot=graph_eisagogi_akmis(&g, p, q); if(apot) case 9: printf("h akmh eishx8h!\n"); printf("yparxei hdh ayth h akmh!\n"); { printf("\nden uparxei grafima gia ginei anazitisi kata vathos vathos(g); case 10: { printf("\nden uparxei grafima gia ginei anazitisi kata platos platos(g); case 11: { printf("\nden uparxei grafima gia katastrafei!\n"); Graph_katastrofi(&G); created=0; printf("to grafima katastrafike!\n"); Δ.Μήλιος 48

49 while(option); return 0; void print_options(void) { printf("\n\n1. Dhmioyrgia grafhmatos\n\ 2. Elegxos geitonikwn koryfwn\n\ 3. Enhmerwsh dedomenwn koryfhs\n\ 4. Anakthsh dedomenwn koryfhs\n\ 5. Diagrafh koryfhs\n\ 6. Diagrafh akmhs\n\ 7. Eisagwgh koryfhs\n\ 8. Eisagwgh akmhs\n\ 9. Anazhthsh prwta kata va8os\n\ 10.Anazhthsh prwta kata platos\n\ 11.Katastrofi grafhmatos\n\ Dwste thn epilogh sas(1-10, 0 gia eksodo):"); int ektos_orion(int i,int korifes) { if ( (i<0) (i>korifes-1)) return 1; return 0; void episkepsi(kdktis i) { TSgraph_writeValue(stdout,i->dedomena); /*kata ba8os anazhthsh*/ void vathos(graphima G) { /* * Pro: Dhmioyrgia toy grafhmatos G * Meta: H synarthsh diadromi paragei thn prwta kata ba8os anazhthsh twn koryfwn */ Δ.Μήλιος 49

50 kdktis p = G; while(!graph_keni_k(p)) { p->episkeftike = 0; Graph_proxorise_k(&p); p=g; while(!graph_keni_k(p)) { if (!p->episkeftike) diadromi_v(p); Graph_proxorise_k(&p); void diadromi_v(kdktis p) { /* * Pro: i einai mia koryfh toy grafhmatos * Meta: H episkepsh ths koryfhs i kai twn geinonikwn ths exei teleiwsei me */ * thn anazhthsh prwta kata ba8os. adktis trexon; kdktis q; episkepsi(p); p->episkeftike = 1; /*Proetoimasia gia thn episkepsh twn kombwn ths listas akmwn ths koryfhs sthn opoia deixnei prwta o p*/ trexon = p->kefali; while(!graph_keni_a(trexon)) { q = trexon->akro; /*h q einai geitonikh ths p*/ if (!q->episkeftike) diadromi_v(q); Graph_proxorise_a(&trexon); Δ.Μήλιος 50

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. Ο ΑΤΔ ΔΕΝΔΡΟ

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. Ο ΑΤΔ ΔΕΝΔΡΟ 1.1 Εισαγωγή 1. Ο ΑΤΔ ΔΕΝΔΡΟ Μέχρι τώρα είδαμε τις ΑΤΔ Στοίβα, ΑΤΔ Ουρά και τέλος την ΑΤΔ Λίστα η οποία αποτελεί μια γενίκευση των άλλων 2. Γενικά είδαμε δομές που τηρούν την γραμμική ακολουθία των στοιχείων

Διαβάστε περισσότερα

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ????

2 η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα ???? η Υλοποίηση του ΑΤΔ συνδεδεμένη λίστα με πίνακα Κόμβοι από δεδομένα και θέσεις πίνακα θέση (index) dedomena epomenos lista = 0 1 3 Ελένη Σπύρος Βασίλης -1 1 Στη συνέχεια θα πρέπει να γνωρίζουμε την οργάνωση

Διαβάστε περισσότερα

Γραφήματα (Graphs) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5}

Γραφήματα (Graphs) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5} Γραφήματα (Graphs) G = (V, E) Κορυφές και ακμές 2 4 μονοπάτι,2,3,4 κορυφή 3 ακμή γειτονικές V(G ) = {,2,3,4,5 G E(G ) = {(,2), (2,3), (2,4), (3,4), (4,5) 5 To Δένδρο, ειδική περίπτωση γραφήματος 2 3 G

Διαβάστε περισσότερα

Γραφήματα (Graphs) Κατευθυνόμενο γράφημα ακμές με κατεύθυνση (μονόδρομος) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3

Γραφήματα (Graphs) Κατευθυνόμενο γράφημα ακμές με κατεύθυνση (μονόδρομος) G = (V, E) Κορυφές και ακμές. μονοπάτι 1,2,3,4 κορυφή 3 G = (V, E) Κορυφές και ακμές V(G ) = {,,3,, Γραφήματα (Graphs) G E(G ) = {(,), (,3), (,), (3,), (,) μονοπάτι,,3, κορυφή 3 ακμή γειτονικές 3 Κατευθυνόμενο γράφημα ακμές με κατεύθυνση (μονόδρομος) V(G 3

Διαβάστε περισσότερα

Γραφήματα (Graphs) To Δένδρο, ειδική περίπτωση γραφήματος. G = (V, E) Κορυφές V και ακμές E G 2 4. μονοπάτι 1, 2, 3, 4 κορυφή 3

Γραφήματα (Graphs) To Δένδρο, ειδική περίπτωση γραφήματος. G = (V, E) Κορυφές V και ακμές E G 2 4. μονοπάτι 1, 2, 3, 4 κορυφή 3 G = (V, E) Κορυφές V και ακμές E V(G ) = {,,3,, Γραφήματα (Graphs) G E(G ) = {(,), (,3), (,), (3,), (,) μονοπάτι,, 3, κορυφή 3 ακμή γειτονικές To Δένδρο, ειδική περίπτωση γραφήματος G 3 6 7 μήκος μονοπατιού

Διαβάστε περισσότερα

Θέµα 1 (15%): (απαιτούµενος χρόνος < 15 λεπτά)

Θέµα 1 (15%): (απαιτούµενος χρόνος < 15 λεπτά) Θέµα 1 (15%): (απαιτούµενος χρόνος < 15 λεπτά) Εκτελέστε µε το χέρι το παρακάτω πρόγραµµα και γράψτε όλες τις ενδιάµεσες τιµές και τις τιµές που τυπώνονται: int m,n; m=2; n=1; m=m+5; if (m>=9) m=m-8; n=n+7;

Διαβάστε περισσότερα

Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Κάθε στοιχείο του ΑΤΔ συνδεδεμένη λίστα (linked list) καλείται κόμβος (node) και περιέχει δύο πεδία. Στο ένα πεδίο αποθηκεύονται τα δεδομένα και Στο άλλο αποθηκεύεται

Διαβάστε περισσότερα

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 7: ΑΤΔ Γράφημα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 7: ΑΤΔ Γράφημα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 7: ΑΤΔ Γράφημα Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Σκοποί ενότητας Να ορίσει τον ΑΤΔ Γράφημα. Να σχεδιάσει

Διαβάστε περισσότερα

Οι Πράξεις. 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες. Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους

Οι Πράξεις. 1 η Υλοποίηση του ΑΤΔ: μονά συνδεδεμένη λίστα με δείκτες. Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Σχεδιασμός: Λίστα με Συνδεδεμένους Κόμβους Κάθε στοιχείο του ΑΤΔ συνδεδεμένη λίστα (linked list) καλείται κόμβος (node) και περιέχει δύο πεδία Στο ένα πεδίο αποθηκεύονται τα δεδομένα και Στο άλλο αποθηκεύεται

Διαβάστε περισσότερα

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. O AΤΔ ΟΥΡΑ

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. O AΤΔ ΟΥΡΑ 1.1 Εισαγωγή 1. O AΤΔ ΟΥΡΑ Μια ουρά αποτελεί μια δομή πολύ παρόμοια με την στοίβα, διαφέρει μόνο ο τρόπος εισαγωγής-εξαγωγής των στοιχείων της. Τον όρο ουρά τον συναντάμε πολύ συχνά στην καθημερινή μας

Διαβάστε περισσότερα

1. ΟΡΓΑΝΩΣΗ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΒΑΣΙΚΟΙ ΤΡΟΠΟΙ ΠΡΟΣΒΑΣΗΣ ΣΕ ΔΟΜΕΣ

1. ΟΡΓΑΝΩΣΗ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΒΑΣΙΚΟΙ ΤΡΟΠΟΙ ΠΡΟΣΒΑΣΗΣ ΣΕ ΔΟΜΕΣ 1. ΟΡΓΑΝΩΣΗ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΒΑΣΙΚΟΙ ΤΡΟΠΟΙ ΠΡΟΣΒΑΣΗΣ ΣΕ ΔΟΜΕΣ 1.1 Οργάνωση Αφηρημένων τύπων δεδομένων Θα αναλυθεί το πρότυπο οργάνωσης των αφηρημένων τύπων δεδομένων (ΑΤΔ) που παρουσιάζονται

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 35: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών Ακαδηµαϊκό έτος 21 211, Χειµερινό εξάµηνο Όλες οι ασκήσεις να δακτυλογραφηθούν

Διαβάστε περισσότερα

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή.

Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή. Tύπος δεδοµένων (data type) µιας µεταβλητής (σε µια γλώσσα προγραµµατισµού) είναι το σύνολο των τιµών που µπορεί να πάρει η µεταβλητή. Αφηρηµένος τύπος δεδοµένων (abstract data type): είναι ένα θεωρητικό

Διαβάστε περισσότερα

Γραφήματα (Graphs) G = (V, E) Κορυφές V και ακμές E. μονοπάτι 1, 2, 3, 4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5}

Γραφήματα (Graphs) G = (V, E) Κορυφές V και ακμές E. μονοπάτι 1, 2, 3, 4 κορυφή 3. ακμή. γειτονικές G 1 V(G 1 ) = {1,2,3,4,5} Γραφήματα (Graphs) G = (V, E) Κορυφές V και ακμές E 2 4 μονοπάτι, 2, 3, 4 κορυφή 3 ακμή γειτονικές V(G ) = {,2,3,4,5 G E(G ) = {(,2), (2,3), (2,4), (3,4), (4,5) 5 To Δένδρο, ειδική περίπτωση γραφήματος

Διαβάστε περισσότερα

242 -ΕισαγωγήστουςΗ/Υ

242 -ΕισαγωγήστουςΗ/Υ 1 242 -ΕισαγωγήστουςΗ/Υ ΤµήµαΜαθηµατικών, Πανεπιστήµιο Ιωαννίνων Άρτια Α.Μ. (0-2-4-6-8) Πίνακες σαν παράµετροι 2 Πίνακες σαν παράµετροι 3 Πίνακες σαν παράµετροι Περνάµε ένα πίνακα σαν παράµετρο σε µια

Διαβάστε περισσότερα

Η αναφορά σ ένα μέλος μίας μεταβλητής τύπου δομής γίνεται με την παράσταση

Η αναφορά σ ένα μέλος μίας μεταβλητής τύπου δομής γίνεται με την παράσταση ΔΟΜΕΣ Πολλές φορές, μία σύνθετη οντότητα μπορεί να καθορισθείαπό ένα σύνολο δεδομένων, πιθανώς διαφορετικών τύπων,οπότε θα ήταν χρήσιμο να ομαδοποιούσαμε τα δεδομένααυτά κάτω από ένα γενικό όνομα, με σκοπό

Διαβάστε περισσότερα

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. O AΤΔ ΣΤΟΙΒΑ

Υλοποιήσεις,Δοκιμές και Εφαρμογές Βασικών Αφηρημένων Τύπων Δεδομένων στη C για εκπαιδευτική χρήση 1. O AΤΔ ΣΤΟΙΒΑ 1. O AΤΔ ΣΤΟΙΒΑ 1.1 Εισαγωγή Η στοίβα αποτελεί την υλοποίηση μιας συλλογής αντικειμένων στην οποία κάθε εισαγωγή και διαγραφή γίνεται στο ίδιο άκρο που ονομάζεται κορυφή. Για την καλύτερη κατανόηση της

Διαβάστε περισσότερα

"ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ" (ΕΜ102), ΕΡΓΑΣΙΑ 1η

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ (ΕΜ102), ΕΡΓΑΣΙΑ 1η "ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ" (ΕΜ102), ΕΡΓΑΣΙΑ 1η Σε αυτήν την εργασία καλείστε να κατασκευάσετε τον πηγαίο κώδικα γλώσσας C για το εκτελέσιµο αρχείο µε ό- νοµα ATM, που όταν εκτελείται σε κονσόλα προσοµοιώνει

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις - προγράμματα - Μέρος Β Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης

Διαβάστε περισσότερα

Work12 REMARKS script file lab10 ask1-5 tabbing, ls2, urlparse, times, dates_correct

Work12 REMARKS script file lab10 ask1-5 tabbing, ls2, urlparse, times, dates_correct Work12 REMARKS script le lab10 ask1-5 tabbing, ls2, urlparse, times, dates_correct #Username : imanousi #lename : tabbing.imanousi #To script eisagei ena tab sthn arxh kathe grammhs #tou arxeiou pou dinetai

Διαβάστε περισσότερα

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 4: ΑΤΔ Λίστα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 4: ΑΤΔ Λίστα. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 4: ΑΤΔ Λίστα Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Σκοποί ενότητας Ορίζει τον ΑΤΔ Λίστα Να αναδείξει το πρόβλημα

Διαβάστε περισσότερα

ΑΤΣΑΛΑΚΗ ΞΑΝΘΟΥΛΑ ΕΡΓΑΣΤΗΡΙΟ 2

ΑΤΣΑΛΑΚΗ ΞΑΝΘΟΥΛΑ ΕΡΓΑΣΤΗΡΙΟ 2 EXERSICE 1 #include #define ROWS 20 #define COLUMNS 5 int better(int array[][columns],int rows); int main(void) int rows,grades[rows][columns],i,j,k=0,l=0; printf("\nhow many students are there

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ. ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό Ενότητα 8: Συναρτήσεις Κ. Κουκουλέτσος Τμήμα: Τμήμα Υπολογιστικών Συστημάτων Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

ΜΑΘΗΜΑ 2, Έλεγχος ροής προγράμματος ΒΑΣΙΚΗ ΣΥΝΤΑΞΗ:

ΜΑΘΗΜΑ 2, Έλεγχος ροής προγράμματος ΒΑΣΙΚΗ ΣΥΝΤΑΞΗ: ΜΑΘΗΜΑ 2, 080312 Έλεγχος ροής προγράμματος Μπορούμε να χρησιμοποιήσουμε μια σειρά από λογικούς ελέγχους (συγκρίσεις) και με βάση το αποτέλεσμά τους γίνεται η λήψη αποφάσεων για τη συνέχεια του προγράμματος

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις - προγράμματα - Μέρος Α Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος 2003-2004 ΑΣΚΗΣΗ #5 Προτεινόµενη λύση Θέµα 1 /* Προγραµµατιστής : Ηµεροµηνία συγγραφής : Λειτουργία Προγράµµατος : Πρόγραµµα για την αποθήκευση και ανάκτηση βαθµολογιών

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 9 Συναρτήσεις. Γεώργιος Λαμπρινίδης

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 9 Συναρτήσεις. Γεώργιος Λαμπρινίδης Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 9 Συναρτήσεις Γεώργιος Λαμπρινίδης lamprinidis@pharm.uoa.gr Ασκήσεις Προηγούμενου Εργαστηρίου #include main() { int i, flag, temp, a[5]; for (i=0;i

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in

Διαβάστε περισσότερα

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ ΤΑΞΗ: 3 η ΤΑΞΗ ΕΠΑ.Λ. ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ / ΕΙΔΙΚΟΤΗΤΑΣ Ημερομηνία: Σάββατο 20 Απριλίου 2019 Διάρκεια Εξέτασης: 3 ώρες ΘΕΜΑ Α Α1. 1. Λάθος 2. Λάθος 3. Σωστό 4. Λάθος 5. Σωστό Α2. print(x

Διαβάστε περισσότερα

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών ΛΙΣΤΕΣ Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα Υλοποίηση με δείκτες (pointers) Υλοποίηση με πίνακα Εφαρμογές και Χρήση Λιστών Λίστες (Lists) Δεδομένα

Διαβάστε περισσότερα

1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ

1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ 1. ΕΙΣΑΓΩΓΗ-ΓΕΝΙΚΑ ΠΕΡΙ ΑΦΗΡΗΜΕΝΩΝ ΤΥΠΩΝ ΔΕΔΟΜΕΝΩΝ Σκοπός-αντικείμενο των σημειώσεων αποτελεί η παρουσίαση βασικών αφηρημένων τύπων δεδομένων (ΑΤΔ) τόσο σε επίπεδο υλοποιήσεων και εφαρμογών αυτών σε προγραμματιστικό

Διαβάστε περισσότερα

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω

Ουρές (Queues) FIFO A B C. Διαγραφή. Εισαγωγή. εµπρός. πίσω. πίσω. πίσω εµπρός Ουρές (Queues) A B C FIFO εµπρός πίσω B C Διαγραφή εµπρός πίσω B C D E Εισαγωγή πίσω Ορισµός Η ουρά είναι µια γραµµική λίστα στην οποία η διαγραφή ενός στοιχείου γίνεται στο ένα άκρο το οποίο καλείται

Διαβάστε περισσότερα

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

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας ΣΤΟΙΒΕΣ (stacks) Η στοίβα είναι µια συλλογή δεδοµένων µε γραµµική διάταξη στην οποία όλες οι εισαγωγές και οι διαγραφές γίνονται στο ένα άκρο που λέγεται κορυφή (top) της στοίβας Σχήµα: Λειτουργία Στοίβας

Διαβάστε περισσότερα

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

ΕΠΛ 034 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΗΜΥ ΕΠΛ 034 ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΗΜΥ Εργαστήριο #5 Μέρος Α Κατεβάστε τα προγράμματα loop-for.c και loop-while.c από την ιστοσελίδα του μαθήματος κάτω από τα Εργαστήρια. (http://www.cs.ucy.ac.cy/courses/epl034/labs.php).

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση. Γιώργος Λαμπρινίδης

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση. Γιώργος Λαμπρινίδης Εργαστήριο 8 Ασκήσεις Πινάκων Ταξινόμηση Αναζήτηση Γιώργος Λαμπρινίδης amprinidis@pharm.uoa.gr Παραδείγματα στους πίνακες (1) Έστω ότι έχετε το εξής: int a[20]; for(i = 0; i < 20; i++) a[i] = i+1; Ποιες

Διαβάστε περισσότερα

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; }

A[0] = 0; /* To μηδέν δεν έχει διαιρέτες */ for (i=1; i<n; i++) { S=0; for (d=1; d<=i; d++) if (i % d == 0) S += d; A[i] = S; } TEI Λάρισας / ΣΤΕΦ Τμ. Τεχνολογίας Πληροφορικής & Τηλεπικοινωνιών B Εξεταστική Περίοδος, 19 Φεβρουαρίου 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ι Ηλίας. Κ. Σάββας Α 1) Να γράψετε ένα πρόγραμμα το οποίο να γεμίζει ένα ακέραιο

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Αλφαριθμητικά προγράμματα, αρχεία προγράμματα Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες

Διαβάστε περισσότερα

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C Εισαγωγή στη Γλώσσα C Η C είναι µια δοµηµένη (structured ) γλώσσα ηλαδή ένα C πρόγραµµα αποτελείται από υποπρογράµµατα τα οποία ονοµάζονται συναρτήσεις ( functions ), όπου η κάθε συνάρτηση εκτελεί µια

Διαβάστε περισσότερα

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 12 ο Μάθημα 1 12 ο Μέρος Συναρτήσεις Συναρτήσεις Τι είναι οι συναρτήσεις Οι συναρτήσεις είναι ένα βασικό δομικό συστατικό σε όλες τις ανώτερες γλώσσες προγραμματισμού. Με τις συναρτήσεις έχουμε τη δυνατότητα να χωρίσουμε

Διαβάστε περισσότερα

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα Τελεστές συντομογραφίας Τελεστές σύντομης ανάθεσης += παράδειγμα: sum+=10; αντί για: sum = sum

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό Ενότητα 9: Συναρτήσεις Εμβέλεια Κ. Κουκουλέτσος Τμήμα: Τμήμα Υπολογιστικών Συστημάτων Άδειες Χρήσης

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Τελεστές, εντολές ελέγχου, επαναλήψεις προγράμματα Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε.

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ (2009-2010) ΥΠΕΥΘΥΝΟΙ ΔΙΔΑΣΚΟΝΤΕΣ ΕΡΓΑΣΤΗΡΙΟΥ: Α. ΦΩΚΑ, K. ΣΤΑΜΟΣ

Διαβάστε περισσότερα

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις Ασκηή σεις 12ο Μαά θημα - Λυύ σεις Άσκηση 1: Γράψτε ένα πρόγραμμα που να δέχεται από το πληκτρολόγιο 21 ακέραιους αριθμούς (μεταξύ 0 και 100) και στη συνέχεια να υπολογίζει το πλήθος και το μέσο όρο, μόνο

Διαβάστε περισσότερα

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008 ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008 Όλα τα θέματα είναι ισοδύναμα. Οι απαντήσεις σας οι οποίες αφορούν ανάπτυξη κώδικα ή αποτελέσματα προγράμματος, θα πρέπει να είναι καθαρογραμμένες με ευδιάκριτους όλους

Διαβάστε περισσότερα

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? ) 3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? ) 3.1 Η εντολή switch case Στην περίπτωση που θέλουμε να εξετάσουμε πολλές διαφορετικές τιμές, θα αναγκαζόμασταν να φτιάξουμε ένα κώδικα που θα περιέχει πολλά

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 6: Πίνακες. Κ.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 6: Πίνακες. Κ. ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Εισαγωγή στον Προγραμματισμό Ενότητα 6: Πίνακες Κ. Κουκουλέτσος Τμήμα: Τμήμα Υπολογιστικών Συστημάτων Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

ΕΠΛ232: Εργαστήριο 2 ΕΠΛ232: Εργαστήριο 2 Παράδειγμα σε Στοίβες 1 Υπολογισμός Αριθμητικών Παραστάσεων - Πολωνικός Συμβολισμός A + (B * C) A + (BC * ) A(BC *) + ABC * + Ενδοθεματική μορφή Μεταθεματική μορφή Οι κανόνες που διέπουν

Διαβάστε περισσότερα

ΕΝ ΕΙΚΤΙΚΑ ΣΧΕ ΙΑ ΛΥΣΕΩΝ - ΥΠΟ ΕΙΞΕΙΣ

ΕΝ ΕΙΚΤΙΚΑ ΣΧΕ ΙΑ ΛΥΣΕΩΝ - ΥΠΟ ΕΙΞΕΙΣ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΛΗ42 - ΕΙ ΙΚΑ ΘΕΜΑΤΑ ΤΕΧΝΟΛΟΓΙΑΣ ΛΟΓΙΣΜΙΚΟΥ 2η ΓΡΑΠΤΗ ΕΡΓΑΣΙΑ ΑΚΑ ΗΜΑΪΚΟΥ ΕΤΟΥΣ 2009-2010 2 oς Τόµος ΕΝ ΕΙΚΤΙΚΑ ΣΧΕ ΙΑ ΛΥΣΕΩΝ - ΥΠΟ ΕΙΞΕΙΣ ΕΡΓΑΣΙΑ 2 i. υναµική τεχνική επικύρωσης:

Διαβάστε περισσότερα

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΠΟΛΛΕΣ ΕΝΤΟΛΕΣ ΕΠΙΣΤΡΟΦΗΣ Να γραφτεί ένα πρόγραμμα που να διπλασιάζει ένα ποσό που του δίνει ο χρήστης μεταξύ 0 και 1000. Να ελέγχει εάν το ποσό που εισήχθη

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

Διαβάστε περισσότερα

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ 6.1 Η Έννοια του Πίνακα Συχνά είναι προτιμότερο να αντιμετωπίζουμε ένα σύνολο μεταβλητών σαν ενότητα για να απλοποιούμε το χειρισμό τους. Έτσι οργανώνουμε σύνθετα δεδομένα σε

Διαβάστε περισσότερα

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

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while) 5.1 Ο βρόχος while Η εντολή while παρέχει έναν μηχανισμό επανάληψης των δηλώσεων όσο μια συνθήκη είναι αληθινή. Χρησιμοποιείται όταν ο αριθμός των επαναλήψεων

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 10: Συναρτήσεις με πίνακες- Αναδρομικές συναρτήσεις Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών

Διαβάστε περισσότερα

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 3 Εντολές Επιλογής. Γιώργος Λαμπρινίδης Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 3 Εντολές Επιλογής. Γιώργος Λαμπρινίδης Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 3 Εντολές Επιλογής Γιώργος Λαμπρινίδης 1 Ασκησεις Εργατηρίου 2 30/10/2015 2 /* File: pososto.c */ #include main() {double timi, pososto, teliki; printf("dwse tin

Διαβάστε περισσότερα

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> int compare_numbers(int num1, int num2)

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ #include <iostream.h> int compare_numbers(int num1, int num2) ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων ΟΡΙΣΜΟΣ ΣΥΝΑΡΤΗΣΗΣ ΜΕ ΕΠΙΣΤΡΟΦΗ ΤΙΜΗΣ int compare_numbers(int num1, int num2);.... int compare_numbers(int num1, int num2) if (num1>mum2) return (num1); ΟΡΙΣΜΟΣ

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΠΡΟΓΡΑΜΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΠΡΟΓΡΑΜΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟΥ Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΠΡΟΓΡΑΜΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟΥ Πρόγραµµα 1 (Βασική χρήση της συνάρτησης printf) /* Βασική χρήση της συνάρτησης printf */ /* Το \n αλλάζει γραµµή

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 1 Αλγόριθμοι Ταξινόμησης Μέρος 1 Μανόλης Κουμπαράκης 1 Το Πρόβλημα της Ταξινόμησης Το πρόβλημα της ταξινόμησης (sorting) μιας ακολουθίας στοιχείων με κλειδιά ενός γνωστού τύπου (π.χ., τους ακέραιους ή τις

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 6/3/2016

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 6/3/2016 Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Αναπληρωτής Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Εισαγωγή στο MPI Εγκατάσταση του Message Passing

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #5 2 Γενικά Στο Τετράδιο #5 του Εργαστηρίου θα ασχοληθούμε με πιο προχωρημένα θέματα υλοποίησης

Διαβάστε περισσότερα

Work10 REMARKS script file lab08 ask2-6 dirstat, create, deli, dirsplit, myfind

Work10 REMARKS script file lab08 ask2-6 dirstat, create, deli, dirsplit, myfind Work10 REMARKS script le lab08 ask2-6 dirstat, create, deli, dirsplit, mynd #LAB 8 : ASKHSH 2 -dirstat #File name: $0 #username : imanousi #To script elegxei ola ta arxeia mesa se enan fakelo #an ena arxeio

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση #include #include #define TRUE 0 #define FALSE -1 #define SIZE 4 /* Το μέγεθος του πίνακα */ typedef struct

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 8: Συναρτήσεις Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων Άδειες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων Σκοπός της Άσκησης ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση µε τη χρήση πινάκων σαν διατάξεις αποθήκευσης δεδοµένων της Γλώσσας Προγραµµατισµού C. H συγκεκριµένη άσκηση

Διαβάστε περισσότερα

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 7 ο Μέρος 1

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 7 ο Μέρος 1 7 ο Μέρος Μονοδιάστατοι Πίνακες Περιγραφή Ο μονοδιάστατος πίνακας είναι μια σύνθετη δομή μεταβλητών στις περισσότερες γλώσσες προγραμματισμού. Ένας πίνακας είναι ένα σύνολο από μεταβλητές που έχουν όλες

Διαβάστε περισσότερα

Γραμμικές Δομές Δεδομένων

Γραμμικές Δομές Δεδομένων Γραμμικές Δομές Δεδομένων Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή μόνο Στοίβα (stack)

Διαβάστε περισσότερα

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation.

Επισκόπηση Μαθήματος. Γραμμικές Δομές Δεδομένων. ΑΤΔ Ουρά Εναλλακτικοί Σχεδιασμοί Προγραμματισμός με Ενότητες Interface.h Implementation. Γραμμικές Δομές Δεδομένων Επισκόπηση Μαθήματος Συλλογή δεδομένων στη σειρά (ολική διάταξη). Προσθέτουμε δεδομένα στη Δομή (μεγαλώνει) ή αφαιρούμε δεδομένα (μικραίνει) Αν περιορίσουμε τις πράξεις Στην Αρχή

Διαβάστε περισσότερα

Ασκήσεις 5ο Μάθημα - Λύσεις

Ασκήσεις 5ο Μάθημα - Λύσεις Ασκήσεις 5ο Μάθημα - Λύσεις Άσκηση 1: Γράψτε ένα πρόγραμμα σε γλώσσα C το οποίο να διαβάζει ένα ακέραιο αριθμό και να υπολογίζει: - Αν ο αριθμός είναι μεγαλύτερος του 10 - Αν ο αριθμός είναι θετικός -

Διαβάστε περισσότερα

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ 2004-2005 Ερωτήσεις Ερώτηση 1 #include double s=0,a[10]=1,2,3,4,5,6,7,8,9,10,m; int i,j=0; for (i=3;

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Δομές - προγράμματα Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

aapostol.scr2, scr2.kdeligia

aapostol.scr2, scr2.kdeligia vassik@aetos:~/work/online$ cat scr2.* Τροποπoίηση/Συμπλήρωση του ask2 Δέχεται ονόματα αρχείων ως παραμέτρους Στο 1 ο αρχείο που δίνεται ως παράμετρος, γράφονται μέσα τα ονόματα και τα περιεχόμενα των

Διαβάστε περισσότερα

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

Προγραμματισμό για ΗΜΥ ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 3 Εισαγωγή στην C Θέματα ιάλεξης Σύνταξη και Σημασιολογία

Διαβάστε περισσότερα

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014 Πίνακες 0 Μαρτίου 014 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα του συγκεκριμένου τύπου. Στην περίπτωση που θέλουμε

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες,

Διαβάστε περισσότερα

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 4η Διάλεξη Πίνακες Συναρτήσεις Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό 4η Διάλεξη Πίνακες Συναρτήσεις Πίνακες (1) Μια συλλογή μεμονωμένων τιμών δεδομένων Οι πίνακες είναι διατεταγμένοι τα στοιχεία ενός πίνακα είναι τοποθετημένα

Διαβάστε περισσότερα

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

Λογικό και (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0) 0ι Λογικοί Τελεστές: Πρόκειται για τελεστές που μας επιτρέπουν να συνδυάσουμε απλές εκφράσεις συσχετισμού και να δημιουργήσουμε πιό πολύπλοκες λογικές εκφράσεις. Εχουμε λοιπόν: && Λογικό "και" (AND) μας

Διαβάστε περισσότερα

Να διορθωθούν τα εξής αρχεία scr2.chgeorg, scr2.gmotsias, scr2.ngrammen. cat scr2.*

Να διορθωθούν τα εξής αρχεία scr2.chgeorg, scr2.gmotsias, scr2.ngrammen. cat scr2.* vassik@aetos:~/work/online$ cat scr2.* Τροποπoίηση/Συμπλήρωση του ask2 Δεχεται ονόματα αρχείων ως παραμέτρους Στο 1 ο αρχείο που δίνεται ως παράμετρος, γράφονται μέσα τα ονόματα και τα περιεχόμενα των

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός

Κατανεμημένος και Παράλληλος Προγραμματισμός Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Παράλληλος προγραμματισμός OpenMP (3) Critical vs. Single Η

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο) Προγραμματισμός Η/Υ 1 (Εργαστήριο) Ενότητα 8: Πίνακες Καθηγήτρια Εφαρμογών: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) Χρήσεις Στοίβας Καθημερινή Ζωή (όχι πάρα πολλές) Δίσκοι Τραπεζαρίας

Διαβάστε περισσότερα

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 13-1 Περιεχόμενο

Διαβάστε περισσότερα

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: ΠΡΟΓΡΜΜΑΤΑ ΣΕ C Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: int b_to_d(int dyad[16]) που δέχεται ως είσοδο έναν θετικό ακέραιο δυαδικό αριθμό με τη μορφή πίνακα δυαδικών ψηφίων και επιστρέφει τον

Διαβάστε περισσότερα

ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE

ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE ΕΛΕΓΧΟΣ ΡΟΗΣ IF-ELSE Παράδειγμα 1 Το παρακάτω πρόγραμμα ελέγχει την ηλικία του χρήστη για να τον αφήσει να ψηφίσει. int hlikia; printf("dose thn Hlikia soy: "); scanf("%d", &hlikia); if (hlikia>=18) printf("mporeis

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ,Τηλεπικοινωνιών & ικτύων. Διπλωματική εργασία του Σεντελίδη Θεόδωρου Α.Ε.Μ. : 614

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ,Τηλεπικοινωνιών & ικτύων. Διπλωματική εργασία του Σεντελίδη Θεόδωρου Α.Ε.Μ. : 614 Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ,Τηλεπικοινωνιών & ικτύων Διπλωματική εργασία του Σεντελίδη Θεόδωρου Α.Ε.Μ. : 614 Αξιολόγηση των απόλυτων σωρών Fibonacci Evaluation of strict Fibonacci heaps

Διαβάστε περισσότερα

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Δημητρακάκης Πίνακες/Λίστες Σε πολλές περιπτώσεις στον προγραμματισμό υπάρχει η

Διαβάστε περισσότερα

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017 Κατανεμημένος και Παράλληλος Προγραμματισμός Ηλίας Κ. Σάββας Καθηγητής Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Θεσσαλίας Email: savvas@teilar.gr Εισαγωγή στο MPI Εγκατάσταση του Message Passing Interface,

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } } Πανεπιστήµιο Ιωαννίνων, Τµήµα Πληροφορικής 2 Νοεµβρίου 2005 Η/Υ 432: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκού Έτους 2005-2006 Παναγιώτα Φατούρου Ηµεροµηνία Παράδοσης 1 ο Σετ Ασκήσεων Θεωρητικό Μέρος:

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2011 Θέµα 1 (α') 1 - i 2 - ii 3 - iii 4 - iv 5 - v 6 - vi 7 - vii 8 - viii 9 - ix 10 - x Το αποτέλεσµα είναι η αντιστοιχία των

Διαβάστε περισσότερα

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out) Χρήσεις Στοίβας Καθημερινή Ζωή (όχι πάρα πολλές) Δίσκοι Τραπεζαρίας

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά. Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Δομές Δεδομένων και Τεχνικές Προγραμματισμού Ενότητα 3: ΑΤΔ Ουρά Ιωάννης Κοτρώνης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών Ορίζει τον ΑΤΔ Ουρά Σκοποί ενότητας Σχεδιάζει τον ΑΤΔ Ουρά

Διαβάστε περισσότερα

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. Διάλεξη 11: Φροντιστήριο για Στοίβες Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1 ΑΤΔ Στοίβα- Πράξεις Θυμηθείτε τον ΑΤΔ στοίβα με τις πράξεις του: MakeEmptyStack()

Διαβάστε περισσότερα

Generics και ArrayLists

Generics και ArrayLists ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Generics και ArrayLists Προσοχή!!! Να εκτελεστούν πρώτα όλες οι ασκήσεις τις Θεωρίας

Διαβάστε περισσότερα

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις Γιώργος Λαμπρινίδης lamprinidis@pharm.uoa.gr Ασκήσεις Εμπέδωσης στις εντολές επανάληψης Σε αυτό το εργαστήριο θα δούμε στην πράξη: Πόσο χρήσιμες

Διαβάστε περισσότερα

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. Ερωτήσεις προόδου C Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα. #include // δίνει οδηγία στον compiler να // συμπεριλάβει την βιβλιοθήκη stdio int

Διαβάστε περισσότερα