Задания
Версия для печати и копирования в MS Word
Тип Д24 C1 № 2802
i

Тре­бо­ва­лось на­пи­сать про­грам­му, при вы­пол­не­нии ко­то­рой с кла­ви­а­ту­ры счи­ты­ва­ют­ся ко­ор­ди­на­ты точки на плос­ко­сти (x, y  — дей­стви­тель­ные числа) и опре­де­ля­ет­ся при­над­леж­ность этой точки за­дан­ной за­штри­хо­ван­ной об­ла­сти (вклю­чая гра­ни­цы). Про­грам­мист то­ро­пил­ся и на­пи­сал про­грам­му не­пра­виль­но.

Пас­кальБей­сик

var x,y: real;

begin

readln(x,y);

if y<=x then

if y<=─x then

if y>=x*x─2 then

write('при­над­ле­жит')

else

write('не при­над­ле­жит')

end.

INPUT x, y

IF y<=x THEN

IF y<=-x THEN

IF y>=x*x-2 THEN

PRINT "при­над­ле­жит"

ELSE

PRINT "не при­над­ле­жит"

ENDIF

ENDIF

ENDIF

END

Си++Ал­го­рит­ми­че­ский
int main(void)

{float x,y;

cin >> x >> y;

if (y<=x)

if (y<=-x)

if (y>=x*x-2)

cout << "при­над­ле­жит";

else

cout << "не при­над­ле­жит";

}

алг

нач

вещ x,y

ввод x,y

если y<=x то

    если y<=─x то

        если y>=x*x─2 то

            вывод 'при­над­ле­жит'

        иначе

            вывод 'не при­над­ле­жит'

        все

    все

все

кон

Python

x = float(input())

y = float(input())

if y<=x:

    if y<=-x:

        if y>=x*x-2:

            print("при­над­ле­жит")

        else:

            print("не при­над­ле­жит")

 

 По­сле­до­ва­тель­но вы­пол­ни­те сле­ду­ю­щее:

1.   Пе­ре­ри­суй­те и за­пол­ни­те таб­ли­цу, ко­то­рая по­ка­зы­ва­ет, как ра­бо­та­ет про­грам­ма при ар­гу­мен­тах, при­над­ле­жа­щих раз­лич­ным об­ла­стям (A, B, C, D, E, F, G и H).

Точки, ле­жа­щие на гра­ни­цах об­ла­стей, от­дель­но не рас­смат­ри­вать. В столб­цах усло­вий ука­жи­те "да", если усло­вие вы­пол­нит­ся, "нет", если усло­вие не вы­пол­нит­ся, "—" (про­черк), если усло­вие не будет про­ве­рять­ся, "не изв.", если про­грам­ма ведет себя по-раз­но­му для раз­ных зна­че­ний, при­над­ле­жа­щих дан­ной об­ла­сти. В столб­це "Про­грам­ма вы­ве­дет" ука­жи­те, что про­грам­ма вы­ве­дет на экран. Если про­грам­ма ни­че­го не вы­во­дит, на­пи­ши­те "—" (про­черк). Если для раз­ных зна­че­ний, при­над­ле­жа­щих об­ла­сти, будут вы­ве­де­ны раз­ные тек­сты, на­пи­ши­те "не изв". В по­след­нем столб­це ука­жи­те "да" или "нет".

 

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

 

Об­ластьУсло­вие 1

(y<=x)

Усло­вие 2

(y<=-x)

Усло­вие 3

(y>=x*x-2)

Про­грам­ма вы­ве­детОб­ласть об­ра­ба­ты­ва­ет­ся верно
A
В
С
D
Е
F
G
Н
Спрятать решение

Ре­ше­ние.

Со­дер­жа­ние вер­но­го от­ве­та и ука­за­ния по оце­ни­ва­нию (до­пус­ка­ют­ся иные фор­му­ли­ров­ки от­ве­та, не ис­ка­жа­ю­щие его смысл)

 Эле­мен­ты от­ве­та:

1)  

Об­ластьУсло­вие 1

(y<=x)

Усло­вие 2

(y<=-x)

Усло­вие 3

(y>=x*x-2)

Про­грам­ма вы­ве­детОб­ласть

об­ра­ба­ты­ва­ет­ся

верно

Aнетнет
Внетнет
Снетнет
Dдададапри­над­ле­житда
Еданетнет
Fданетнет
Gдаданетне при­над­ле­житда
Ннетнет

 

2)  Воз­мож­ная до­ра­бот­ка (Пас­каль, раз­би­е­ние об­ла­сти на две части пря­мой x = 0):

if (y>=x*x─2) and ((y<=x) and (x>=0) or (x<=0) and (y<=-x))

then

write('при­над­ле­жит')

else

write('не при­над­ле­жит')

 

 Воз­мож­ная до­ра­бот­ка (Си, раз­би­е­ние на две пе­ре­се­ка­ю­щи­е­ся об­ла­сти):

if (y>=x*x-2 && (y<=x || y<=-x))

cout << "при­над­ле­жит";

else

cout << "не при­над­ле­жит";

 

 Воз­мож­ная до­ра­бот­ка (Бей­сик, от­бра­сы­ва­ние части от боль­шей об­ла­сти, ис­поль­зу­ют­ся вло­жен­ные усло­вия):

IF y>=x*x-2 THEN

IF NOT (y>x AND y>-x) THEN

PRINT "при­над­ле­жит"

ELSE

PRINT "не при­над­ле­жит"

ENDIF

ELSE

PRINT "не при­над­ле­жит"

ENDIF

 

 Об­ра­ти­те вни­ма­ние, что ва­ри­ан­тов до­ра­бот­ки может быть до­ста­точ­но много, но обыч­но пра­виль­ное опи­са­ние за­штри­хо­ван­ных об­ла­стей в них пред­став­ля­ет собой или объ­еди­не­ние двух (или более) воз­мож­но пе­ре­се­ка­ю­щих­ся об­ла­стей, или ис­клю­че­ние одной об­ла­сти из дру­гой.

 При раз­де­ле­нии об­ла­сти вдоль какой-либо линии точки, ко­то­рые лежат на этой линии внут­ри об­ла­сти, могут быть при­чис­ле­ны к одной части, к дру­гой или к обеим (то есть, на­при­мер, в при­ве­ден­ном ре­ше­нии на языке Пас­каль одно из усло­вий (x >= 0) или (x <= 0) может быть стро­гим).

 Могут быть и дру­гие вер­ные спо­со­бы до­ра­бот­ки.

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Об­ра­ти­те вни­ма­ние! В за­да­че тре­бу­ет­ся вы­пол­нить три сле­ду­ю­щих дей­ствия.

1. Ука­зать для каж­дой об­ла­сти, как будет ра­бо­тать про­грам­ма - за­пол­нить таб­ли­цу.

2. Ис­пра­вить ошиб­ку, свя­зан­ную с не­вер­ной рас­ста­нов­кой опе­ра­тор­ных ско­бок (от­сут­ству­ют слу­чаи ELSE). Ис­прав­ле­ни­ем этой ошиб­ки может быть либо до­бав­ле­ние слу­чая ELSE к каж­до­му

усло­вию IF, либо объ­еди­не­ние всех усло­вий IF в одно при по­мо­щи конъ­юнк­ции.

В слож­ных слу­ча­ях это дей­ствие счи­та­ет­ся вы­пол­нен­ным, если про­грам­ма вы­да­ет одно из двух со­об­ще­ний «при­над­ле­жит» или «не при­над­ле­жит» для любых чисел x и y, при этом про­грам­ма не стала ра­бо­тать хуже, чем рань­ше, то есть для всех точек, для ко­то­рых про­грам­ма ранее вы­да­ва­ла вер­ный ответ, до­ра­бо­тан­ная про­грам­ма также долж­на вы­да­вать вер­ный ответ.

3. Ис­пра­вить ошиб­ку в про­ве­ря­е­мых усло­ви­ях.

В слож­ных слу­ча­ях это дей­ствие счи­та­ет­ся вы­пол­нен­ным, если верно опре­де­ле­на за­кра­шен­ная об­ласть, то есть про­грам­ма вы­во­дит со­об­ще­ние «при­над­ле­жит» для всех точек за­кра­шен­ной об­ла­сти и толь­ко для них, для точек вне за­кра­шен­ной об­ла­сти про­грам­ма вы­во­дит «не при­над­ле­жит» или не вы­во­дит ни­че­го.

В целом, кри­те­рий оцен­ки работ такой: ко­ли­че­ство бал­лов равно ко­ли­че­ству вы­пол­нен­ных дей­ствий. Де­таль­но кри­те­рии для каж­до­го слу­чая рас­смот­ре­ны ниже.

 

За­да­ние вы­пол­не­но пол­но­стью:

1) Пра­виль­но за­пол­не­на вся таб­ли­ца.

2) На­пи­са­на пра­виль­но ра­бо­та­ю­щая про­грам­ма(ис­прав­ле­ны обе ошиб­ки), т.е. про­грам­ма для всех пар чисел x, y верно опре­де­ля­ет при­над­леж­ность точки за­кра­шен­ной об­ла­сти.

В ра­бо­те (во фраг­мен­тах про­грамм) до­пус­ка­ет­ся на­ли­чие от­дель­ных син­так­си­че­ских оши­бок, не ис­ка­жа­ю­щих за­мыс­ла ав­то­ра ре­ше­ния.

3
Пра­виль­но вы­пол­не­ны два дей­ствия из трех.

При этом:

а) Дей­ствие по за­пол­не­нию таб­ли­цы за­счи­ты­ва­ет­ся, даже если ошиб­ки есть, но не более, чем в одной стро­ке.

б) При на­пи­са­нии опе­ра­ций срав­не­ния до­пус­ка­ет­ся одно не­пра­виль­ное ис­поль­зо­ва­ние стро­гих/не­стро­гих не­ра­венств (счи­та­ет­ся не­су­ще­ствен­ной ошиб­кой, по­греш­но­стью за­пи­си).

На­при­мер, вме­сто «y>=-x» один раз ис­поль­зу­ет­ся «y>-x».

в) Если уче­ник на­пи­сал про­грам­му, ко­то­рая от­ли­ча­ет­ся от пра­виль­ной про­грам­мы (с уче­том п.б) толь­ко рас­ста­нов­кой ско­бок в ло­ги­че­ских вы­ра­же­ни­ях (на­при­мер, не­пра­виль­но учте­ны

при­о­ри­те­ты опе­ра­ций), то счи­та­ет­ся, что вы­пол­не­но одно дей­ствие по ис­прав­ле­нию оши­бок из двух.

В ра­бо­те (во фраг­мен­тах про­грамм) до­пус­ка­ет­ся на­ли­чие от­дель­ных син­так­си­че­ских оши­бок, не ис­ка­жа­ю­щих за­мыс­ла ав­то­ра ре­ше­ния.

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

При этом:

а) Дей­ствие по за­пол­не­нию таб­ли­цы за­счи­ты­ва­ет­ся, если ошиб­ки есть не более, чем в двух стро­ках (в от­ли­чие от преды­ду­ще­го пунк­та).

б) При на­пи­са­нии опе­ра­ций срав­не­ния до­пус­ка­ет­ся любое ко­ли­че­ство не­пра­виль­ных ис­поль­зо­ва­ний стро­гих/не­стро­гих не­ра­венств (т.е. не учи­ты­ва­ет­ся кор­рект­ность ра­бо­ты про­грам­мы на гра­ни­цах об­ла­стей)

в) Если уче­ник на­пи­сал про­грам­му, ко­то­рая от­ли­ча­ет­ся от пра­виль­ной про­грам­мы толь­ко рас­ста­нов­кой ско­бок в ло­ги­че­ских вы­ра­же­ни­ях (на­при­мер, не­пра­виль­но учте­ны при­о­ри­те­ты

опе­ра­ций), то счи­та­ет­ся, что вы­пол­не­но одно дей­ствие по ис­прав­ле­нию оши­бок из двух.

В ра­бо­те (во фраг­мен­тах про­грамм) до­пус­ка­ет­ся на­ли­чие от­дель­ных син­так­си­че­ских оши­бок, не ис­ка­жа­ю­щих за­мыс­ла ав­то­ра ре­ше­ния.

1
Ни один из пунк­тов за­да­ния не вы­пол­нен, т.е. не вы­пол­не­ны кри­те­рии, поз­во­ля­ю­щие по­ста­вить уче­ни­ку 1 балл.0
Мак­си­маль­ный балл3
Гость 24.05.2012 09:44

Можно на­пи­сать вот такое усло­вие "if (y>=x*x-2) and ((y<=x)or(y<=-x))" в TP?

Служба поддержки

Можно.

Гость 21.05.2013 19:30

если от­ве­тить так,ответ будет за­щи­тан?

Си:/*Под­клю­чим биб­лио­те­ку math.h*/

if (y >= x*x - 2 && y <= fabs(x)){

         printf("при­над­ле­жит");

}

Alexander Tischenko

Не­же­ла­тель­но, чем низ­ко­уров­не­вей ответ, тем боль­ше бал­лов за него можно по­лу­чить.

Гость 15.10.2013 15:15

А если вот так за­пи­шу не будет ошиб­кой?

if ((y>=x*x-2) and (y<=0)) or ((y>=x*x-2) and (y<=x) and (y>=0)) or ((y>=x*x-2) and (y<=-x) and (y>=0))

then

write('при­над­ле­жит')

else

write('не при­над­ле­жит')

Константин Лавров

Нет. Не будет, но очень гро­мозд­ко! Ваше усло­вие можно су­ще­ствен­но упро­стить, на­при­мер, так

((y>=x*x-2) and ((y<=0) or ((y>=0) and ((y<=x) or (y<=-x)))