Se consideră un șir
a cu
N elemente ale căror valori sunt numere întregi distincte, generate aleator, care nu sunt cunoscute.
Va trebui să determinați indicii celor mai mari trei numere din acest șir. Pentru determinarea acestora, puteți efectua un număr limitat de comparări între două elemente ale șirului
a.
Pentru aceasta aveți la dispoziție o bibliotecă externă care vă pune la dispoziție rutine pentru:
- inițializare;
- determinarea numărului de elemente ale șirului;
- determinarea numărului maxim de comparări pe care le aveți la dispoziție;
- compararea a două elemente ale șirului a;
- furnizarea ca rezultat a celor trei numere;
- încheierea execuției programului.
Pentru a putea folosi biblioteca va trebui să includeți în programul dumneavoastră instrucțiunea
uses max; pentru limbajul
Pascal și
#include "max.h" pentru limbajul
C/C++. În continuare sunt prezentate sintaxele funcțiilor și procedurilor incluse în biblioteci:
procedure Init;
void Init()

trebuie apelată la începutul programului și este folosită de către bibliotecă pentru inițializare;

întrerupe execuția programului dacă este apelată a doua oară.
function GetN:Integer;
int GetN()

returnează numărul de elemente (
N) ale șirului
a.
function GetNoComp:Integer;
int GetNoComp()

returnează numărul de comparări (apeluri ale funcției
IsGreater) pe care le mai aveți la dispoziție (în momentul apelului funcției
GetNoComp) pentru determinarea celor trei valori.
function IsGreater(i,j:Integer):Boolean;
int IsGreater(int i,int j)

returnează
true (valoare nenulă) dacă
a[i] > a[j] și
false (0) în caz contrar;

întrerupe execuția programului dacă cel puțin una dintre valorile
i și
j nu este un număr întreg cuprins între
1 și
N sau dacă numărul de apeluri ale acestei funcții depășește numărul maxim permis.
procedure Max1(x:Integer):Boolean;
void Max1(int x)

acceptă ca rezultat faptul că cel mai mare element al șirului se află pe poziția
x;

întrerupe execuția programului dacă este apelată a doua oară sau dacă valoarea
x nu este cea corectă.
procedure Max2(x:Integer):Boolean;
void Max2(int x)

acceptă ca rezultat faptul că cel mai mare element al șirului obținut după eliminarea maximului se află pe poziția
x;

întrerupe execuția programului dacă este apelată a doua oară sau dacă valoarea
x nu este cea corectă.
procedure Max3(x:Integer):Boolean;
void Max3(int x)

acceptă ca rezultat faptul că cel mai mare element al șirului obținut după eliminarea celor mai mari două numere se află pe poziția
x;

întrerupe execuția programului dacă este apelată a doua oară sau dacă valoarea
x nu este cea corectă.
procedure EndProgram;
void EndProgram()

trebuie apelată obligatoriu înaintea încheierii execuției programului și este folosită de către bibliotecă pentru validarea rezultatelor;

întrerupe execuția programului.
Toate funcțiile și procedurile (excepție:
Init) întrerup execuția programului dacă sunt apelate înaintea inițializării.
Programul vostru nu va citi datele din nici un fișier de intrare și nu va scrie date în nici un fișier de ieșire.
Restricție