Страница 1 из 1

Олимпиада для первокурсников

СообщениеДобавлено: 08 сен 2011, 09:48
Vladislav_133
В ближайшее время, вероятно на следующей неделе на первом курсе факультета информатики будет проводиться олимпиада по программированию. В данной теме будет помещено несколько примерных задач.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 09 сен 2011, 10:06
Vladislav_133
Разминка на сообразительность.

Позавчера Васе было 17 лет. В следующем году будет 20.

Какое сегодня число?

Re: Олимпиада для первокурсников

СообщениеДобавлено: 18 сен 2011, 18:50
Vladislav_133
Я надеюсь, что те, кто попытался решить задачку, догадался, что ответ к ней 1 января.
Какое отношение это имеет к программированию? - спросите вы. Самое прямое. При написании программ, прежде чем написать код, приходится привести данные к удобному для программирования виду. И вот подобные задачки на сообразительность встречаются довольно часто.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 18 сен 2011, 19:31
Vladislav_133
Ликбез-напоминание.
(Надеюсь, преподаватели, ведующие программирование на первых-вторых курсах, помогут студентам разобраться с представленным ниже материалом. )

Практически любую программу можно считать черным ящиком: есть входная информация, есть алгоритм, который преобразует эту входную информацию, есть выходная информация.

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

1. Создаваемые программы должны работать в консольном режиме (консольные приложения).
2. Программа оперирует двумя текстовыми файлами. Назовем их input.txt (входная информация) и output.txt (выходная информация). Названия файлов могут быть произвольными, главное, чтобы они были текстовыми.
3. После компилирования получается исполняемый модуль. Пусть он называется prog.exe. Тогда для проверки правильности работы программы набирается следующая командная строка prog.exe <input.txt >output.txt . После запуска файл output.txt должен содержать правильную информацию (согласно условию задачи).
4. Для проверки решения, необходимо создать несколько разных входных файлов, чтобы убедиться, что программа работает без ошибок. Например, если ваша программа ищет все делители целого числа, нужно проверить ее на разных числах: четных, не четных, простых, достаточно больших, а также частных числах: 0, 1, 2.

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

Re: Олимпиада для первокурсников

СообщениеДобавлено: 19 сен 2011, 18:19
Vladislav_133
Провел сегодня лекцию для первого курса. Занятий я там не веду, просто хотелось познакомиться, узнать по ближе и, по возможности, стимулировать программисткие интересы. Общее впечатление:
1. При первом взгляде понравились все. Есть желание работать, есть желание узнавать новое. Хорошо, если это рвение не пропадет в рутинных занятиях.
2. Есть люди. которым интересно программировать. За одно занятие выявить их способности не возможно, тем более, что я ставил задачу иную - познакомить первокурсников с некоторыми особенностями олимпиадного программирования.

Успел, конечно, не все (далеко не все), так как технике и технологии программирования их, к сожалению не обучают. А по моему глубокому убеждению именно это и может заинтересовать многих, с этого и надо начинать. Но это долгий спор и надо об этом говорить в другой ветке.

В целом доволен. Буду доволен вдвойне, если хотя бы некоторые из присутствующих на лекции объявятся на нашем форуме.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 20 сен 2011, 07:40
xdsl
К сожалению, для большинства нынешних первокурсников "черным ящиком" с загадочным содержимым является консоль. Поэтому фраза
Тогда для проверки правильности работы программы набирается следующая командная строка prog.exe <input.txt >output.txt .
для них ассоциируется с мистическим шаманским камланием у горы духов предков. То есть однозначно непонятно, но некоторым - интересно и даже страшно ;)

Re: Олимпиада для первокурсников

СообщениеДобавлено: 20 сен 2011, 12:37
Vladislav_133
Их перестали учить работе с консолью. Пока работали с far все было более менее. Сейчас, кажется, эту программу не изучают (может я ошибаюсь). А ведь это прямой мостик к консоли unix-совой. Мне бы хотелось, конечно, с преподавателями, кто эти вещи преподает, это обсудить. Хотя бы здесь на форуме. Это все очень важные элементы профессионализма, которые наши студенты могут не получить.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 20 сен 2011, 20:08
Vladislav_133
Две задачи для разминки.

Задача 1.
Дан текстовый файл произвольного размера. Вывести символ стоящий в строке n, на к-м месте.

Задача 2.
Дан текстовый файл произвольного размера. Вывести символ, стоящий на расстоянии N от начала.

В обеих задачах речь идет о текстовых символах, управляющие коды в расчет не беруться.

Решения, будут позже. Задачи, скорее для второго курса. Но быть может первый курс это тоже заинтересует.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 21 сен 2011, 08:08
Alla
Сейчас привычнее не FAR, а Total, на первом курсе его обязательно изучаем, даем сравнительные характеристики. Мы же воспитывались на Dos и наш любимый Norton Commander еще помним :). Разговаривая со студентами точно знаю, что на занятиях Кудрявцева А.В. они работают в командной строке.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 21 сен 2011, 09:36
Vladislav_133
Я открыл тему об обучении работе в ОС.
viewtopic.php?f=39&p=4609#p4609

Прошу всех туда.

Re: Олимпиада для первокурсников

СообщениеДобавлено: 25 сен 2011, 18:45
Vladislav_133
Ликбез по потоковому вводу выводу. Первому курсу читать обязательно.
Пусть во входном файле (input.txt) хранятся три числа a,b,c. По одному в каждой строке.
Написать программу, котоаря бы получала на входе этот файл, и выдавала бы в другой файл (например output.txt)
максимальное из трех чисел.
Вот программа

Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка pascal
var
    a,b,c:integer;
begin
    readln(a); readln(b); readln(c);
    if(a>b) then
    begin
       if(a>c) then
       begin
             writeln(a);
       end
       else
       begin
            writeln(c);
       end;
    end else
    begin
            if(b>c) then
            begin
                writeln(b);
             end
             else
             begin
                writeln(c);
             end;
    end
end.


Пусть программа называется prog.pas. Откомпилируем ее командой
Код: Выделить всё
fpc prog.pas
.
Получим исполнительный модуль. В Windows это будет prog.exe.

Для проверки этого модуля заготовим текстовый файл. Содержащий три числа по одному в каждой строке.
Пусть файл называется input.txt.
Выполним следующую команду

Код: Выделить всё
prog.exe <input.txt >output.txt


В файле output.txt мы получим результат - максимальное из трех чисел.

P.S.
Может возникнуть вопрос. А что, если числа будут стоять не по одному в каждой строке, а в одной строке через пробел.
Например так
Код: Выделить всё
3 4 88

тогда в программе вместо строки
Код: Выделить всё
readln(a); readln(b); readln(c);

у вас будет строка
Код: Выделить всё
readln(a,b,c);

Re: Олимпиада для первокурсников

СообщениеДобавлено: 27 сен 2011, 14:46
Vladislav_133
Продолжаем наш курс олимпиадного программирования. Первому курсу читать обязательно!
Очень часто, мы не знаем сколько строк во входном файле и нам нужно проанализировать содержимое этого файла.
Ниже представлена программа, показывающая общий подход того, как можно просматривать текстовый файл любого объема и при необходимости анализировать его содержимое.
Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка pascal
var
    s:ansistring;
begin
    while(not eof) do
    begin
        readln(s);
{здес что-то делаем}
{например, анализируем строку}
{выполняем какие-то действия}
{------------------}
{выводим строку s или что-то другое}
        writeln(s);
    end;
end.

Программа полностью функциональна. Попробуйте ее откомпилировать.
Получившийся исполняемый модуль можно использовать для получения копии текстового файла.
Пусть исполняемый модуль имеет имя prog.exe. Тогда
Код: Выделить всё
pprog.exe <input.txt >output.txt

и мы получаем копию текстового файла в output.txt.

P.S.
Программу можно откомпилировать и в Unix и в Windows. Все будет работать.