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

Знаковые события в научной и общественной жизни вуза.

Модератор: xdsl

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

Сообщение Vladislav_133 08 сен 2011, 09:48

В ближайшее время, вероятно на следующей неделе на первом курсе факультета информатики будет проводиться олимпиада по программированию. В данной теме будет помещено несколько примерных задач.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 09 сен 2011, 10:06

Разминка на сообразительность.

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

Какое сегодня число?
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 18 сен 2011, 18:50

Я надеюсь, что те, кто попытался решить задачку, догадался, что ответ к ней 1 января.
Какое отношение это имеет к программированию? - спросите вы. Самое прямое. При написании программ, прежде чем написать код, приходится привести данные к удобному для программирования виду. И вот подобные задачки на сообразительность встречаются довольно часто.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 18 сен 2011, 19:31

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

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

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

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

Пока все. Думаю, что предварительно (до самой олимпиады) надо провести очное занятие по программированию. Завтра в деканате решим, когда будет занятие.
Вложения
DRMBlackBoxBig.jpg
Черный ящик
DRMBlackBoxBig.jpg (3.28 Кб) Просмотров: 9119
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 19 сен 2011, 18:19

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

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

В целом доволен. Буду доволен вдвойне, если хотя бы некоторые из присутствующих на лекции объявятся на нашем форуме.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 20 сен 2011, 07:40

К сожалению, для большинства нынешних первокурсников "черным ящиком" с загадочным содержимым является консоль. Поэтому фраза
Тогда для проверки правильности работы программы набирается следующая командная строка prog.exe <input.txt >output.txt .
для них ассоциируется с мистическим шаманским камланием у горы духов предков. То есть однозначно непонятно, но некоторым - интересно и даже страшно ;)
xdsl
 
Сообщения: 1236
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 20 сен 2011, 12:37

Их перестали учить работе с консолью. Пока работали с far все было более менее. Сейчас, кажется, эту программу не изучают (может я ошибаюсь). А ведь это прямой мостик к консоли unix-совой. Мне бы хотелось, конечно, с преподавателями, кто эти вещи преподает, это обсудить. Хотя бы здесь на форуме. Это все очень важные элементы профессионализма, которые наши студенты могут не получить.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 20 сен 2011, 20:08

Две задачи для разминки.

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

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

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

Решения, будут позже. Задачи, скорее для второго курса. Но быть может первый курс это тоже заинтересует.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Alla 21 сен 2011, 08:08

Сейчас привычнее не FAR, а Total, на первом курсе его обязательно изучаем, даем сравнительные характеристики. Мы же воспитывались на Dos и наш любимый Norton Commander еще помним :). Разговаривая со студентами точно знаю, что на занятиях Кудрявцева А.В. они работают в командной строке.
Величайшая слава в том, чтобы уметь подняться каждый раз, когда падаешь… (Конфуций)
Alla
Elite
 
Сообщения: 156
Зарегистрирован: 21 янв 2009, 14:56
Откуда: Кафедра ПИЭ
Полное имя: Каткова А.Л.

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

Сообщение Vladislav_133 21 сен 2011, 09:36

Я открыл тему об обучении работе в ОС.
viewtopic.php?f=39&p=4609#p4609

Прошу всех туда.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 25 сен 2011, 18:45

Ликбез по потоковому вводу выводу. Первому курсу читать обязательно.
Пусть во входном файле (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);
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение Vladislav_133 27 сен 2011, 14:46

Продолжаем наш курс олимпиадного программирования. Первому курсу читать обязательно!
Очень часто, мы не знаем сколько строк во входном файле и нам нужно проанализировать содержимое этого файла.
Ниже представлена программа, показывающая общий подход того, как можно просматривать текстовый файл любого объема и при необходимости анализировать его содержимое.
Подсветка синтаксиса: [ Загрузить ] [ Скрыть ]
Подсветка синтаксиса языка 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. Все будет работать.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.


Вернуться в Конференции и семинары, олимпиады и форумы, выставки и конкурсы в ШГПУ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron