Αποστολέας Θέμα: Ερώτηση για pascal  (Αναγνώστηκε 889 φορές)

theoni

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 116
Ερώτηση για pascal
« στις: 25 Φεβ 2016, 04:29:01 μμ »
Έχω μπερδευτεί με την repeat-until παίρνει ερωτιματικό στο τέλος της συνθήκης η όχι;;;

Λαμπράκης Μανώλης

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 685
Απ: Ερώτηση για pascal
« Απάντηση #1 στις: 25 Φεβ 2016, 04:37:06 μμ »
Καλησπέρα

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


bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 382
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: Ερώτηση για pascal
« Απάντηση #2 στις: 25 Φεβ 2016, 05:21:50 μμ »
Παίρνει, αλλά δείτε στο παράδειγμα: Αν έχουμε δυο εντολές ανάμεσα, τότε η τελευταία (η δεύτερη εδώ) δεν παίρνει.
http://wiki.lazarus.freepascal.org/REPEAT..UNTIL

linap

  • Θαμώνας
  • ***
  • Μηνύματα: 32
Απ: Ερώτηση για pascal
« Απάντηση #3 στις: 28 Φεβ 2016, 08:33:40 μμ »
Καλησπερα,

απο οτι καταλαβα η ερωτηση ηταν αν παιρνει ερωτηματικο ΜΕΤΑ τη συνθηκη (BooleanExpression)

repeat
  statement1;
  statement2
until BooleanExpression;


Η απαντηση ειναι οτι παιρνει, εκτος ειναι η τελευταια εντολη του block (αν ακολουθει end), π.χ.

       .....
       begin
              ...
              ...
              repeat
                   statement1;
                   statement2
              until BooleanExpression
       end;


linap

  • Θαμώνας
  • ***
  • Μηνύματα: 32
Απ: Ερώτηση για pascal
« Απάντηση #4 στις: 28 Φεβ 2016, 08:34:38 μμ »
(και σε καθε περιπτωση, μια δοκιμη στον compiler θα σας πεισει..)

theoni

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 116
Απ: Ερώτηση για pascal
« Απάντηση #5 στις: 28 Φεβ 2016, 09:54:36 μμ »
ΚΑΛΗΣΠΕΡΑ ΕΓΏ  ΠΑΝΤΩΣ ΠΟΥ ΛΥΝΩ ΜΕΡΙΚΑ ΠΡΟΒΛΗΜΑΤΑ  ΓΙΑ ΕΠΙΒΕΒΑΙΩΣΗ ΣΤΟ ΠΡΟΓΡΑΜΜΑ ΤΗΣ PASCAL ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΝ ΚΑΙ ΣΤΟ ΣΧΟΛΕΙΟ ΤΟ ΕΡΩΤΗΜΑΤΙΚΌ ΤΟ ΠΑΙΡΝΕΙ ΣΕ ΟΛΕΣ ΤΙΣ ΠΕΡΙΠΤΩΣΕΙΣ ΑΝΕΞΑΡΤΗΤΑ ΑΝ ΕΙΝΑΙ Η ΤΕΛΕΥΤΑΙΑ ΕΝΤΟΛΗ ΠΡΙΝ ΤΟ END

theoni

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 116
Απ: Ερώτηση για pascal
« Απάντηση #6 στις: 28 Φεβ 2016, 09:57:56 μμ »
ΤΟ ΣΧΟΛΙΚΟ ΒΙΒΛΙΟ ΔΕΝ ΒΟΗΘΑΕΙ ΚΑΙ ΠΟΛΥ ΕΧΩ ΤΗΝ ΕΝΤΥΠΩΣΗ.....ΟΠΩΣ ΚΑΙ ΝΑ ΕΧΕΙ ΤΕΤΟΙΟΥ ΕΙΔΟΥΣ ΛΑΘΗ ΕΧΟΥΝ ΕΠΙΠΤΩΣΗ ΣΤΗΝ ΒΑΘΜΟΛΟΓΙΑ;

theoni

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 116
Απ: Ερώτηση για pascal
« Απάντηση #7 στις: 29 Φεβ 2016, 08:36:12 πμ »
ΚΑΛΗΜΕΡΑ ΑΛΛΗ ΜΙΑ ΕΡΩΤΗΣΗ ΓΙΑ ΤΗΝ PASCAL ΕΧΩ ....ΣΤΙΣ ΕΜΦΩΛΕΥΜΕΝΕΣ  IF ΠΡΕΠΕΙ ΝΑ ΒΑΖΩ  BEGIN??? ΔΗΛΑΔΗ
    IF ΣΥΝΘΗΚΗ
    THEN
      BEGIN
         IF ΣΥΝΘΗΚΗ
          ΤΗΕΝ.......
        END;

dski

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 186
Απ: Ερώτηση για pascal
« Απάντηση #8 στις: 29 Φεβ 2016, 08:53:30 πμ »
  Καλημέρα,

  Για το ερωτηματικό: Η τελευταία εντολής ενός block (μιας ομάδας εντολών) ανάμεσα σε begin...end ή repeat...until δεν είναι απαραίτητο να πάρει ερωτηματικό αλλά δεν είναι και λάθος να μπει.

  Για το begin...end στις εμφωλευμένες if: Η χρήση του begin...end είναι απαραίτητη όταν υπάρχει ένα block (μια ομάδα) δύο ή περισσότερων ακολουθιακών εντολών (δηλ. εντολές που θα εκτελεστεί η μία μετά την άλλη. Όταν το block περιέχει μόνο μία εντολή η χρήση του begin....end δεν είναι απαραίτητη και συνήθως αποφεύγεται για λόγους χώρου και αναγνωσιμότητας αλλά δεν είναι λάθος να χρησιμοποιηθεί ακόμη και σε αυτή την περίπτωση.

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

IF <ΣΥΝΘΗΚΗ> THEN
  BEGIN
     ΕΝΤΟΛΗ-1
     ΕΝΤΟΛΗ-2
     ΕΝΤΟΛΗ-3
     ...
     ΕΝΤΟΛΗ-Ν
   END
ELSE
    BEGIN
     ΕΝΤΟΛΗ-1
     ΕΝΤΟΛΗ-2
     ΕΝΤΟΛΗ-3
     ...
     ΕΝΤΟΛΗ-Ν
   END;

τότε η χρήση του begin...end είναι απαραίτητη (αφού έχουμε block εντολών με πάνω από 2 εντολές) όμως αν η εντολή είναι μόνο μία (δηλ. η 2η IF) όπως στο παράδειγμά σου τότε δε χρειάζεται. Για το block εντολών της 1ης IF (της εξωτερικής) η 2η IF είναι μία εντολή άσχετα αν στο εσωτερικό της 2ης IF εκτελούνται πολλές εντολές. Αν η κατάσταση είναι αυτή (και μετά την 2η IF δεν ακολουθεί και άλλη εντολή που να ανήκει στο block της THEN της 1ης IF) τότε δεν είναι απαραίτητο το begin...end (αλλά, όπως έγραψα, δεν είναι και λάθος να μπει):

IF <ΣΥΝΘΗΚΗ>
  THEN
      IF <ΣΥΝΘΗΚΗ>
         ΤΗΕΝ.......

Ελπίζω να σε βοήθησα και να μη σε μπέρδεψα περισσότερο.

theoni

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 116
Απ: Ερώτηση για pascal
« Απάντηση #9 στις: 29 Φεβ 2016, 09:46:43 πμ »
Σ'ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ ....ΤΩΡΑ ΤΟ ΚΑΤΑΛΑΒΑ...