1 / 41

Παράδειγματα

Παράδειγματα. Συναρτησεις Πανω-Κατω Σχεδιασμος Βασικες Τεχνικες Προγραμματισμου. Παράδειγμα με χρονο. Γραψε τε προγραμμα που παιρνει δυο δεδομενα: μια ωρα (σε μορφη hhmm) και τ α λεπτα που πρεπει να προσθεθουν στην ωρα και υπολογιζει και τυπωνει την νεα ωρα ( σε μορφη ) hh:mm.

bridie
Download Presentation

Παράδειγματα

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Τι πρεπει να γινει /* get two input data - time and increment*/ /* determine new time */ /* display old time, increment and new time se morfi hh:mm*/ 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); epl-032

  6. Υπολογισμος /* determine new time */ /* diaxwrise wres kai lepta apo old_time*/ /* determine new time’s minutes */ /* determine new time’s hours */ 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 */ 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 */ 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 > 23 --- so do correction to find the right time */ new_time_hour = hours_to_daily_hours(new_time_hour); epl-032

  10. Διαχωρισμος int extract_hours(int time) { return time/100; } int extract_minutes(int time) { return time%100; } 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; } epl-032

  12. Μετατροπη Αριθμου Ωρων int hours_to_daily_hours(int hours) { return hours%24; } 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); epl-032

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

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

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

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

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

  19. α2 α3 α4 + + + sum α1 sum sum sum 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*/ epl-032

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

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

  23. α2 α3 α4 max max max megistos α1 megistos megistos megistos int max(int a,int b) 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); epl-032

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

  26. /* * max - epistrefei tin megisti metaxy twn dyo parametrvn */ int max(int a, int b) { if (a>b) return a; return b; } 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), τυπωσε χαρακτηρα στην μοναδα εξοδου epl-032

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

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

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

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

  33. echo σειρας χαρακτηρων int c; c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){ putchar(c); /* typwse xaraktira */ c = getchar(); /* διαβασε επομενο xaraktira */ } 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 */ } 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 */ } epl-032

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

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

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

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

  40. Μετρηση Συγκεκριμενου Γεγονοτος • Ποσες γραμμες υπηρχουν στα δεδομενα? • Tι πρεπει να γινει • διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους • ελεγχος για χαρακτηρα επομενη γραμμη?? • αυξησε μετρητη καθε φορα 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 */ } epl-032

More Related