Πρόβληµα : Γράψτε ένα πρόγραµµα το οποίο - διαβάζει από το πληκτρολόγιο µια σειρά από ακεραίους έως ο χρήστης να δηλώσει ότι δεν υπάρχουν άλλοι - υπολογίζει τη µεγαλύτερη τιµή - εκτυπώνει αυτή την τιµή στην οθόνη Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά? Ιδέα 1 (στο χαρτί) : - Παίρνουµε 2 κόλλες χαρτί. Στο πρώτο χαρτί θα γράψουµε όλους τους αριθµούς και στο δεύτερο τους υπολογισµούς µας και το αποτέλεσµα. - Ακούµε έναν ένα τους αριθµούς και τους σηµειώνουµε στο πρώτο χαρτί. - Όταν δεν υπάρχουν άλλοι αριθµοί, ξεκινάµε να βρούµε τον µεγαλύτερο: - Διαλέγουµε τον πρώτο και τον συγκρίνουµε το δεύτερο. Κρατάµε τον µεγαλύτερο από τους δύο και τον σηµειώνουµε στο δεύτερο χαρτί. Συγκρίνουµε τον αριθµό που γράψαµε στο δεύτερο χαρτί µε έναν-έναν από τους υπόλοιπους που είναι στο πρώτο χαρτί. Κάθε φορά που βρίσκουµε έναν µεγαλύτερο, τον γράφουµε στο δεύτερο χαρτί, σβήνοντας ότι είχαµε γράψει πριν. - Όταν έχουµε τσεκάρει όλους τους αριθµούς που ήταν στο πρώτο χαρτί, σταµατάµε και ανακοινώνουµε ότι το αποτέλεσµα είναι ο αριθµός που βρίσκεται στο δεύτερο χαρτί
Ιδέα 1 (από το χαρτί προς τον υπολογιστή) : - Παίρνουµε 2 κόλλες χαρτί. Στο πρώτο χαρτί θα γράψουµε όλους τους αριθµούς και στο δεύτερο τους υπολογισµούς µας και το αποτέλεσµα. τα χαρτιά που σηµειώνουµε αριθµούς είναι η ΜΝΗΜΗ του υπολογιστή µας. - Ακούµε έναν ένα τους αριθµούς και τους σηµειώνουµε στο πρώτο χαρτί. τους αριθµούς τους γράφει ο χρήστης στο πληκτρολόγιο - Όταν δεν υπάρχουν άλλοι αριθµοί, ξεκινάµε να βρούµε τον µεγαλύτερο: Το πρόγραµµα ρωτά το χρήστη αν τελείωσαν οι αριθµοί - Διαλέγουµε τον πρώτο και τον συγκρίνουµε το δεύτερο. Κρατάµε τον µεγαλύτερο από τους δύο και τον σηµειώνουµε στο δεύτερο χαρτί. Συγκρίνουµε τον αριθµό που γράψαµε στο δεύτερο χαρτί µε έναν-έναν από τους υπόλοιπους που είναι στο πρώτο χαρτί. Κάθε φορά που βρίσκουµε έναν µεγαλύτερο, τον γράφουµε στο δεύτερο χαρτί, σβήνοντας ότι είχαµε γράψει πριν. - Όταν έχουµε τσεκάρει όλους τους αριθµούς που ήταν στο πρώτο χαρτί, σταµατάµε και ανακοινώνουµε ότι το αποτέλεσµα είναι ο αριθµός που βρίσκεται στο δεύτερο χαρτί Ανακοινώνουµε το αποτέλεσµα παρουσιάζοντάς το στην οθόνη.
Ιδέα 1 (Προσθέτουµε λεπτοµέρειες σε κάθε βήµα) : - Ακούµε έναν ένα τους αριθµούς και τους σηµειώνουµε στο πρώτο χαρτί. τους αριθµούς τους γράφει ο χρήστης στο πληκτρολόγιο 1. Διαβάζουµε ένα αριθµό και τον σηµειώνουµε. 2. Ρωτάµε αν υπάρχει άλλος 3. Αν όχι, πάµε στο επόµενο βήµα, αλλιώς επαναλαµβάνουµε τα 1-2 - Διαλέγουµε τον πρώτο και τον συγκρίνουµε το δεύτερο. Κρατάµε τον µεγαλύτερο από τους δύο και τον σηµειώνουµε στο δεύτερο χαρτί. Συγκρίνουµε τον αριθµό που γράψαµε στο δεύτερο χαρτί µε έναν-έναν από τους υπόλοιπους που είναι στο πρώτο χαρτί. Κάθε φορά που βρίσκουµε έναν µεγαλύτερο, τον γράφουµε στο δεύτερο χαρτί, σβήνοντας ότι είχαµε γράψει πριν. 4. Μέγιστος = 1ος αριθµός 5. Σύγκριση µέγιστου µε τον επόµενο αριθµό στη σειρά 5α. Αν ο επόµενος αριθµός στη σειρά είναι µεγαλύτερος, σηµείωσε αυτόν ως µέγιστο. 6. Υπάρχει επόµενος αριθµός? 6α. Αν ναι, επαναλαµβάνουµε τα βήµατα 5-6. 6β. Αν όχι, προχωράµε στο επόµενο βήµα - Όταν έχουµε τσεκάρει όλους τους αριθµούς που ήταν στο πρώτο χαρτί, σταµατάµε και ανακοινώνουµε ότι το αποτέλεσµα είναι ο αριθµός που βρίσκεται στο δεύτερο χαρτί Ανακοινώνουµε το αποτέλεσµα παρουσιάζοντάς το στην οθόνη. 7. Εκτύπωση του µέγιστου αριθµού στην οθόνη
Start Ιδέα 1 (Αν θέλουµε, φτιάχνουµε ένα σχεδιάγραµµα (διάγραµµα ροής)) : Read number in list more? max = 1st number more numbers? get next number Print max End next number > max? max = next number
Πρόβληµα : - Μας δίνουν µια σειρά από ακεραίους (δεν ξέρουµε πόσους) µέχρι να µας πουν ότι δεν υπάρχουν άλλοι - υπολογίζουµε τη µέγιστη τιµή - τυπώνουµε τη µέγιστη τιµή που υπολογίσαµε Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά? Ιδέα 2 (στο χαρτί): - Παίρνουµε µία κόλλα χαρτί στην οποία θα σηµειώνουµε τον ακέραιο που εξετάζουµε και το µέγιστο που έχουµε βρει σε κάθε βήµα. - Σηµειώνουµε στο χαρτί τον πρώτο ακέραιο. Προς το παρόν, αυτός είναι ο µέγιστος. - Ρωτάµε και σηµειώνουµε τον επόµενο αριθµό. Αν είναι µεγαλύτερος από το µέγιστο που έχουµε µέχρι τώρα, τότε σηµειώνουµε τον καινούργιο αριθµό ως µέγιστο. - Συνεχίζουµε µε τον ίδιο τρόπο µέχρι να τελειώσουν οι αριθµοί - Ανακοινώνουµε το µέγιστο που είχαµε σηµειώσει.
Ιδέα 2 (µε περισσότερες λεπτοµέρειες): - Σηµειώνουµε στο χαρτί τον πρώτο ακέραιο. Προς το παρόν, αυτός είναι ο µέγιστος 1. Διαβάζουµε έναν ακέραιο 2. Μέγιστος = ο ακέραιος που διαβάσαµε - Ρωτάµε και σηµειώνουµε τον επόµενο αριθµό. Αν είναι µεγαλύτερος από το µέγιστο που έχουµε µέχρι τώρα, τότε σηµειώνουµε τον καινούργιο αριθµό ως µέγιστο. - Συνεχίζουµε µε τον ίδιο τρόπο µέχρι να τελειώσουν οι αριθµοί 3. Υπάρχουν άλλοι ακέραιοι? 3α. Αν όχι, πηγαίνουµε στο βήµα 5 3β. Αν ναι, διαβάζουµε τον επόµενο αριθµό 4. Ο επόµενος αριθµός είναι µεγαλύτερος του µέγιστου που έχουµε ως τώρα? 4α. Αν ναι, σηµειώνουµε τον καινούργιο αριθµό ως µέγιστο. 4β. Επαναλαµβάνουµε τη διαδικασία από το βήµα 3 - Ανακοινώνουµε το µέγιστο που είχαµε σηµειώσει. 5. Εκτυπώνουµε το µέγιστο στην οθόνη
Ιδέα 2.5 (Παραλλαγή της ιδέας 2): Είπαµε πως οι ακέραιοι αριθµοί αποθηκεύονται σε 4 bytes. Αυτό σηµαίνει πως υπάρχει όριο στο πλήθος των ακεραίων που είναι δυνατό να αναπαραστήσουµε στον υπολογιστή µας. Στην αρχή του αλγορίθµου µας,, αντί να σηµειώσουµε ως µέγιστο τον πρώτο ακέραιο αριθµό που διαβάσαµε, µπορούµε να χρησιµοποιήσουµε τον µικρότερο δυνατό ακέραιο που µπορεί να αναπαρασταθεί στον υπολογιστή µας!
Start Ιδέα 2.5 (Αν θέλουµε, φτιάχνουµε ένα σχεδιάγραµµα (διάγραµµα ροής)) : max = smallest possible int Read number number > max? max = number more numbers? Print max End
/* Programma pou diabazei apo to pliktrologio mia seira akeraiwn, upologizei ton megalutero kai ton ektupwnei stin othoni. */ #include<stdio.h> #include<limits.h> int main (int argc, char *argv[]) { int max, num; char telos; max = INT_MIN; while (1) { printf("dwse enan akeraio: "); scanf("%d", &num); if (max < num) { max = num; } printf("telos? (y/n) "); scanf(" %c", &telos); if (telos == 'y') { break; } } printf("to maximum einai : %d\n", max); } return 0;