C2 и C4 - ФОРУМ ПОСТУПИМ.РУ

Главная
Поиск репетитора
Коллективный блог
публикаций
Форум (обсуждаем ЕГЭ 2018)
тем и сообщений
Для учебы









Поделиться страницей:

Войти
или
Зарегистрироваться
Новые сообщения · Участники · Правила форума · Поиск по форуму · RSS
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Архив - только для чтения
ФОРУМ ПОСТУПИМ.РУ » АРХИВ (ТОЛЬКО ДЛЯ ЧТЕНИЯ) » ЕГЭ 2011 по ИНФОРМАТИКЕ » C2 и C4
C2 и C4
JarPIДата: Воскресенье, 2011-04-17, 2:29 PM | Сообщение # 1
Студент
Группа: Пользователи
Сообщений: 55
Репутация: -6
Награды: 1
Замечания: 0%
Статус: Offline
Город: Мухосранск
Давайте соберем в этой теме разные типы заданий C2 и C4.
Оформление
1)С2 or C4
2)Условие
3)Код программы

P.S. тема создана,так как наблюдается большое кол-во задротов на форуме,из них n-ое кол-во сдают информатику, а данный топик будет приносить только пользу(проводите время с толком).

 
KaDeaTДата: Воскресенье, 2011-04-17, 2:58 PM | Сообщение # 2
Нобелевский лауреат
Группа: Модераторы
Сообщений: 11169
Репутация: 1436
Награды: 136
Замечания: 0%
Статус: Offline
Рад бы помочь, да не буду =(((

Добавлено (2011-04-17, 2:58 PM)
---------------------------------------------
А так то С2 вообще фигня ооочень легкая =)))


Обучение программированию
Репетиторы в Москве
 
АфанасийДата: Среда, 2011-04-20, 8:21 AM | Сообщение # 3
Студент
Группа: Пользователи
Сообщений: 43
Репутация: 6
Награды: 0
Замечания: 0%
Статус: Offline
Чёрт!
У меня есть много нарешанных заданий С2, но к ним нет условия.
Сейчас начал решать С4.
Позже выложу, но я туговат в этой области, ошибки возможно будут.
 
Nikita27Дата: Четверг, 2011-04-21, 6:39 PM | Сообщение # 4
Профессор
Группа: Проверенные
Сообщений: 927
Репутация: 134
Награды: 7
Замечания: 20%
Статус: Offline
Город: Москва
недавно токо выкинул все записи про прошлогодний ЕГЭ angry angry angry
скажу по себе что там вообще все ЕГЭ ниочем.


444/500. МГУ ВМК
 
paradoxxxДата: Пятница, 2011-04-22, 8:42 PM | Сообщение # 5
Магистр
Группа: Проверенные
Сообщений: 202
Репутация: 100
Награды: 1
Замечания: 0%
Статус: Offline
Да тут все опирается на логику человека и умение хоть не много раздумывать. И пару знаков из информатики выучить и все, 70 баллов обеспечено...

МАИ, 6 факультет, 2 курс

ксс ( 34 v ) css.megavolt220v.net:27018
 
KondiganДата: Пятница, 2011-04-22, 10:07 PM | Сообщение # 6
Академик
Группа: Проверенные
Сообщений: 1057
Репутация: 817
Награды: 17
Замечания: 100%
Статус: Offline
В том году особо не готовился и написал на 76 баллов
 
Nikita27Дата: Пятница, 2011-04-22, 10:56 PM | Сообщение # 7
Профессор
Группа: Проверенные
Сообщений: 927
Репутация: 134
Награды: 7
Замечания: 20%
Статус: Offline
Город: Москва
я писал не готовясь в день рождения, написал на 90 баллов, на апеляцию было влом идти

Добавлено (2011-04-22, 10:56 PM)
---------------------------------------------
тем более что была олимпиада по инфе


444/500. МГУ ВМК
 
BKirillДата: Четверг, 2011-05-19, 7:11 AM | Сообщение # 8
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Награды: 0
Замечания: 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); просто гениальное решение

Прикрепления: 7021990.png(71.4 Kb)


Сообщение отредактировал BKirill - Четверг, 2011-05-19, 7:17 AM
 
uchu_infДата: Четверг, 2011-05-19, 9:08 PM | Сообщение # 9
Абитуриент
Группа: Пользователи
Сообщений: 11
Репутация: 1
Награды: 0
Замечания: 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
Репутация: 1135
Награды: 50
Замечания: 0%
Статус: Offline
Город: Москва
Я тоже почти не готовилась. До 11 класса вообще ничего не делала, в 11 ходила на лекции на курсах. Дома не учила ничего. Написала на 80.

Сказали мне, что эта дорога меня приведет к океану смерти, и я с полпути повернул обратно. С тех пор всё тянутся передо мною кривые глухие окольные тропы...
 
BKirillДата: Пятница, 2011-05-20, 9:38 AM | Сообщение # 11
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Награды: 0
Замечания: 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
Замечания: 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
Замечания: 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.
Прикрепления: 6648287.png(64.2 Kb)


Сообщение отредактировал BKirill - Воскресенье, 2011-05-22, 12:21 PM
 
uchu_infДата: Пятница, 2011-05-20, 11:25 PM | Сообщение # 14
Абитуриент
Группа: Пользователи
Сообщений: 11
Репутация: 1
Награды: 0
Замечания: 0%
Статус: Offline
Кстати, еще очень существенное замечание по задаче: не надо из строкового представления переводить в целочисленное. Строки с таким же успехом сравниваются, а при переводе можно потерять число... Если, например, количество карточек будет равно 100, то стозначное целое число в типе integer явно не сможет храниться)

Добавлено (2011-05-20, 11:25 PM)
---------------------------------------------
Да, и с локальным объявлением переменных не стоит экспериментировать.... Либо же про это обязательно указать в комментариях.

 
BKirillДата: Суббота, 2011-05-21, 1:42 PM | Сообщение # 15
Студент
Группа: Пользователи
Сообщений: 31
Репутация: 2
Награды: 0
Замечания: 0%
Статус: Offline
По моему это очень эффективно так как нас просят использовать в программе как можно меньше памяти .
Если интересно то вот небольшая иллюстрация что и где висит , включая локальные переменные .
Кстати сейчас искал информацию о неинициализированных глобальных переменных , так вот в любом источнике всегда и везде звучит одна и тажа фраза -
Quote
Pascal guarantees default values (e.g. zero for integers)
.
А вот насчет локальных переменных уже другой вопрос , связанный с тем что под stack/heap выделяется windows небольшое количество памяти и при резком скачке/заполнении этого обьема и одновременном увеличении может присвоится произвольное значение .
PS Спасибо что напомнили про сравнение строк , совсем все забыл уже ..
Прикрепления: 8631807.gif(11.0 Kb)


Сообщение отредактировал BKirill - Суббота, 2011-05-21, 1:58 PM
 
ФОРУМ ПОСТУПИМ.РУ » АРХИВ (ТОЛЬКО ДЛЯ ЧТЕНИЯ) » ЕГЭ 2011 по ИНФОРМАТИКЕ » C2 и C4
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:




© 2006-2018 Поступим.ру Информация:
О проекте
Контакты

Регистрация на сайте
Статистика сообщества
Пользовательское соглашение
Разделы:
Поиск репетитора
Форум сообщества
Коллективный блог
Материалы для учебы
RSS:
RSS форума
RSS блога