Παραδείγματα Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών
Βήματα Δεδομένα : αριθμοί που δίνονται από το χρήστη. Δεδομένα υπολογισμού: μέση τιμή Πλήθος δεδομένων: άγνωστο, οπότε θα πρέπει να δηλωθεί το τέλος των δεδομένων. Συνήθως ορίζεται χαρακτήρας τερματισμού. Στο συγκεκριμένο πρόβλημα μπορεί να οριστεί το -1 (δεν πρέπει να συγχέεται με πιθανά δεδομένα).
Βήματα Υπολογισμός αθροίσματος δεδομένων που θα εισαχθούν από το χρήστη. Μπορεί να γίνει χρησιμοποιώντας μία μεταβλητή για το εκάστοτε δεδομένο εισόδου και μία για το μερικό άθροισμα. Διαίρεση με το πλήθος των δεδομένων που θα εισαχθούν
Βήματα Stream ειδόδου (Δεδομένα που θα εισαχθούν από το χρήστη -1 για τερματισμό) 1 3.6 9.8 3 4 5-1 1. Μία μεταβλητή για το εκάστοτε δεδομένου εισόδου 3. Στο τέλος θα πρέπει να διαιρέσουμε το συνολικό άθροισμα με το πλήθος δεδομένων εισόδου 2. Μία μεταβλητή όπου θα αποθηκεύεται το μερικό άθροισμα των δεδομένων εισόδου
Πρόγραμμα #include <stdio.h> #include <stdlib.h> main(){ //Δηλώσεις μεταβλητών int metritis = 0; Πλήθος δεδομένων εισόδου double arithm=0, athroisma=0.0, mesi_timi; Το εκάστοτε δεδομένο εισόδου Μερικό άθροισμα των δεδομένων εισόδου Τελικό αποτέλεσμα
do{ athroisma+=arithm; ++metritis; Πρόγραμμα Ισοδυναμεί με athroisma = athroisma + arithmos printf("input a positive number (-1 to finalize) \n"); scanf("%lf",&arithm); }while( arithm!= -1 ); Συνθήκη Επανάληψης
Πρόγραμμα if (metritis == 1) printf("no data\n"); else{ mesi_timi = athroisma/(metritis-1); printf("mesi timi:%f\n",mesi_timi); printf("metritis:%d\n",metritis-1); } system("pause"); return 0; }
Παραδείγματα Στο προηγούμενο πρόγραμμα υπολογίστε και τη διακύμανση σ 2 του δείγματος που δίνεται από τον τύπο σ 2 = (1/n)*Σχ ι2-1/n 2 *(Σχ ι ) 2
Παραδείγματα Ο πρώτος όρος υπολογίζεται από το άθροισμα των τετραγώνων των όρων που δίνει ο χρήστης δια του πλήθους των στοιχείων Ο δεύτερος όρος ισούται με το τετράγωνο της μέσης τιμής
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #include <math.h> main(){ // Δηλώσεις μεταβλητών int metritis = 0; double arithm=0, athroisma=0.0, mesi_timi, athroisma2 = 0.0, diakimansi;
Πρόγραμμα do{ athroisma+=arithm; athroisma2 += pow(arithm,2); ++metritis; printf("input a positive number (-1 to finalize) \n"); scanf("%lf",&arithm); }while( arithm!= -1 );
Προγράμματα if (metritis == 1) printf("no data\n"); else{ mesi_timi = athroisma/(metritis-1); diakimansi = athroisma2/(metritis - 1) - pow(mesi_timi,2); printf("mesi timi:%.2lf, Diakimansi:%.2lf\n",mesi_timi, diakimansi); printf("metritis:%d\n",metritis-1); } system("pause"); return 0; }
Παραδείγματα Για ένα διάλυμα με ph 14 θέλουμε να εκτυπώνεται λίστα με τις παρακάτω επιλογές. 1. Εμφάνιση ph 2. Υπολογισμός poh 3. Υπολογισμός ph μετά από 5 min, αν ο χρήστης εισάγει σταθερό ποσοστό μείωσης/min 4. Έξοδος
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #define ph 14 Ορισμός της σταθεράς ph. Όπου γράφω το συμβολικό όνομα ph, αντικαθίσταται με την αριθμητική τιμή 14 main(){ int selection, i; double phresult= ph, meiwsh = 0, rythmos;
Πρόγραμμα //Εκτύπωση της λίστας επιλογών printf("-----epiloges--------\n"); printf("1. Emfanish ph \n"); printf("2. Emfanish poh \n"); printf("3. Rythmos metavolhs \n"); printf("4. E3odos\n");
Πρόγραμμα scanf("%d",&selection); Η επιλογή του χρήστη switch(selection){ case(1): printf("ph = 14 \n"); break; case(2): printf(" poh = 0\n"); break;
case(3): Μονάδες μείωσης του ph μετά από i min Μονάδες ph μετά από i min Πρόγραμμα printf("input pososto rythmou meiwshs\n"); scanf("%lf",&rythmos); for (i=1; i<=5; i++) { meiwsh = phresult*rythmos/100.0; phresult -= meiwsh; } printf("meta apo 5 min to teliko ph=%f\n",phresult); break;
Πρόγραμμα case(4): break; default: printf("dwse arithmo apo 1 ews 4\n"); } system("pause"); return 0; }
Παραδείγματα Τροποποιήστε την προηγούμενη άσκηση έτσι ώστε το μενού επιλογών να εμφανίζεται συνεχώς μέχρι ο χρήστης να επιλέξει 4 (έξοδο).
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #define ph 14 main(){ int selection, i, flag =1; Αρχικοποίηση Μεταβλητής ελέγχου double phresult= ph, meiwsh = 0, rythmos; while ( flag ){ Έλεγχος Συνθήκης printf("-----epiloges--------\n"); printf("1. Emfanish ph \n"); printf("2. Emfanish poh \n"); printf("3. Rythmos metavolhs \n"); printf("4. E3odos\n");
Πρόγραμμα scanf("%d",&selection); switch(selection){ case(1): printf("ph = 14 \n"); break; case(2): printf(" poh = 0\n"); break; case(3): printf("input pososto rythmou meiwshs\n"); scanf("%lf",&rythmos); for (i=1; i<=5; i++) { meiwsh = phresult*rythmos/100.0; phresult -= meiwsh; } printf("meta apo 5 min to teliko ph=%f\n",phresult); break;
Πρόγραμμα case(4): flag = 0; break; default: printf("dwse arithmo apo 1 ews 4\n"); } } system("pause"); return 0; } Μεταβολή της μεταβλητής ελέγχου
Παραδείγματα Να εκτυπωθούν όλοι οι πρώτοι αριθμοί που είναι μεγαλύτεροι από ένα δεδομένο αριθμό πχ ORIO (= 100). Πρώτος αριθμός είναι οποισδήποτε ακέραιος μεγαλύτερος ή ίσος του 2, του οποίου οι μόνοι θετικοί διαιρέτες είναι το 1 και ο εαυτός του. Πρώτοι αριθμοί είναι οι: 2,3,5,7,11,13...
Επίλυση προβήματος για έναν αριθμό Πώς αποφασίζω αν ένας αριθμός x είναι πρώτος? θα πρέπει να διαιρείται μόνο με τον εαυτό του και τη μονάδα, δηλαδή δεν πρέπει να υπάρχει αριθμός y στο (1,x) o οποίος να διαιρεί ακριβώς τον x
Πρόγραμμα #include <stdio.h> #include <stdlib.h> main() { int x, y = 2 ; Αριθμός που ελέγχεται αν είναι πρώτος Διαιρέτης printf("input Number\n"); scanf("%d", &x);
Πρόγραμμα } while( x%y!= 0) y++; if (x==y) else printf(" O %d einai prwtos\n", x); printf(" O %d den einai prwtos\n", x); system("pause"); return 0; Επανάληψη: Το y αυξάνεται μέχρι να διαιρέσει ακριβώς το x
Επίλυση προβλήματος για περισσότερους αριθμούς Η διαδικασία ελέγχου που περιγράφηκε θα πρέπει να επαναληφθεί για όλους τους ακέραιους στο διάστημα [2,ORIO]
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #define ORIO 100 main() { int x, y;
Πρόγραμμα for ( x=2; x<=orio; x++) { y=2; while(x%y!= 0) y++; if (x==y) printf("%d,", x); } } system("pause"); return 0; Προσοχη! Η ανάθεση αρχικής τιμής γίνεται σε κάθε κύκλο της επανάληψης
Παραδείγματα Γράψτε ένα πρόγραμμα που να διαβάζει ένα κείμενο και να το εκτυπώνει αγνοώντας τους χαρακτήρες μεταξύ αποστρόφων \ - Το τέλος του ρεύματος εισόδου EOF, αντιστοιχεί στην αριθμητική τιμή του χαρακτήρα ^Ζ (Control + Z), μετά από enter - Να χρησιμοποιηθούν οι εντολές getchar() και putchar()
Interface Πιθανή είσοδος από το χρήστη: This is a text where characters in quotes should not be printed If the program is correct you should not see this. ^Z Έξοδος προγράμματος: This is a text where characters in quotes should not be printed
Ανάλυση Προβλήματος Θα πρέπει να επαναληφθούν οι παρακάτω εντολές μέχρι ο χρήστης να πληκτρολογήσει ^Z σε νέα γραμμή: 1) Διάβασμα χαρακτήρα 2) Αν ο χαρακτήρας δεν είναι απόστροφος \, εκτύπωση χαρακτήρα. 3) Αν ο χαρακτήρας είναι απόστροφος, διάβασμα επόμενων χαρακτήρων, μέχρι να ξαναδιαβαστεί απόστροφος.
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #define APOSTROFOS '\'' Χρήση συμβολικού ονόματος για πιο ευανάγνωστο κώδικα. main(){ int r; Για την αποθήκευση του εκάστοτε χαρακτήρα. Μπορεί να γραφεί ως int για να συγκριθεί με το EOF. Υποστηρίζεται και ο τύπος char.
while ( (r = getchar() )!= EOF ) { } Ανάθεση του χαρακτήρα εισόδου στην r Πρόγραμμα if ( r == APOSTROFOS ){ while ((r=getchar())!= APOSTROFOS); r=getchar(); } putchar(r); Αν δεν γράψω αυτή την εντολή, θα εκτυπωθεί η απόστροφος όταν εκτελεστεί η επόμενη εντολή. Σύγκριση r με EOF(συνθήκη ελέγχου επανάληψης) Μέχρι να ξαναδιαβαστεί απόστροφος κενή εντολή (;)
Πρόγραμμα system("pause"); return 0; }
Παραδείγματα Να γραφτεί ένα πρόγραμμα που να διαβάζει ένα κείμενο και να το τυπώνει μετατρέποντας τα πεζά σε κεφαλαία και αντίστροφα. Η μετατροπή θα γίνεται όταν ο χαρακτήρας που διαβάζεται είναι γράμμα. - Το τέλος του ρεύματος εισόδου EOF, αντιστοιχεί στην αριθμητική τιμή του χαρακτήρα ^Ζ (Control + Z), μετά από enter - Να χρησιμοποιηθούν οι εντολές getchar() και putchar()
Interface Πιθανή είσοδος από το χρήστη: This is a text where Capitalized Characters should be reversed with Non Capitalized Characters. Check the digits 0,1 etc. ^Z Έξοδος προγράμματος: this IS A TEXT WHERE capitalized characters SHOULD BE REVERSED WITH non capitalized characters. check THE DIGITS 0,1 ETC.
Ανάλυση Θα πρέπει να επαναληφθούν οι παρακάτω εντολές μέχρι ο χρήστης να πληκτρολογήσει ^Z σε νέα γραμμή: 1) Διάβασμα χαρακτήρα 2) Αν ο χαρακτήρας είναι γράμμα, Μετατροπή: - Αν είναι πεζό σε κεφαλαίο - Αν είναι κεφαλαίο σε πεζό
Πρόγραμμα #include <stdio.h> #include <stdlib.h> #include <ctype.h> main(){ int c;
Πρόγραμμα while ( (c=getchar())!=eof ){ //check if letter if ( isalpha(c) ){ Επιστρέφει μη μηδενική τιμή αν το c είναι γράμμα } //check if capital if ( isupper(c) ) putchar( tolower(c) ); else putchar( toupper(c) ); } else putchar(c); Επιστρέφει μη μηδενική τιμή αν το c είναι κεφαλαίο Επιστρέφει το πεζό γράμμα Επιστρέφει το κεφαλαίο γράμμα
Πρόγραμμα } system("pause"); return 0;