Εντολή While - Άσκηση 2 - Συγκέντρωση χρημάτων για περιβαλλοντικά έργα

Ετικέτες: 
Δύο μεγάλα πανεπιστήμια της χώρας θέλησαν να συγκεντρώσουν ένα χρηματικό πόσο μεγαλύτερο από 200.000 €, για να πραγματοποιηθούν περιβαλλοντικά έργα στην περιοχή όπου εδρεύουν. Προσκάλεσαν λοιπόν μεγάλες εταιρείες να δώσουν χορηγίες για την συγκέντρωση αυτών των χρημάτων έτσι ώστε να ολοκληρωθούν τα έργα.
Να γίνει πρόγραμμα σε Pascal το οποίο να:
  • Διαβάζει επαναληπτικά τις χορηγίες των εταιρειών μέχρι το συνολικό πόσο να ξεπεράσει τις 200.000 €. Να γίνεται έλεγχος στο ποσό της χορηγίας κάθε εταιρείας που πρέπει να είναι θετικός αριθμός.
  • Να εμφανίζει σχετικό μήνυμα για το αν ο χορηγός θα λάβει έπαινο για τη χορηγία του. Έπαινο λαμβάνουν οι χορηγοί με ποσό τουλάχιστον 50.000 €. Το πρόγραμμα θα πρέπει να εμφανίζει ευχαριστήριο μήνυμα στην περίπτωση που ο χορηγός πήρε έπαινο αλλά και στην περίπτωση που δεν πήρε.
  • Μετά από κάθε χορηγία να εμφανίζεται το ποσό που έχει συγκεντρωθεί, καθώς και το ποσό που απομένει μέχρι να ολοκληρωθεί η διαδικασία.
  • Μετά την συγκέντρωση του απαιτούμενο ποσού να εμφανίζει το πλήθος των χορηγών από τους οποίους συγκεντρώθηκε το ποσό, καθώς και τον πλήθος των χορηγών που πήραν έπαινο.
Λύση: 
program sygkentrosh_xrhmaton;
var
i,epainos:integer;
poso,sum:longint;
begin
i:=0;
epainos:=0;
sum:=0;
while sum<200000 do
    begin
        repeat
            write('Δώσε το ποσό της χορηγίας....:');
            readln(poso)
        until poso>0;
        i:=i+1;
        sum := sum + poso;
        if poso>= 50000
            then
                begin
                    writeln('Ευχαριστούμε θερμά τη χορηγία σας, θα λάβετε έπαινο');
                    epainos := epainos + 1;
                end
            else writeln('Ευχαριστούμε θερμά τη χορηγία σας');
        if sum<200000
        then
            begin
                writeln('Ποσό που συγκεντρώθηκε...:',sum);
                writeln('Απαιτούνται ακόμα ',200001-sum,' για να ολοκληρωθεί η συγκέντρωση χρημάτων');
            end
end;
writeln ('Το απαιτούμενο ποσό συγκεντρώθηκε από ',i,' χορηγούς');
writeln ('Δόθηκε έπαινος σε ',epainos,' χορηγούς');
end.
 
Παρατηρήσεις: 

Μια πάρα πολύ καλή συνδυαστική άσκηση η οποία απαιτεί καλή γνώση των επαναληπτικών δομών. Στεκόμαστε στη δήλωση των μεταβλητών sum και poso οι οποίες έχουν δηλωθεί ως longint, αυτό συνέβη γιατί ο τύπος integer δεν μπορεί να καλύψει τις τιμές που λαμβάνουν, θυμίζουμε ότι ο τύπος integer έχει διάστημα τιμών από το -32768 μέχρι και το +32767.