Pascal

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

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

iliasthes

Καλησπέρα, έχω μια απορία.
Παρακάτω στέλνω την λύση για την άσκηση 1 σελ. 107 του βιβλίου:

program askisi1107;
var
dinami,x:longint;
arithmos :real;
Begin
x:=0;
dinami:=1;
writeln('Δώσε έναν αριθμό:');
readln(arithmos);
repeat
dinami:=dinami*2;
x:=x+1;
until dinami>arithmos;
writeln('Η μικρότερη δύναμη του 2');
writeln('μεγαλύτερη από τον αριθμό ',arithmos:6:2 );
writeln('           είναι',dinami:6);
writeln('δηλ        είναι το 2 στην',x:6,'η δύναμη');
End.


Η λύση αυτή δουλεύει αποτελεσματικά για οποιοδήποτε αριθμό μεγαλύτερο του 0. Αν κάποιος δώσει 0 ή μικρότερο αριθμό το αποτέλεσμα δεν είναι σωστό. Εντάξει για αριθμούς μικρότερους του 0 δεν με ενδιαφέρει, γιατί υποθέτω πως η εκφώνηση (αν και δεν διευκρινίζει τίποτα) αναφέρεται μόνο σε θετικούς. Ωστόσο για μηδέν δοσμένο αριθμό η μικρότερη δύναμη του 2 που είναι μεγαλύτερη από το 0 είναι το 2^0=1. Έχει βρει κανείς κάποια σχετική λύση, χωρίς την χρήση if; Δηλαδή να χρησιμοποιεί κάποιον τύπο πιο αποτελεσματικό από τον dinami:=dinami*2 που έβαλα;

nefeli

Αν βάλεις while dinami<=arithmos στη θέση της repeat, δε θα μπει καθόλου σε επανάληψη και θα εμφανίσει το σωστό 1.

iliasthes

Έχεις δίκιο Νεφέλη, αυτό το επισήμανα στα παιδιά (οτι υπάρχουν περιπτώσεις που πρώτα θέλουμε να γίνει ο έλεγχος και μετά η επανάληψη, ενώ με την repeat γίνεται πάντα μία επανάληψη), απλά το βιβλίο αναφέρει να λυθεί με repeat και η απορία μου είναι αν κάποιος βρήκε κάποια πιο πλήρη λύση.

Ευχαριστώ πολύ πάντως για την απάντηση.

meteo_xampos

Καλησπέρα σας συνάδελφοι... Για δείτε σας παρακαλώ πολύ την άσκηση 2 στη σελίδα 124....

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

Αυτό το πρόγραμμα υλοποιείται ως εξής...

program tade;
var
a,b, apot:real;
sumbolo: char;


procedure eisodos;

begin
   writeln('dwse duo arithmous');
   readln(a,b);
end;

procedure eidos_pra3hs;

begin
   
   repeat
      writeln('dwse to sumbolo ths pra3hs'); 
      readln(sumbolo);
   until ((sumbolo='+') OR (sumbolo='-') OR (sumbolo='/') OR (sumbolo='*'))
end;

procedure pra3h;

begin
   if sumbolo='+' then
      apot:=a+b
   else if sumbolo='-' then
      apot:=a-b
   else if sumbolo='/' then
      apot:=a/b
   else
      apot:=a*b;
   writeln(sumbolo, a, b, apot);
end;

begin
eisodos;
eidos_pra3hs;
pra3h;
end.

Δηλαδή με δήλωση μεταβλητώ έξω από τις διαδικασίες, και απόδοση τιμών σε αυτές
μέσα στις διαδικασίες. Αυτό όμως δεν υπάρχει καν στο βιβλίο, ούτε ως αναφορά
ότι μπορεί να γίνει... Τι λέτε κι εσείς;

aleremain

Γεια σας.  :)

Θα ήθελα την βοήθεια σας σε μια άσκηση του Βιβλίου σελίδα: 108.

Άσκηση: 6.

Να γράψετε ένα πρόγραμμα που να διαβάζει τις 4 πλευρές και μία γωνία ενός τετραπλεύρου και να υπολογίζει το είδος του (τετράγωνο, ρόμβος, ορθογώνιο, παραλληλόγραμμο, τυχαίο). Να χρησιμοποιήσετε την εντολή repeat και δυαδικούς τελεστές.

Νίκος Αδαμόπουλος

#65
Παράθεση από: aleremain στις 24 Φεβ 2009, 11:57:55 ΜΜ
Γεια σας.  :)

Θα ήθελα την βοήθεια σας σε μια άσκηση του Βιβλίου σελίδα: 108.

Άσκηση: 6.

Να γράψετε ένα πρόγραμμα που να διαβάζει τις 4 πλευρές και μία γωνία ενός τετραπλεύρου και να υπολογίζει το είδος του (τετράγωνο, ρόμβος, ορθογώνιο, παραλληλόγραμμο, τυχαίο). Να χρησιμοποιήσετε την εντολή repeat και δυαδικούς τελεστές.

Έλα, πού ακριβώς θέλεις βοήθεια;

Θα διαβάσεις τις τέσσερις πλευρές (a, b, c, d) και την γωνία (g).
Αν a=b και b=c και c=d τότε:
   Αν g=90 τότε είναι τετράγωνο
   αλλιώς είναι ρόμβος
αλλιώς αν a=c και b=d τότε:
   Αν g=90 τότε είναι ορθογώνιο
   αλλιώς είναι παραλληλόγραμμο
αλλιώς είναι τυχαίο.
Θέλεις να ξαναδοκιμάσεις;
κλπ

H repeat μπορεί να περιλαμβάνει όλα τα παραπάνω...
Υπάρχει πρόβλημα στη μεταφορά του σε Pascal;

aleremain

οχι οχι, okay :)
ευχαριστω :)

nefeli

Θα ήθελα και εγώ τη γνώμη των συναδέλφων στο εξής:

Είμαι στο κεφ. 13, το οποίο και δεν έχω ξαναδιδάξει μέχρι σήμερα και άρα το διαβάζω τώρα από το βιβλίο. Βλέπω λοιπόν τα εξής:

1. Ως επιτρεπτή πράξη στους ακεραίους δίνει και την πράξη / (διαίρεσης), ενώ αυτή δεν είναι επιτρεπτή καθώς το αποτέλεσμα μπορεί και να μην ακέραιος (όπως άλλωστε τους διδάξαμε στο κεφ.8).

2. Στις επιτρεπτές πράξεις περιλαμβάνει και το :=, το οποίο το έχουμε διδάξει (όπως είναι και το σωστό άλλωστε) σαν εντολή αντικατάστασης και όχι σαν μια πράξη. Δηλαδή τα παιδιά εάν ερωτηθούν για τις επιτρεπτές πράξεις για παράδειγμα του λογικού τύπου θα πρέπει να αναφέρουν και το := ;;;

3. Θεωρείτε πιθανό να ερωτηθούν τα παιδιά και σε ασκήσεις με τις συναρτήσεις των τακτικών τύπων, όπως για παράδειγμα αυτές με τον πίνακα ASCII που έχει και το βιβλίο τους στις σελ. 133-136;

Γενικά βρίσκω λιγάκι περίπλοκο το κεφ. 13 και ενώ είχα υπολογίσει να το τελειώσω μέσα στην εβδομάδα, οπότε να κάνω και τα 5-7 που τα έχω αφήσει και να ξεκινήσω επαναλήψεις δυστυχώς βλέπω ότι θα μου πάρει πολύ περισσότερο...

stratosg

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

Για να μη σας πω τον τρόπο που με κοιτούν οι μαθητές μου, ξαφνικά είμαι ένας άγνωστος γι' αυτούς και μιλάω άλλη γλώσσα.

Πραγματικά έχω ένα κόμπο στο στομάχι, κάθε κεφάλαιο μια νέα δυσκολία. Απαράδεκτο.
Να φοβάσαι εκείνον που δεν έχει να χάσει τίποτα.

iliasthes

Διαβάζω τα μηνύματα σας και με βάζετε σε άσχημες σκέψεις, καθώς από Δευτέρα μπαίνω στο Κεφ.12 και ελπίζω μέσα στον Μάρτιο να ολοκληρώσω και το 12 και το 13. Χμ αντί για εκδρομούλα το τριήμερο βλέπω διάβασμα και προετοιμασία σημειώσεων.

Προς το παρόν ανεβάζω ένα τεστάκι που αν εξαιρέσεις το εύκολο πρόγραμμα που πρέπει να γράψουν εξ' ολοκλήρου οι μαθητές (όμως σχεδόν κανένας δεν το έγραψε), το θεωρώ πλήρες για τις εντολές while και repeat. Δίνω και ένα 2ο αρχείο που έχει λύσεις για 3 από τις ασκήσεις που υπάρχουν στο τεστ.

xryka

Στην ασκηση 1 του κεφ. 11 θα θεωρήσουμε θετικές δυνάμεις του 2;;

iliasthes

Εγώ θεώρησα μόνο δυνάμεις με εκθέτη >=0. Γενικά το βιβλίο, για να δώσουμε ένα ελαφρυντικό στον συγγραφέα δεν γράφτηκε για πανελλαδικές, με αποτέλεσμα να αντιμετωπίζει με μία μεγαλύτερη ελαφρότητα την διατύπωση των ασκήσεων, κάτι φυσιολογικό.  Θα έπρεπε να τα είχανε προσέξει αυτά στο Παιδαγωγικό ινστιτούτο ή στο κάτω κάτω έχουμε καμια 50ρια συμβούλους πληροφορικής ας κάνανε μια ομάδα εργασίας να στείλουνε διευκρινήσεις για ασκήσεις παραδείγματα κλπ.

iliasthes

#72
Μια ερώτηση. ΔΙορθώνω τις ασκήσεις μια μαθήτριας και θέλω να επισυνάψω τις σωστές λύσεις. Στην άσκηση 3 στην ελ 107, δεν μπόρεσα να γράψω την λύση με σωστή μορφοποίηση των αποτελεσμάτων, καθώς κάτι τέτοιο το θεωρώ αδύνατο χωρίς χρήση πινάκων, αλλά οι πίνακες είναι εκτός ύλης ή κάνω λάθος;

aleremain

Γεια σας!!
μπορεί κανείς να μου δώσει την απάντηση στην άσκηση 2 του βιβλίου στη σελίδα 107 που ζητάει να υπολογισθούν οι αριθμοί Fibonacci;

ευχαριστω :)

iliasthes

Το πρόβλημα με τους αριθμούς Fibonacci; Αυτό θα έπρεπε να το λύσεις σε δευτερόλεπτα, είναι ο αριθμός της τελειότητας στην ζωή.
:P.

program askisi2107;

uses crt;
var fibo,a,b, arithmos : longint;

BEGIN
fibo:=0;
a:=0;
b:=1;
writeln ('Δώστε έναν αριθμό');
readln(arithmos);
while fibo<=arithmos do begin
fibo:=a+b;
a:=b;
b:=fibo;
end;
writeln('ο μικρότερος αριθμός Fibonacci');
writeln(' που δεν είναι μικρότερος από ', arithmos:10);
writeln('          είναι ο αριθμός ',fibo:10);    
END.