Ερώτηση για pascal

Ξεκίνησε από theoni, 25 Φεβ 2016, 04:29:01 ΜΜ

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

theoni

Έχω μπερδευτεί με την repeat-until παίρνει ερωτιματικό στο τέλος της συνθήκης η όχι;;;

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

Καλησπέρα

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


bugman

Παίρνει, αλλά δείτε στο παράδειγμα: Αν έχουμε δυο εντολές ανάμεσα, τότε η τελευταία (η δεύτερη εδώ) δεν παίρνει.
http://wiki.lazarus.freepascal.org/REPEAT..UNTIL

linap

Καλησπερα,

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

repeat
  statement1;
  statement2
until BooleanExpression;


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

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


linap

(και σε καθε περιπτωση, μια δοκιμη στον compiler θα σας πεισει..)

theoni

ΚΑΛΗΣΠΕΡΑ ΕΓΏ  ΠΑΝΤΩΣ ΠΟΥ ΛΥΝΩ ΜΕΡΙΚΑ ΠΡΟΒΛΗΜΑΤΑ  ΓΙΑ ΕΠΙΒΕΒΑΙΩΣΗ ΣΤΟ ΠΡΟΓΡΑΜΜΑ ΤΗΣ PASCAL ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΝ ΚΑΙ ΣΤΟ ΣΧΟΛΕΙΟ ΤΟ ΕΡΩΤΗΜΑΤΙΚΌ ΤΟ ΠΑΙΡΝΕΙ ΣΕ ΟΛΕΣ ΤΙΣ ΠΕΡΙΠΤΩΣΕΙΣ ΑΝΕΞΑΡΤΗΤΑ ΑΝ ΕΙΝΑΙ Η ΤΕΛΕΥΤΑΙΑ ΕΝΤΟΛΗ ΠΡΙΝ ΤΟ END

theoni

ΤΟ ΣΧΟΛΙΚΟ ΒΙΒΛΙΟ ΔΕΝ ΒΟΗΘΑΕΙ ΚΑΙ ΠΟΛΥ ΕΧΩ ΤΗΝ ΕΝΤΥΠΩΣΗ.....ΟΠΩΣ ΚΑΙ ΝΑ ΕΧΕΙ ΤΕΤΟΙΟΥ ΕΙΔΟΥΣ ΛΑΘΗ ΕΧΟΥΝ ΕΠΙΠΤΩΣΗ ΣΤΗΝ ΒΑΘΜΟΛΟΓΙΑ;

theoni

ΚΑΛΗΜΕΡΑ ΑΛΛΗ ΜΙΑ ΕΡΩΤΗΣΗ ΓΙΑ ΤΗΝ PASCAL ΕΧΩ ....ΣΤΙΣ ΕΜΦΩΛΕΥΜΕΝΕΣ  IF ΠΡΕΠΕΙ ΝΑ ΒΑΖΩ  BEGIN??? ΔΗΛΑΔΗ
    IF ΣΥΝΘΗΚΗ
    THEN
      BEGIN
         IF ΣΥΝΘΗΚΗ
          ΤΗΕΝ.......
        END;

dski

  Καλημέρα,

  Για το ερωτηματικό: Η τελευταία εντολής ενός 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

Σ'ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ ....ΤΩΡΑ ΤΟ ΚΑΤΑΛΑΒΑ...