Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Критерии оценивания заданий с развёрнутым ответом





 

7

 

На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество кратных 11 чисел
в исходной последовательности и минимальное кратное 11 число. Если чисел, кратных 11, нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают по абсолютной величине 1000. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.

Напоминание: 0 делится на любое натуральное число.

Бейсик Python
CONST n = 4 count = 0 minimum = 0 FOR I = 1 TO n INPUT x IF x mod 11 = 0 THEN count = count + 1 IF x > minimum THEN minimum = x END IF END IF NEXT I IF count> 0 THEN PRINT count PRINT minimum ELSE PRINT "NO" END IF n = 4 count = 0 minimum = 0 for i in range(1, n+1): x = int(input()) if x % 11 == 0: count += 1 if x > minimum: minimum = x if count > 0: print(count) print(minimum) else: print("NO")

 

Алгоритмический язык Паскаль
алг нач цел n = 4 цел i, x, minimum, count count:= 0 minimum:= 0 нцдля i от 1 до n ввод x если mod(x, 11) = 0 то count:= count + 1 если x > minimum то minimum:= x все все кц если count > 0 то вывод count, нс вывод minimum иначе вывод "NO" все кон const n = 4; var i, x, minimum, count: integer; begin count:= 0; minimum:= 0; for i:= 1 to n do begin read(x); if x mod 11 = 0 then begin count:= count + 1; if x > minimum then minimum:= x end end; if count > 0 then begin writeln(count); writeln(minimum); end else writeln('NO') end.
Си
#include <stdio.h> #define n 4   int main() { int i, x, minimum, count; count = 0; minimum = 0; for (i = 1; i <= n; i++) { scanf("%d", &x); if (x % 11 == 0) { count++; if (x > minimum) minimum = x; } } if (count > 0) { printf("%d\n", count); printf("%d\n", minimum); } else printf("NO\n"); return 0; }

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

1. Напишите, что выведет эта программа при вводе последовательности:

33, 34, 44, 45.

2. Приведите пример последовательности, в которой есть хотя бы одно кратное 11 число, при вводе которой, несмотря на ошибки, программа печатает правильный ответ.

3. Найдите все ошибки в этой программе (их может быть одна или
несколько). Известно, что каждая ошибка затрагивает только одну строку
и может быть исправлена без изменения других строк. Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.

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

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

 

 

 

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)
Решение использует запись программы на Паскале. Допускается использование записи программы на любом из четырёх других языков программирования. 1. Программа выведет два числа: 2 и 44. 2. Пример последовательности, содержащей кратные 11 числа, для которой программа выдаёт правильный ответ: 51 53 55 57. Замечание для проверяющего. В конце работы программы значение переменной minimum всегда равно максимальному кратному 11 числу или 0, если в последовательности нет чисел, кратных 11. Соответственно, программа будет работать верно, если в последовательности максимальное кратное 11 число равно минимальному. Выведенное количество кратных 11 чисел будет правильным в любом случае. 3. В программе есть две ошибки. Первая ошибка: неверная инициализация ответа (переменная minimum). Строка с ошибкой: minimum:= 0; Верное исправление: minimum:= 1001; Вместо 1001 может быть любое целое число, большее 990, либо MAXINT. Можно использовать и число 990, так как при выводе мы проверяем, есть ли в последовательности хотя бы одно кратное 11 число. Вторая ошибка: неверное условие перевычисления минимума. Строка с ошибкой: if x > minimum then Верное исправление: if x < minimum then

 


Указания по оцениванию Баллы
Обратите внимание! В задаче требовалось выполнить четыре действия: 1) указать, что выведет программа при конкретной входной последовательности; 2) указать пример входной последовательности, при вводе которой программа выдаёт правильный ответ; 3) исправить первую ошибку; 4) исправить вторую ошибку. Для проверки правильности выполнения п. 2) нужно формально выполнить исходную (ошибочную) программу с входными данными, которые указал экзаменуемый, и убедиться в том, что результат, выданный программой, будет таким же, как и для правильной программы. Для действий 3) и 4) ошибка считается исправленной, если выполнены оба следующих условия: а) правильно указана строка с ошибкой; б) указан такой новый вариант строки, что при исправлении другой ошибки получается правильная программа  
Выполнены все четыре необходимых действия, и ни одна верная строка не указана в качестве ошибочной  
Не выполнены условия, позволяющие поставить 3 балла. Имеет место одна из следующих ситуаций: а) выполнены три из четырёх необходимых действий. Ни одна верная строка не указана в качестве ошибочной; б) выполнены все четыре необходимых действия. Указано в качестве ошибочной не более одной верной строки  
Не выполнены условия, позволяющие поставить 2 или 3 балла. Выполнены два необходимых действия из четырёх  
Не выполнены условия, позволяющие поставить 1, 2 или 3 балла  
Максимальный балл 3

 

 


 

 

8

 

В физической лаборатории проводится долговременный эксперимент
по изучению гравитационного поля Земли. По каналу связи каждую минуту передаются положительные целые числа – текущие показания прибора «Сигма 2015». После того как передана серия измерений (количество измерений в серии заранее известно), прибор передаёт контрольное значение серии – наибольшее число R, удовлетворяющее следующим условиям:

1) R – произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных, но равных
по величине элементов допускаются);

2) R делится на 33.

В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

Напишите эффективную по времени и используемой памяти программу (укажите используемую версию языка программирования, например Free Pascal 2.6.4), которая будет проверять правильность контрольного значения. Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.

Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.

Программа должна напечатать отчёт по следующей форме.

 

Вычисленное контрольное значение: …

Контроль пройден (или Контроль не пройден)

 

Если удовлетворяющее условию контрольное значение определить невозможно, то выводится только фраза «Контроль не пройден».


Перед текстом программы кратко опишите используемый Вами алгоритм решения.

На вход программе в первой строке подаётся количество чисел N ≤ 100 000. В каждой из последующих N строк записано одно положительное целое число, не превышающее 1000. В последней строке записано контрольное значение.


Пример входных данных:

Пример выходных данных для приведённого выше примера входных данных:

Вычисленное контрольное значение: 4620

Контроль пройден

 

 

 

 

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)
Произведение двух чисел делится на 33, если: – один из сомножителей делится на 33 (второй может быть любым) либо – ни один из сомножителей не делится на 33, но один из сомножителей делится на 3, а другой – на 11. Программа, вычисляющая контрольное значение, читает все входные данные один раз, не запоминая их в массиве. Для прочитанного фрагмента входной последовательности программа хранит значения четырёх величин: М3 – самое большое число, кратное 3; M11 – самое большое число, кратное 11, но не кратное 3; M33 – самое большое число, кратное 33; МAX – самое большое число среди всех элементов последовательности, отличное от М33 (если число М33 встретилось более одного раза и оно является максимальным, то MAX = M33). После того как все данные прочитаны, искомое контрольное значение вычисляется как максимум из произведений М33*MAX и М3*М11. Возможны модификации этого алгоритма. Ниже приведены программы на языках Паскаль и Си, а также на алгоритмическом языке, реализующие одну из таких модификаций. Допускаются решения, записанные на других языках программирования.

 

Пример правильной и эффективной программы на языке Паскаль
var M3,M11,M33,R,MAX,dat,res,i,N: longint; begin M3:= 0; M11:= 0; M33:= 0; MAX:= 0; readln(N); for i:= 1 to N do begin readln(dat); if (dat mod 3 = 0) and (dat > M3) then M3:= dat else if (dat mod 11 = 0) and (dat > M11) then M11:= dat; if (dat mod 33 = 0) and (dat > M33) then begin if M33 > MAX then MAX:= M33; M33:= dat end else if dat > MAX then MAX:= dat; end; readln(R); if (M3*M11 < M33*MAX) then res:= M33*MAX else res:= M3*M11; if res > 0 then writeln('Вычисленное контрольное значение: ',res); if (R > 0) and (R = res) then writeln('Контроль пройден') else writeln('Контроль не пройден'); end.

 

Пример правильной и эффективной программы на языке Си
#include <stdio.h> void main () { int N; /*количество чисел на входе*/ int x; /*исходные данные*/ int m3=0; /*макс. число, кратное 3*/ int m11=0; /*макс. число, кратное 11, но не 3*/ int m33=0; /*макс. число, кратное 33 */ int max=0; int R; /*введённое контрольное значение*/ int m; /*вычисленное контрольное значение*/ int i; scanf("%d", &N); for (i=1; i<=N; ++i) { scanf("%d", &x); if (x % 3 == 0 && x > m3) m3 = x; else if (x % 11 == 0 && x > m11) m11 = x; if (x % 33 == 0 && x > m33) { if (m33 > max) max = m33; m33 = x; } else if (x > max) max = x; } scanf("%d", &R); if (m3*m11 < m33*max) m = m33*max; else m = m3*m11; if (m>0) printf("Вычисленное контрольное значение: %d\n", m); if (R>0 && R==m) printf("Контроль пройден\n"); else printf("Контроль не пройден\n"); }

 


Пример правильной и эффективной программы на алгоритмическом языке
алг нач цел N | количество чисел на входе цел x | исходные данные цел m3=0 | макс. число, кратное 3 цел m11=0 | макс. число, кратное 11, но не 3 цел m33=0 | макс. число, кратное 33 цел mx=0 цел R | введённое контрольное значение цел m | вычисленное контрольное значение ввод N нц N раз ввод x если mod(x,3) = 0 и x > m3 то m3:= x иначе если mod(x,11) = 0 и x > m11) то m11:= x все все если mod(x,33) = 0) и x > m33 то если m33 > mx то mx:= m33 все m33:= x иначе если x > mx то mx:= x все все кц ввод R если m3*m11 < m33*mx то m:= m33*mx иначе m:= m3*m11 все если m>0 товыводнс, "Вычисленное контрольное значение: ", m все если R>0 и R=m товыводнс, "Контроль пройден" иначевыводнс, "Контроль не пройден" все кон

 

Указания по оцениванию Баллы
4 балла ставится за эффективную и правильно работающую программу, которая, возможно, содержит до трёх синтаксических ошибок (описок). 3 балла ставится в случае, когда фактически задача решена, но количество описок более трёх (но не более пяти) и допущено не более одной содержательной ошибки, не позволяющей усомниться в том, что экзаменуемый правильно придумал алгоритм (список допустимых ошибок приведён ниже). 2 балла ставится, если в дополнение к неточностям, которые перечислены выше, программа работает неэффективно по времени и/или допущено до трёх упомянутых выше содержательных ошибок. Допускается до семи описок. 1 балл ставится, если программа написана неверно, но из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи. Далее сказанное уточнено.  
Программа правильно работает для любых входных данных произвольного размера. Используемая память не зависит от количества прочитанных чисел, а время работы пропорционально этому количеству. Допускается наличие в тексте программы до трёх синтаксических ошибок одного из следующих видов: 1) пропущен или неверно указан знак пунктуации; 2) неверно написано или пропущено зарезервированное слово языка программирования; 3) не описана или неверно описана переменная; 4) применяется операция, недопустимая для соответствующего типа данных. Если одна и та же ошибка встречается несколько раз, это считается за одну ошибку  

 

Не выполнены условия, позволяющие поставить 4 балла. Программа в целом работает правильно для любых входных данных произвольного размера. Время работы пропорционально количеству введённых чисел; правильно указано, какие величины должны вычисляться по ходу чтения элементов последовательности чисел. Количество синтаксических ошибок (описок) указанных выше видов – не более пяти. Используемая память, возможно, зависит от количества прочитанных чисел (например, входные данные запоминаются в массиве или другой структуре данных (контейнер priority_queue, vector,set или map в С++)). Допускается ошибка при вводе данных, неверный или неполный вывод результатов или неверная работа программы в «экзотических» ситуациях. Например, при использовании 16-битного целого (integer в BPascal или Qbasic) умножаются два числа этого типа (результат по условию может не помещаться в 16 бит). Кроме того, допускается наличие одной ошибки, принадлежащей к одному из следующих видов ошибок: 1) ошибка при инициализации максимумов; 2) неверно обрабатывается ситуация, когда один или несколько максимумов не определены; 3) неверно обрабатывается ситуация, когда максимальное произведение получается умножением одинаковых чисел (но разных элементов массива); 4) при вычислении максимумов учитываются произведения вида a[i]*a[i]; 5) допущен выход за границу массива; 6) используется знак ”<” вместо ”<=”, ”or” вместо ”and” и т.п.  

 

Не выполнены условия, позволяющие поставить 3 или 4 балла. Программа работает в целом верно, эффективно или нет, но в реализации алгоритма есть до трёх содержательных ошибок, допустимые виды ошибок перечислены в критериях на 3 балла. Количество синтаксических описок не должно быть более семи. Программа может быть неэффективна по времени. Например, все числа запоминаются в массиве и перебираются все возможные пары элементов последовательности: max:= 0; for i:= 1 to N - 1 do begin for j:= i + 1 to N do begin if ((a[i]*a[j]) mod 33 = 0) and (a[i]*a[j] > max) then max:= a[i]*a[j]; end end;  
Не выполнены условия, позволяющие поставить 2, 3 или 4 балла. Программа работает правильно в отдельных частных случаях. Из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи. Допускается любое количество описок  
Не выполнены критерии, позволяюшие поставить 1, 2, 3 или 4 балла  
Максимальный балл 4

 

 







Date: 2015-12-13; view: 949; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.012 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию