İnformatika üzrə Respublika Olimpiadasının II rayon turunun məsələləri 2013/2014-cü
tədris ili
Yüklə (məsələlərin şərtləri) Скачать (условие задач)
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.
|