fe31h Δημοσ. 12 Μαΐου 2010 Δημοσ. 12 Μαΐου 2010 Γεια σας... εχουμε αυτη εδω την επαναληψη: >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.... μηπως θα μπορουσατε να μου την πειτε? γιατι θελω να κατσω να κανω εξασκηση για τις πανελληνιες και κολλησα σε αυτο.... Ευχαριστω πολυ εκ των προτερων
thanos713 Δημοσ. 12 Μαΐου 2010 Δημοσ. 12 Μαΐου 2010 Ο κώδικας σου δεν γίνεται compile... Τσέκαρε τον...
fe31h Δημοσ. 12 Μαΐου 2010 Μέλος Δημοσ. 12 Μαΐου 2010 Εβαλα κανενα δυο ερωτιματικα που λειπουν... τωρα.. ειναι απλα μια επαναληψη.... οχι ολοκληρο προγραμμα
thanos713 Δημοσ. 12 Μαΐου 2010 Δημοσ. 12 Μαΐου 2010 Πάλι θες κάποια ερωτηματικά. Βάλε όλο το πρόγραμμα για ευκολία...
macabre_sunsets Δημοσ. 12 Μαΐου 2010 Δημοσ. 12 Μαΐου 2010 >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.
thanos713 Δημοσ. 12 Μαΐου 2010 Δημοσ. 12 Μαΐου 2010 Δεν γνωρίζω pascal για να γράψω κώδικα οπότε προσπαθώ να σου περιγράψω λίγο την λογική. Έθεσα αυθαίρετα μια τιμή 65000 ως όριο, ελπίζωντας οι πράξεις μέσα στο for να μην επαναληφθούν περισσότερες απο 64999 φορές. Όταν η posotita ικανοποιεί την συνθήκη, θέτεις το i=65001 ώστε να τερματίσει το for loop. Σίγουρα δεν είναι σωστή μια τέτοια λογική πάντως. Το μήνυμα που έχετε εισάγει είναι πολύ μικρό. Παρακαλούμε μεγαλώστε το μήνυμα σας ώστε να περιέχει τουλάχιστον 10 χαρακτήρες.
V.I.Smirnov Δημοσ. 13 Μαΐου 2010 Δημοσ. 13 Μαΐου 2010 Το ουσιαστικό ερώτημα είναι "Επιτρέπεται ο μετρητής ενός βρόχου να αλλάζει τιμές μέσα στο βρόγχο ;" Πχ. στην Fortran δεν επιτρέπεται. Στην C++ επιτρέπεται. Για την Pascal δεν ξέρω. Αν ναι, είναι πολύ εύκολο να 'κοροϊδέψεις' το πρόγραμμα. Π.χ. χρησιμοποιείς for με έναν "βουβό" μετρητή του οποίου την τιμή θέτεις εντός του βρόγχου σε μια σταθερά ώστε καταρχήν να μην ικανοποιείται η συνθήκη τερματισμού. Όταν θελήσεις να βγεις από τον βρόγχο την αλλάζεις με κατάλληλο if ώστε ο βρόγχος να τερματιστεί. Αν όχι, πρέπει αναγκαστικά να έχεις μια σχέση που θα δίνει εκ των προτέρων το πλήθος των επαναλήψεων που θα γίνουν. Mπορεί να εφαρμοστεί και ο τρόπος του macabre_sunsets με την εξής τροποποίηση. Αν ο μετρητής είναι ακέραιος, ο βρόγχος θα εκτελεστεί τόσες φορές όσες ο μέγιστος ακέραιος που μπορεί να κρατήσει, δηλ. σχετικά μικρός, με αποτέλεσμα να είναι πιθανό να τερματιστεί πριν περατωθεί το άγνωστο πλήθος επαναλήψεων. Έτσι, αντί αυτού χρησιμοποίησε τον ίδιο τρόπο με real : for x=-1Ε30 to 1E30 step .0000001 (κάπως έτσι) οπότε οι επαναλήψεις είναι τόσο πολλές ώστε είναι πρακτικά απίθανο να τερματιστεί πρόωρα.
drm Δημοσ. 13 Μαΐου 2010 Δημοσ. 13 Μαΐου 2010 Στην pascal (τουλάχιστον στην Delphi) πρέπει να έχεις ordinal μετρητή (στην ουσία ακέραιο, και δεν μπορείς να πειράξεις την τιμή του).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.