Pascal

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

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

vv

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

gedeon

Παράθεση από: iliasthes στις 01 Μαρ 2009, 08:18:35 ΜΜ
Μια ερώτηση. ΔΙορθώνω τις ασκήσεις μια μαθήτριας και θέλω να επισυνάψω τις σωστές λύσεις. Στην άσκηση 3 στην ελ 107, δεν μπόρεσα να γράψω την λύση με σωστή μορφοποίηση των αποτελεσμάτων, καθώς κάτι τέτοιο το θεωρώ αδύνατο χωρίς χρήση πινάκων, αλλά οι πίνακες είναι εκτός ύλης ή κάνω λάθος;

Οι πίνακες είναι εκτός ύλης.

Η άσκηση φαντάζομαι ότι λύνεται(χωρίς να έχω φτιάξει πρόγραμμα).

Χρησιμοποιείστε για το πινακάκι εντολές write, read για να μην
αλλάζει γραμμή.
Θα βάλετε writeln στο τέλος επεξεργασίας κάθε εργαζόμενου.


iliasthes

#77
Σωστά Gedeon, απλά πριν την εμφάνιση κάθε γραμμής θα πρέπει να μεσολαβεί η είσοδος δεδομένων από τον χρήστη (οι ώρες εργασίας του κάθε εργαζόμενου). Άρα θα χαλάει η μορφοποίηση εκτός αν εμφανίζουμε τον α/α η είσοδος γίνεται χωρίς προτρεπτικό μήνυμα και μετά εμφανίζονται δίπλα τα αποτελέσματα, πολύ κακό για το τίποτα.

gedeon

Παράθεση από: iliasthes στις 02 Μαρ 2009, 10:38:19 ΜΜ
Σωστά Gedeon, απλά πριν την εμφάνιση κάθε γραμμής θα πρέπει να μεσολαβεί η είσοδος δεδομένων από τον χρήστη (οι ώρες εργασίας του κάθε εργαζόμενου). Άρα θα χαλάει η μορφοποίηση Δεν μπορώ να σκεφτώ πως θα γίνει αρχικά η μαζική είσοδος των ωρών εργασίας  για κάθε εργαζόμενο και μετά η μαζική έξοδος, χωρίς πίνακα.

Σκέφτομαι το παρακάτω δείγμα :
 
  Έχεις ορίσει metr_ergazo --> a/a του εραζόμενου(ουσιαστικά ένας μετρητής)
                  ores_ergas -->  ώρες εργασία εργαζόμενου
                  oriaia_apoz -->  ωριαία αποζημίωση

  Μέσα στη while γράφεις :

         .....
         write(' | ', metr_ergazo, ' | ');
         read(ores_ergas);
         write(ores_ergas, '  |  ', ores_ergas*oriaia_apoz, ' | ');
         
         ..............
         κλπ


iliasthes

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

vv

Ευχαριστω παιδια,
κατι τετοιο φανταζομουνα. Απλώς άλλα ζητάνε οι ασκήσεις και
άλλα μπορούν να εμφανισουν τα παιδια συμφωνα με αυτα (την ύλη)που γνωριζουν

gedeon

Έχετε δίκιο,
σίγουρα οι εκφωνήσεις είναι χάλια, θεωρούν αυτονόητες πολλές παραδοχές

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

φυσικά αυτή η άσκηση είναι πολύ δύσκολη για τους μαθητές
(ειδικά τους δικούς μου...)

Καλό κουράγιο συνάδελφοι,
πολλά συγχαρητήρια για τη προσπάθεια που κάνετε όλοι.


Υ.Γ. Συμφωνώ με την άποψη του iliasthes
   ".....στο κάτω κάτω έχουμε καμια 50ρια συμβούλους πληροφορικής ας κάνανε μια ομάδα εργασίας να στείλουνε διευκρινήσεις για ασκήσεις παραδείγματα κλπ."

Αφού καταλαβαίνεις τι γίνεται.......άσ'τα καλύτερα

iliasthes

#82
Φαντάζομαι ο προβληματισμός των περισσοτέρων είναι ο εξής: Για να λύσετε κάποιες από αυτές τις ασκήσεις στην τάξη, θέσατε εσείς κάποιους περιορισμούς ή κάποιες a priori υποθέσεις που ο συγγραφέας παρέλειψε και δώσατε κάποια λύση. Αν δοθεί η ίδια άσκηση και η επιτροπή εξετάσεων βλέποντας αυτά τα κενά θέσει άλλες a priori υποθέσεις ή περιορισμούς, υπάρχει η πιθανότητα να εκτεθούμε και στους μαθητές μας, οι οποίοι θα θεωρήσουν σωστή την λύση μας, που τελικά θα αποδειχθεί λάθος.

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

Τεσπα παραθέτω, αυτό που έδωσα ως λύση, αν και  κάθε γραμμή δεν χωρούσε στην ίδια σειρά, οπότε χαλούσε στο τέλος η μορφοποίηση:
Κώδικας: Pascal
program askisi1073; {Λύση της άσκησης 3 σελ 107 χωρίς απόλυτα σωστά μορφοποιημένη 
εκτύπωση. Κάτι τέτοιο είναι σχεδόν αδύνατο με αυτά που έχετε διδαχθεί}

uses crt;
var
plithos : word;
x,yw, we, w_yp:byte; {Το χ θα χρησιμοποιηθεί ως μετρητής, yw είναι το υποχρεωτικό 
ωράριο, we είναι οι ώρες εργασίας του κάθε εργάτη και w_yp είναι οι ώρες που 
εργάστηκε ο κάθε εργάτης και θεωρούνται υπερωρίες}
w_am, ep_am, apoz, yp_apoz, synolo: longint; {Για περισσότερη οικονομία 
στην μνήμη θα μπορούσαμε τις μεταβλητές w_am, ep_am, να τις δηλώσουμε integer. }

BEGIN
writeln ('Δώσε το πλήθος των εργατών της εταιρείας:');
readln(plithos);
writeln('Δώσε τις υποχρεωτικές ώρες εργασίας:');
readln(yw);
writeln('Δώσε την ωριαία αμοιβή:');
readln(w_am);
writeln('Δώστε την επιπλέον αμοιβή για τις υπερωριακές ώρες:');
readln(ep_am);
x:=0; {Αρχικοποιούμε τον μετρητή, δίνοντας του την τιμή 0}
we:=0; {Επειδή η μεταβλητή we χρησιμοποιείται ως μεταβλητή ελέγχου σύμφωνα 
με τα δεδομένα της άσκησης πρέπει να έχει μια αρχική τιμή, αληθής, αλλιώς 
δεν θα εκτελεστούν ποτέ τα περιεχόμενα της while. Στην λύση με repeat δεν 
απαιτείται να αρχικοποιηθεί η τιμή της we}
clrscr;
writeln('πλήθος εργατών:',plithos);
writeln('υποχρεωτικές ώρες εργασίας',yw);
writeln('ωριαία αποζηίωση:',w_am);
writeln('πρόσθετη υπερωριακή αποζημ.:',ep_am);
writeln('αποδοχές εργαζομένων');
writeln('__________________________________________________________________');
writeln('| α/α  | ώρες εργ. | αποζημ. | ώρες υπερ. | υπερ αποζ. | σύνολο |');
while (x<plithos) and (we>=0) do begin
x:=x+1;
write('| ',x:5,'|   ');
read(we);
if we<=yw then begin {Αν ο εργάτης έχει δουλέψει λιγότερες ή ίσες με τις 
υποχρεωτικές ώρες}
apoz:=we*w_am;
w_yp:=0;
yp_apoz:=0;
end
else begin {Αν ο εργάτης έχει δουλέψει περισσότερες ώρες από τις υποχρεωτικές}
apoz:=we*w_am;
w_yp:=we-yw;
yp_apoz:=w_yp*ep_am;	
end;
synolo:=apoz+yp_apoz;

writeln('| ',apoz:9,'| ',w_yp:11,'| ',yp_apoz,'| ',synolo:7,'|');
end;	
END.

xristina

#83
και εγω κάτι τέτοιο έκανα
απλα κόβει ο πίνακας σε κάθε εργάτη
πιστεύω να το καταλάβουν καλύτερα τα παιδιά έτσι
τώρα τι θέλι ο συγγραφέας ακριβως....άβυσσος η ψυχη του!!!
sorry για τη μορφοποίηση, το copy-paste τα κάνει χάλια




Κώδικας: Pascal
program ergates;
USES WINCRT;
Var plithos,basikeswres,wriaia_amoibh,yperwr_amoibh,wres_ergasias,yperwries,aa_ergaz:integer;
       apozhmiwsh_basikh,apozhmiwsh_yperwriwn,synolo:real;
Begin
 aa_ergaz:=1;
 write('plithos ergatwn:');
 readln(plithos);
 write('ypoxrewtikes wres ergasias:');
 readln(basikeswres);
 write('wriaia apozhmiwsh:');
 readln(wriaia_amoibh);
 write('pros8eth uperwriakh apozhmiwsh:');
 readln(yperwr_amoibh);
 writeln('αποδοχές εργαζομένων');
 while aa_ergaz<=plithos do
 begin
     writeln('dwse wres ergasias tou ergath');
       read(wres_ergasias);
     	 yperwries:=wres_ergasias-basikeswres;
	 apozhmiwsh_basikh:=basikeswres*wriaia_amoibh;
	 apozhmiwsh_yperwriwn:=yperwries*yperwr_amoibh;
	 synolo:=apozhmiwsh_basikh+apozhmiwsh_yperwriwn;
	 
	
writeln('__________________________________________________________________');
writeln('| α/α  | ώρες εργ. | αποζημ. | ώρες υπερ. | υπερ αποζ. | σύνολο |');
writeln('|', aa_ergaz:6,'|',wres_ergasias:11,'|',apozhmiwsh_basikh:9:2, '|', yperwries:12,'|',apozhmiwsh_yperwriwn:12:2,'|',synolo:8:2,'|');
	 aa_ergaz:=aa_ergaz+1;
 end;
end.

iliasthes

Παράθεση από: meteo_xampos στις 24 Φεβ 2009, 09:21:29 ΜΜ
Καλησπέρα σας συνάδελφοι... Για δείτε σας παρακαλώ πολύ την άσκηση 2 στη σελίδα 124....

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

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

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

Συνάδελφε έχεις απόλυτο δίκιο, τώρα τι να πούμε.

gedeon

Παράθεση από: iliasthes στις 03 Μαρ 2009, 08:20:33 ΜΜ
Φαντάζομαι ο προβληματισμός των περισσοτέρων είναι ο εξής: Για να λύσετε κάποιες από αυτές τις ασκήσεις στην τάξη, θέσατε εσείς κάποιους περιορισμούς ή κάποιες a priori υποθέσεις που ο συγγραφέας παρέλειψε και δώσατε κάποια λύση. Αν δοθεί η ίδια άσκηση και η επιτροπή εξετάσεων βλέποντας αυτά τα κενά θέσει άλλες a priori υποθέσεις ή περιορισμούς, υπάρχει η πιθανότητα να εκτεθούμε και στους μαθητές μας, οι οποίοι θα θεωρήσουν σωστή την λύση μας, που τελικά θα αποδειχθεί λάθος.

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


......................
......................


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

Υ.Γ. Χαράς το κουράγιο σας που καθήσατε να γράψετε τη λύση. Πολύ πράγμα βρε παιδιά..

alkisg

Συνάδελφοι αν θέλετε μπορείτε να βάζετε τον κώδικα ανάμεσα σε [cοde=Pascal]Εδώ μπαίνει ο κώδικας[/cοde]. Έτσι διατηρείται η μορφοποίηση, και μόλις βρεθεί λίγος χρόνος και φτιαχτεί το σχετικό plugin για το φόρουμ, θα χρωματίζονται και αυτόματα.

Π.χ.:
Κώδικας: Pascal
program ergates;
USES WINCRT;
Var plithos,basikeswres,wriaia_amoibh,yperwr_amoibh,wres_ergasias,yperwries,aa_ergaz:integer;
    apozhmiwsh_basikh,apozhmiwsh_yperwriwn,synolo:real;
Begin
  aa_ergaz:=1;
  write('plithos ergatwn:');
  readln(plithos);
  write('ypoxrewtikes wres ergasias:');
  readln(basikeswres);
  write('wriaia apozhmiwsh:');
  readln(wriaia_amoibh);
  write('pros8eth uperwriakh apozhmiwsh:');
  readln(yperwr_amoibh);
  writeln('αποδοχές εργαζομένων');
  while aa_ergaz<=plithos do
  begin
    writeln('dwse wres ergasias tou ergath');
    read(wres_ergasias);
    yperwries:=wres_ergasias-basikeswres;
    apozhmiwsh_basikh:=basikeswres*wriaia_amoibh;
    apozhmiwsh_yperwriwn:=yperwries*yperwr_amoibh;
    synolo:=apozhmiwsh_basikh+apozhmiwsh_yperwriwn;
    writeln('__________________________________________________________________');
    writeln('| α/α  | ώρες εργ. | αποζημ. | ώρες υπερ. | υπερ αποζ. | σύνολο |');
    writeln('|', aa_ergaz:6,'|',wres_ergasias:11,'|',apozhmiwsh_basikh:9:2, '|', yperwries:12,'|',apozhmiwsh_yperwriwn:12:2,'|',synolo:8:2,'|');
    aa_ergaz:=aa_ergaz+1;
  end;
end.


xristina, εάν μπορείς γράφε ελληνικά και όχι greeklish, είναι πιο ευανάγνωστα και μπορούν να εντοπιστούν και με αναζήτηση.

marianad

Καλησπέρα παιδιά!
Έχω ξαναρωτήσει αλλά δεν βγάλαμε άκρη. Αν μπορούσε κάποιος να με βοηθήσει σε δύο ασκήσεις:
1. Να φτιάξετε σε Pascal συνάρτηση akeraio_meros(a) που θα δέχεται μια πραγματική μεταβλητή και θα επιστρέφει το ακέραιο μέρος της.
2. Να φτιάξετε σε Pascal συνάρτηση strog(a,n) που θα δέχεται έναν πραγματικό αριθμό και θα τον επιστρέφει στρογγυλοποιημένο σε n ψηφία π.χ.strog(1.34867,2)->1.35

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

xryka

Μήπως να ζητάγαμε ενδεικτικές λύσεις των ασκήσεων του βιβλίου;;;όλα τα μαθήματα με σκήσεις έχουν λύσεις....πόσο μάλλον το δικό μας που είναι όλο ασάφειες.....Δε γίνεται να πηγαίνουμε στα τυφλά και στο τέλος να εκτεθούμε....γιατί οπως πάντα φταίει ο καθηγητής!!!!

xristina