Δομημένος Προγραμματισμός ? Κεφάλαιο 12 ? Διαδικασίες

Δίνονται παρακάτω ορισμένα παραδείγματα με χρήση διαδικάσιών (procedures) στην Pascal. Στα παραδείγματα γίνεται σταδιακά χρήση τυπικών παραμέτρων (formal), τόσο παραμέτρων τιμών (value) όσο και παραμέτρων μεταβλητών (variable). Να σημειωθεί ότι στα προγράμματα δε γίνεται έλεγχος ορθότητας των δεδομένων εισόδου, εφόσον ο σκοπός τους είναι να γίνει κατανοητή η χρήση των διαδικασιών και των τυπικών παραμέτρων.

Άσκηση 1

Εύρεση μέσου όρου μαθήματος. Πρόγραμμα με χρήση διαδικασίας, χωρίς τυπικές παραμέτρους. Είσοδος και έξοδος δεδομένων, μέσα στη διαδικασία.

program sub01;
procedure mesos_oros;
var 
    b1, b2:integer;
    b3:real;
begin
    write('Δώσε βαθμούς Α, Β τετραμήνου και εξετάσεων: ');
    readln(b1, b2, b3);
    writeln('Ο μέσος όρος είναι: ', ((b1+b2)/2 + b3)/2:4:1)
end;

begin
    mesos_oros
end.

Άσκηση 2

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

program sub02;
var
    tetram_a, tetram_b:integer;
    exams: real;

procedure mesos_oros(t1, t2:integer; ex:real);
begin
    writeln('Ο μέσος όρος είναι: ', ((t1+t2)/2 + ex)/2:4:1)
end;

begin
    write('Δώσε βαθμούς Α, Β τετραμήνου και εξετάσεων: ');
    readln(tetram_a, tetram_b, exams);
    mesos_oros(tetram_a, tetram_b, exams)
end.

Άσκηση 3

Εύρεση μέσου όρου μαθήματος. Πρόγραμμα με χρήση διαδικασίας, με τυπικές παραμέτρους (παράμετροι τιμής). Η διαφορά με την άσκηση 2 είναι το επιπλέον δεδομένο: όνομα μαθήματος.

program sub03;
var
    tetram_a, tetram_b:integer;
    exams: real;
    mathima: string;

procedure mesos_oros(t1, t2:integer; ex:real; lesson:string);
begin
    writeln('Ο μέσος όρος στο μάθημα ', lesson ,' είναι: ', ((t1+t2)/2 + ex)/2:4:1)
end;

begin
    write('Δώσε όνομα μαθήματος: ');
    readln(mathima);
    write('Δώσε 3 βαθμούς (Α'', Β'' τετραμήνου και εξετάσεων): ');
    readln(tetram_a, tetram_b, exams);
    mesos_oros(tetram_a, tetram_b, exams, mathima)
end.

Άσκηση 4

Εύρεση μέσου όρου μαθημάτων με χρήση δομής επανάληψης. Πρόγραμμα με χρήση διαδικασίας, με τυπικές παραμέτρους (παράμετροι τιμής). Η είσοδος δεδομένων γίνεται στο κυρίως πρόγραμμα και η εμφάνιση του αποτελέσματος στη διαδικασία. Η διαδικασία καλείται όχι για ένα μάθημα αλλά για πλήθος μαθημάτων.

program sub04;
var
    tetram_a, tetram_b, i, plithos:integer;
    exams: real;
    mathima: string;

procedure mesos_oros(t1, t2:integer; ex:real; lesson:string);
begin
    writeln('Ο μέσος όρος στο μάθημα ', lesson ,' είναι: ', ((t1+t2)/2 + ex)/2:4:1)
end;

begin
    write('Δώσε το πλήθος των μαθημάτων: ');
    readln(plithos);

    for i:=1 to plithos do
      begin
        write('Δώσε όνομα του ', i, 'ου μαθήματος: ');
        readln(mathima);
        write('Δώσε 3 βαθμούς (Α'', Β'' τετραμήνου και εξετάσεων): ');
        readln(tetram_a, tetram_b, exams);
        mesos_oros(tetram_a, tetram_b, exams, mathima);
        writeln()
     end
end.

Άσκηση 5

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

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

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

program sub05;
var
    tetram_a, tetram_b, i, plithos:integer;
    exams, mo, athroisma, gmo: real;
    mathima: string;

procedure mesos_oros(t1, t2:integer; ex:real; lesson:string; var mo_mathima: real);
begin
    mo_mathima:=((t1+t2)/2 + ex)/2;
    writeln('Ο μέσος όρος στο μάθημα ', lesson ,' είναι: ', mo_mathima:4:1)
end;

begin
    write('Δώσε το πλήθος των μαθημάτων: ');
    readln(plithos);
    athroisma:=0;
    
    for i:=1 to plithos do
      begin
        write('Δώσε όνομα του ', i, 'ου μαθήματος: ');
        readln(mathima);
        write('Δώσε 3 βαθμούς (Α'', Β'' τετραμήνου και εξετάσεων): ');
        readln(tetram_a, tetram_b, exams);
        mesos_oros(tetram_a, tetram_b, exams, mathima, mo);
        athroisma:=athroisma + mo;
        writeln()
     end;

     gmo:=athroisma / plithos;
     writeln('Ο γενικός μέσος όρος είναι: ', gmo:4:1);

     if gmo >=9.5 then
         writeln('ΠΡΟΑΓΕΣΑΙ')
     else
         writeln('ΤΑ ΛΕΜΕ ΤΟ ΣΕΠΤΕΜΒΡΙΟ')
end.