Πανελλήνιες 2012 - Λύσεις

Ξεκίνησε από Γιάννης Αναγνωστάκης, 07 Ιουν 2012, 03:16:23 ΜΜ

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

ronalz


Γιάννης Αναγνωστάκης

Παράθεση από: ronalz στις 07 Ιουν 2012, 04:04:12 ΜΜ
until typos<>'ΤΕΛΟΣ'
αφου έλεγε οτι μπαινει τουλαχιστον μια φορα.



repeat
readln(typos);
if typos<>'ΤΕΛΟΣ' then
.....
until typos='ΤΕΛΟΣ'

1) Αφού το έκανες με until η συνθήκη είναι typos='ΤΕΛΟΣ'

2) Το if χρειάζεται, γιατί αν απουσιάζει τότε το πρόγραμμα διαβάζει αριθμό επιβατών, υπολογίζει χρέωση και συνολική χρέωση ακόμα και όταν δώσουμε τη λέξη 'ΤΕΛΟΣ', ενώ δεν θα έπρεπε...

ronalz

ναι ξερω.. θα μου κοψουν μερικες απο εκει..

dolcefarniente

Αν ήταν όμως κάπως έτσι:

sum:=0;
repeat
readln(typos);
readln(epivates);
if typos= 'M' then
  xr:= 10 +(epivates - 1)*5
else if typos = 'A' then
  xr:= 20 +(epivates - 1)*5
else if typos = 'Φ' then
  begin 
   xr:= 30 +(epivates - 1)*5;
  pl:= pl+1;
end;
sum = sum+ xr;
until typos = "ΤΕΛΟΣ"

αν έδινα τη λέξη τέλος δε θα έμπαινε σε κανένα if, θα γινόταν εκτέλεση 1 φορά και θα ήταν οκ. Σωστά;

Γιάννης Αναγνωστάκης

Πέρα του ότι είναι λογικό λάθος, από τη στιγμή που δώσαμε τη λέξη 'ΤΕΛΟΣ' να πρέπει να δώσουμε και αριθμό επιβατών τι θα γινόταν με την εντολή sum = sum+ xr;

Τι τιμή θα είχε το xr για να γίνει η πρόσθεση; (προφανώς του προηγούμενου οχήματος)

dolcefarniente

Παράθεση από: janag79 στις 07 Ιουν 2012, 04:21:05 ΜΜ
Πέρα του ότι είναι λογικό λάθος, από τη στιγμή που δώσαμε τη λέξη 'ΤΕΛΟΣ' να πρέπει να δώσουμε και αριθμό επιβατών τι θα γινόταν με την εντολή sum = sum+ xr;

Τι τιμή θα είχε το xr για να γίνει η πρόσθεση; (προφανώς του προηγούμενου οχήματος)

Σωστά. Τότε θα έπρεπε να υπάρχει ένα else xr:=0 πριν τη sum = sum+ xr;, οπότε για το αρχικό όχημα έχοντας αρχικοποιήσει το xr:=0 to sum θα ήταν 0 και θα σταματούσε η επανάληψη, ενώ για κάποιο επόμενο θα παρέμενε sum:=sum και θα σταματούσε.

Γιάννης Αναγνωστάκης

Παράθεση από: dolcefarniente στις 07 Ιουν 2012, 04:32:32 ΜΜ
Σωστά. Τότε θα έπρεπε να υπάρχει ένα else xr:=0 πριν τη sum = sum+ xr;, οπότε για το αρχικό όχημα έχοντας αρχικοποιήσει το xr:=0 to sum θα ήταν 0 και θα σταματούσε η επανάληψη, ενώ για κάποιο επόμενο θα παρέμενε sum:=sum και θα σταματούσε.

Αυτό βελτιώνει τη κατάσταση , αλλά κατά την άποψη μου, δεν ικανοποιεί αυτό που ζητάει η άσκηση...Δηλαδή, δεν πρέπει να προχωράει και να δέχεται αριθμό επιβατών όταν έχουμε δώσει ως τύπο τη λέξη 'ΤΕΛΟΣ'..για αυτό είπα ότι χρειάζεται αυτό το if

ronalz

πόσο λέτε να μου κόψουν?  :(

Γιάννης Αναγνωστάκης


dolcefarniente

Παράθεση από: janag79 στις 07 Ιουν 2012, 04:36:03 ΜΜ
Αυτό βελτιώνει τη κατάσταση , αλλά κατά την άποψη μου, δεν ικανοποιεί αυτό που ζητάει η άσκηση...Δηλαδή, δεν πρέπει να προχωράει και να δέχεται αριθμό επιβατών όταν έχουμε δώσει ως τύπο τη λέξη 'ΤΕΛΟΣ'..για αυτό είπα ότι χρειάζεται αυτό το if

Συμφωνώ απολύτως με το while που έχεις δώσει, έχεις πολύ λιγότερα να σκεφτείς και να ελέγξεις από ότι στην υλοποίηση με repeat. Ευχαριστώ για την άποψη σου.
Και κάτι ακόμα, πόσα μόρια πιστεύεις ότι θα έκοβαν από κάποιον που δεν έβαλε ξανά read στο σώμα της επανάληψης και είναι σοβαρό λάθος;

ronalz

Παράθεση από: janag79 στις 07 Ιουν 2012, 04:39:51 ΜΜ
Δεν πιστεύω πάνω 2 μόρια

σε ευχαριστω πολυ janag79..
και γενικα ευχαριστω όλο το Φορουμ για την συμπαρασταση σας σε εμας

Γιάννης Αναγνωστάκης

Παράθεση από: dolcefarniente στις 07 Ιουν 2012, 04:43:19 ΜΜ
Συμφωνώ απολύτως με το while που έχεις δώσει, έχεις πολύ λιγότερα να σκεφτείς και να ελέγξεις από ότι στην υλοποίηση με repeat. Ευχαριστώ για την άποψη σου.
Και κάτι ακόμα, πόσα μόρια πιστεύεις ότι θα έκοβαν από κάποιον που δεν έβαλε ξανά read στο σώμα της επανάληψης και είναι σοβαρό λάθος;

Nα σαι καλά

Εννοείς σε κάποιον που το έκανε με while και δεν έβαζε να ξαναδιαβάζει πάλι τύπο πριν κλείσει η while;

Γιάννης Αναγνωστάκης

Παράθεση από: ronalz στις 07 Ιουν 2012, 04:44:51 ΜΜ
σε ευχαριστω πολυ janag79..
και γενικα ευχαριστω όλο το Φορουμ για την συμπαρασταση σας σε εμας

Καλά αποτελέσματα να χετε παιδιά!

dolcefarniente

Παράθεση από: janag79 στις 07 Ιουν 2012, 04:45:07 ΜΜ
Nα σαι καλά

Εννοείς σε κάποιον που το έκανε με while και δεν έβαζε να ξαναδιαβάζει πάλι τύπο πριν κλείσει η while;


Ναι. Στην περίπτωση της while αν δεν είχε μέσα read, αλλά μόνο έξω. Δε σταματάει ποτέ και είναι σοβαρό λάθος.

Γιάννης Αναγνωστάκης

Παράθεση από: dolcefarniente στις 07 Ιουν 2012, 04:47:59 ΜΜ

Ναι. Στην περίπτωση της while αν δεν είχε μέσα read, αλλά μόνο έξω. Δε σταματάει ποτέ και είναι σοβαρό λάθος.

Κοίτα..Αν το γράφαμε σε διαγώνισμα σε τάξη, μπορεί  να έκοβα πολλά  μόνο και μόνο για να σου τονίσω την σημαντικότητα του

Εδώ, με βάση το ότι η παράλειψη σου επηρεάζει τα ερωτήματα Δ2,Δ4 άντε να σου κόψουν 3-4 μόρια (το πολύ) , κατά τη προσωπική μου άποψη