Εντολή for - Άσκηση 3 - Ανακύκλωση

Ετικέτες: 
Στα πλαίσια ενός προγράμματος ανακύκλωσης, ο Δήμαρχος μιας πόλης αποφάσισε να καλέσει τα 40 σχολεία του νομού να μαζέψουν ποσότητες χαρτιού και αλουμινίου. Να γίνει πρόγραμμα σε γλώσσα προγραμματισμού Pascal το οποίο:
  • Για κάθε ένα από τα 40 σχολεία, να διαβάζει την ονομασία του και τις ποσότητες χαρτιού και αλουμίνιου σε κιλά (πραγματικός αριθμός). Να γίνεται έλεγχος δεδομένων εισόδου για τις ποσότητες χαρτιού και αλουμινίου που πρέπει να είναι θετικές τιμές.
  • Να βρίσκει και να εμφανίζει τον αριθμό των σχολείων που συγκέντρωσαν ποσότητα χαρτιού μεγαλύτερη από 100 κιλά.
  • Να βρίσκει και να εμφανίζει τον αριθμό των σχολείων που δε συγκέντρωσαν χαρτί.
  • Να βρίσκει το σχολείο που συγκέντρωσε την μεγαλύτερη ποσότητα σε αλουμίνιο και να εμφανίζεται με κατάλληλο μήνυμα το όνομα του σχολείου και η ποσότητα του αλουμινίου.
Λύση: 

program schools;
var
xarti, alouminio, max:real;
epainos, plx, plx0, i :integer;
maxname, onoma:string [20];
begin
max := -1;
for i:= 1 to 40 do
begin
    write ('Δώσε το όνομα του ',i,' σχολείου ');
    readln(onoma);
    repeat
        write ('Δώσε ποσότητα χαρτιού και αλουμινίου του ',i,' σχολείου (θετικές τιμές) ');
        readln(xarti,alouminio);
    until (xarti >= 0) and  (alouminio >= 0);
    if (xarti > 100)
    then plx := plx + 1;
    if (xarti = 0)
    then plx0 := plx0 + 1;
    if (xarti+alouminio) > 200
    then epainos := epainos + 1;
    if alouminio > max then
         begin
             max:= alouminio;
             maxname:= onoma;
         end
end;
writeln (plx, ' σχολεία έδωσαν ποσότητα χαρτιού μεγαλύτερη από 100 κιλά ');
writeln (plx0, ' σχολεία δε συγκέντρωσαν χαρτί ');
writeln (epainos, ' σχολεία θα πάρουν έπαινο από τον Δήμαρχο ');
writeln (' Το ',maxname,' σχολείo συγκέντρωσε την μεγαλύτερη ποσότητα αλουμινίου που ήταν ',max:4:0);
end.

 

Παρατηρήσεις: 

Μια πάρα πολύ καλή συνδυαστική άσκηση και σίγουρα επιπέδου πανελλαδικών εξετάσεων. Παρατηρούμε ότι σε κάθε επανάληψη πρέπει να κάνουμε έλεγχο των δεδομένων εισόδου (χαρτί & αλουμίνιο), αυτό γίνεται με την εντολή Repeat..Until η οποία είναι η πιο κατάλληλη γιατί τερματίζεται όταν η λογική της συνθήκη είναι αληθής, έτσι όταν η συνθήκη "(xarti >= 0) and (alouminio >= 0)"  γίνει αληθής, τότε και μόνο τότε φεύγουμε από την επαναληπτική διαδικασία. Στον υπολογισμό του μεγίστου, πρέπει οπωσδήποτε να αρχικοποιήσουμε τη μεταβλητή max για να μπορέσει να εκτελεστεί η εντολή "if alouminio > max" στην 1η επανάληψη της εντολής For . Αρχικοποιούμε την μεταβλητή max με μια τιμή που σίγουρα θα αλλάξει, γι'αυτό και βάλαμε το -1.