Олимпиада по информатике. Школьный тур

Раздел Информатика
Класс 10 класс
Тип Другие методич. материалы
Автор
Дата
Формат doc
Изображения Есть
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Олимпиада по информатике 8-11 класс

(школьный тур)

2015 год


Напишите программу на любом языке программирования

в задачах 1-5, используя компьютер


Задача 1. Если введенное с клавиатуры число меньше 0, вывести на экран «Отрицательное!». Если число больше или равно нулю и меньше или равно 10, то вывести «Норма!». От 11 до 100 вывести «Много!». Если число равно 1000, вывести на экран «Мега!», во всех остальных случаях - «Супер!»

Задача 2. Определите какому координатному углу (квадранту) принадлежит точка с координатами (X,Y)

Задача 3. Составить программу вычисления максимального и минимального из 3 различных чисел, введенных с клавиатуры

Задача 4. Определить количество счастливых трамвайных билетов. Билет считается счастливым, если сумма первых двух цифр, равна сумме последних. Пример: 1542 (1+5=4+2) Номер билета считать четырехзначным от 0001 до 9999

Задача 5 Определить сумму цифр натурального числа, вводимого с клавиатуры

Дайте письменный, подробный ответ в задачах 6-9

Задача 6 По­сле­до­ва­тель­ность чисел Люка за­да­ет­ся ре­кур­рент­ным со­от­но­ше­ни­ем:

F(1) = 2

F(2) = 1

F(n) = F(n-2) + F(n-1), при n >2, где n - на­ту­раль­ное число.

Чему равно де­ся­тое число в по­сле­до­ва­тель­но­сти Люка?

В от­ве­те за­пи­ши­те толь­ко на­ту­раль­ное число.

Задача 7 Опре­де­ли­те, что будет на­пе­ча­та­но в ре­зуль­та­те ра­бо­ты сле­ду­ю­ще­го фраг­мен­та про­грам­мы:

var k, s: integer;

begin

s:=1;

k:=0;

while k < 13 do begin

s:=s+2*k;

k:=k+4;

end;

write(s+k);

end.


Задача 8 В про­грам­ме опи­сан од­но­мер­ный це­ло­чис­лен­ный мас­сив с ин­дек­са­ми от 0 до 10 и це­ло­чис­лен­ная пе­ре­мен­ная i. В при­ве­ден­ном ниже фраг­мен­те про­грам­мы мас­сив сна­ча­ла за­пол­ня­ет­ся, а потом из­ме­ня­ет­ся:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 9 do begin

A[i]:=A[i+1];

end;

Чему будут равны эле­мен­ты этого мас­си­ва?

1) 10 0 1 2 3 4 5 6 7 8 9

2) 1 2 3 4 5 6 7 8 9 10 10

3) 0 0 1 2 3 4 5 6 7 8 9

4) 1 2 3 4 5 6 7 8 9 10 0

Задача 9 Тре­бо­ва­лось на­пи­сать про­грам­му, ко­то­рая ре­ша­ет не­ра­вен­ство

(x - а) / (bx) > 0 от­но­си­тель­но x для любых не­ну­ле­вых чисел а и b Олимпиада по информатике. Школьный тур., вве­ден­ных с кла­ви­а­ту­ры. Все числа счи­та­ют­ся дей­стви­тель­ны­ми. Про­грам­мист то­ро­пил­ся и на­пи­сал про­грам­му не­пра­виль­но.

Пас­каль

Бей­сик

Си

var a,b,x: real;

begin

readln(a,b,x);

if b>0 then

write ('x > ',a,' или x < 0')

else

if a > 0 then

write ('0 < x <', a)

else

write (a, '< x < 0 ');

end.

INPUT a, b, x

IF b > 0 THEN

PRINT "x > ",a," или x<0"

ELSE

IF a > 0 THEN

PRINT "0 < x < ",a

ELSE

PRINT a," < x < 0"

ENDIF

ENDIF

END

void main(void)

{ float a,b,x;

scanf("%f%f%f", &a,&b,&x);

if (b > 0)

printf("x > %f или x < 0 ", a);

else

if (a>0)

printf("0 < x < %f",a);

else

printf("%f < x < 0",a);

}

По­сле­до­ва­тель­но вы­пол­ни­те три за­да­ния:

1) При­ве­ди­те при­мер таких чисел а, b, х, при ко­то­рых про­грам­ма не­вер­но ре­ша­ет по­став­лен­ную за­да­чу.

2) Ука­жи­те, какая часть про­грам­мы яв­ля­ет­ся лиш­ней.

3) Ука­жи­те, как нужно до­ра­бо­тать про­грам­му, чтобы не было слу­ча­ев ее не­пра­виль­ной ра­бо­ты. (Это можно сде­лать не­сколь­ки­ми спо­со­ба­ми, по­это­му можно ука­зать любой спо­соб до­ра­бот­ки ис­ход­ной про­грам­мы).





Победителем и призером, признается тот, кто решил наибольшее

количество задач от 2 и больше, если 0 или 1 - то просто участник.


Ответы на задачи 6-9


Задача 6 По­сле­до­ва­тель­ность чисел Люка за­да­ет­ся ре­кур­рент­ным со­от­но­ше­ни­ем:

F(1) = 2

F(2) = 1

F(n) = F(n-2) + F(n-1), при n >2, где n - на­ту­раль­ное число.

Чему равно де­ся­тое число в по­сле­до­ва­тель­но­сти Люка?

В от­ве­те за­пи­ши­те толь­ко на­ту­раль­ное число.

По­яс­не­ние.

По­сле­до­ва­тель­но на­хо­дим:

F(3) = F(1) + F(2) = 3,

F(4) = F(2) + F(3) = 4,

F(5) = F(3) + F(4) = 7,

F(6) = F(4) + F(5) = 11,

F(7) = F(5) + F(6) = 18,

F(8) = F(6) + F(7) = 29,

F(9) = F(7) + F(8) = 47,

F(10) = F(8) + F(9) = 76.

Де­ся­тое число в по­сле­до­ва­тель­но­сти Люка равно 76.

Задача 7 Опре­де­ли­те, что будет на­пе­ча­та­но в ре­зуль­та­те ра­бо­ты сле­ду­ю­ще­го фраг­мен­та про­грам­мы:

var k, s: integer;

begin

s:=1;

k:=0;

while k < 13 do begin

s:=s+2*k;

k:=k+4;

end;

write(s+k);

end.

По­яс­не­ние.

Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие k < 13, т. е. пе­ре­мен­ная k опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл.

Так как числа не­боль­шие, можно ак­ку­рат­но вы­пи­сать все s и k:

s 1 1 9 25 49

k 0 4 8 12 16

(Пом­ни­те, что усло­вие k < 13 про­ве­ря­ет­ся сразу после k:=k+4, сле­до­ва­тель­но, дей­ствие s:=s+2*k для k=16 вы­пол­нять­ся не будет)

Сле­до­ва­тель­но, ответ 49+16=65.

Задача 8 В про­грам­ме опи­сан од­но­мер­ный це­ло­чис­лен­ный мас­сив с ин­дек­са­ми от 0 до 10 и це­ло­чис­лен­ная пе­ре­мен­ная i. В при­ве­ден­ном ниже фраг­мен­те про­грам­мы мас­сив сна­ча­ла за­пол­ня­ет­ся, а потом из­ме­ня­ет­ся:

for i:=0 to 10 do A[i]:=i;

for i:=0 to 9 do begin

A[i]:=A[i+1];

end;

Чему будут равны эле­мен­ты этого мас­си­ва?

1) 10 0 1 2 3 4 5 6 7 8 9

2) 1 2 3 4 5 6 7 8 9 10 10

3) 0 0 1 2 3 4 5 6 7 8 9

4) 1 2 3 4 5 6 7 8 9 10 0

По­яс­не­ние.

Идем по про­грам­ме:

от 0 до 10 вы­пол­ня­ем A[i]:=i, т. е. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;

от 0 до 9 вы­пол­ня­ем A[i]:=A[i+1], т. е. зна­че­ния ячеек сме­ща­ют­ся влево на одну ячей­ку, кроме по­след­ней, так что 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10.

Пра­виль­ный ответ ука­зан под но­ме­ром 2.

Задача 9 Тре­бо­ва­лось на­пи­сать про­грам­му, ко­то­рая ре­ша­ет не­ра­вен­ство

(x - а) / (bx) > 0 от­но­си­тель­но x для любых не­ну­ле­вых чисел а и b Олимпиада по информатике. Школьный тур., вве­ден­ных с кла­ви­а­ту­ры. Все числа счи­та­ют­ся дей­стви­тель­ны­ми. Про­грам­мист то­ро­пил­ся и на­пи­сал про­грам­му не­пра­виль­но.

Пас­каль

Бей­сик

Си

var a,b,x: real;

begin

readln(a,b,x);

if b>0 then

write ('x > ',a,' или x < 0')

else

if a > 0 then

write ('0 < x <', a)

else

write (a, '< x < 0 ');

end.

INPUT a, b, x

IF b > 0 THEN

PRINT "x > ",a," или x<0"

ELSE

IF a > 0 THEN

PRINT "0 < x < ",a

ELSE

PRINT a," < x < 0"

ENDIF

ENDIF

END

void main(void)

{ float a,b,x;

scanf("%f%f%f", &a,&b,&x);

if (b > 0)

printf("x > %f или x < 0 ", a);

else

if (a>0)

printf("0 < x < %f",a);

else

printf("%f < x < 0",a);

}

По­сле­до­ва­тель­но вы­пол­ни­те три за­да­ния:

1) При­ве­ди­те при­мер таких чисел а, b, х, при ко­то­рых про­грам­ма не­вер­но ре­ша­ет по­став­лен­ную за­да­чу.

2) Ука­жи­те, какая часть про­грам­мы яв­ля­ет­ся лиш­ней.

3) Ука­жи­те, как нужно до­ра­бо­тать про­грам­му, чтобы не было слу­ча­ев ее не­пра­виль­ной ра­бо­ты. (Это можно сде­лать не­сколь­ки­ми спо­со­ба­ми, по­это­му можно ука­зать любой спо­соб до­ра­бот­ки ис­ход­ной про­грам­мы).

По­яс­не­ние.

1) a = −11, b = 1, x = 0.

Зна­че­ние x может быть не ука­за­но. Зна­че­ние а может быть любым от­ри­ца­тель­ным чис­лом, зна¬чение b - любым по­ло­жи­тель­ным. Также до­пу­стим ответ, что про­грам­ма ра­бо­та­ет не­пра­виль­но при любых по­ло­жи­тель­ных b и от­ри­ца­тель­ных а.

2) Лиш­няя часть:

не нужно вво­дить х с кла­ви­а­ту­ры; верно: readln(a, b).

3) Воз­мож­ная до­ра­бот­ка:

readln(а, b);

if b > 0 then

if а > 0 then

write('х >', а, 'или х < 0')

else

write('х < ' а, 'или х > 0')

else

if а > 0 then

write('0 < х <', а)

else

write(а,' < х < 0');

(могут быть и дру­гие спо­со­бы до­ра­бот­ки).


© 2010-2022