Φεβρουάριος 2006, Θέμα 1ο (35%) Να γραφεί πρόγραμμα στη γλώσσα C,, το οποίο θα υπολογίζει το λογαριασμό ηλεκτρικού ρεύματος, που εκδίδει η επιχείρηση ηλεκτρισμού μίας περιοχής, με βάση τις ακόλουθες προδιαγραφές: (1) Ο συνολικός λογαριασμός (ΣΛ) προκύπτει ως το άθροισμα ΣΛ=ΛΗΡ+ΛΤ+ΦΠΑ, όπου ΛΗΡ είναι ο λογαριασμός ηλεκτρικού ρεύματος, ΛΤ το σύνολο των λοιπών τελών και ΦΠΑ ο φόρος προστιθέμενης αξίας με μ συντελεστή 8% επί του ΛΗΡ (ΦΠΑ=8% του ΛΗΡ). (2) Για τον υπολογισμό του ΛΗΡ ακολουθείται η εξής τιμολογιακή πολιτική για έναν οικιακό καταναλωτή: Έστω ΚΩ (σε κιλοβατώρες) η συνολική κατανάλωση κατά τη διάρκεια ενός τετραμήνου. Το τίμημα της κατανάλωσης (ΤΚ) προκύπτει ως εξής: Για κατανάλωση από 1 έως 820 κιλοβατώρες: 0.06817 Є/ κιλοβατώρα Για τις επόμενες κιλοβατώρες από 821 έως 1640: 0.08687 Є/ κιλοβατώρα Για τις επόμενες κιλοβατώρες από 1641 έως 2050: 0.10662 Є/ κιλοβατώρα Για τις επόμενες κιλοβατώρες: 0.14127 Є/ κιλοβατώρα ΛΗΡ=ΤΚ+ΠΧ-ΠΣ ΠΣ-ΕΡ+ΤΑΠΕ, όπου: ΠΧ είναι η πάγια χρέωση, ύψους 29.64 Є. ΠΣ είναι το ποσό στρογγυλοποίησης (ΠΣ) του προηγούμενου λογαριασμού.
ΕΡ είναι η αξία του ρεύματος που δόθηκε ως έναντι στον προηγούμενο λογαριασμό. ΤΑΠΕ είναι το τέλος για τις ανανεώσιμες πηγές ενέργειας, ύψους 1.771 Є. (3) Τα λοιπά τέλη ΛΤ αποτελούνται από το άθροισμα των τεσσάρων ακόλουθων τελών: (3.1) Του τέλους υπέρ της κρατικής ραδιοτηλεόρασης, το οποίο συμβολίζεται ως ΤΕΡΤ, και ισούται με ΤΕΡΤ=13.10-ΕΝΕΡΤ, ΕΝΕΡΤ, όπου ΕΝΕΡΤ το ποσό έναντι του προηγούμενου λογαριασμού. (3.2) Του δημοτικού τέλους, ύψους 49.47 Є, το οποίο συμβολίζεται ως ΔΤ. (3.3) Του δημοτικού φόρου, ύψους 6.18 Є, το οποίο συμβολίζεται ως ΔΦ. (3.4) Του τέλους ακίνητης περιουσίας, ύψους 6.80 Є, το οποίο συμβολίζεται ως ΤΑΠ. (4) Ο ΣΛ στρογγυλοποιείται στο ευρώ, δηλαδή εάν το κόστος είναι 143.34 34 Є ο λογαριασμός στρογγυλοποιείται στα 143 Є, ενώ κόστος 143.56 Є οδηγεί σε λογαριασμό 144 Є. (5) Το πρόγραμμα δέχεται από το χρήστη τιμές για τις μεταβλητές ΚΩ, ΠΣ, ΕΡ, ΕΝΕΡΤ. Επαλήθευση: Εάν ο χρήστης δώσει ΚΩ=2948 κιλοβατώρες, ΠΣ=0.04 Є, ΕΡ=56.07 Є, ΕΝΕΡΤ=5.95 Є, το πρόγραμμα θα πρέπει να υπολογίσει ΣΛ=364 00 Є
#include <stdio.h< stdio.h> #include <conio.h< conio.h> #include <stdlib.h< stdlib.h> #define PX 29.64 #define TIMH_1 0.06817 #define TIMH_2 0.08687 #define TIMH_3 0.10662 #define TIMH_4 0.14127 #define SYNT_FPA 0.08 #define TAPE 1.77 #define SYNT_ERT 13.10 #define DT 49.47 #define DF 6.18 #define TAP 6.80 void main() { int kw; float tk,ps,er,enert,pp,lir,tert,lt,sl; printf("\nmeasurement nmeasurement (in kilowatthour)= "); scanf("%d",&kw);
printf("\nps nps (in euros)= "); scanf("%f",&ps); printf("\ner ner (in euros)= "); scanf("%f",&er); printf("\nenert nenert (in euros)= "); scanf("%f",&enert); if (kw( kw<=820) tk=kw kw*timh_1; else if (kw( kw<=1640) tk=820*timh_1+(kw =820*TIMH_1+(kw-820)*TIMH_2; 820)*TIMH_2; else if (kw( kw<=2050) tk=820*(timh_1+timh_2)+(kw =820*(TIMH_1+TIMH_2)+(kw-1640)*TIMH_3; 1640)*TIMH_3; else tk=820*(timh_1+timh_2)+410*timh_3+(kw =820*(TIMH_1+TIMH_2)+410*TIMH_3+(kw-2050)*TIMH_4; 2050)*TIMH_4; tk=tk tk+px; lir=tk tk-ps-er+tape; tert=synt_ert SYNT_ERT-enert; lt=tert tert+dt+df+tap; sl=(1+synt_fpa)* =(1+SYNT_FPA)*lir+lt; if ((sl sl-(int)sl)>=0.5) sl=( =(int)sl+1.0; else sl=(int)sl; printf("\n\n\tsl= tsl= %f\n\n\n",sl); n",sl); system("pause"); ");
Φεβρουάριος 2006, Θέμα 3ο (45%) Να γραφεί πρόγραμμα στη γλώσσα C,, το οποίο θα επιτελεί τα ακόλουθα: Θα δέχεται από το πληκτρολόγιο τα ονοματεπώνυμα δύο φοιτητών, έως ς 40 χαρακτήρες το καθένα και δοσμένα με κεφαλαία λατινικά γράμματα, και θα τα αποθηκεύει σε δισδιάστατο πίνακα χαρακτήρων all[2][41]. Θα διαχωρίζει τα μικρά ονόματα από τα επώνυμα και θα τα αποθηκεύει ει σε δύο ξεχωριστούς δισδιάστατους πίνακες χαρακτήρων, nm[2][16] για τα μικρά ονόματα και sr[2][26] για τα επώνυμα. Θα ταξινομεί αλφαβητικά τα επώνυμα και θα αναδιατάσσει τόσο τα μικρά ονόματα όσο και τα επώνυμα σε δύο νέους πίνακες nm_new new[2][16] και sr_new new[2][26]. Θα πρέπει να ληφθεί μέριμνα ώστε εάν το ένα επώνυμο είναι υποσύνολο του άλλου (π.χ. ΧΑΤΖISAVVAS και ΧΑΤΖIS IS) ) ταξινομείται ως πρώτο το συντομότερο εξ αυτών. Θα εμφανίζει τους πίνακες nm, sr, nm_new new, sr_new στην οθόνη. Δίνεται ότι: Τα ονοματεπώνυμα δόθηκαν σωστά, με κεφαλαία λατινικά γράμματα, και κ δεν απαιτείται έλεγχος γι αυτό. Όταν ο χρήστης πληκτρολογεί ένα ονοματεπώνυμο διαχωρίζει το όνομα από το επώνυμο με απλό κενό.
Κάθε μικρό όνομα και επώνυμο είναι απλό, δεν περιέχει διπλά ονόματα, τίτλους ευγενείας ή άλλου είδους προσφωνήσεις. Επαλήθευση: Εάν ο χρήστης δώσει JOAN JAMESON και ANDREW DOE, οδηγούμαστε στους ακόλουθους πίνακες: all[0] = JOAN JAMESON all[1] = ANDREW DOE nm[0] = JOAN nm[1] = ANDREW sr[0] = JAMESON sr[1] = DOE nm_new[0] = ANDREW nm_new[1] = JOAN sr_new[0] = DOE sr_new[1] = JAMESON #include <stdio.h< stdio.h> #include <conio.h< conio.h> #include <string.h< string.h> void main() { char all[2][41],nm[2][16],nm_new[2][16],sr[2][26],sr_new[2][26]; ]; int i,j,mikos,count=0; printf("give first name: "); gets(all all[0]); //gets για να αναγνωρισθούν τα κενά
printf("\ngive ngive second name: "); gets(all[1]); for (i=0;i<2;i++) { j=0; while (all[i][j( all[i][j]!=' ]!=' ') { nm[i][j]=all[i][j]; j++; nm[i][j]='\0'; j=0; do { sr[i][ ][j]=all[i][strlen(nm[i])+j];]; //Έτσι δε λαμβάνεται υπόψη το ενδιάμεσο κενό j++; while (all[i][j( all[i][j]!=' ]!='\0'); printf("\nnm[%d nnm[%d]=% ]=%s\tsr[%d]=%s",i,nm[i],i,sr[i]);]); mikos=(strlen(sr[0])<strlen(sr[1]))?strlen(sr[0]):strlen(sr[1]); i=0;
do { if (sr[0][i]<sr[1][i]) count++; i++; while ((i<mikos mikos) ) && (!count)); if ((count) (strlen(sr[0])>strlen(sr[1]))) { strcpy(sr_new[0],sr[1]); strcpy(sr_new[1],sr[0]); strcpy(nm_new[0],nm[1]); strcpy(nm_new[1],nm[0]); else for (i=0;i<2;i++) { strcpy(sr_new[i],sr[i]); ]); strcpy(nm_new[i],nm[i]); ]); for (i=0;i<2;i++) printf("\nnm_new[%d nnm_new[%d]=% ]=%s\tsr_new[%d]=%s",i,nm_new[i],i,sr_new[i]);]);
// 2006_2 2_3 Προγραμματισμός ς Ι