Αποστολέας Θέμα: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή  (Αναγνώστηκε 9674 φορές)

anasta

  • Βετεράνος
  • ****
  • Μηνύματα: 58
  • Ok, yes... Ok, yes...
Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« στις: 29 Οκτ 2009, 10:01:08 πμ »
Πως θα μετατρέπατε σε ψευδοκώδικα το παρακάτω πρόγραμμα σε Pascal;;;;
όχι όμως με εμφωλευμένες....

program ASKHSH;
var
   MO:real;
begin
   writeln('ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ');
   readln(MO);
   if ((MO>=0) and (mo<=9.5)) then
      begin
         writeln('Ο μαθητής απορρίπτεται');
      end
   else if ((MO>9.5) and (MO<=13)) then
      begin
         writeln('Σχεδόν καλά');
      end
   else if ((MO>13) and (MO<=16)) then
      begin
         writeln('Kαλά');
      end
   else if ((MO>16) and (MO<=18)) then
      begin
         writeln('Πολύ καλά');
      end
   else if ((MO>18) and (MO<=20)) then
      begin
         writeln('Άριστα');
      end
   else
      begin
         writeln('ΑΚΥΡΟΣ ΒΑΘΜΟΣ');
      end;
   
end.

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #1 στις: 29 Οκτ 2009, 12:57:09 μμ »
Άσχετο με την ερώτησή σου αλλά θα μου επιτρέψεις να πω ότι το πρόγραμμά σου κάνει περιττούς ελέγχους, κάτι που είναι deprecated με βάση τα σχολικά εγχειρίδια.
Επίσης κάτι που στα δικά μου τα μάτια φαίνεται πολύ εκνευριστικό είναι η άσκοπη χρήση το compound statement.

Βασίλης Ραξενίδης

  • Θαμώνας
  • ***
  • Μηνύματα: 30
  • bar = foo
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #2 στις: 29 Οκτ 2009, 04:44:23 μμ »
Γιατί ντε και καλά δεν θέλεις φωλιασμένες ΑΝ ? Πως αλλιώς να γίνει?
jgini τι εννοείς όταν λες ότι οι περιττοί έλεγχοι είναι deprecated? Επίσης τί εννοείς όταν λες compound statement;

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #3 στις: 29 Οκτ 2009, 07:48:19 μμ »
Deprecated είναι κάτι που συνίσταται να αποφεύγεται
http://en.wikipedia.org/wiki/Deprecation

Compound Statement ή στα ελληνικά σύνθετη εντολή ή μπλοκ εντολών είναι η ομαδοποίηση εντολών σε μία, με χρήση των begin - end για τη Pascal. Όταν η εντολή είναι μία το μπλοκ εντολών είναι περιττό.
http://www.mirrorservice.org/sites/www.gnu-pascal.de/gpc/begin-end-Compound-Statement.html

Σε ότι αφορά την πολλαπλή επιλογή δείτε την Άσκηση 10 στον παρακάτω σύνδεσμο. Ίσως σας βοηθήσει.
http://users.att.sch.gr/jginis/?pg=sp#pseudo10

karinakis

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #4 στις: 29 Οκτ 2009, 08:10:19 μμ »
συνάδελφε θα έλεγα ότι σωστά αντιμεπωπίζεις με ψευδοκώδικα την πολλαπλή επιλογή και μάλιστα αναφέρεσαι στην άσκηση 10. Όμως στη συγκεκριμένη άσκηση δεν θα έλεγα ότι από την εκφώνηση είναι κατανοητό πως υπάρχει επαναληπτική δομή στο πρόβλημα που παραθέτεις. Ωστόσο για άλλη μία φορά πρέπει να πω πως το βιβλίο είναι απαράδεκτο και εμείς όλοι απλά ανακαλύπτουμε τρόπους αναπαράστασης του αλγορίθμου με ψευδοκώδικα και ....προσευχόμαστε να είναι αποδεκτοί από τους βαθμολογητές διαφορετικά τους μαθητές μας τους έχουμε κυριολεκτικά κάψει από τώρα.

iliasthes

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 790
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #5 στις: 29 Οκτ 2009, 09:31:46 μμ »
Αν και δεν το δοκίμασα σε κάποιον compiler, κάπως έτσι θα ήταν ο κώδικας αν αποφεύγαμε τα else if.Πολύ πιθανό να υπάρχουν λαθάκια, αφού δεν το δοκίμασα. Όλες οι ασκήσεις λύνονται και με τους δύο τρόπους, αλλά όπως βλέπετε, χρειάζεται επιπλέον αλγόριθμος μετά για να εντοπίζουμε ποιο else αντιστοιχεί σε ποιο if. Πέρσι δυστυχώς αναγκάστηκα να γράψω πολλούς αλγόριθμους με αυτή τη λογική, για να αποφύγω το Αλλιώς_ΑΝ:

If MO>=0 then
   If Mo<=20 then
           If Mo<=18 then
                If Mo<= 16 then
                    If Mo<=13 then
                          If Mo<=9,5 then
                                  writeln('O mathitis aporriptetai');
                     else
                          writeln('Sxedon Kala')
                 else
                     writeln('Kala')
           else
              writeln('Poly kala')
      else
          writeln('Arista')
else
 writeln('Dwsate mi apodekto vathmo') 
                       

anasta

  • Βετεράνος
  • ****
  • Μηνύματα: 58
  • Ok, yes... Ok, yes...
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #6 στις: 29 Οκτ 2009, 09:33:34 μμ »
Άσχετο με την ερώτησή σου αλλά θα μου επιτρέψεις να πω ότι το πρόγραμμά σου κάνει περιττούς ελέγχους, κάτι που είναι deprecated με βάση τα σχολικά εγχειρίδια.
Επίσης κάτι που στα δικά μου τα μάτια φαίνεται πολύ εκνευριστικό είναι η άσκοπη χρήση το compound statement.
ΣΤΗΝ ΠΕΡΙΠΤΩΣΗ ΠΟΥ ΔΩΣΕΙ Ο ΧΡΗΣΤΗΣ ΜΗ ΑΠΟΔΕΚΤΗ ΤΙΜΗ π.χ. -1 ΓΙΑ ΒΑΘΜΟ, ΧΩΡΙΣ ΑΥΤΟΥΣ ΤΟΥΣ ΠΕΡΙΤΤΟΥΣ ΕΛΕΓΧΟΥΣ ΘΑ ΔΩΣΕΙ ΛΑΘΟΣ ΑΠΟΤΕΛΕΣΜΑ. ΕΦΟΣΟΝ ΔΕΝ ΥΠΑΡΧΕΙ "ΔΙΑΣΦΑΛΙΣΗ" ΤΙΜΗΣ ΝΟΜΙΖΩ ΠΩΣ ΟΙ ΠΕΡΙΤΤΕΣ ΛΟΓΙΚΕΣ ΣΥΝΘΗΚΕΣ ΜΟΝΟ ΠΕΡΙΤΤΕΣ ΔΕΝ ΕΙΝΑΙ!
ΟΣΟ ΓΙΑ ΤΑ BEGIN K END Κ ΕΜΕΝΑ ΜΟΥ ΤΗ "ΣΠΑΝΕ" ΑΛΛΑ ΠΡΟΤΙΜΩ ΝΑ ΤΑ ΓΡΑΦΩ ΓΙΑ ΝΑ ΜΗΝ ΜΠΕΡΔΕΥΟΝΤΑΙ ΤΑ ΠΑΙΔΙΑ.

Γιατί ντε και καλά δεν θέλεις φωλιασμένες ΑΝ ? Πως αλλιώς να γίνει?
ΓΙΑΤΙ ΜΕ ΕΜΦΩΛΕΥΜΕΝΕΣ ΣΥΜΦΩΝΑ ΜΕ ΤΟ ΒΙΒΛΙΟ ΒΓΑΙΝΕΙ.
ΜΕ "ΑΝ...ΑΛΛΙΩΣ_ΑΝ" ΟΠΩΣ ΣΤΗΝ ΑΕΠΠ ΟΜΩΣ??
ΕΛΕΓΑ ΜΗΠΩΣ ΜΟΥ ΔΙΕΦΕΥΓΕ ΚΑΤΙ.
ΜΑΛΛΟΝ ΠΡΕΠΕΙ ΝΑ ΤΟ ΚΑΝΟΥΜΕ ΟΠΩΣ ΤΟ ΜΠΛΕ ΠΛΑΙΣΙΟ ΤΗΣ ΣΕΛΙΔΑΣ 30 ΤΟΥ ΒΙΒΛΙΟΥ.

ΣΥΝΑΔΕΛΦΙΚΟΥΣ ΧΑΙΡΕΤΙΣΜΟΥΣ!

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #7 στις: 29 Οκτ 2009, 09:45:21 μμ »
Αν και δεν το δοκίμασα σε κάποιον compiler, κάπως έτσι θα ήταν ο κώδικας αν αποφεύγαμε τα else if. 

Αν και δεν έχω υπόψη μου τα περί του μαθήματος, όμως γιατί κάποιος να προσπαθεί να αποφύγει τα "else if";

Δεν είναι όπως το "αλλιώς_αν" που απαιτεί άλλη αντιμετώπιση σε σχέση με το "αλλιώς αν" δηλαδή με το
"αλλιώς
    Αν"

...αλλά είναι το else που ακολουθείται από άλλη εντολή if.

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #8 στις: 29 Οκτ 2009, 09:52:25 μμ »
ΣΤΗΝ ΠΕΡΙΠΤΩΣΗ ΠΟΥ ΔΩΣΕΙ Ο ΧΡΗΣΤΗΣ ΜΗ ΑΠΟΔΕΚΤΗ ΤΙΜΗ π.χ. -1 ΓΙΑ ΒΑΘΜΟ, ΧΩΡΙΣ ΑΥΤΟΥΣ ΤΟΥΣ ΠΕΡΙΤΤΟΥΣ ΕΛΕΓΧΟΥΣ ΘΑ ΔΩΣΕΙ ΛΑΘΟΣ ΑΠΟΤΕΛΕΣΜΑ.

Είναι απλό, κρατάμε μόνο την πρώτη συνθήκη ((MO >= 0) and (MO <= 9.5)) και απλουστεύουμε τις υπόλοιπες.

Κώδικας: [Επιλογή]
program Askisi;

var
  MO: Real;

begin
  Write('Dwse ton teliko meso oro: ');
  Readln(MO);
 
  if (MO >= 0) and (MO <= 9.5) then
    Writeln('O ma9itis aporriptetai')
  else if MO <= 13 then
    Writeln('Sxedon kala')
  else if MO <= 16 then
    Writeln('Kala')
  else if MO <= 18 then
    Writeln('Poly kala')
  else if MO <= 20 then
    Writeln('Arista')
  else
    Writeln('Mi apodektos mesos oros')
end.

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #9 στις: 29 Οκτ 2009, 10:03:15 μμ »
Είναι απλό, κρατάμε μόνο την πρώτη συνθήκη ((MO >= 0) and (MO <= 9.5)) και απλουστεύουμε τις υπόλοιπες.

Κώδικας: [Επιλογή]
program Askisi;

var
  MO: Real;

begin
  Write('Dwse ton teliko meso oro: ');
  Readln(MO);
 
  if (MO >= 0) and (MO <= 9.5) then
    Writeln('O ma9itis aporriptetai')
  else if MO <= 13 then
    Writeln('Sxedon kala')
  else if MO <= 16 then
    Writeln('Kala')
  else if MO <= 18 then
    Writeln('Poly kala')
  else if MO <= 20 then
    Writeln('Arista')
  else
    Writeln('Mi apodektos mesos oros')
end.

Πρόσεξε: Αν ο MO είναι -1 τότε θα μπει στη 2η περίπτωση και θα εμφανίσει "Sxedon kala". Είναι αρκετά συνηθισμένο λάθος και είχα ανεβάσει σχετικό θέμα στο: http://alkisg.mysch.gr/steki/index.php?topic=2145

anasta

  • Βετεράνος
  • ****
  • Μηνύματα: 58
  • Ok, yes... Ok, yes...
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #10 στις: 29 Οκτ 2009, 10:06:38 μμ »
Είναι απλό, κρατάμε μόνο την πρώτη συνθήκη ((MO >= 0) and (MO <= 9.5)) και απλουστεύουμε τις υπόλοιπες.

ΕΠΙΜΕΝΕΙΣ....
ΑΝ ΔΩΣΕΙ ΓΙΑ ΜΕΣΟ ΟΡΟ ΤΗΝ ΤΙΜΗ -1 Η ΠΡΩΤΗ ΣΥΝΘΗΚΗ ΔΕΝ ΙΣΧΥΕΙ.
Η ΕΠΟΜΕΝΗ ΟΜΩΣ "else if MO <= 13 then" ΙΣΧΥΕΙ (ΩΣ ΓΝΩΣΤΟ -1<13), ΟΠΟΤΕ ΕΙΝΑΙ ΑΛΗΘΗΣ, ΟΠΟΤΕ ΘΑ ΕΚΤΕΛΕΣΤΕΙ.   ;)

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #11 στις: 29 Οκτ 2009, 10:07:59 μμ »
Έχετε απόλυτο δίκιο. Ήμουν αφελής. Επιτρέψτε μου να διορθώσω.
Κώδικας: [Επιλογή]
program Askisi;

var
  MO: Real;

begin
  Write('Dwse ton teliko meso oro: ');
  Readln(MO);
 
  if (MO < 0) or (MO > 20) then
    Writeln('Mi apodektos mesos oros')
  else if MO <= 9.5 then
    Writeln('O ma9itis aporriptetai')
  else if MO <= 13 then
    Writeln('Sxedon kala')
  else if MO <= 16 then
    Writeln('Kala')
  else if MO <= 18 then
    Writeln('Poly kala')
  else
    Writeln('Arista')
end.
« Τελευταία τροποποίηση: 29 Οκτ 2009, 10:33:01 μμ από jginis »

anasta

  • Βετεράνος
  • ****
  • Μηνύματα: 58
  • Ok, yes... Ok, yes...
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #12 στις: 29 Οκτ 2009, 10:16:48 μμ »
Αν και δεν το δοκίμασα σε κάποιον compiler, κάπως έτσι θα ήταν ο κώδικας αν αποφεύγαμε τα else if.Πολύ πιθανό να υπάρχουν λαθάκια, αφού δεν το δοκίμασα. Όλες οι ασκήσεις λύνονται και με τους δύο τρόπους, αλλά όπως βλέπετε, χρειάζεται επιπλέον αλγόριθμος μετά για να εντοπίζουμε ποιο else αντιστοιχεί σε ποιο if. Πέρσι δυστυχώς αναγκάστηκα να γράψω πολλούς αλγόριθμους με αυτή τη λογική, για να αποφύγω το Αλλιώς_ΑΝ:

If MO>=0 then
   If Mo<=20 then
           If Mo<=18 then
                If Mo<= 16 then
                    If Mo<=13 then
                          If Mo<=9,5 then
                                  writeln('O mathitis aporriptetai');
                     else
                          writeln('Sxedon Kala')
                 else
                     writeln('Kala')
           else
              writeln('Poly kala')
      else
          writeln('Arista')
else
 writeln('Dwsate mi apodekto vathmo') 
                       

ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ, ΤΟ ΔΟΚΙΜΑΣΑ Κ ΕΦΤΙΑΞΑ ΤΟ ΠΑΡΑΚΑΤΩ.
ΣΥΓΝΩΜΗ ΑΛΛΑ ΣΤΟΝ COMPILER ΠΟΥ ΕΧΩ ΔΕΝ ΕΤΡΕΧΕ ΧΩΡΙΣ "COMPOUND STATEMENTS"
program ASKHSH;
var
   MO:real;
begin
   writeln('ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ');
   readln(MO);
If MO>=0 then
   If Mo<=20 then
      If Mo<=18 then
         If Mo<= 16 then
            If Mo<=13 then
               If Mo<=9.5 then
              BEGIN
                 writeln('O mathitis aporriptetai');
              END
           else
           BEGIN
              writeln('Sxedon Kala');
           END
        else
        BEGIN
           writeln('Kala');
        END
     else
     BEGIN
         writeln('Poly kala');
     END
   else
   BEGIN
      writeln('Arista');
   END
else
BEGIN
   writeln('Dwsate mi apodekto vathmo');
END;

end.

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #13 στις: 29 Οκτ 2009, 10:26:44 μμ »
Πως θα μετατρέπατε σε ψευδοκώδικα το παρακάτω πρόγραμμα σε Pascal;;;;
όχι όμως με εμφωλευμένες....

Τα begin end που είχες βάλει δεν χρειάζονταν (χωρίς όμως τα ερωτηματικά... γιατί τότε θα ήταν σαν να τελείωνε εκεί η πλησιέστερη if)! Η παρακάτω εκδοχή έχει απλούστερους ελέγχους. Όμως κι αυτή θεωρώ πως έχει εμφωλευμένα if, όπως και η αρχική σου λύση, όπως και αυτή του iliasthes που προσπάθησε να μη χρησιμοποιήσει else if...


program ASKHSH;
var
   mo:real;
begin
   writeln('ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ');
   readln(mo);

   if ((mo<0) or (mo>20)) then
      writeln('ΑΚΥΡΟΣ ΒΑΘΜΟΣ')
   else if (mo<=9.5) then
      writeln('Ο μαθητής απορρίπτεται')
   else if (mo<=13) then
      writeln('Σχεδόν καλά')
   else if (mo<=16) then
      writeln('Kαλά')
   else if (mo<=18) then
      writeln('Πολύ καλά')
   else
      writeln('Άριστα');
end.
« Τελευταία τροποποίηση: 29 Οκτ 2009, 10:48:39 μμ από Νίκος Αδαμόπουλος »

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #14 στις: 29 Οκτ 2009, 11:44:22 μμ »
χωρίς όμως τα ερωτηματικά... γιατί τότε...

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

Μια και με έπιασε όρεξη, και από όσο θυμάμαι από την τελευταία φορά που έπιασα pascal στα χέρια μου - πριν 3 χρόνια οπότε συγχωρήστε με αν κάνω κανά λάθος, ...στην ιf...then...else έχουμε:

Κώδικας: [Επιλογή]
if συνθήκη then εντολή1 else εντολή2
Όλο αυτό θεωρείται μια εντολή. Δεν μπορεί να κοπεί στα δύο βάζοντας ερωτηματικό:

Κώδικας: [Επιλογή]
if συνθήκη then εντολή1; else εντολή2
(δεν υπάρχει εντολή που να ξεκινάει με else!)

Αν αντί για μία εντολή πρέπει βάλουμε πολλές τότε τις βάζουμε μέσα σε begin end ώστε να "θεωρούνται πάλι ως μια":

Κώδικας: [Επιλογή]
if συνθήκη then begin εντολή1; ... εντολήn end else begin εντολή3; ... εντολήz end
...που μάλλον θα ήταν πιο κατανοητό αν γραφόταν έτσι:

Κώδικας: [Επιλογή]
if συνθήκη then
  begin
     εντολή1;
     ...
     εντολήn
  end
else
  begin
     εντολή3;
     ...
     εντολήz
  end

Όλο αυτό συνεχίζει να θεωρείται μια εντολή. Άρα μπορεί να μπει ολόκληρο (και χωρίς begin end) ως εντολή μέσα σε άλλη if (μετά το then ή/και μετά το else), κ.ο.κ.

Και όλο αυτό μια εντολή θεωρείται:

Κώδικας: [Επιλογή]
if συνθήκη1 then if συνθήκη2 then εντολή1 else εντολή2 else if συνθήκη3 then εντολή3 else εντολή4
...που μάλλον θα ήταν πιο κατανοητό αν γραφόταν έτσι:

Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
      εντολή1
   else
      εντολή2
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

Τώρα, όταν γράφουμε:

Κώδικας: [Επιλογή]
if συνθήκη1 then
  εντολή1
else if συνθήκη2 then
  εντολή2   
else if συνθήκη3 then
  εντολή3
else
  εντολή4

... είναι σαν να γράφουμε:

Κώδικας: [Επιλογή]
if συνθήκη1 then
  εντολή1
else
   if συνθήκη2 then
      εντολή2   
   else
      if συνθήκη3 then
        εντολή3
      else
        εντολή4

Ουσιαστικά όλα αυτά είναι εμφωλευμένα! Το κάθε else αντιστοιχεί στο πλησιέστερο if που δεν έχει κλείσει (που δεν έχει άλλο πλησιέστερο else). Αν όμως δεν θέλουμε να γίνει κάτι τέτοιο, επειδή το πλησιέστερο if τυχαίνει να μην έχει το δικό του else, τότε μπορούμε να το κλείσουμε αυτό σε begin end ή να του προσθέσουμε else χωρίς εντολή! Δηλαδή:

Κώδικας: [Επιλογή]
if συνθήκη1 then
  begin
     if συνθήκη2 then
       εντολή1
  end
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

ή

Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
     εντολή1
   else
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

Αν δεν γινόταν κάτι από τα παραπάνω και είχαμε:

Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
      εντολή1
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

...θα ήταν σαν να είχαμε:

Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
      εντολή1
   else
      if συνθήκη3 then
         εντολή3
      else
         εντολή4
« Τελευταία τροποποίηση: 30 Οκτ 2009, 01:54:42 πμ από Νίκος Αδαμόπουλος »

Βασίλης Ραξενίδης

  • Θαμώνας
  • ***
  • Μηνύματα: 30
  • bar = foo
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #15 στις: 29 Οκτ 2009, 11:46:15 μμ »
Συγνώμη αλλά διάβασα όλες τις απαντήσεις και δεν κατάλαβα τίποτα. Το πρόβλημα ποιο ήταν; Να μετατραπεί κώδικας Pascal σε ψευδοκώδικα. Σωστά; Απάντηση δεν δόθηκε. Η απάντηση είναι απλή. Κατά τη γνώμη μου δεν γίνεται χωρίς φωλιασμένες Αν Τότε Αλλιώς.
Επίσης δεν γίνεται με την δομή πολλαπλής επιλογής όπως την έχει στο βιβλίο στη σελίδα 30 (μπλε πλαίσιο). Σύμφωνα με αυτή για κάθε περίπτωση εξετάζεται ισότητα.

Σε ότι αφορά την κουβέντα που γίνεται για την ορθότητα του κώδικα, λύσεις που δόθηκαν από iliasthes και Αδαμόπουλος είναι μια χαρά αν και δεν βλέπω διαφορά σε σχέση με τον αρχικό κώδικα του/της anasta πέρα από τους ελέγχους. Ωστόσο ο κώδικας του/της anasta είναι μια χαρά και ας είναι "deprecated" και ας έχει και begin end.
Γνώμη μου είναι ότι καταρχήν τα παιδιά θα πρέπει  να μάθουν να γράφουν κώδικα και ας έχει και περιττούς ελέγχους και περιττά begin end. Δεν νομίζω ότι να κοβόταν μονάδες από τον κώδικα του/της anasta. Εκτός αν μέρος του μαθήματος είναι και η βελτιστοποίηση. Σε κάθε περίπτωση πάντως η λύση με τους περιττούς ελέγχους είναι ποιο κοντά στον τρόπο που σκέφτονται οι μαθητές.

Όσο για το ΑΕΠΠ πιστεύω ότι θα ήταν καλύτερα να μην κοιτάμε συνέχεια πως γίνεται τι με τη ΓΛΩΣΣΑ. Εμάς μας δίνεται ο ψευδοκώδικας (όπως μας δίνεται) και με αυτόν πρέπει να δουλέψουμε. Προσωπικά χρησιμοποιώ τις εντολές του βιβλίου μας και λύνω  ασκήσεις από ΑΕΠΠ χωρίς κανένα πρόβλημα. Ας πάψουμε να ασχολούμαστε με τα ΑΛΛΙΩΣ_ΑΝ και τα ΓΙΑ Ι = 0 ΕΩΣ 10 ΜΕ ΒΗΜΑ 1 κτλ. Οτιδήποτε γίνεται με αυτές τις εντολές γίνεται και με τις εντολές που δίνονται στο βιβλίο μας.

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #16 στις: 30 Οκτ 2009, 12:02:37 πμ »
Συγνώμη αλλά διάβασα όλες τις απαντήσεις και δεν κατάλαβα τίποτα. Το πρόβλημα ποιο ήταν; Να μετατραπεί κώδικας Pascal σε ψευδοκώδικα. Σωστά; Απάντηση δεν δόθηκε. Η απάντηση είναι απλή. Κατά τη γνώμη μου δεν γίνεται χωρίς φωλιασμένες Αν Τότε Αλλιώς.

Σωστά! Το μόνο που δεν απαντήθηκε ήταν το αρχικό ερώτημα  ;D  Και εγώ όσα έγραψα τα έγραψα επειδή παρασύρθηκα, αλλά και για να πω ότι στην Pascal οι πολλαπλές επιλογές ουσιαστικά είναι εμφωλευμένες, με ή χωρίς περιττούς ελέγχους, με ή χωρίς begin end...

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #17 στις: 30 Οκτ 2009, 12:18:08 πμ »
κ. Αδαμόπουλε επιτρέψτε μου μια μικρή διόρθωση

.....
Ουσιαστικά όλα αυτά είναι εμφωλευμένα! Το κάθε else αντιστοιχεί στο πλησιέστερο if που δεν έχει κλείσει (που δεν έχει άλλο πλησιέστερο else ή δεν έχει ; στο τέλος του). Έτσι στο:

Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
      εντολή1;
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

...το πρώτο else που υπάρχει αντιστοιχεί στο αρχικό if αφού το 2ο if έχει κλείσει με το ; Αν δεν υπήρχε το ; θα ήταν σαν να είχαμε:
......

πριν από το else δεν μπορούμε να έχουμε ; είναι συντακτικό λάθος. Αν θέλουμε να έχουμε το σχήμα που αναφέρετε θα πρέπει να χρησιμοποιηθεί η σύνθετη εντολή:

Κώδικας: [Επιλογή]
if συνθήκη1 then
begin
   if συνθήκη2 then
      εντολή1
end
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

Εκτός θέματος όπως πάντα  :D
« Τελευταία τροποποίηση: 30 Οκτ 2009, 01:32:31 πμ από jginis »

iliasthes

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 790
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #18 στις: 30 Οκτ 2009, 01:25:34 πμ »
Βασίλη αν κατάλαβα καλα'το αρχικό πρόβλημα δεν ήταν αυτή καθεαυτή η μετατροπή του κώδικα σε ψευδοκώδικα, αλλά να γίνει μετατροπή της λύσης έτσι ώστε να μην υπάρχει else if, γιατί στον ψευδοκώδικα (του βιβλίου) δεν μπορεί να χρησιμοποιηθεί Αλλιώς Αν. Γι' αυτό ακριβώς το λόγο έδωσα και μια πρόταση χωρίς else if. Δεν νομίζω πως το πρόβλημα της συναδέλφου είναι να μετατρέψει αυτή τη λύση σε ψευδοκώδικα. Τουλάχιστον εγώ αυτό κατάλαβα.

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #19 στις: 30 Οκτ 2009, 01:30:13 πμ »
Γνώμη μου είναι ότι καταρχήν τα παιδιά θα πρέπει  να μάθουν να γράφουν κώδικα και ας έχει και περιττούς ελέγχους και περιττά begin end. Δεν νομίζω ότι να κοβόταν μονάδες από τον κώδικα του/της anasta. Εκτός αν μέρος του μαθήματος είναι και η βελτιστοποίηση. Σε κάθε περίπτωση πάντως η λύση με τους περιττούς ελέγχους είναι ποιο κοντά στον τρόπο που σκέφτονται οι μαθητές.

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

...κοιμήθηκα και ξύπνησα μ' αυτό. Να σου πω γιατί τα λέω αυτά: Μου φέρνεις στο μυαλό το προφίλ των ατόμων που έγραψαν το βιβλίο του ΔΠ για τα ΤΕΕ.  Γι' αυτό τραβάμε όλα αυτά που τραβάμε. Έτσι απλά γιατί κάποιοι ΔΕΝ ΗΤΑΝ ΒΕΛΤΙΣΤΟΙ ΣΤΗΝ ΔΟΥΛΕΙΑ ΤΟΥΣ αλλά αρκούνταν με αυτό που τόσο πετυχημένα έλεγε στη διαφήμιση η Τρέμη: ΤΗ ΔΟΥΛΕΙΑ ΤΗΣ ΞΕΠΕΤΑΣ.

Κάποτε πρέπει να σταματήσει αυτό. Είναι υποτιμητικό και άδικο για όλους μας.

Συναδελφικούς Χαιρετισμούς και από μένα.
« Τελευταία τροποποίηση: 30 Οκτ 2009, 07:51:15 πμ από jginis »

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #20 στις: 30 Οκτ 2009, 01:35:47 πμ »
κ. Αδαμόπουλε επιτρέψτε μου μια μικρή διόρθωση
...
πριν από το else δεν μπορούμε να έχουμε ; είναι συντακτικό λάθος. Αν θέλουμε να έχουμε το σχήμα που αναφέρεται θα πρέπει να χρησιμοποιηθεί η σύνθετη εντολή:

Κώδικας: [Επιλογή]
if συνθήκη1 then
begin
   if συνθήκη2 then
      εντολή1
end
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4

Έχεις δίκιο. Έκανα κι εγώ το λάθος που ανέφερα. Το ; δεν οριοθετεί το τέλος μιας εντολής αλλά είναι διαχωριστικό, και εκεί δεν υπάρχει τίποτα να διαχωρίσει!

Ή θα μπορούσε να γίνει χωρίς begin end βάζοντας ένα else χωρίς εντολή! Δεν θυμάμαι, παίζει αυτό;


Κώδικας: [Επιλογή]
if συνθήκη1 then
   if συνθήκη2 then
      εντολή1
   else
else
   if συνθήκη3 then
      εντολή3
   else
      εντολή4
[/quote]

Γυρνάω και το διορθώνω για να μην το πάρει κανείς και το χρησιμοποιήσει λανθασμένο!

Ααα, και καλύτερα... Νίκος!

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #21 στις: 30 Οκτ 2009, 01:51:16 πμ »
Εδώ στη Σαλαμίνα θα λέγαμε: "Εμ μανάρι, αυτό είναι ακόμη πιο μαγκιόρικο!"
:laugh:

Σχετικά με το αρχικό μας θέμα μια αντίστοιχη άσκηση σε ψευδοκώδικα θα βρείτε εδώ:
http://users.att.sch.gr/jginis/?pg=sp#pseudo9
« Τελευταία τροποποίηση: 30 Οκτ 2009, 02:07:40 πμ από jginis »

gedeon

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 101
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #22 στις: 30 Οκτ 2009, 09:10:47 πμ »

Συνάδελφοι,
όπως πολύ καλά γνωρίζουν οι περισσότεροι που άρχισαν απο πέρυσι τη Pascal σαν Πανελλαδικώς εξεταζόμενο μάθημα,
τέτοιου είδους προβλήματα υπάρχουν λόγω των πολλών σημείων που έχουν ασάφειες στο βιβλίο(ή καλύτερα θα έλεγα μπερδεμένων σημείων).
Ταπεινή γνώμη μου είναι να προσπαθήσουμε να μάθουμε το σωστό τρόπο σκέψης στα παιδιά - σχετικά με το πώς θα φτιάχνουν ένα αλγόριθμο - και φυσικά πως αυτός θα υλοποιηθεί με Pascal.
Θα έλεγα ότι δε πρέπει να προβληματιζόμαστε πάρα πολύ σχετικά με θέματα τύπου
Αν.... Τέλος_Αν κλπ... Μερικά απο αυτά προέρχονται απο το μάθημα ΑΕΠΠ(και έχουμε χάσει το μπούσουλα). Καλό θα είναι να μη παρασυρόμαστε απο το τι γίνεται στο ΑΕΠΠ....
Είναι τόσο ασαφή τα θέματα του ψευδοκώδικα, ώστε πέρυσι το Υπουργείο έστειλε εγκύκλιο σχετικά με τους αποδεκτούς τρόπους υλοποίησης ψευδοκώδικα(και όσοι ήταν βαθμολογητές θυμούνται πολύ καλά ότι στο Υπουργείο η επιτροπή των εξετάσεων αποτελείτο απο διδάσκοντες του ΑΕΠΠ με αποτέλεσμα να μη γνωρίζουν την εγκύκλιο).
Τελικά τι έγινε; Απλά, όταν έγινε βαθμολόγηση των γραπτών δεχτήκαμε σωστές και τις απαντήσεις (π.χ. με Τέλος_Αν και αυτές χωρίς Τέλος_Αν).

Επίσης, κάτι που έχει αναφερθεί πριν λίγο καιρό...

Οι βαθμολογητές στις Πανελλαδικές, ήταν ΣΧΕΔΟΝ ΟΛΟΙ καθηγητές των ΕΠΑΛ. Δυστυχώς υπήρξαν και κάποιοι καθηγητές των Γενικών Λυκείων, αλλά ενημερώθηκαν απο εμάς τους υπόλοιπους. Βέβαια ψιλιμπερδεύονταν και τι κάναμε τελικά;... Απλά όταν υπήρχε καθηγητής Γενικού Λυκείου βάζαμε σαν 2ο καθηγητή-βαθμολογητή καθηγητή ΕΠΑΛ, ώστε να μη γίνει καμμιά στραβή ταυτόχρονα και απο τους δύο βαθμολογητές(αν τύχαινε να ήταν Γενικού Λυκείου).

Βασίλης Ραξενίδης

  • Θαμώνας
  • ***
  • Μηνύματα: 30
  • bar = foo
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #23 στις: 30 Οκτ 2009, 09:48:48 πμ »
Βασίλη αν κατάλαβα καλα'το αρχικό πρόβλημα δεν ήταν αυτή καθεαυτή η μετατροπή του κώδικα σε ψευδοκώδικα, αλλά να γίνει μετατροπή της λύσης έτσι ώστε να μην υπάρχει else if, γιατί στον ψευδοκώδικα (του βιβλίου) δεν μπορεί να χρησιμοποιηθεί Αλλιώς Αν. Γι' αυτό ακριβώς το λόγο έδωσα και μια πρόταση χωρίς else if. Δεν νομίζω πως το πρόβλημα της συναδέλφου είναι να μετατρέψει αυτή τη λύση σε ψευδοκώδικα. Τουλάχιστον εγώ αυτό κατάλαβα.
Μα νομίζω ότι το είπε και ο Αδαμόπουλος χθές. Η
Κώδικας: [Επιλογή]
else if στην Pascal  είναι το όδιο σαν να γράφεις
Κώδικας: [Επιλογή]
if ... Then
........
else
   if .....
Δηλαδή φωλιασμένη
Κώδικας: [Επιλογή]
if μέσα σε
Κώδικας: [Επιλογή]
else.
Και σε ψευδοκώδικα
Αν .... Τότε
.....
Αλλιώς
    Αν .... Τότε
    Αλλιώς

Βασίλης Ραξενίδης

  • Θαμώνας
  • ***
  • Μηνύματα: 30
  • bar = foo
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #24 στις: 30 Οκτ 2009, 03:39:54 μμ »
Γνώμη μου είναι ότι καταρχήν τα παιδιά θα πρέπει  να μάθουν να γράφουν κώδικα και ας έχει και περιττούς ελέγχους και περιττά begin end. Δεν νομίζω ότι να κοβόταν μονάδες από τον κώδικα του/της anasta. Εκτός αν μέρος του μαθήματος είναι και η βελτιστοποίηση. Σε κάθε περίπτωση πάντως η λύση με τους περιττούς ελέγχους είναι ποιο κοντά στον τρόπο που σκέφτονται οι μαθητές.

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

...κοιμήθηκα και ξύπνησα μ' αυτό. Να σου πω γιατί τα λέω αυτά: Μου φέρνεις στο μυαλό το προφίλ των ατόμων που έγραψαν το βιβλίο του ΔΠ για τα ΤΕΕ.  Γι' αυτό τραβάμε όλα αυτά που τραβάμε. Έτσι απλά γιατί κάποιοι ΔΕΝ ΗΤΑΝ ΒΕΛΤΙΣΤΟΙ ΣΤΗΝ ΔΟΥΛΕΙΑ ΤΟΥΣ αλλά αρκούνταν με αυτό που τόσο πετυχημένα έλεγε στη διαφήμιση η Τρέμη: ΤΗ ΔΟΥΛΕΙΑ ΤΗΣ ΞΕΠΕΤΑΣ.

Κάποτε πρέπει να σταματήσει αυτό. Είναι υποτιμητικό και άδικο για όλους μας.

Συναδελφικούς Χαιρετισμούς και από μένα.

Συνάδελφε Γιάννη, μάλλον δεν κατάλαβες τι ακριβώς ήθελα να πω. Προφανώς και συμφωνώ μαζί σου ότι είμαστε υποχρεωμένοι να μεταδώσουμε το σωστό και το πρέπων στα παιδιά. Ωστόσο δεν είμαι σίγουρος αν ένα μάθημα όπως αυτό που διδάσκουμε προσφέρεται για τέτοιου είδους διδασκαλία. Ξεκίνησα να διδάσκω το μάθημα (για πρώτη φορά φέτος) με στόχο την όσο το δυνατόν καλύτερη προετοιμασία των μαθητών για τις εξετάσεις. Πιστεύω ότι αυτό μπορεί να επιτευχθεί μαθαίνοντας στα παιδιά να έχουν μεθοδικό - αναλυτικό και εν τέλει αλγοριθμικό τρόπο σκέψης. Έτσι θα μπορέσουν  να αντιμετωπίσουν τα προβλήματα που θα τους δοθούν στις εξετάσεις. Κατά τη γνώμη μου  όμως, ο αναλυτικός και μεθοδικός τρόπος σκέψης είναι κάτι που δεν μπορεί να μεταδοθεί στα παιδιά μέσα από τη διδασκαλία μόνο. Πιστεύω (όπως πολύ εύστοχα διάβασα σε σχόλιο συναδέλφου σε άλλο θέμα) ότι ο προγραμματισμός δεν διδάσκεται αλλά μαθαίνεται. Προσωπικά όταν μάθαινα προγραμματισμό στο πανεπιστήμιο για κάθε ώρα θεωρητικής διδασκαλίας στο αμφιθέατρο ακολουθούσαν πολλές ώρες εφαρμογών και πειραματισμών στο εργαστήριο. Αυτό βεβαίως είναι αδύνατον να γίνει με τα μέσα που μας δίνονται για να διδάξουμε το μάθημα.
Επιπλέον δεν πρέπει να ξεχνάμε ότι οι μαθητές μας φτάνουν στην Γ τάξη χωρίς να έχουν κανένα υπόβαθρο σχετικό με προγραμματισμό. Άσε που από την άλλη αγνοούν  βασικά μαθηματικά. Πως να γράψουν έναν αλγόριθμο για μισθοδοσία όταν δεν ξέρουν πως να υπολογίσουν τις κρατήσεις για φόρο;
Με αυτή την έννοια λέω ότι καταρχήν θα πρέπει να μάθουμε στα παιδιά να γράφουν κώδικα. Προφανώς και έχεις δίκιο σχετικά με τους περιττούς ελέγχους στον κώδικα της συναδέλφου απ' όπου ξεκίνησε το θέμα. Προφανώς και σε καμιά περίπτωση δεν θα πρότεινα αυτόν τον κώδικα στα παιδιά ή μάλλον θα τον έδειχνα ως παράδειγμα προς αποφυγή. Από την άλλη όμως πιστεύω ότι αν ζητούσαμε τυχαία από έναν μαθητή να γράψει αυτόν τον αλγόριθμο πολύ πιθανόν να τον έγραφε με περιττούς ελέγχους και ξεκινώντας από εκεί θα μπορούσαμε να δείξουμε τι θα πρέπει να διορθώσει. Αυτό εννοώ όταν λέω ότι είναι πιο κοντά στον τρόπο που σκέφτονται οι μαθητές.
Τώρα αν θέλουμε
Παράθεση
να γίνουμε το πρότυπο για το "πως πρέπει να σκέφτονται οι μαθητές"
μάλλον θα πρέπει πρώτα να έρθουμε κοντά και να καταλάβουμε πως σκέφτονται οι μαθητές και από εκεί να ξεκινήσουμε.

Αν μετά απ' αυτά συνεχίζω να σου θυμίζω (συνάδελφε Γιάννη) τους συγγραφείς του βιβλίου..... λυπάμαι πολύ.

Συγνώμη αν σας κούρασα

Χαιρετισμούς σε όλους.
« Τελευταία τροποποίηση: 30 Οκτ 2009, 04:04:39 μμ από Βασίλης Ραξενίδης »

Ιωάννης Γκίνης

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 130
  • I share because I care
    • Προσωπική ιστοσελίδα
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #25 στις: 30 Οκτ 2009, 06:21:54 μμ »
κ. Ραξενίδη, είναι αλήθεια ότι τα όσα αναφέρατε είναι πράγματα που -πρέπει να- έχουν απασχολήσει όλους εμάς που ασχολούμαστε με τα πανελλαδικώς εξεταζόμενα μαθήματα του ΕΠΑΛ (και όχι μόνο). Τα πράγμα θέλει πολύ κουβέντα και αυτό δυστυχώς είναι το στοιχείο που λείπει, γενικότερα απ' την εκπαίδευση θα έλεγα.

Ζητώ συγνώμη για το "απότομο" του τρόπο μου. Ίσως φταίει η έπαρση που με (μας) πιάνει όταν ξέρω ότι αυτό που πρεσβεύω δεν είναι λάθος.

karinakis

  • Θαμώνας
  • ***
  • Μηνύματα: 44
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #26 στις: 01 Νοέ 2009, 09:36:42 πμ »
είμαι και εγώ ένας συνάδελφος που πρώτη φορά κάνω το μάθημα του δομημένου προγραμματισμού. Διαβάζοντας το συγκεκριμένο θέμα συζήτησης για να πω την αλήθεια μπερδεύτηκα περισσότερο. Αν κατάλαβα καλα το αρχικό πρόβλημα της anasta ήταν πως θα μετατροπεί το πρόγραμμα της pascal που παρέθεσε σε ψευδοκώδικα. Μάλιστα το συγκεκριμένο πρόγραμμα περιείχε πολλαπλές επιλογές (else if). Γιατι θα πρέπει τα παιδιά ντε και καλά να το μετατρέψουν σε εμφωλευμένα If;;;;;;;;;;;;;;;; Μήπως γιατί το βιβλίο δεν αναφέρει αντίστοιχο ψευδοκώδικα για εντολή else if κάτι αντίστοιχο με το ΑΛΛΙΩΣ_ΑΝ του ΑΕΠΠ;;;;;; Αρα το μετατρέπουμε σε φωλιασμένα if και μετά παράγουμε τον αντίστοιχο ψευδοκώδικα;;;;;;;

Και κάτι άλλο που θα ήθελα να ρωτήσω : Σε ψευδοκώδικα λέμε στα παιδιά να τελειώνουν ένα AΝ με ΤΕΛΟΣ_ΑΝ ή όχι;;;;; (στο βιβλιο πάντως δεν φαίνεται κάτι τέτοιο όμως για τα παιδια είναι ευκολότερο να κατανοήσουν το ΑΝ χρησιμοποιώντας και ΤΕΛΟΣ_ΑΝ)

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

Ευχαριστώ εκ των προτέρων

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #27 στις: 01 Νοέ 2009, 12:53:21 μμ »
... Μάλιστα το συγκεκριμένο πρόγραμμα περιείχε πολλαπλές επιλογές (else if). Γιατι θα πρέπει τα παιδιά ντε και καλά να το μετατρέψουν σε εμφωλευμένα If;;;;;;;;;;;;;;;;

Μα αυτό ακριβώς λέμε! Ότι το else if δεν είναι πολλαπλή επιλογή, όπως είναι το αλλιώς_αν... Στην pascal δεν υπάρχει πολλαπλή if...

Όταν γράφουμε:

else if

ουσιαστικά είναι σαν να γράφουμε:

else
   if

Και στην ψευδογλώσσα της ΑΕΠΠ για τις πολλαπλές περιπτώσεις γράφουμε "αλλιώς_αν" και όχι "αλλιώς αν".

Αν γράφαμε:

αλλιώς αν

θα ήταν σαν να γράφαμε

αλλιώς
    αν

...δηλαδή εμφωλευμένο Αν!

Η ψευδογλώσσα του μαθήματος ουσιαστικά βασίζεται στην Pascal, η οποία δεν διαθέτει εντολή για επιλογή αντίστοιχη της ΑΕΕΠ: "Αν...τότε...αλλιώς_αν". Διαθέτει μόνο τις "Αν...τότε" και "Αν...τότε...αλλιώς"

Για τον ίδιο λόγο δεν υπάρχει το Τέλος_αν! Επειδή η pascal δεν έχει EndIf αλλά χρησιμοποιεί το begin - end για την περίπτωση που κάποιος θέλει να βάλει πολλές εντολές αντί για μόνο μία. Στην ψευδογλώσσα κατά τη γνώμη μου θα μπορούσε να μπει το Αρχή - Τέλος, με απολύτως αντίστοιχο τρόπο όπως στην pascal.

Πάντα κατά τη γνώμη μου, δεν πρέπει να ακολουθήσουμε την ψευδογλώσσα της ΑΕΠΠ (...επειδή πιθανώς την έχουμε συνηθίσει και την έχουμε κάνει ευαγγέλιο!) γιατί δεν αντιστοιχεί στην Pascal αλλά σε άλλη γλώσσα (!;), οπότε τα παιδιά θα μπερδεύονταν...

iliasthes

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 790
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #28 στις: 01 Νοέ 2009, 01:01:25 μμ »
       Για το Τέλος Αν συμφωνώ απόλυτα με τον Νίκο (ελπίζω να μου επιτρέπεις τον ενικό). Εξάλλου μπορεί κακώς να μην δίνει παράδειγμα το βιβλίο, στον πίνακα εντολών ψευδοκώδικα όμως έχει τις εντολές Αρχή και Τέλος λέγοντας πως δηλώνουν την αρχή και το τέλος κάποιας ομάδας εντολών, οπότε μας αφήνει πιστεύω με αυτό τον τρόπο, το ελεύθερο να τις χρησιμοποιούμε όπου πιστεύουμε οτι είναι απαραίτητο για να μην υπάρχει σύγχυση που αρχίζει και που τελειώνει (που τελειώνει βασικά) μια εντολή ΑΝ ή μια εντολή Αλλιώς ή μια εντολή Για Ν φορές.

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #29 στις: 01 Νοέ 2009, 02:10:17 μμ »
Παρόλο που μόλις τώρα έριξα μια ματιά στο βιβλίο - δεν το έχω ξαναδεί! -ας πάμε λοιπόν στο αρχικό ερώτημα:

Πως θα μετατρέπατε σε ψευδοκώδικα το παρακάτω πρόγραμμα σε Pascal;;;;
όχι όμως με εμφωλευμένες....

program ASKHSH;
var
   MO:real;
begin
   writeln('ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ');
   readln(MO);
   if ((MO>=0) and (mo<=9.5)) then
      begin
         writeln('Ο μαθητής απορρίπτεται');
      end
   else if ((MO>9.5) and (MO<=13)) then
      begin
         writeln('Σχεδόν καλά');
      end
   else if ((MO>13) and (MO<=16)) then
      begin
         writeln('Kαλά');
      end
   else if ((MO>16) and (MO<=18)) then
      begin
         writeln('Πολύ καλά');
      end
   else if ((MO>18) and (MO<=20)) then
      begin
         writeln('Άριστα');
      end
   else
      begin
         writeln('ΑΚΥΡΟΣ ΒΑΘΜΟΣ');
      end;
   
end.

Καταρχάς είναι ίδιο με το (κρατάω κατά τα άλλα όλους τους ελέγχους - αν και κάποιες παρενθέσεις μού φαίνονται περιττές):

Παράθεση
program ASKHSH;
var
   MO:real;
begin
   writeln('ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ');
   readln(MO);
   if ((MO>=0) and (mo<=9.5)) then
      writeln('Ο μαθητής απορρίπτεται')
   else if ((MO>9.5) and (MO<=13)) then
      writeln('Σχεδόν καλά')
   else if ((MO>13) and (MO<=16)) then      
      writeln('Kαλά')
   else if ((MO>16) and (MO<=18)) then      
      writeln('Πολύ καλά')      
   else if ((MO>18) and (MO<=20)) then      
      writeln('ʼριστα')
   else
      writeln('ΑΚΥΡΟΣ ΒΑΘΜΟΣ')

end.

Αυτό που λέμε είναι ότι και τα 2 τα παραπάνω είναι με εμφωλευμένα Αν όσο κι αν δεν θέλουμε να το πιστέψουμε επειδή έχουμε στο μυαλό μας την ΑΕΠΠ. Αν κάποιος έχει στο μυαλό του μόνο την pascal και την ψευδογλώσσα όπως την έχει στη σελ. 25, πιστεύω πως τα πράγματα ξεκαθαρίζουν:

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

Παράθεση
Εμφάνισε "ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ"
Διάβασε ΜΟ
Αν ((MO>=0) και (mo<=9.5))
Τότε Εμφάνισε "Ο μαθητής απορρίπτεται"
Αλλιώς Αν ((MO>9.5) και (MO<=13))
Τότε Εμφάνισε "Σχεδόν καλά"
Αλλιώς Αν ((MO>13) και (MO<=16))
Τότε Εμφάνισε  "Kαλά"
Αλλιώς Αν ((MO>16) και (MO<=18))
Τότε Εμφάνισε"Πολύ καλά"
Αλλιώς Αν ((MO>18) και (MO<=20))
Τότε Εμφάνισε "ʼριστα"
Αλλιώς Εμφάνισε "ΑΚΥΡΟΣ ΒΑΘΜΟΣ"

ή ακόμα (αφού βλέπω σε παραδείγματα ότι υπάρχει ελευθερία γραφής ως προς τις εσοχές και τις αλλαγές γραμμών):

Παράθεση
Εμφάνισε "ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ"
Διάβασε ΜΟ
Αν ((MO>=0) και (mo<=9.5))
Τότε
    Εμφάνισε "Ο μαθητής απορρίπτεται"
Αλλιώς Αν ((MO>9.5) και (MO<=13))
    Τότε Εμφάνισε "Σχεδόν καλά"
Αλλιώς Αν ((MO>13) και (MO<=16))
    Τότε Εμφάνισε  "Kαλά"
Αλλιώς Αν ((MO>16) και (MO<=18))
    Τότε Εμφάνισε"Πολύ καλά"
Αλλιώς Αν ((MO>18) και (MO<=20))
    Τότε Εμφάνισε "ʼριστα"
Αλλιώς
     Εμφάνισε "ΑΚΥΡΟΣ ΒΑΘΜΟΣ"

Ας μη βιαστούμε να πούμε ότι "Να λοιπόν, το παραπάνω είναι πολλαπλή αν"!!!, αντίστοιχη της Αν...τότε...αλλιώς_αν της ΑΕΕΠ, μόνο και μόνο επειδή μοιάζει οπτικά! Βάζοντας διαφορετικά χρώματα σε κάθε εντολή Αν ουσιαστικά βλέπουμε ότι σε κάθε Αλλιώς υπάρχει ως εντολή μία άλλη εντολή Αν (το δείχνω μόνο στην πρώτη Αλλιώς), κ.ο.κ.

Το ίδιο ακριβώς, αν αυξήσουμε λίγο τις εσοχές (!) και αλλάζοντας πιο πολλές γραμμές (!) γράφεται:

Παράθεση
Εμφάνισε "ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ"
Διάβασε ΜΟ
Αν ((MO>=0) και (mo<=9.5))
Τότε
    Εμφάνισε "Ο μαθητής απορρίπτεται"
Αλλιώς
   Αν ((MO>9.5) και (MO<=13))
   Τότε
       Εμφάνισε "Σχεδόν καλά"
   Αλλιώς
       Αν ((MO>13) και (MO<=16))
       Τότε
           Εμφάνισε  "Kαλά"
       Αλλιώς
           Αν ((MO>16) και (MO<=18))
           Τότε
               Εμφάνισε"Πολύ καλά"
           Αλλιώς
               Αν ((MO>18) και (MO<=20))
               Τότε
                   Εμφάνισε "ʼριστα"
               Αλλιώς
                   Εμφάνισε "ΑΚΥΡΟΣ ΒΑΘΜΟΣ"

Δεν άλλαξε τίποτα όμως! Έτσι κι αλλιώς κανονικά είναι όλα εμφωλευμένα. Είναι εντολές Αν μέσα σε άλλες Αν, κ.ο.κ. Και μάλιστα αν κρατήσουμε και τα περιττά begin end του αρχικού pascal κώδικα έχουμε τον ψευδοκώδικα (που θεωρώ ότι δεν έρχεται σε αντίθεση με τίποτα από αυτά που λέει το βιβλίο):

Παράθεση
Εμφάνισε "ΔΩΣΕ ΤΕΛΙΚΟ ΜΕΣΟ ΟΡΟ"
Διάβασε ΜΟ
Αν ((MO>=0) και (mo<=9.5))
Τότε
  Αρχή
      Εμφάνισε "Ο μαθητής απορρίπτεται"
  Τέλος
Αλλιώς Αν ((MO>9.5) και (MO<=13))
Τότε
   Αρχή
       Εμφάνισε "Σχεδόν καλά"
   Τέλος
Αλλιώς Αν ((MO>13) και (MO<=16))
Τότε
   Αρχή
       Εμφάνισε  "Kαλά"
   Τέλος
Αλλιώς Αν ((MO>16) και (MO<=18))
Τότε
   Αρχή
       Εμφάνισε"Πολύ καλά"
   Τέλος
Αλλιώς Αν ((MO>18) και (MO<=20))
Τότε
    Αρχή
       Εμφάνισε "ʼριστα"
    Τέλος
Αλλιώς
    Αρχή
        Εμφάνισε "ΑΚΥΡΟΣ ΒΑΘΜΟΣ"
    Τέλος

Έδωσα 4 λύσεις, πλήρως συμβατές με το βιβλίο... Είναι όμως όλες με εμφωλευμένα Αν! Ας ξεχάσουμε λοιπόν το Τέλος_αν (και τα Τέλος_επανάληψης, Τέλος_επιλογών, ...)!!!  :D

Και τελικά πιστεύω ότι για να μετατρέψουμε pascal σε ψευδογλώσσα: απλά μεταφράζουμε τις λέξεις!!!!!! Αυτό έκαναν και οι συγγραφείς του βιβλίου - είναι φως φανάρι! Και για να μην τους αδικούμε, αυτό έκαναν και οι συγγραφείς της ΑΕΠΠ αλλά αυτοί βασίστηκαν σε άλλη γλώσσα (!;). :)

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

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Pascal σε ψευδοκώδικα - Πολλαπλή επιλογή
« Απάντηση #30 στις: 01 Νοέ 2009, 02:11:45 μμ »
... με τον Νίκο (ελπίζω να μου επιτρέπεις τον ενικό)....

Εννοείται! :)