Ατέρμων Βρόγχος - Λογικό ή Αντικανονικού

Ξεκίνησε από FirstMay, 02 Μαΐου 2023, 12:19:19 ΠΜ

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

FirstMay

Καλησπέρα,
Ο ατέρμων βρόχος κατά τη γνώμη σας είναι λογικό λάθος ή αντικανονικού τερματισμού;

ManiacGr

Θα το έβαζα στα λογικά, αφού δεν "κολλάει" ουσιαστικά το πρόγραμμα. 

George Eco

Σωστός ο συνάδελφος. Να επισημάνω επισης. Βρόχος. Όχι βρόγχος.

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

Καλημέρα και καλό μήνα 

Αν ειναι ατερμων βρόχος δεν θα χρειαστεί όμως  κάποια στιγμή να τερματίσουμε το πρόγραμμα μιας και δεν υπάρχει περατοτητα ?? Δηλαδή και δεν "κολλάει " αλλά και "κολλαει" ταυτόχρονα  :laugh: >:D :angel: .. δύσκολο ερώτημα νομίζω 

akalest0s

Να είμαστε πάλι σε αυτές τις συζητήσεις.. Λογικό. Το πως έχει ρυθμιστεί ο διερμηνευτής/ide να ανταποκρίνεται σε ατέρμονες βρόχους (πχ "έγιναν 100.000 επαναλήψεις, να τερματίσει ο βρόχος γιατί μάλλον τα έκανες μαντάρα;") δεν μπορεί να καθορίζει το είδος του λάθους. Αντικανονικός τερματισμός δεν προκαλείται από τον ίδιο τον κώδικα.

Σηκώνει κουβέντα, ελπίζω μην το δούμε σε εξετάσεις.
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

Foto

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

Στο παράδειγμα θα πάρουμε το 100.
 
ΠΡΟΓΡΑΜΜΑ ΔΟΚΙΜΗ
ΑΡΧΗ
  ΓΡΑΨΕ ΒΡΟΧΟΣ(1, 100) 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΣΥΝΑΡΤΗΣΗ ΒΡΟΧΟΣ(ΑΠ, ΕΩ): ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ΑΠ, ΕΩ, Ι
ΑΡΧΗ
  ΓΙΑ Ι ΑΠΟ ΑΠ ΜΕΧΡΙ ΕΩ
    ΒΡΟΧΟΣ <- Ι
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

petrosp13

Εγώ πάλι γιατί θεωρώ ότι ο ατέρμων βρόχος δεν είναι καν προγραμματιστικό λάθος;
Υπάρχουν πολύ σημαντικά προγράμματα γύρω μας που δεν ολοκληρώνονται ποτέ
Η περατότητα αναφέρεται σε αλγοριθμικό κριτήριο
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

kdimitris

Καλησπέρα
Αυτό που νομίζω εγώ χωρίς όμως να υπάρχει απαίτηση να το απαντήσουν τα παιδιά είναι το εξής:
Αν έχεις για παράδειμα :
done <-- ΑΛΗΘΗΣ
ΟΣΟ done = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ 'ΓΕΙΑ ΣΟΥ'
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Αυτό θα το χαρακτήριζα ως Λογικό Λάθος

Αν από την άλλη έχεις :
ι <-- 1
ΟΣΟ ι > 0 ΕΠΑΝΑΛΑΒΕ
    ι <- ι +1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
αυτό που νομίζω ότι θα συμβεί είναι υπερχείλιση αριθμητικής μεταβλητής (καθώς το ι θα πάρει κάποια στιγμή πολυ μεγάλη τιμή και ανάλογα με τα bytes που δεσμεύονται θα ξεπεράσει το όριο), οπότε και αντικανονικού τερματισμού

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

dimitrios67

Ο πρώτος κώδικας δεν θα τερματίσει ποτέ!
Ο δεύτερος θα τερματίσει διότι όταν το ι θα γίνει maxinteger,
θα "ανακυκλωθεί"! Θα γίνει mininteger και προς τα πάνω, οπότε θα είναι αρνητικό
και το loop θα τερματίσει.
Όπως είπαν και οι συνάδελφοι είναι αδόκιμη-άστοχη ερώτηση.

dimitrios67

Ο παρακατω κωδικας σε C, τερματιζει κανονικά.
#include <stdio.h>
#include <limits.h>
int main(){
	int i=1;
	
	while(i>0){
		i++;
	}
	printf("          i= %d\n",i);
	printf("min integer= %d\n",INT_MIN);
	return 0;	
}
και (προφανώς) το i θα γινει INT_MIN, δηλ. - 2147483628.

FirstMay

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

Κανένας

#11
Παράθεση από: FirstMay στις 03 Μαΐου 2023, 10:13:20 ΜΜΗ απορία προέκυψε μελετώντας τα εξωσχολικά βοηθήματα που υπάρχουν σχετικά με το μάθημα. Στα βοηθήματα αναφέρεται το συγκεκριμένο σαν λάθος. Σε άλλα βοηθήματα ως λογικό και σε άλλα ως αντικανονικού.
Εν ολίγοις ένας ατέρμων βρόχος στο πλαίσιο του μαθήματος
  • Μπορεί να χαρακτηριστεί ως λογικό λάθος
            π.χ.
            done <-- ΑΛΗΘΗΣ
            ΟΣΟ done = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ   
                  ΓΡΑΨΕ 'ΓΕΙΑ ΣΟΥ'
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  • μπορεί να εμφανίσει σφάλμα κατά την εκτέλεση
        π.χ.
            ι <-- 1
            ΟΣΟ ι > 0 ΕΠΑΝΑΛΑΒΕ   
                ι <- ι +1
            ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
            ! αριθμητική υπερχείλιση της μεταβλητής ι

Όμως γενικότερα σε εφαρμογές όπως Web servers, λειτουργικά συστήματα, παιχνίδια κασέτας, προγράμματα ιών κ.α. τρέχουν διεργασίες στηριγμένες σε ατέρμονες βρόχους.
Άρα μη σε απασχολεί άλλο δεν θα ζητηθεί στις εξετάσεις.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

ManiacGr

Η ΓΛΩΣΣΑ και τα προγράμματα που ζητούνται από τους μαθητές δεν βρίσκουν εφαρμογές με ατέρμονες βρόγχους. Τα παραπάνω παραδείγματα βασίζονται σε υποθέσεις που έγιναν βασισμένες πάνω σε άλλες γλώσσες και αν και εύστοχα και πολύ σωστά ειπώθηκαν, για να μιλήσουμε για αντικανονικό τερματισμό, θα έπρεπε να έχουμε και συγκεκριμένη περιγραφή ή προδιαγραφές για τον μεταγλωττιστή ή διερμηνευτή της ΓΛΩΣΣΑΣ.
Κατά την άποψή μου υπάρχουν λάθη τα οποία δεν μπορούν να "καλουπωθούν" σε συγκεκριμένη κατηγορία μιας και παρουσιάζουν μια "πολυμορφική" συμπεριφορά ανάλογα με την περίσταση. Ο μαθητής όμως δεν γίνεται να ξέρει για το πως συμπεριφέρεται μια μεταβλητή όταν η τιμή της υπερχειλίσει γιατί δεν περιγράφεται στο βιβλίο. Επομένως, η γνώση σταματάει στο "ο βρόχος δε θα τελειώσει ποτέ"! Αυτό (σύμφωνα με τα όσα περιγράφονται στο σχολικό βιβλίο) δεν θα τερματίσει το πρόγραμμα, οπότε μόνο στα λογικά μπορεί να ενταχθεί, αφού ίσα ίσα έχει το ακριβώς αντίθετο αποτέλεσμα από αυτό που θα είχε ένα λάθος αντικανονικού τερματισμού.

Όπως και να έχει, νομίζω και ελπίζω ότι η επιτροπή δεν θα πέσει ποτέ στο λάθος να ζητήσει απάντηση σε κάτι που δεν περιγράφεται ξεκάθαρα στα βιβλία!

Κανένας

Παράθεση από: ManiacGr στις 04 Μαΐου 2023, 09:13:04 ΠΜΗ ΓΛΩΣΣΑ και τα προγράμματα που ζητούνται από τους μαθητές δεν βρίσκουν εφαρμογές με ατέρμονες βρόγχους. Τα παραπάνω παραδείγματα βασίζονται σε υποθέσεις που έγιναν βασισμένες πάνω σε άλλες γλώσσες και αν και εύστοχα και πολύ σωστά ειπώθηκαν, για να μιλήσουμε για αντικανονικό τερματισμό, θα έπρεπε να έχουμε και συγκεκριμένη περιγραφή ή προδιαγραφές για τον μεταγλωττιστή ή διερμηνευτή της ΓΛΩΣΣΑΣ.
Κατά την άποψή μου υπάρχουν λάθη τα οποία δεν μπορούν να "καλουπωθούν" σε συγκεκριμένη κατηγορία μιας και παρουσιάζουν μια "πολυμορφική" συμπεριφορά ανάλογα με την περίσταση. Ο μαθητής όμως δεν γίνεται να ξέρει για το πως συμπεριφέρεται μια μεταβλητή όταν η τιμή της υπερχειλίσει γιατί δεν περιγράφεται στο βιβλίο. Επομένως, η γνώση σταματάει στο "ο βρόχος δε θα τελειώσει ποτέ"! Αυτό (σύμφωνα με τα όσα περιγράφονται στο σχολικό βιβλίο) δεν θα τερματίσει το πρόγραμμα, οπότε μόνο στα λογικά μπορεί να ενταχθεί, αφού ίσα ίσα έχει το ακριβώς αντίθετο αποτέλεσμα από αυτό που θα είχε ένα λάθος αντικανονικού τερματισμού.

Όπως και να έχει, νομίζω και ελπίζω ότι η επιτροπή δεν θα πέσει ποτέ στο λάθος να ζητήσει απάντηση σε κάτι που δεν περιγράφεται ξεκάθαρα στα βιβλία!
Στο μόνο σημείο που διαφωνώ είναι σ' αυτό που γράφεις :
"Ο μαθητής όμως δεν γίνεται να ξέρει για το πως συμπεριφέρεται μια μεταβλητή όταν η τιμή της υπερχειλίσει γιατί δεν περιγράφεται στο βιβλίο".
Υπάρχει αναφορά σχετικά με την υπερχείλιση στο πράσινο βιβλίο σελ. 233, αλλά κυρίως την έχουν δει στο εργαστήριο.
Νικηφόρος Μανδηλαράς
ΓΕΛ Νάξου "Μανώλης Γλέζος"
https://blogs.sch.gr/nobody/

George Eco

#14
Στα πλαίσια του μαθήματος, όπως ετέθη η ερώτηση, το σφάλμα συγκαταλέγεται στα λογικά.
Δε μίλησε κανείς για τίποτα συγκεκριμένο.

χ <- 10
ΟΣΟ χ <= 100 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ 'ΚΑΛΗΜΕΡΑ'
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Επ άπειρον εκτέλεση, κανένα crash, λογικό σφάλμα σύμφωνα με τα όσα λέει το βιβλίο.


Ακόμα όμως κι αν είχαμε κάτι τύπου:

χ <- 11
ΟΣΟ χ <> 100 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ 'ΚΑΛΗΜΕΡΑ'
  Χ <- Χ + 10
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

το θέμα αλλάζει μεν, γιατί  θα πρέπει ο μαθητής να γνωρίζει τα όρια του Η/Υ και της γλώσσας προγραμματισμού, αλλά έχω πολύ κακά νέα εδώ. Η ΓΛΩΣΣΑ είναι επί χάρτου ορισμένη, ο υπολογιστής που τρέχει είναι το μυαλό μας και η ακρίβειά της είναι άπειρη. Επειδή είναι θεωρητική γλώσσα. Άρα δε θα συμβεί ποτέ overflow.

Άρα εμπίπτει στα πλαίσια του μαθήματος ΠΑΝΤΟΤΕ σε λογικό σφάλμα, όπως καθορίζονται τα σφάλματα στο βιβλίο.

Παράθεση από: FirstMay στις 03 Μαΐου 2023, 10:13:20 ΜΜΗ απορία προέκυψε μελετώντας τα εξωσχολικά βοηθήματα που υπάρχουν σχετικά με το μάθημα. Στα βοηθήματα αναφέρεται το συγκεκριμένο σαν λάθος. Σε άλλα βοηθήματα ως λογικό και σε άλλα ως αντικανονικού.



Μιλάμε για βιβλία βοηθήματα ή σημειώσεις φροντιστηρίων;
Αν μιλάμε για βιβλία, σε ποιά παρουσιάζεται ως αντικανονικού αν επιτρέπεται;