Задания
Версия для печати и копирования в MS Word
Тип Д19 C4 № 3128
i

На вход в про­грам­ме по­да­ют­ся све­де­ния о сдаче эк­за­ме­нов уче­ни­ка­ми 9─х клас­сов, не­ко­то­рой сред­ней школы. В пер­вой стро­ке со­об­ща­ет­ся ко­ли­че­ство уче­ни­ков N, ко­то­рое не мень­ше 10, не пре­вос­хо­дит 100. Каж­дая из N строк имеет сле­ду­ю­щий фор­мат: <Фа­ми­лия><Имя><оцен­ки>

где<Фа­ми­лия>─стро­ка, со­сто­я­щая не более чем из 20 сим­во­лов <Имя>─стро­ка, со­сто­я­щая не более чем из 15 сим­во­лов <оцен­ки>─через про­бел три целых числа, со­от­вет­ству­ю­щие оцен­кам по пя­ти­балль­ной си­сте­ме. <Фа­ми­лия>, <Имя> и <оцен­ки> раз­де­ле­ны одним про­бе­лом.

тре­бу­ет­ся на­пи­сать про­грам­му, ко­то­рая будет вы­во­дить на экран имена 3─х луч­ших по сред­не­му баллу уче­ни­ков.

Спрятать решение

Ре­ше­ние.

type uchenik =record

Fam:string[20];

name:string[15];

b1,b2,b3:integer;

end;

var

srB:array [1..100] of real;

i,k,l,p,N,m1,m2,m3:integer;

max1,max2,max3,sr:real;

c:char;

a:array[1..100] of uchenik;

begin

read(n); //счи­та­ли ко­ли­че­ство уче­ни­ков

if n>=10 then begin

for I:=1 to n do

begin

a[i].fam:='';

repeat read(c);

a[i].fam:= a[i].fam+c;

until c=' '; //счи­та­ли фа­ми­лию

repeat read(c);

a[i].name:= a[i].name+c;

until c=' '; //счи­та­ли имя

read(m1); a[i].b1:=m1;

read(m2); a[i].b2:=m2;

read(m3); a[i].b3:=m3;

end; //счи­та­ли балы

for i:= 1 to n do

srB[i]:= a[i].b1+a[i].b2+a[i].b3; //со­зда­ли мас­сив, со­дер­жа­щий сред­ние балы

 

max1:=srB[1]; max2:=0;max3:=0;

for i:= 2 to n do begin //нашли три мак­си­му­ма

if srB[i]>max1 then begin max3:=max2; max2:=max1; max1:=srB[i]; k:=i; end

else if srB[i]>max2 then begin max3:=max2; max2:=srB[i]; l:=i; end

else if srB[i]>max3 then begin max3:=srB[i]; p:=i; end;

end;

for i:=1 to n do

if srB[i]>= max3 then writeln(a[i].fam, a[i].name);

end

else writeln('уче­ни­ков не может быть мень­ше 10');

end.

 

При­ведём ре­ше­ние Ильи Му­ра­то­ва, Python.

 

n=int(input())

marks = []

for i in range(n):

    fname, lname, mark1, mark2, mark3 = input().split(" ")

    name = fname + " " + lname

    mark_sum = int(mark1) + int(mark2) + int(mark3)

    marks.append((mark_sum, name))

marks.sort(reverse=True) # сор­ти­ров­ка про­хо­дит по пер­во­му зна­че­нию в tuple

for i in range(3):

    print(marks[i][1])

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

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра и на­хо­дит ответ, не со­хра­няя вход­ные дан­ные в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N (ко­ли­че­ству за­про­сов). Про­грам­ма про­смат­ри­ва­ет вход­ные дан­ные один раз. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции, не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния, не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная, при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку).4
Про­грам­ма ра­бо­та­ет верно, но вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N. Этот мас­сив, воз­мож­но, потом сор­ти­ру­ет­ся. До­пус­ка­ет­ся на­ли­чие от одной до трех син­так­си­че­ских оши­бок. Воз­мож­но, в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ном вводе дан­ных есть одна ошиб­ка (на­при­мер, ис­поль­зо­ва­ние read вме­сто readln в Пас­ка­ле или не­вер­ное счи­ты­ва­ние стро­ки в C++). Три балла также вы­став­ля­ет­ся, если в эф­фек­тив­ной про­грам­ме, удо­вле­тво­ря­ю­щей кри­те­ри­ям вы­став­ле­ния 4 бал­лов, есть одна ошиб­ка, в ре­зуль­та­те ко­то­рой про­грам­ма ра­бо­та­ет не­вер­но на не­ко­то­рых на­бо­рах не­ти­пич­ных вход­ных дан­ных.3
Про­грам­ма ра­бо­та­ет в целом верно, эф­фек­тив­но или нет, но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся до двух оши­бок (не­вер­ная ини­ци­а­ли­за­ция счётчи­ков, до­пу­ще­на ошиб­ка в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ной сор­ти­ров­ке или ал­го­рит­ме по­ис­ка ми­ни­маль­ных эле­мен­тов, ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и тому по­доб­ное).

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

2
Про­грам­ма, воз­мож­но, не­вер­но ра­бо­та­ет при не­ко­то­рых вход­ных дан­ных, но по при­ведённому тек­сту ре­ше­ния ясно, что эк­за­ме­ну­е­мый по­ни­ма­ет, из каких эта­пов долж­но со­сто­ять ре­ше­ние за­да­чи. При ис­поль­зо­ва­нии сор­ти­ров­ки она может быть ре­а­ли­зо­ва­на прин­ци­пи­аль­но не­вер­но (на­при­мер, вме­сто двух цик­лов ис­поль­зу­ет­ся один), или до­пу­ще­на прин­ци­пи­аль­ная ошиб­ка в по­ис­ке нуж­ных эле­мен­тов. Всего до­пус­ка­ет­ся до 4 раз­лич­ных оши­бок в ре­а­ли­за­ции ал­го­рит­ма, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния двух бал­лов. До­пус­ка­ет­ся на­ли­чие от одной до семи син­так­си­че­ских оши­бок, опи­сан­ных выше.1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но.0
Мак­си­маль­ный балл4