2013/2014-cü tədris ili
Скачать (условие задач)
Aşağıda məsələlərin (2014) düzgün həlləri təqdim edilib. Amma ən əvvəl bir neçə qeyd:
1. İnformatika fənninin bütün Olimpiadalarında proqram kodların düzgünlüyü xüsusi yoxlama proqramı ilə avtomatik yoxlanılır. Bu yoxlama sistemlərdə proqramlara müəyyən tələblər qoyulur:
a) Çıxış ekranında artıq yazılar olmamalıdır. Məsələn, writeln('Duymenin sixilma sayini daxil et' ); və ya writeln('Cem=',musbet+menfi);
b) Sonuncu çıxış operatorunda kursor növbəti sətrə keçməlidir.
2. Yoxlama sistemində elə testlər seçilir ki, onlar "pis”, rasional alqoritmi
olmayan proqramda keçmir.
3. Şagirdlərə və müəllimlərə optimal alqoritmi olan düzgün proqramları təqdim etmək lazımdır.
4. Olimpiada məsələlərin avtomatik yoxlamasında bütün testlər düzdür və heçnə yoxlamaq lazım deyil. Verilənlərin sərhəd qiymətləri onları yoxlamaq üçün yox, müvafiq alqoritmi seçmək üçün verilir. Buna baxmayaraq, şagirdləri proqramlaşdırmaya öyrədəndə, ilkin verilənləri yoxlamağa tövsiyyə etmək lazımdır.
Aşağıdakı proqram kodların nümunələrində bütün ilkin verilənlərin yoxlanması və şərhlər yığışdırılıb (sonuncudan başqa, əvvəl tədim edilmiş proqramda dəyişikliklər edilib). Məsələ 1 və məsələ 2 üçün proqram kodları burada göstərilməyib. Onların düzgün həlləri müəllimlər tərəfindən göstərilib.
Məsələ 3 Massivdən istifadə etmədən
Program Zona14_3;
Var
min,max,a,i,n:integer;
BEGIN
readln(n);
min:=101; max:=-101;
for i:=1 to n do
begin
readln(a);
if (a>0) and (a<min) then min:=a;
if (a<0) and (a>max) then max:=a;
end;
writeln(min+max);
END.
Məsələ 3. Massivdən istifadə olunub
Program Zona14_3b;
Var
a:array[1..100] of integer;
min,max,i,n:integer;
BEGIN
readln(n);
for i:=1 to n do
readln(a[i]);
min:=101; max:=-101;
for i:=1 to n do
begin
if (a[i]>0) and (a[i]<min) then min:=a[i];
if (a[i]<0) and (a[i]>max) then max:=a[i];
end;
writeln(min+max);
END.
Məsələ 4.
Program Zona14_4;
Var
a,b,n,i:integer;
BEGIN
readln(n);
a:=0; b:=1;
for i:=2 to n do
begin
b:=b+a;
a:=b-a;
end;
writeln(a,' ',b);
END.
Məsələ 5. Sətirlərdən istifadə etmədən.
Program Zona14_5;
Var
a:array[0..9] of byte;
i,q,k,t:integer;
n:int64;
BEGIN
readln(n);
for i:=0 to 9 do a[i]:=0;
k:=0;
while(n<>0) do
begin
q:=n mod 10;
if (a[q]=0) then
begin a[q]:=1; INC(k); end;
n:=n div 10;
end;
t:=10-k;
writeln(t);
if (t<>0) then begin
for i:=0 to 9 do
if (a[i]=0) then write(i,' ');
writeln;
end;
END.
Məsələ 5. Sətirlərdən istifadə edərək (Etibar Süleymanov)
var N,reqem: string;
k,t, i,h,p,L: Integer;
begin
reqem:='1234567890';
Write ('Nomrei daxil edin: ');
ReadLn (N);
k:=0;
L:=length(N);
for i:= 1 to L do
begin
p:= Pos(N[i], reqem);
if (p=0) then continue;
Delete(reqem,p, 1);
k:=k+1;
end;
t:=10-k;
writeln(t);
if (t<>0) then
begin
h:= length (reqem);
for i:=1 to h do
write(reqem[i], ' ');
writeln;
end;
end.