Προς το περιεχόμενο

Pascal: απο repeat...until σε for


fe31h

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας... εχουμε αυτη εδω την επαναληψη:

>a:=6;
b:=11;
repeat 
  c:= (a+ div2;
    if (c>a) then
       begin
       a:=c-a;
       b:=b-c
       end;
else
       begin
       a:=3+a-c;
       b:=c-b
       end;
posotita:= c+a*b
 until(posotita<0);
write (a,b,c);

 

σε repeat until και μια ασκηση μου λεει να την κανω σε for.... μηπως θα μπορουσατε να μου την πειτε? γιατι θελω να κατσω να κανω εξασκηση για τις πανελληνιες και κολλησα σε αυτο....

Ευχαριστω πολυ εκ των προτερων :-D

Δημοσ.

Εβαλα κανενα δυο ερωτιματικα που λειπουν... τωρα.. ειναι απλα μια επαναληψη.... οχι ολοκληρο προγραμμα ;)

Δημοσ.

>for i=0 until i=65000
c=...

if (c>a)
	...
else
	...
end if

posotita = ...

if (posotita<0)
	i=65001
end if
end for

 

Δεν γνωρίζω pascal για να γράψω κώδικα οπότε προσπαθώ να σου περιγράψω λίγο την λογική. Έθεσα αυθαίρετα μια τιμή 65000 ως όριο, ελπίζωντας οι πράξεις μέσα στο for να μην επαναληφθούν περισσότερες απο 64999 φορές. Όταν η posotita ικανοποιεί την συνθήκη, θέτεις το i=65001 ώστε να τερματίσει το for loop. Σίγουρα δεν είναι σωστή μια τέτοια λογική πάντως.

 

Τώρα σε περίπτωση που θέλεις την for για συγκεκριμένες τιμές των a,b, μπορείς να μετρήσεις πόσες φορές εκτελείται η while και να θέσεις αυτόν τον αριθμό ώς όριο για την for.

 

Η for χρησιμοποιείται όταν είναι γνωστός ο αριθμός των επαναλήψεων, ενώ η repeat/while για άγνωστο αριθμό επαναλήψεων.

 

edit

 

Εναλλακτικα ίσως θα μπορούσε να γίνει κάτι σαν το ακόλουθο :

 

>for posotita=1 until posotita>=0
...
end for

 

έτσι όταν η posotita πάρει αρνητική τιμή πάλι θα βγει από το for loop.

Δημοσ.
Δεν γνωρίζω pascal για να γράψω κώδικα οπότε προσπαθώ να σου περιγράψω λίγο την λογική. Έθεσα αυθαίρετα μια τιμή 65000 ως όριο, ελπίζωντας οι πράξεις μέσα στο for να μην επαναληφθούν περισσότερες απο 64999 φορές. Όταν η posotita ικανοποιεί την συνθήκη, θέτεις το i=65001 ώστε να τερματίσει το for loop. Σίγουρα δεν είναι σωστή μια τέτοια λογική πάντως.

 

 

Το μήνυμα που έχετε εισάγει είναι πολύ μικρό. Παρακαλούμε μεγαλώστε το μήνυμα σας ώστε να περιέχει τουλάχιστον 10 χαρακτήρες.

 

Δημοσ.

Το ουσιαστικό ερώτημα είναι "Επιτρέπεται ο μετρητής ενός βρόχου να αλλάζει τιμές μέσα στο βρόγχο ;"

 

Πχ. στην Fortran δεν επιτρέπεται.

Στην C++ επιτρέπεται.

Για την Pascal δεν ξέρω.

 

Αν ναι, είναι πολύ εύκολο να 'κοροϊδέψεις' το πρόγραμμα.

Π.χ. χρησιμοποιείς for με έναν "βουβό" μετρητή του οποίου την τιμή θέτεις εντός του βρόγχου σε μια σταθερά ώστε

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

κατάλληλο if ώστε ο βρόγχος να τερματιστεί.

 

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

 

Mπορεί να εφαρμοστεί και ο τρόπος του macabre_sunsets με την εξής τροποποίηση.

Αν ο μετρητής είναι ακέραιος, ο βρόγχος θα εκτελεστεί τόσες φορές όσες ο μέγιστος ακέραιος που μπορεί να κρατήσει,

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

Έτσι, αντί αυτού χρησιμοποίησε τον ίδιο τρόπο με real :

for x=-1Ε30 to 1E30 step .0000001 (κάπως έτσι)

οπότε οι επαναλήψεις είναι τόσο πολλές ώστε είναι πρακτικά απίθανο να τερματιστεί πρόωρα.

Δημοσ.

Στην pascal (τουλάχιστον στην Delphi) πρέπει να έχεις ordinal μετρητή (στην ουσία ακέραιο, και δεν μπορείς να πειράξεις την τιμή του).

Αρχειοθετημένο

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

  • Δημιουργία νέου...