Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Παράδειγματα Συναρτησεις Πανω-Κατω Σχεδιασμος

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Παράδειγματα Συναρτησεις Πανω-Κατω Σχεδιασμος"— Μεταγράφημα παρουσίασης:

1 Παράδειγματα Συναρτησεις Πανω-Κατω Σχεδιασμος
Βασικες Τεχνικες Προγραμματισμου 21/2/2000 epl-032

2 Παράδειγμα με χρονο Γραψετε προγραμμα που παιρνει δυο δεδομενα: μια ωρα (σε μορφη hhmm) και τα λεπτα που πρεπει να προσθεθουν στην ωρα και υπολογιζει και τυπωνει την νεα ωρα (σε μορφη) hh:mm. 21/2/2000 epl-032

3 Τι πρεπει να γινει Κατανοηση με παραδειγματα μετα ιδωμεν... 21/2/2000
epl-032

4 Τι πρεπει να γινει /* get two input data - time and increment*/
/* determine new time */ /* display old time, increment and new time se morfi hh:mm*/ 21/2/2000 epl-032

5 Εισαγωγη Δεδομενων /* get two input data - time and increment*/
printf(“Enter time (hhmm) and number of minutes to increment: “); scanf(“%d%d”,&old_time, &increment); 21/2/2000 epl-032

6 Υπολογισμος /* determine new time */
/* diaxwrise wres kai lepta apo old_time*/ /* determine new time’s minutes */ /* determine new time’s hours */ 21/2/2000 epl-032

7 /* determine new time */ /* diaxwrise wres kai lepta apo old_time*/
/* old_time_minutes, old_time_hours*/ /* increment_minutes */ /* determine new time’s minutes */ /* new_time_minutes = old_time_minutes + increment_minutes*/ /* possible new_time_minutes > 59. need to compute extra_hours in new_time_minutes need to compute hourly_minutes in new_time_minutes */ /* determine new time’s hours */ 21/2/2000 epl-032

8 /* determine new time */ /* diaxwrise wres kai lepta apo old_time*/
/* old_time_minutes, old_time_hours, increment_minutes*/ /* determine new time’s minutes */ /* new_time_minutes = old_time_minutes + increment_minutes*/ /* possible new_time_minutes > 59. need to compute increment_hours in new_time_minutes need to compute hourly_minutes (0-59) in new_time_minutes */ /* determine new time’s hours */ /* new_time_hours = old_time_hours + increment_hours */ /* possible new_time_hours > 23 need to compute daily hours (0-23) in new_time_hours */ 21/2/2000 epl-032

9 /* determine new time */ /* diaxwrise wres kai lepta apo old_time*/
old_time_hours = extract_hours(old_time); old_time_minutes = extract_minutes(old_time); increment_minutes = increment; /* determine new time’s minutes */ /* new_time_minutes = old_time_minutes+increment_minutes */ new_time_minutes = old_time_minutes+increment_minutes; /* possible new_time_minutes > 59 -extract hours and determine hourly minutes*/ increment_hours = number_of_hours_in_minutes(new_time_minutes); new_time_minutes = number_of_hourly_minutes_in_minutes(new_time_minutes); /* determine new time’s hours */ /* new_time_hour = old_time_hour + increment_hours */ new_time_hour = old_time_hour + increment_hours; /* pssible new_time_hour > so do correction to find the right time */ new_time_hour = hours_to_daily_hours(new_time_hour); 21/2/2000 epl-032

10 Διαχωρισμος int extract_hours(int time) { return time/100; } int
extract_minutes(int time) { return time%100; } 21/2/2000 epl-032

11 Μετατροπη Αριθμου Λεπτων σε Ωρες και Λεπτα
int number_of_hours_in_minutes(int minutes) { return time/60; } int number_of_hourly_minutes_in_minutes(int minutes) { return time%60; } 21/2/2000 epl-032

12 Μετατροπη Αριθμου Ωρων
int hours_to_daily_hours(int hours) { return hours%24; } 21/2/2000 epl-032

13 Εξαγωγη Δεδομενων /* display old time, increment and new time se morfi hh:mm*/ printf(“Adding %d minutes to time %02d:%02d results in %02d:%02d\n“, increment_minutes, old_hours, old_minutes, new_time_hours, new_time_minutes); 21/2/2000 epl-032

14 Παράδειγμα Γραψετε ενα προγραμμα που υπολογιζει το αθροισμα μια απροσδιοριστου μεγεθους σειρα θετικων ακεραιων αριθμων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη 0. π.χ. εισοδου/εξοδου: Enter series: to athroisma tis seiras einai 302 21/2/2000 epl-032

15 Χρήσιμες Λειτουργικοτητες
Tι πρεπει να γινει διαβασμα μια σειρας απροσδιοριστου μεγεθους που τερματιζεται με καθορισμενη τιμη υπολογισμος αθροισματος μιας σειρας Χρήσιμες Λειτουργικοτητες Πως διαβαζουμε μια σειρα απροσδιοριστου μεγεθους που τερματιζεται με καθορισμενη τιμη? Πως υπολογιζουμε το αθροισμα μιας σειρας? 21/2/2000 epl-032

16 Aνάγνωση σειρας απροσδιοριστου μεγεθους που τερματιζεται με καθορισμενη τιμη
Απαιτει εντολή επαναληψης (βροχος) Τυπικη Δομη /*διαβασε το πρωτο στοιχειο*/ while(/*το στοιχειο δεν σημαδοτει τελος*/){ /* διαβασε επομενο στοιχειο */ } 21/2/2000 epl-032

17 Διαβασμα σειρας απροσδιοριστου μεγεθους που τερματιζεται με 0
int number; fscanf(“%d”,&number); /* diabase prwto stoixeio */ while(number != 0){ fscanf(“%d”,&number); /* διαβασε επομενο στοιχειο */ } 21/2/2000 epl-032

18 Διασπαση: εννοια του μερικου αποτελεσματος
Οταν δεν εχουμε εντολη που λυει ενα προβλημα, διασπαζουμαι το προβλημα μεχρι να βρουμε ενα υποπροβλημα που υπαρχουν εντολες που το λυουν Π.χ. δεν υπαρχει τελεστης στην C που μπορει να προσθεσει ν τιμες μαζι (οπου το ν >2). Για ν τιμες χρεαζονται ? προσθεσεις 21/2/2000 epl-032

19 α3 α4 α1 α2 sum + sum + sum + sum 21/2/2000 epl-032

20 Αθροισμα σειρας int number; /* holds input number one at a time */
int sum; /* current sum */ fscanf(“%d”,&number); /* diabase prwto stoixeio */ sum = 0; /* arxikopoihsh */ while(number != 0){ sum = sum + number; * επεξεργασια*/ fscanf(“%d”,&number); /* διαβασε επομενο στοιχειο*/ } printf(“To athroisma της σειρας ειναι %d\n”,sum); /*ejodos*/ 21/2/2000 epl-032

21 Παράδειγμα Γραψετε ενα προγραμμα που αναγνωριζει τον πιο μεγαλο αριθμο σε μια απροσδιοριστου μεγεθους σειρα θετικων ακεραιων αριθμων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη 0. π.χ. εισοδου/εξοδου: Enter series: O megistos arithmos einai to 5555 21/2/2000 epl-032

22 Χρήσιμες Λειτουργικοτητες
Πως διαβαζουμε μια σειρα απροσδιοριστου μεγεθους που τερματιζεται με καθορισμενη τιμη? Πως υπολογιζουμε τον μεγιστο αριθμο μιας σειρας? Διασπαση σε απλα υποπροβληματα: υπολογισε μεγιστο ανα δυο 21/2/2000 epl-032

23 int max(int a,int b) α3 α4 α1 α2 megistos max megistos max megistos
21/2/2000 epl-032

24 Μέγιστη τιμη int number; /* hold input number one at a time */
int maximum; /* hold current maximum */ fscanf(“%d”,&number); /* diabase prwto stoixeio */ maximum = 0; /* arxikopoihsh */ while(number != 0){ maximum = max(maximum,number); /* επεξεργασια*/ fscanf(“%d”,&number); /* διαβασε επομενο στοιχειο*/ } printf(“To megisto stoixeio της σειρας ειναι %d\n”, /*ejodos*/ maximum); 21/2/2000 epl-032

25 int max(int a,int b) Γραψετε μια διαδικασια που παιρνει δυο ακεραιους παραμετρους και η τιμη εξοδου της ειναι η μεγιστη τιμη μεταξυ των δυο παραμετρων. 21/2/2000 epl-032

26 * max - epistrefei tin megisti metaxy twn dyo parametrvn */ int
/* * max - epistrefei tin megisti metaxy twn dyo parametrvn */ int max(int a, int b) { if (a>b) return a; return b; } 21/2/2000 epl-032

27 int max(int a, int b) { if (a>b) return a; return b; } int max(int a, int b) { if (a>b) return a; else return b; } int max(int a, int b) { int megistos; if (a>b) megistos = a; else megistos = b; return megistos; } int max(int a, int b) { int megistos; megistos = b; if (a>b) megistos = a; return megistos; }

28 getchar/putchar Συναρτησεις εισοδου/εξοδου χαρακτηρων Διεπαφη
int getchar(), διαβασε τον επομενο χαρακτηρα απο την εισοδο, κινησε δρομεα διαβασματος στον επομενο χαρακτηρα (διαβαζει χαρακτηρες μιας γραμμης μετα το enter) void putchar(int), τυπωσε χαρακτηρα στην μοναδα εξοδου 21/2/2000 epl-032

29 Παράδειγμα Γραψετε ενα προγραμμα που μετραει τον αριθμο χαρακτηρων σε μια απροσδιοριστου μεγεθους σειρα χαρακτηρων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη EOF. π.χ. εισοδου/εξοδου: Enter series: asdfre ^Z το μεγεθος της σειρας ειναι 7 21/2/2000 epl-032

30 Χρήσιμες Λειτουργικοτητες
Tι πρεπει να γινει διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους υπολογισμος μεγεθους σειρας Χρήσιμες Λειτουργικοτητες Πως διαβαζουμε μια σειρα χαρακτηρων που τερματιζεται με καθορισμενη τιμη? Πως υπολογιζουμε το μεγεθος μιας σειρας? 21/2/2000 epl-032

31 Aνάγνωση σειρας απροσδιοριστου μεγεθους χαρακτηρων
Oπως προηγουμενος: Απαιτει εντολή επαναληψης (βροχος) Ιδια δομη /*διαβασε το πρωτο στοιχειο*/ while(/*το στοιχειο δεν σημαδοτει τελος*/){ /* διαβασε επομενο στοιχειο */ } 21/2/2000 epl-032

32 Διαβασμα σειρας χαρακτηρων
int c; c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){ /* oxi telos tou file */ c = getchar(); /* διαβασε επομενο xaraktira */ } 21/2/2000 epl-032

33 echo σειρας χαρακτηρων
int c; c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){ putchar(c); /* typwse xaraktira */ c = getchar(); /* διαβασε επομενο xaraktira */ } 21/2/2000 epl-032

34 Μεγεθος Σειρας Χαρακτηρων
int c; int size; size = 0; /* arxikopoihsh */ c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){ size = size + 1; /* metra akomi ena xaraktira */ c = getchar(); /* διαβασε επομενο xaraktira */ } 21/2/2000 epl-032

35 Απλοποίηση??? int c; int size; size = 0; /* arxikopoihsh */
while((c = getchar() )!= EOF){/* diabase kai elegxe xaraktira */ size = size + 1; /* metra akomi ena xaraktira */ } 21/2/2000 epl-032

36 Απλοποίηση? int get_int() { int number; fscanf(“%d”,&number);
return number; } number = get_int(); /* diabase prwto stoixeio */ while(number != 0){ number = get_int(); /* διαβασε επομενο στοιχειο */

37 Απλοποίηση int get_int() { int number; fscanf(“%d”,&number);
return number; } while((number = get_int()) != 0){ 21/2/2000 epl-032

38 Μετρημα Συγκεκριμενου Γεγονοτος
Ποσες φορες παρουσιαστηκε ο χαρακτηρας Α? Tι πρεπει να γινει διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους ελεγχος για χαρακτηρα Α αυξησε μετρητη καθε φορα 21/2/2000 epl-032

39 Μετρηση Γεγονοτος int c; int count; count = 0; /* arxikopoihsh */
while((c = getchar() )!= EOF){ /* diabase xaraktira */ if (c==‘A’) ++count; /* metra akomi ena xaraktira */ } 21/2/2000 epl-032

40 Μετρηση Συγκεκριμενου Γεγονοτος
Ποσες γραμμες υπηρχουν στα δεδομενα? Tι πρεπει να γινει διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους ελεγχος για χαρακτηρα επομενη γραμμη?? αυξησε μετρητη καθε φορα 21/2/2000 epl-032

41 Μετρηση Γεγονοτος int c; int count; count = 0; /* arxikopoihsh */
while((c = getchar() )!= EOF){ /* diabase xaraktira */ if (c==‘\n’) /* elegxe gia epomeni grammi */ ++count; /* metra akomi ena xaraktira */ } 21/2/2000 epl-032


Κατέβασμα ppt "Παράδειγματα Συναρτησεις Πανω-Κατω Σχεδιασμος"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google