Εντολή if - Άσκηση 3 - Χρήση της συνάρτησης abs

Να δημιουργηθεί πρόγραμμα σε Pascal το οποίο να διαβάζει τον προφορικό και το γραπτό βαθμό ενός υποψηφίου σε κάποια εξέταση. Να γίνεται έλεγχος εγκυρότητας των βαθμών, έτσι ώστε να είναι από 0 έως 100. Για να είναι επιτυχής η εξέταση θα πρέπει η διαφορά των βαθμών να μην υπερβαίνει το 20 και το άθροισμα των βαθμών να είναι τουλάχιστον 100. Το πρόγραμμα να εμφανίζει αν ο υποψήφιος πέτυχε ή απέτυχε στην εξέταση.
 
Λύση: 
program exams;
var
 p, g, sum, diafora:integer;
begin
repeat
    writeln ('Δωσε προφορικό βαθμό');
    readln (p);
    writeln ('Δωσε γραπτό βαθμό');
    readln(g);
until (p >= 0) and (p <= 100) and (g >= 0) and (g <= 100);
diafora:= abs(p-g);
sum:= p+g;
if (diafora<=20) and (sum>=100)
    then writeln ( 'Πέτυχες στην εξέταση' )
    else writeln ( 'Aπέτυχες στην εξέταση' );
end.
 
Παρατηρήσεις: 
Ο έλεγχος εγκυρότητας των δεδομένων εισόδου είναι μια διαδικασία κατά την οποία ελέγχουμε τα δεδομένα που εισάγει ο χρήστης. Η πιο κατάλληλη δομή γι' αυτό το σκοπό είναι η εντολή repeat..until γιατί τερματίζεται μόνο όταν η συνθήκη ελέγχου είναι αληθής. Στο συγκεκριμένο παράδειγμα οι ορθές τιμές είναι από 0 έως 100, αν ο χρήστης δώσει τιμή που δεν ανήκει στο διάστημα 0 έως 100 τότε θα αναγκαστεί να ξαναδώσει τιμή επειδή η λογική συνθήκη (p >= 0) and (p <= 100) and (g >= 0) and (g <= 100) θα είναι ψευδής. Αντίθετα αν δώσει σωστές τιμές στα p και g, τότε η λογική συνθήκη θα είναι αληθής και έτσι φεύγουμε από την επαναληπτική διαδικασία. Για τη διαφορά της βαθμολογίας θέλουμε φυσικά την απόλυτη τιμή της διαφοράς. Για το λόγο αυτό χρησιμοποιούμε τη συνάρτηση abs η οποία ανήκει στη βιβλιοθήκη των συναρτήσεων της Pascal και δε χρειάζεται να την προγραμματίσουμε, η συνάρτηση abs δέχεται μια τιμή και επιστρέφει την απόλυτη τιμή της. Στην περίπτωση μας το p-g είναι ουσιαστικά μια τιμή, για παράδειγμα 30-70=-40, abs(30-70)=40.