iİnformatikanın məktəbdə tədrisi

olimpiada-zona-2014

İ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.