Pascal

Ξεκίνησε από joanna, 04 Νοε 2008, 12:05:31 ΜΜ

« προηγούμενο - επόμενο »

iliasthes

Στη σελίδα 100 μάλλον μία μεταβλητή ξεχάστηκε στην μετάφραση. Στο παράδειγμα για την while χρησιμοποιεί την μεταβλητή metritis για αρχικοποίηση και στη συνέχεια σαν απαριθμητή, αλλά στην συνθήκη ελέγχου χρησιμοποιεί την μεταβλητή count.  :laugh:

xryka

Ηθελα να ρωτήσω τις συναρτησεις του παραρτήματος τισ έχετε κάνει;;;
εγω αρχισα να τουσ δειχνω κάποιες και να τις χρησιμοποιούμε αλλα όχι όλες...αν έχεις κανεις ασκησεις με αυτές ...καλοδεχούμενες   ;)

xryka

Μήπως έχει ετοιμάσει κανείς θεωρητικές ασκησείς; π.χ σωστό-λάθος, πολλαπλής επιλογής,αποτελέσματα εκτέλεσης προγραμμάτων...κ.ά;

iliasthes

#48
Καλησπέρα, συναδέλφισσα για ποιο κεφάλαιο ρωτάς;

Ανεβάζω ένα τεστάκι στο κεφ. 10 και τις λύσεις του, καθώς και ένα εισαγωγικό μάθημα για την εντολή while

iliasthes

Στην ερώτηση 8 στην σελίδα 106 ο συγγραφέας χρησιμοποιεί την μεταβλητή arithmos ως μετρητή με βήμα το 2 και όταν ο arithmos γίνεται μεγαλύτερος από 100 η λογική έκφραση γίνεται ψευδής. Ο συγγραφέας όμως δεν μας δίνει αρχική τιμή για την μεταβλητή arithmos και μας ρωτάει πόσες επαναλήψεις θα υπάρξουν.

Σκέφτηκα δύο πιθανές απαντήσεις, ή οτι δεν γνωρίζουμε τον αριθμό των επαναλήψεων, αφού η Pascal σε κάποιες εκδόσεις της δίνει "τυχαίες" τιμές σε μεταβλητές στις οποίες δεν έχουμε δώσει τιμή ή οτι ο συγγραφέας έκανε λάθος. Εσείς τι απάντηση δώσατε;

xryka

Θεωρώ οτι και τα δύο είναι σωστά....στη προκειμένη περίπτωση μάλλον ο συγγραφέας εκανε λάθος ή το φαγε στο copy-paste...
το θέμα είναι οτι αν τους ρωτήσουν κάτι τέτοιο στισ εξετάσεις θα πρέπει να απαντήσουν ότι δε γνωρίζουμε γιατι σε αυτή τη περίπτωση δίνεται τυχαία αρχική τιμή στη μεταβλητή...
Δε μπορουμε να πούμε όμως το μάθημα έχει πολυ ενδιαφέρον....ασκούμε μαντικές ικανότητες
κανονικα έπρεπε να τα κλείσουμε τα σχολεία με τόση προχειρότητα πυο τα αντιμετωπίζουν....

nefeli

Aν και θεωρητικά είναι σωστό να λέμε ότι μια μεταβλητή αν δεν αρχικοποιηθεί μπορεί να πάρει τυχαία τιμή (λόγω των καταχωρητών που αποθηκεύουν τα δυαδικά ψηφία) στην πράξη οι σύγχρονοι compilers, αρχικοποιούν τις αριθμητικές μεταβλητές στην τιμή 0 ακόμη και αν δεν υπάρχει αντίστοιχη εντολή εκχώρησης. Εγώ την έλυσα στην τάξη, βάζοντας την arithmos:=0. Αλλάζοντας μέσα στην if τη συνθήκη με την ισότητα (arithmos>=100) τους έδειξα με πίνακα τιμών ότι γίνονται 50 επαναλήψεις. Το κάναμε και στο εργαστήριο με τα κατάλληλα writeln. Τους είπα επίσης ότι είναι ακριβώς το ίδιο με
while arithmos<100 do arithmos:=arithmos+2;
ώστε να περάσουν πιο εύκολα στη for - αλλά εκεί ζορίστηκαν. Οχι πως τα υπόλοιπα τα κατάλαβαν και τέλεια... 

iliasthes

Ευχαριστώ για τις απαντήσεις σας, αυτό που κατάλαβα είναι πως πρέπει να παρακαλάω να μην προσέξει κάποιος από την επιτροπή εξετάσεων το λάθος και νομίζει πως ο συγγραφέας το έβαλε επίτηδες σαν ερώτηση παγίδα. ;D ;D

Παρεπιπτόντως προσωπικά το αποκλείω και τα τρία θέματα των ασκήσεων που θα μπούνε να είναι ανάπτυξη αλγορίθμων ή προγραμμάτων από την αρχή, αλλά πιστεύω πως τουλάχιστον το ένα θέμα θα είναι του στυλ: α) ποια θα είναι τα αποτελέσματα του παρακάτω προγράμματος/τμήμα προγράμματος, β)ποια θα είναι η τιμή της/των παρακάτω μεταβλητής/τών μετά την εκτέλεση των παρακάτω εντολών γ) μετατροπές από if σε case και το αντίστροφο, αλλά και από repeat σε while ή for και το αντίστροφο. Επίσης έχω διαπιστώσει πως είναι πολύ δύσκολο για τα παιδιά να λύσουνε κατ' ευθείαν ασκήσεις μόνοι τους και έτσι το πάω βήμα βήμα. Αρχικά δίνω τις λύσεις με κενά ή με λαθάκια και τα παιδιά τα διορθώνουνε. Στην συνέχεια πρέπει να βρίσκουνε, αριθμό επαναλήψεων, τιμές μεταβλητών και τέλος μετατροπές (if σε case κλπ). Μόνο 1-2 μαθητές έχουν καταφέρει να λύσουνε τελείως μόνοι τους ασκήσεις.

Έχει χρησιμοποιήσει κάποιος κάποια άλλη μέθοδο και είδε θετικά αποτελέσματα;

marianad

Παιδιά θέλω τη βοήθειά σας σε δύο πραγματάκια :-\:
1. Αν ένα πρόγραμμα ζητάει να δέχεται ως είσοδο έναν πραγματικό αριθμό και να επιστρέφει το ακέραιο μέρος του, μπορούμε να πούμε akeraio_meros:=arithmos div 1, ή το div παίρνει μόνο ακέραιους;
2. Τι λύση προτείνετε για το εξής, γιατί αυτή που έχω σκεφτεί δεν μου κάθεται πολύ καλά: Να γραφεί πρόγραμμα που να δέχεται έναν πραγματικό αριθμό και το πλήθος των δεκαδικών στο οποίο θέλουμε να τον στρογγυλοποιήσουμε και να μας δίνει τον αριθμό στρογγυλοποιημένο. π.χ. 2,3456754 και 3 και να δίνει αποτέλεσμα 2,346.

Και για τα δύο δεν πρέπει να χρησιμοποιήσουμε έτοιμες συναρτήσεις της Pascal. Ευχαριστώ!

xryka

Οι έτοιμες συναρτήσεις είναι εκτός ύλης;;;Δε μπορούν να τις χρησιμοποιήσουν δηλαδή; Την άσκηση 6 σελ 89 την κάνατε με πολλές div ;;


alkisg

Το div δέχεται μόνο ακεραίους.

Δεν μπορώ να φανταστώ γιατί κάποιος να βάζει άσκηση να βρεθεί το ακέραιο μέρος ενός πραγματικού χωρίς να χρησιμοποιηθεί κάποια από τις έτοιμες συναρτήσεις της γλώσσας (Pascal κτλ). Δηλαδή κάτι που βγαίνει σε O[1] σε επίπεδο μηχανής, να ζητάνε αλγόριθμο με O[N], όπου Ν το πλήθος των δυαδικών ψηφίων του ακεραίου.
Ακόμα και με casting θα έβγαινε σε Ο[1], δεν χρειάζεται καν συνάρτηση: x := integer(r);

Τέλος πάντων, εφόσον δεν μπορεί να χρησιμοποιηθεί συνάρτηση, μπορεί να γίνει δυαδική αναζήτηση στο διάστημα [-MAXINT-1..MAXINT], ώστε να βρεθεί ο πλησιέστερος ακέραιος. Έτσι για τους συνηθισμένους ακεραίους 32bit χρειάζονται 32 βήματα.

Αντίστοιχα για 3 (ή γενικότερα M) δεκαδικά ψηφία θα μπορούσε να γίνει δυαδική αναζήτηση στο [-MAXREAL..MAXREAL], με συνθήκη τερματισμού (στο περίπου) την Abs(στρογγυλεμένος_αριθμός - αρχικός_αριθμός) <= 10^-M, όπου φυσικά η Abs και η δύναμη υλοποιούνται εύκολα με μία if και μία for αντίστοιχα (αφού απαγορεύονται οι έτοιμες συναρτήσεις).

Πολύ "βαριά" μου ακούγονται για σχολείο... :)

Υ.Γ. δεν κάνω το μάθημα, δεν έχω δει καν το βιβλίο.

marianad

Το φαντάστηκα ότι δεν μπορούσε να γίνει με div, αλλά μου φάνηκαν παρανοϊκά τα άλλα σενάρια!
Τις έβαλε καθηγητής σε ιδιωτικό ΕΠΑΛ, σε ένα τμήμα που θα δώσουν πανελλήνιες το πολύ 7 παιδιά...
Το μόνο που μπορεί να πετύχει είναι να αποθαρρύνει και τους λίγους από αυτούς που το παλεύουν >:(...δεν μπορώ να καταλάβω τι σκέφτονται τέτοιοι άνθρωποι.

Παράθεση από: xryka στις 17 Φεβ 2009, 05:10:10 ΜΜ
Οι έτοιμες συναρτήσεις είναι εκτός ύλης;;;Δε μπορούν να τις χρησιμοποιήσουν δηλαδή; Την άσκηση 6 σελ 89 την κάνατε με πολλές div ;;

Δεν είναι εκτός ύλης οι έτοιμες συναρτήσεις, απλά ήταν στην εκφώνηση των ασκήσεων.
Ναι, την άσκηση την έκανα με πολλές div.

nefeli

Δεν κατάλαβα ακριβώς το θέμα της στρογγυλοποίησης που λες ότι ζητήθηκε σε ιδιωτικό ΕΠΑΛ (εγώ ούτε καν ήξερα ότι υπάρχουν και ιδιωτικά ΕΠΑΛ). Στην Pascal μπορεί να γίνει στρογγυλοποίηση ενός αριθμού κατά την εμφάνισή του στην οθόνη μέσω της μορφοποιημένης εκτύπωσης (σελ. 86).
Αν δηλαδή γράψω write(3,2587:8:3) στην οθόνη θα εμφανισθεί ο αριθμός 3,259, δηλ. στρογγυλοποίηση στο 3 δεκαδικό. Μήπως ζητήθηκε κάτι τέτοιο;

Την άσκηση 6,σελ.89 τη λύνω με div. Δηλαδή απομονώνω τα ψηφία και φτιάχνω τον ανάστροφο αριθμό με το ψηφίο των μονάδων στη θέση των εκατοντάδων κ.ο.κ.΄Έχει σκεφθεί κάποιος άλλη λύση με έτοιμη συνάρτηση;

nefeli

Τώρα διάβασα πιο προσεκτικά το μήνυμα της marianad.
Το θέμα της στρογγυλοποίησης το βρίσκω απλό και το έχω ζητήσει και εγώ στην τάξη. Έτσι για να αποκαταστήσουμε και το όνομα του συναδέλφου του ιδιωτικού.
Mε τη μορφοποιημένη εκτύπωση που έλεγα και πριν, λύνεται εύκολα ως εξής:

read(x); {o πραγματικός αριθμός}
read (m); {ο ακέραιος που δηλώνει τη θέση στρογγυλοποίησης}
write (x:10:m);

Το πρόγραμμα με την εύρεση του ακέραιου μέρους πραγματικού αριθμού το βρίσκω όντως δύσκολο χωρίς χρήση συνάρτησης. Υπάρχουν διάφοροι αλγόριθμοί (γενικά βασίζονται σε επαναλήψεις της μορφής while x-i>1 do i:=i+1; όπου το ακέραιο μέρος του πραγματικού x τελικά υπολογίζεται στη μεταβλητή i). Αποκλείεται΄-κατά τη γνώμη μου- τέτοιο θέμα γιατί θα τους πάρουν με τις ντομάτες. Mήπως ο συνάδελφος ήθελε απλώς εμφάνιση του αριθμού με 0 δεκαδικά ψηφία; Έτσι βέβαια ο 124,32 θα έδινε το σωστό -124- αλλά ο 124,72 θα έδινε το λάθος 125. Θα το ξανασκεφθώ και θα επανέλθω...






Παράθεση από: marianad στις 17 Φεβ 2009, 12:29:28 ΜΜ
Παιδιά θέλω τη βοήθειά σας σε δύο πραγματάκια :-\:
1. Αν ένα πρόγραμμα ζητάει να δέχεται ως είσοδο έναν πραγματικό αριθμό και να επιστρέφει το ακέραιο μέρος του, μπορούμε να πούμε akeraio_meros:=arithmos div 1, ή το div παίρνει μόνο ακέραιους;
2. Τι λύση προτείνετε για το εξής, γιατί αυτή που έχω σκεφτεί δεν μου κάθεται πολύ καλά: Να γραφεί πρόγραμμα που να δέχεται έναν πραγματικό αριθμό και το πλήθος των δεκαδικών στο οποίο θέλουμε να τον στρογγυλοποιήσουμε και να μας δίνει τον αριθμό στρογγυλοποιημένο. π.χ. 2,3456754 και 3 και να δίνει αποτέλεσμα 2,346.

Και για τα δύο δεν πρέπει να χρησιμοποιήσουμε έτοιμες συναρτήσεις της Pascal. Ευχαριστώ!

marianad

sorry λάθος μου, αναφέρω προγράμματα, ενώ και στις δύο περιπτώσεις ζητάει συναρτήσεις: akeraio_meros(x) και str(x,n).
Άρα δεν είναι θέμα μορφοποιημένης εκτύπωσης...