C2 и C4
| |
JarPI | Дата: Воскресенье, 2011-04-17, 2:29 PM | Сообщение # 1 |
Студент
Группа: Пользователи
Сообщений: 55
Репутация: -6
Замечания: 0%
Статус: Offline
Город: Мухосранск
| Давайте соберем в этой теме разные типы заданий C2 и C4. Оформление 1)С2 or C4 2)Условие 3)Код программы P.S. тема создана,так как наблюдается большое кол-во задротов на форуме,из них n-ое кол-во сдают информатику, а данный топик будет приносить только пользу(проводите время с толком).
|
|
| |
KaDeaT | Дата: Воскресенье, 2011-04-17, 2:58 PM | Сообщение # 2 |
Нобелевский лауреат
Группа: Проверенные
Сообщений: 11169
Репутация: 1446
Замечания: 0%
Статус: Offline
| Рад бы помочь, да не буду =((( Добавлено (2011-04-17, 2:58 PM) --------------------------------------------- А так то С2 вообще фигня ооочень легкая =)))
Обучение программированию
|
|
| |
Афанасий | Дата: Среда, 2011-04-20, 8:21 AM | Сообщение # 3 |
Студент
Группа: Пользователи
Сообщений: 43
Репутация: 6
Замечания: 0%
Статус: Offline
| Чёрт! У меня есть много нарешанных заданий С2, но к ним нет условия. Сейчас начал решать С4. Позже выложу, но я туговат в этой области, ошибки возможно будут.
|
|
| |
Nikita27 | Дата: Четверг, 2011-04-21, 6:39 PM | Сообщение # 4 |
Профессор
Группа: Проверенные
Сообщений: 916
Репутация: 134
Замечания: 20%
Статус: Offline
Город: Москва
| недавно токо выкинул все записи про прошлогодний ЕГЭ скажу по себе что там вообще все ЕГЭ ниочем.
444/500. МГУ ВМК
|
|
| |
paradoxxx | Дата: Пятница, 2011-04-22, 8:42 PM | Сообщение # 5 |
Магистр
Группа: Проверенные
Сообщений: 202
Репутация: 100
Замечания: 0%
Статус: Offline
| Да тут все опирается на логику человека и умение хоть не много раздумывать. И пару знаков из информатики выучить и все, 70 баллов обеспечено...
МАИ, 6 факультет, 2 курс
ксс ( 34 v ) css.megavolt220v.net:27018
|
|
| |
Kondigan | Дата: Пятница, 2011-04-22, 10:07 PM | Сообщение # 6 |
Академик
Группа: Проверенные
Сообщений: 1052
Репутация: 817
Замечания: 100%
Статус: Offline
| В том году особо не готовился и написал на 76 баллов
|
|
| |
Nikita27 | Дата: Пятница, 2011-04-22, 10:56 PM | Сообщение # 7 |
Профессор
Группа: Проверенные
Сообщений: 916
Репутация: 134
Замечания: 20%
Статус: Offline
Город: Москва
| я писал не готовясь в день рождения, написал на 90 баллов, на апеляцию было влом идти Добавлено (2011-04-22, 10:56 PM) --------------------------------------------- тем более что была олимпиада по инфе
444/500. МГУ ВМК
|
|
| |
BKirill | Дата: Четверг, 2011-05-19, 7:11 AM | Сообщение # 8 |
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Замечания: 0%
Статус: Offline
| Задание во вложении. Вроде работает, но сомневаюсь что то , так как не разобрался с предложенным ответом в учебнике и сделал все по-своему: Code //Тренировочная работа №4 //по ИНФОРМАТИКЕ //5 мая 2011 года // Вариант 2 // C4 uses crt; var al:array ['0'..'9'] of integer; br:array ['0'..'9'] of integer; min:integer; c:char; begin read(c); while c<>'.' do begin inc(al[c]); read(c); // Считаем количество используемых цифр у Алексея end; readln; read(c); while c<>'.' do begin inc(br[c]); read(c); // Считаем количество используемых символов у Бориса end;
for c:='0' to '9' do begin if (al[c]>br[c]) and (min=0) then begin inc(min); writeln('Алексей'); end; // Магия if (min=0) and (al[c]<br[c]) then begin inc(min); writeln('Борис'); end; // Букофки end; if (c='9') and (min=0) then writeln('Ничья'); end. PS Начинаю кстати поражаться нашим авторам , видел в ответе вещи следующие - использовали вместо моего for c:='0' ... конструкцию while c<>9 которую переделали под for прикрутив счетчик в конце цикла вот такого вида c:=chr(ord©+1); просто гениальное решение
Сообщение отредактировал BKirill - Четверг, 2011-05-19, 7:17 AM |
|
| |
uchu_inf | Дата: Четверг, 2011-05-19, 9:08 PM | Сообщение # 9 |
Абитуриент
Группа: Пользователи
Сообщений: 11
Репутация: 1
Замечания: 0%
Статус: Offline
| BKirill, давайте подробно разберем ваш алгоритм. Во-первых, в программе нет инициализации массивов и переменной min. (т.е. первоначально им не присвоены значения 0). В критериях при проверке пишут, что за это сразу снимают балл. Дальше. Предположим, что на вход программе были поданы следующие символы: 00222. и 01111. По предложенной программе выполнится самое первое условие (количество нулей Алексея больше, чем количество нулей Бориса), при этом выведется, что Алексей может составить наименьшее число (хотя это совсем неправильно), переменная min будет больше 0, и после этого в цикле ни одно условие не выполнится. Таким образом, программа дает неправильный ответ. Далее. При выходе из цикла идет проверка:if (c='9') and (min=0) then ... Но цикл for работает таким образом, что при выходе из него переменная с не будет иметь значения '9', это будет символ, следующий за девяткой, поэтому слово "Ничья" у вас не выведется никогда. При очень большом везении за эту задачу вам поставят 2 балла, но больше я склоняюсь к 1.
|
|
| |
VingardiumLeviossa | Дата: Пятница, 2011-05-20, 0:53 AM | Сообщение # 10 |
Почетный академик
Группа: Проверенные
Сообщений: 2273
Репутация: 1145
Замечания: 0%
Статус: Offline
Город: Москва
| Я тоже почти не готовилась. До 11 класса вообще ничего не делала, в 11 ходила на лекции на курсах. Дома не учила ничего. Написала на 80.
Сказали мне, что эта дорога меня приведет к океану смерти, и я с полпути повернул обратно. С тех пор всё тянутся передо мною кривые глухие окольные тропы...
|
|
| |
BKirill | Дата: Пятница, 2011-05-20, 9:38 AM | Сообщение # 11 |
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Замечания: 0%
Статус: Offline
| uchu_inf с комбинацией 00222. и 01111. полностью согласен , не все предусмотрел , спасибо. А вот с for вы уже ошибаетесь =) , цикл всегда присваивает включительно все значения от 0 до 9 так что в действительности все работает в варианте - Ничья . Если бы в одном из условий стоял Break , тогда бы да , согласен , цикл бы завершился и переменная c не достигла бы значения 9 , но вместо этого я использовал min . И еще один нюанс , согласно документации и словам разработчиков Pascal ABC , переменным всегда присваивается значение 0 по умолчанию. Специально писал им в поддержку и спрашивал =) Сейчас постараюсь похимичить с условиями и исправить вариант с нулями. + сейчас посмотрел критерии по оцениванию про инициализацию ни слова. в C2 , да , там есть строка - не инициализирована или не правильно инициализирована переменная. Это нужно для сравнивания и это понятно , например нас просят найти наименьший номер ячейки содержащий к примеру число большее чем или равное 200 , тогда да , нет вопросов min:=200 или просят найти наименьший номер ячейки содержащий отрицательное число , и опять не вопрос min:=0 и т.д. и т.п. Мы же не в 70х живем чтобы у нас были глюки подобные тем когда вместо ожидаемого нуля присваивается 7388747378347834783478. И опять же спорить не буду так как нет в городе адекватных преподавателей и никто меня не учил кроме google+вики. UPD: Не смог придумать иного условия , зашел в тупик в общем .. использовал конструкцию в которой находится сумма всех элементов и она оказалась конечно ошибочной . Сейчас пытаюсь не используя сортировки присвоить переменной типа string в порядке возрастания все карточки , затем используя val конвертировать и сравнить со значением другого игрока . Добавлено (2011-05-20, 9:34 Am) ---------------------------------------------
Code uses crt; var a,b:array ['0'..'9'] of integer; s1,s2:string; min,min2:integer; c:char; begin read(c); while c<>'.' do begin inc(a[c]); read(c); // Считаем количество используемых цифр у Алексея end; readln; read(c); while c<>'.' do begin inc(b[c]); read(c); // Считаем количество используемых символов у Бориса end; min:=0; min2:=0;
// Цикл направленный на присваивание переменным s1/s2 соответствующих карточек в порядке возрастания for c:='1' to '9' do begin // Проверка - использовалась ли цифра , в случае true , прибавить значение к s1 столько раз , сколько оно использовалось // и увеличить на 1 предохранитель min для Алексея , min2 для Бориса . if a[c]<>0 then for var i:=1 to a[c] do begin s1:=s1+c; inc(min); end; if b[c]<>0 then for var i:=1 to b[c] do begin s2:=s2+c; inc(min2); end; // Проверка , если к s1 или s2 прибавилось какое то значение и использовались карточки с 0 , то добавить нули которые использовались if (min=1) and (a['0']<>0) then begin for var i:=1 to a['0'] do begin s1:=s1+chr(48); end; min:=-maxint; // Присваиваем предохранителю максимальное отрицательное число чтобы больше не выводить нулей end; if (min2=1) and (b['0']<>0) then begin for var i:=1 to b['0'] do begin s2:=s2+chr(48); end; min2:=-maxint; end; end; min:=StrToInt(s1); // Минимальное число Алексея min2:=StrToInt(s2); // Минимальное число Бориса
// Конечная проверка // if min=min2 then writeln('Ничья') else if min < min2 then writeln('Алексей') else writeln('Борис'); end.
Полностью изменил алгоритм, теперь действительно все работает на 100% . Жду адекватной критики в свой адрес =) Добавлено (2011-05-20, 9:38 Am) --------------------------------------------- Один из критериев , 3 балла . Как я понимаю - ответ находится путем перестановки считанных символов , это относится к моему последнему варианту ? Code Программа работает верно, но входные данные запоминаются в массиве символов или строке, или входные данные считываются несколько раз. Возможно, каждая цифра обрабатывается явным образом (10 операторов IF, в том числе с использованием многоточия, или оператор CASE, содержащий 10 вариантов). Возможно, сохраненные входные данные сортируются одним из стандартных алгоритмов сортировки путем перестановки входных символов, или ответ находится путем перестановки считанных символов. Допускается наличие от одной до трех синтаксических ошибок, описанных выше. Три балла также выставляется, если в эффективной программе, удовлетворяющей критериям выставления 4 баллов, есть одна ошибка, не относящаяся к алгоритму решения задачи в целом, например, ошибка в принципиально верно организованном вводе данных.
Сообщение отредактировал BKirill - Пятница, 2011-05-20, 8:58 AM |
|
| |
uchu_inf | Дата: Пятница, 2011-05-20, 7:37 PM | Сообщение # 12 |
Абитуриент
Группа: Пользователи
Сообщений: 11
Репутация: 1
Замечания: 0%
Статус: Offline
| BKirill! Приступаю к конструктивной критике))) Во-первых, sorry за цикл for. Это в старых версиях Бейсика при выходе из него переменная счетчик превышала(или становилась меньше, в зависимости от шага) его конечное значение. Бывает и на старуху проруха)) Во-вторых, по поводу инициализации. Я на эту тему разговаривала с преподавателями вузов, которые организуют различные дистанционные олимпиады. Они сказали, что как языки, так и компиляторы бывают разные, и если вы уж хотите добиться корректного исполнения алгоритма всегда, то не так уж трудно ее (инициализацию) осуществить, т.е. она обязательна. А поскольку у нас в городе председателем экспертной комиссии по проверке информатики является вузовский профессор, то я своим ученикам говорю, что это необходимый атрибут. Данный факт является нормальным стилем программирования. Я сама уже 3 года эксперт, так что, поверьте, знаю, что говорю. Мы когда приходим, нам говорят: помимо тех критериев, которые написаны, вы должны обращать внимание вот на то и на это. А некоторые критерии из предложенных вообще могут опускаться. Так что совет всем, кто смотрит этот форум: не ленитесь написать в С4 лишнюю пару строк. В-третьих, это что за строчка: for var i:= и т.д.????? В-четвертых, запустила вашу программу с такими данными:12021. и 22001. Не работает! Наконец, поняла: когда вы проверяете if (min=1) and (a['0']<>0) then ... , min , минимум может быть не равен 1 (в приведенном примере количество единиц равно 2). Поэтому лучше всего использовать min>0. С этим условием все заработало)) Но все-таки за такое решение максимум баллов могут не дать, т.к. оно не самое рациональное. Хотя, в принципе, все будет зависеть от эксперта)). А вообще хочу обратиться ко всем: не стесняйтесь, задавайте вопросы, по мере возможности отвечу и помогу, т.к. до экзамена осталось совсем чуть-чуть)
|
|
| |
BKirill | Дата: Пятница, 2011-05-20, 11:06 PM | Сообщение # 13 |
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Замечания: 0%
Статус: Offline
| Опять у меня промах с min и min2 .. спасибо ! Все что мог описал , работает . Только не понятно как обычный абитуриент вывел бы такую закономерность имея под рукой только ручку и бумагу . Code uses crt; const n: array[0..6] of string = ('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'); m: array[1..12] of string = ('января','февраля', 'марта' , 'апреля', 'мая', 'июня' ,'июля', 'августа', 'сентября' ,'октября' ,'ноября','декабря'); m2: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31); var s,dd:integer; // Для чтение дня + счетчик дней с момента начала года days:array[0..6] of integer; // Счетчик продаж по дням недели mtext:string; // Для чтения месяца c:char; // Для пропуска пробела
begin readln(s); // колличество строк. for var i:=1 to s do begin readln(dd,c,mtext); // пропуск пробела через "c" и считывание данных. for var d:=1 to 12 do // цикл определения введеного месяца begin s:=0; // Обнуляем чтобы второй раз не прибавлять if m[d]=mtext then // если месяц найден begin for var z:=1 to (d-1) do // считаем сколько прошло дней с начала года begin s:=s+m2[z]; end; s:=s+dd; inc(days[(s+5) mod 7]); // формула Зеллера + смещение на 5 позиций так как год начинается с субботы end; end; end; s:=-1; for var i:=0 to 6 do begin if days[i]>s then s:=days[i]; // Поиск максимума end; for var i:=0 to 6 do begin if days[i]=s then writeln(n[i]); // Поиск дней когда было продано одинаковое колличество end;
end.
Сообщение отредактировал BKirill - Воскресенье, 2011-05-22, 12:21 PM |
|
| |
uchu_inf | Дата: Пятница, 2011-05-20, 11:25 PM | Сообщение # 14 |
Абитуриент
Группа: Пользователи
Сообщений: 11
Репутация: 1
Замечания: 0%
Статус: Offline
| Кстати, еще очень существенное замечание по задаче: не надо из строкового представления переводить в целочисленное. Строки с таким же успехом сравниваются, а при переводе можно потерять число... Если, например, количество карточек будет равно 100, то стозначное целое число в типе integer явно не сможет храниться) Добавлено (2011-05-20, 11:25 PM) --------------------------------------------- Да, и с локальным объявлением переменных не стоит экспериментировать.... Либо же про это обязательно указать в комментариях.
|
|
| |
BKirill | Дата: Суббота, 2011-05-21, 1:42 PM | Сообщение # 15 |
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Замечания: 0%
Статус: Offline
| По моему это очень эффективно так как нас просят использовать в программе как можно меньше памяти . Если интересно то вот небольшая иллюстрация что и где висит , включая локальные переменные . Кстати сейчас искал информацию о неинициализированных глобальных переменных , так вот в любом источнике всегда и везде звучит одна и тажа фраза - Quote Pascal guarantees default values (e.g. zero for integers) . А вот насчет локальных переменных уже другой вопрос , связанный с тем что под stack/heap выделяется windows небольшое количество памяти и при резком скачке/заполнении этого обьема и одновременном увеличении может присвоится произвольное значение . PS Спасибо что напомнили про сравнение строк , совсем все забыл уже ..
Сообщение отредактировал BKirill - Суббота, 2011-05-21, 1:58 PM |
|
| |
|
|
|