ΣΕΙ ΕΡΡΩΝ ΧΟΛΗ ΣΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΣΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ Ι Ειςθγθτισ: Δρ. Β. ολαχίδθσ Ιοφνιοσ 2011 Θζμα 1ο [3.5 μονάδες] Να γραφτεί πρόγραμμα ςε C το οποίο κα υπολογίηει τον μζγιςτο και τον μζςο όρο 10 ακεραίων αρικμϊν. Θα πρζπει επίςθσ το πρόγραμμα να μασ ενθμερϊνει ςχετικά με τθ ςειρά με τθν οποία δόκθκε ο μζγιςτοσ (πχ ο 3οσ ι ο 4οσ και ο 6οσ). Οι αρικμοί κα δίνονται από τον χριςτθ και κα πρζπει α) να ανικουν ςτο διάςτθμα [1,100] και β) να μθν επιτρζπεται να δοκεί ζνασ αρικμόσ παραπάνω από 2 φορζσ. Αν ο αρικμόσ είναι εκτόσ διαςτιματοσ κα πρζπει το πρόγραμμα να εκτυπϊνει ςχετικό μινυμα και να ηθτάει πάλι από τον χριςτθ να δϊςει αρικμό. Αν ζνασ αρικμόσ δοκεί παραπάνω από 2 φορζσ να εκτυπϊνεται το μινυμα «ο αρικμόσ ζχει δοκεί ιδθ 2 φορζσ, παρακαλϊ ειςάγετε ξανά διαφορετικό αρικμό» και να ηθτάει πάλι από τον χριςτθ να δϊςει αρικμό. Βακμολόγθςθ: Τλοποίθςθ του προγράμματοσ χωρίσ τον περιοριςμό β και χωρίσ τθν εκτφπωςθ ςειράσ (ι ςειρϊν) με τθν οποία δόκθκε ο μζγιςτοσ: 1 μονάδα Περιοριςμόσ β: 2 μονάδεσ Εκτφπωςθ τθσ ςειράσ (ι ςειρϊν) με τθν οποία δόκθκε ο μζγιςτοσ: μιςι μονάδα Παράδειγμα εκτέλεσης Parakalw grapste ton 1o ari8mo sto diastima [1,100]: 1 Parakalw grapste ton 2o ari8mo sto diastima [1,100]: 3 Parakalw grapste ton 3o ari8mo sto diastima [1,100]: 300 Parakalw doste ton 3o ari8mo sto diastima [1,100]:5 Parakalw grapste ton 4o ari8mo sto diastima [1,100]: 7 Parakalw grapste ton 5o ari8mo sto diastima [1,100]: 5 Parakalw grapste ton 6o ari8mo sto diastima [1,100]: 7 Parakalw grapste ton 7o ari8mo sto diastima [1,100]: 5 O ari8mos 5 exei do8ei idi 2 fores, parakalw eisagete diaforetiko ari8mo (ton 7o ):300 Parakalw doste ton 7o ari8mo sto diastima [1,100]:6 Parakalw grapste ton 8o ari8mo sto diastima [1,100]: 2 Parakalw grapste ton 9o ari8mo sto diastima [1,100]: 3 Parakalw grapste ton 10o ari8mo sto diastima [1,100]: 1 O mesos oros einai isos me 4.000000 O megistos einai o 7 kai einai o 4os sti seira kai o 6os sti seira Θζμα 2ο [3.5 μονάδες] Σο παιχνίδι τρίλιηα παίηεται ςε ζνα πλζγμα (πίνακα) διαςτάςεων 3 3. Οι παίκτεσ παίηουν εναλλάξ και κάκε παίκτθσ τοποκετεί το ςφμβολο που του αντιςτοιχεί (ςυνικωσ το Χ και το Ο ) ςε κενι κζςθ. κοπόσ του παιχνιδιοφ είναι θ δθμιουργία μιασ τριάδασ ίδιων ςυμβόλων οριηόντια, κάκετα ι διαγϊνια. Να γραφτεί ζνα πρόγραμμα ςε C το οποίο να προςομοιάηει το παιχνίδι. Αρχικά εμφανίηεται το πλζγμα χωρίσ ςφμβολα αλλά με το a, b, c και το 1, 2, 3 ςτθν αρχι τθσ κάκε γραμμισ και ςτιλθσ αντίςτοιχα. Μζςω αυτϊν των γραμμάτων και αρικμϊν ο παίκτθσ επιλζγει το που κα τοποκετιςει το ςφμβολό του. Αν θ κζςθ όμωσ που επιλζξει ο παίκτθσ δε είναι κενι κα πρζπει να εμφανίηεται ςχετικό μινυμα και να ηθτείται από τον παίκτθ εκ νζου επιλογι κζςθσ. Μετά από κάκε επιλογι από τον παίκτθ το πρόγραμμα κα πρζπει να ελζγχει αν ζχει γίνει τρίλιηα (και να ςταματιςει το παιχνίδι ανακθρφςςοντασ τον νικθτι) ι όχι (και να ςυνεχίηει με τον άλλο παίκτθ). Για το πλζγμα μπορείτε να χρθςιμοποιιςετε ζναν διδιάςτατο πίνακα διαςτάςεων 3 3 του οποίου το κάκε κελί αρχικά ζχει μθδενικι τιμι. Ζτςι, θ μθδενικι τιμι κα υποδθλϊνει τθ κενι κζςθ, ενϊ επίςθσ μπορεί το 1 να υποδθλϊνει τθ κζςθ του Χ και το 2 τθ κζςθ του Ο. Δεν απαιτείται να γράψετε κϊδικα για τθν εμφάνιςθ του πλζγματοσ. Γράψτε όμωσ ςχόλιο ςτα κατάλλθλα ςθμεία του κϊδικα (// εδϊ εμφανίηουμε το πλζγμα). ελίδα 1 από 3
Αναλυτικότερα πρζπει (βακμολόγθςθ) Να ορίςετε τον πίνακα και να τον μθδενίςετε (0.25) Να ηθτιςετε από τον παίκτθ να επιλζξει τετράγωνο, να μετατρζψετε τθν επιλογι του (γράμμα + αρικμόσ) ςε αντίςτοιχθ γραμμι-ςτιλθ του πίνακα (π.χ. το b2 αντιςτοιχεί ςτο κελί 1,1) (0.5) Να ελζγξετε αν το κελί είναι κενό και ανάλογα να ςυνεχίςετε (0.25) Να ελζγξετε αν ζγινε τρίλιηα και να ςταματιςετε το παιχνίδι ι να ςυνεχίςετε (1 μονάδα) Γενικότερθ μορφι του προγράμματοσ (1.5) Παράδειγμα εκτέλεσης 1 Παράδειγμα εκτέλεσης 2 Triliza ------- Triliza ------- b - - - c - - - (gramma - ari8mo px b1)-----b2 c - - - (gramma - ari8mo px b1)-----c2 c - o - (gramma - ari8mo px b1)-----c2 To sugkekrimeno tetragwno den einai keno. Epile3te 3ana c - o - (gramma - ari8mo px b1)-----c1 c x o - (gramma - ari8mo px b1)-----a3 a - - o c x o - (gramma - ari8mo px b1)-----a1 a x - o c x o - (gramma - ari8mo px b1)-----b1 a x - o b o x - c x o - (gramma - ari8mo px b1)-----c3 NIKHTHS O PAIXTHS 1 a x - o b o x - c x o x b - - - c - - - (gramma - ari8mo px b1)-----b2 c - - - (gramma - ari8mo px b1)-----c1 c o - - (gramma - ari8mo px b1)-----a1 a x - - c o - - (gramma - ari8mo px b1)-----c3 a x - - c o - o (gramma - ari8mo px b1)-----c2 a x - - (gramma - ari8mo px b1)-----a2 a x o - (gramma - ari8mo px b1)-----b3 a x o - b - x x (gramma - ari8mo px b1)-----b1 a x o - b o x x (gramma - ari8mo px b1)-----a3 Isopalia - den uparxei nikitis a x o x b o x x ελίδα 2 από 3
Θζμα 3ο [3.5 μονάδες] τον παρακάτω πίνακα παρουςιάηεται θ χρζωςθ κλιςεων ανά λεπτό κλιςθσ. Θεωροφμε ότι οι χρεϊςεισ αφοροφν κλιςεισ ςε ςτακερά ερρϊν, ςτακερά υπόλοιπθσ χϊρασ και τριϊν εταιριϊν κινθτισ τθλεφωνίασ όπωσ φαίνεται ςτον παρακάτω πίνακα. Κλιςθ προσ τακερό ερρϊν τακερό υπόλοιπθσ Ελλάδασ Κινθτό COSMOTE Κινθτό VODAFONE Κινθτό WIND Κόςτοσ χρζωςθσ (ςε ) 0.02 0.05 0.2 0.19 0.18 ανά λεπτό Ρυκμόσ χρζωςθσ (ςε 1 10 20 25 30 δευτερόλεπτα) Αρικμόσ 2321****** 2********* 697******* 694******* 693******* Ο ρυκμόσ χρζωςθσ ςχετίηεται με τθ διάρκεια κλιςθσ. Ζτςι αν π.χ. κάνουμε μια κλιςθ προσ ςτακερό υπόλοιπθσ Ελλάδασ διάρκειασ 32 θ κλιςθ κα χρεωνόταν για 40 (4 10 ). Σο πρόγραμμα κα ηθτάει από τον χριςτθ τον αρικμό τθλεφϊνου και αν είναι 10ψιφιοσ (αν δεν είναι κα ξαναηθτάει) κα ελζγχει αν είναι τθσ κατάλλθλθσ μορφισ (π.χ. για ςτακερό ερρϊν τθσ μορφισ 2321******) - (αν δεν είναι κα ξαναηθτάει). Κατόπιν, κα ηθτάει από τον χριςτθ τθ διάρκεια χρζωςθσ ςε δευτερόλεπτα και κα επιςτρζφει τον χρόνο για τον οποίο χρεϊκθκε (ςε δευτερόλεπτα) και το κόςτοσ τθσ χρζωςθσ (ςε ευρϊ και λεπτά). Η ςτρογγυλοποίθςθ του κόςτουσ χρζωςθσ να γίνει ςτο 2 ο δεκαδικό ψθφίο. Παραδείγματα εκτζλεςθσ Parakalw dwste ton ari8mo tilefwnou xwris kena 2101231 O ari8mos prepei na apoteleitai apo akribws 10 psifia, dwste xana 2101234567 Sta8ero Ektos Serrwn Parakalw dwste diarkeia klisis se deuterolepta 345 Xrewneste gia 350 deuterolepta klisis kai i xrewsi einai : 29 lepta Parakalw dwste ton ari8mo tilefwnou xwris kena 6971234567 Kinito Cosmote Parakalw dwste diarkeia klisis se deuterolepta 265 Xrewneste gia 280 deuterolepta klisis kai i xrewsi einai : 93 lepta Parakalw dwste ton ari8mo tilefwnou xwris kena 12345 O ari8mos prepei na apoteleitai apo akribws 10 psifia, dwste xana 1234567890 Den uparxei tetoios ari8mos. Dwste 3ana ari8mo: 2321012345 Sta8ero Serrwn Parakalw dwste diarkeia klisis se deuterolepta 365 Xrewneste gia 365 deuterolepta klisis kai i xrewsi einai : 12 lepta Parakalw dwste ton ari8mo tilefwnou xwris kena 6941234567 Kinito Vodafone Parakalw dwste diarkeia klisis se deuterolepta 567 Xrewneste gia 575 deuterolepta klisis kai i xrewsi einai : 1 euro kai 82 lepta φνολο μονάδων 10.5 Βάςθ 5. Ελάχιςτοσ χρόνοσ παραμονισ ςτθν αίκουςα 30 λεπτά Οι φοιτθτζσ μποροφν να κρατιςουν τα κζματα μόνο αν αποχωριςουν τα τελευταία 15 τθσ εξζταςθσ ελίδα 3 από 3 Καλή επιτυχία
Θέμα 1 #include<stdio.h> #include<conio.h> #define N 10 void main() int i, counter[100],number,sum=0,max=0,index,index2=-1; // Σσον πίνακα counter εκασό θέςεψν κασαγπάυοτμε σο πλήθορ σψν εμυανίςεψν σψν απιθμών // Τον απφικοποιούμε μηδενίζονσαρ σιρ σιμέρ σοτ for(i=0;i<100;i++) counter[i]=0; // θα μποπούςασε εναλλακσικά να μεσπάσε σο πλήθορ σψν εμυανίςεψν σοτ κάθε απιθμοτ // ςτγκπίνονσαρ σον σπέφονσα (ατσό ποτ δώθηκε) με σοτρ πποηγούμενοτρ for(i=0;i<n;i++) printf("parakalw grapste ton %do ari8mo sto diastima [1,100]: ",i+1); scanf("%d",&number); // Αν ο απιθμόρ είναι εκσόρ διαςσήμασορ ή έφει ήδη δοθεί 2 υοπέρ // σύπψςε σο ςφεσικό μήντμα και ξαναζήσα σον while((number<1) (number>100) counter[number-1]==2) //Αν ο number είναι εκσόρ οπίψν σόσε δεν βγαίνοτμε εκσόρ πίνακα (counter[number-1]) //διόσι οι πποηγούμενοι έλεγφοι (number<1) (number>100) μαρ βγάζοτν έξψ από ση while if (counter[number-1]==2) printf("o ari8mos %d exei do8ei idi 2 fores,\n parakalw eisagete diaforetiko ari8mo (ton %do ):",number,i+1); else printf("parakalw doste ton %do ari8mo sto diastima [1,100]:",i+1); scanf("%d",&number); //Αύξηςε σο ςσοιφείο number-1 σοτ πίνακα σοτ πλήθοτρ σψν εμυανίςεψν κασά 1 counter[number-1]++; //Αύξηςε σον αθποιςσή κασά number sum+=number; // Αν ο απιθμόρ ποτ δοθηκε είναι μεγαλύσεπορ σοτ max σόσε ο max παίπνει σην σιμή σοτ // απιθμού και σο index ση θέςη σοτ. // Αν σο index2 είναι ίςο με -1 σόσε ο μέγιςσορ εμυανίζεσαι μόνο μια υοπά if (number>max) max=number; index=i; index2=-1; // Αν έναρ απιθμόρ είναι ίςορ με σο max σόσε εμυανίζεσαι δεύσεπη υοπά // οπόσε η θέςη σηρ δεύσεπηρ εμυάνιςηρ παίπνει ση σιμή i. else if (number==max) index2=i;
printf("\no mesos oros einai isos me %f ",(float)sum/n); printf("\no megistos einai o %d kai einai o %dos sti seira",max,index+1); // An σο index2 είναι μεγαλύσεπο σοτ -1 σόσε ο μέγιςσορ εμυανίζεσαι // και δεύσεπη υοπά if (index2>-1) printf(" kai o %dos sti seira",index2+1); getch(); Θέμα 2 #include<stdio.h> #include<conio.h> int main() int i,j,counter=0,winner=0,paixtis=1,triliza[3][3],epilogi,grammi,stili,sum,row,column,diag; char c; printf("triliza\n-------\n\n\n"); //Μηδενιςμόρ σψν ςσοιφείψν σοτ πίνακα triliza for(i=0;i<3;i++) triliza[i][j]=0; // Για όςο οι δεν τπάπφει νικησήρ και έφοτν γίνει λιγόσεπερ από 9 πποςπάθειερ while((counter<9) &&(winner==0)) //Εκσύπψςη σηρ σπίλιζαρ printf(" \n"); for(i=0;i<3;i++) printf("%c ",'a'+i); switch (triliza[i][j]) case 0: printf(" - "); case 1: printf(" x "); case 2: printf(" o "); printf("\n"); //Τέλορ εκσύπψςηρ σηρ σπίλιζαρ //Διάβαςμα επιλογήρ φπήςση
printf("------paixtis %d, Epele3e keno tetragwno (gramma - ari8mo px b1)-----",paixtis); scanf("%c%d",&c,&epilogi); fflush(stdin);//μη δώςεσε ςημαςία ςε ατσή ση γπαμμή //Μεσασποπή επιλογήρ φπήςση ςε απιθμό γπαμμήρ/ςσήληρ grammi=(int)(c-'a'); stili=epilogi-1; //Αν ο φπήςσηρ επέλεξε κενό ή όφι κελί if (triliza[grammi][stili]>0) printf("to sugkekrimeno tetragwno den einai keno. Epile3te 3ana\n"); else triliza[grammi][stili]=paixtis;//δψςε ςσο κελί σον απιθμό σοτ παίκση counter++; //Έλεγφορ για σο αν ο παίκσηρ ο οποίορ έπαιξε έκανε σπίλιζα //Έλεγφορ γπαμμών row=0; while((winner==0)&&(row<3)) sum=0; if (triliza[row][j]==paixtis) sum++; if (sum==3) winner=1; row++; //Έλεγφορ ςσηλών column=0; while((winner==0)&&(column<3)) sum=0; if (triliza[j][column]==paixtis) sum++; if (sum==3) winner=1; column++; //Έλεγφορ διαγψνίψν diag=0; while((winner==0)&&(diag<2)) sum=0; if (triliza[j][2*diag+(1-diag)*j-diag*j]==paixtis) sum++; //Αν υαίνεσαι πολύπλοκο, θα μποπούςαν να γπαυσούν ξεφψπιςσοι κώδικερ για // κάθε διαγώνιο αυού // αν diag=0 σοσε ο κώδικαρ παίπνει ση μοπυή // if (triliza[j][j]==paixtis) για σην ππώση διαγώνιο (θέςειρ 00,11,22)
// και // αν diag=1 σοσε ο κώδικαρ παίπνει ση μοπυή // if (triliza[j][2*diag-j]==paixtis) για σην δεύσεπη διαγώνιο (θέςειρ 02,11,20) if (sum==3) winner=1; diag++; //Αν δεν τπάπφει νικησήρ άλλαξε παίκση if (winner==0) paixtis=3-paixtis; // paixtis 1<->2 // Τέλορ σοτ if "Αν ο φπήςσηρ επέλεξε κενό ή όφι κελί" // σέλορ σηρ while if (winner==0) printf("isopalia - den uparxei nikitis\n"); else printf("nikhths O PAIXTHS %d\n",paixtis); //Εκσύπψςη σηρ σπίλιζαρ printf(" \n"); for(i=0;i<3;i++) printf("%c ",'a'+i); switch (triliza[i][j]) case 0: printf(" - "); case 1: printf(" x "); case 2: printf(" o "); printf("\n"); //Τέλορ εκσύπψςηρ σηρ σπίλιζαρ getch(); Θέμα 3 #include<stdio.h> #include<conio.h> #include<string.h>
int main() int i,found=0,category=-1,duration,seconds,interval_sec[]=20, 25, 30, 1, 10,charge,euro=0; char ari8mos[20]; float charge_per_min[]=0.2, 0.19, 0.18, 0.02, 0.05; float kostos_pec_sec; // Οι μεσαβλησέρ ςσοτρ πίνακερ interval_sec και charge_per_min γπάυσηκαν με ση ςειπά // COSMOTE, VODAFONE, WIND, Σσαθεπο Σεππερ, Σσαθεπό εκσόρ Σεππών printf("parakalw dwste ton ari8mo tilefwnou xwris kena\n"); scanf("%s",ari8mos); // Μεσά σο σέλορ σηρ while η μεσαβλησή category παίπνει μια από σιρ 5 σιμέρ (0-4) // ανάλογα με ση κασηγοπία ςσην οποία ανήκει ο απιθμόρ // COSMOTE, VODAFONE, WIND, Σσαθεπο Σεππερ, Σσαθεπό εκσόρ Σεππών while (category==-1) while (strlen(ari8mos)!=10) //Ελέγφψ σο πλήθορ σψν χηυίψν printf("o ari8mos prepei na apoteleitai apo akribws 10 psifia, dwste xana\n"); scanf("%s",ari8mos); if (strncmp(ari8mos,"69",2)==0) //Ελέγφψ αν ο απιθμόρ ανσιςσοιφεί ςε κινησό (αν απφίζει από 69) switch(ari8mos[2]) case '7': printf("kinito Cosmote"); category=0; case '4': printf("kinito Vodafone"); category=1; case '3': printf("kinito Wind"); category=2; // Αν σο 3ο χηυίο (ari8mos[2]) δεν είναι 7 ή 4 ή 3 σόσε σο category θα εξακολοτθεί να είναι -1 // οπόσε ςσο σέλορ σηρ while σο ππόγπαμμα θα ξαναζησήςει να δώςοτμε απιθμό. if (ari8mos[0]=='2') //Ελέγφψ αν ο απιθμόρ ανσιςσοιφεί ςε ςσαθεπό (αν απφίζει από 2) if (strncmp(ari8mos,"2321",4)==0) printf("sta8ero Serrwn"); category=3; else
printf("sta8ero Ektos Serrwn"); category=4; if (category==-1) printf("den uparxei tetoios ari8mos. Dwste 3ana ari8mo: \n"); scanf("%s",ari8mos); // σέλορ σηρ while printf("\nparakalw dwste diarkeia klisis se deuterolepta\n"); scanf("%d",&duration); //Υπολογιςμόρ φπέψςηρ ////////////////////////// //Κόςσορ ςε ετπολεπσά ανά δετσεπόλεπσο kostos_pec_sec=charge_per_min[category]*(float)100/60; //Δετσεπόλεπσα φπέψςηρ (ςσπογγτλοποιημένα - ππορ σα επάνψ) //πποςοφή, γίνεσαι διαίπεςη ακεπαίψν, αποσέλεςμα ακέπαιορ (-> ςσπογγτλοποίηςη) seconds = ( (duration-1)/interval_sec[category] +1)*interval_sec[category]; //duration: διάπκεια κλήςηρ, seconds:δετσεπόλεπσα φπέψςηρ //duration =< seconds //Υπολογιςμόρ φπέψςηρ charge=(int)(kostos_pec_sec*seconds+0.5); printf("\nxrewneste gia %d deuterolepta klisis kai i xrewsi einai : ",seconds); // Εκσύπψςη φπέψςηρ // Αν η φπέψςη είναι μεγαλύσεπη ή ίςη σψν 100 ετπολεπσών σόσε στπώνοτμε και σα // ετπώ if ((charge/100)>0) //πποςοφή, γίνεσαι διαίπεςη ακεπαίψν, αποσέλεςμα ακέπαιορ (-> ςσπογγτλοποίηςη) printf("%d euro ",charge/100); euro=1; if ((charge%100)>0) //Αν η φπέψςη δεν είναι πολλαπλάςια σψν 100 ετπολεπσών σόσε // στπώνοτμε και σα ετπολεπσά if (euro==1) printf(" kai "); //στπώνψ σο "και" αν έφψ στπώςει πποηγοτμένψρ ετπώ printf("%d lepta ",charge%100); getch();