Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
Информация для соискателей лицензии на деятельность, связанную с использованием возбудителей инфекционных заболеваний и деятельность в области исполь...полностью>>
'Урок'
Мета: познайомити учнів з поняттям „інформатика”, на основі їх життєвого досвіду сформувати поняття „інформація”, „повідомлення” та „шум”, вчити розр...полностью>>
'Документ'
- Уметь в условиях развития науки и изменяющейся социальной практики самостоятельно провести переоценку накопленного опыта, провести анализ своих воз...полностью>>
'Программа'
Стажером в Intel может быть студент дневного отделения ВУЗа начиная с 3-го курса (включая магистратуру и аспирантуру), который обучается по одной из с...полностью>>

Правила проведения олимпиады Приведем и прокомментируем наиболее важные правила проведения Всероссийской олимпиады по информатике. Многие из этих правил справедливы также и для большинства региональных олимпиад

Главная > Лекция
Сохрани ссылку в одной из сетей:

Лекция 2.

Правила проведения олимпиады

Приведем и прокомментируем наиболее важные правила проведения Всероссийской олимпиады по информатике. Многие из этих правил справедливы также и для большинства региональных олимпиад.

  1. Олимпиада проводится в два тура. Продолжительность каждого тура 5 часов. На каждом из туров для решения задач участнику предоставляется персональный компьютер типа IBM PC со следующим программным обеспечением: Turbo Pascal 7.0, Borland C++ 3.1.

{комментарии}

Из первого пункта правил становится ясно, что, во-первых, оба тура олимпиады, так называемые, практические. Во-вторых, для решения задач предлагается использовать лишь один из двух языков программирования. Такое положение полностью соответствует международной практике, хотя на российских олимпиадах соблюдается не всегда строго. Basic исключен из числа официальных языков программирования олимпиады, так как желание программировать только на нем высказывают очень небольшое число участников олимпиад высокого уровня, при профессиональной разработке программ он практически не используется (в данном случае Visual Basic мы не рассматриваем), кроме того, решение задач с использованием этого языка иногда затруднено по сравнению с Pascal и C. На наш взгляд, заранее объявляя об ограничениях на использование программного обеспечения, жюри и оргкомитет олимпиады способствуют практике изучения тех языков программирования в российских школах, которые позволят ребятам добиваться не только успехов в различных соревнованиях, но и некоторым из них стать высокими профессионалами в области информатики и программирования. Мы считаем, что именно язык программирования Pascal, как никакой другой, позволяет за короткий срок отлаживать довольно сложные программы, что особенно важно в условиях практического тура любой олимпиады, но и не менее значимо при изучении информатики в школе. Использование языка C (C++) на олимпиаде стоит приветствовать лишь тогда, когда участник владеет им почти в совершенстве, практически не допуская ошибок при записи решения задачи на C, часть из которых невозможно обнаружить на этапе компиляции программы. Кроме того, при программировании на C могут возникнуть сложности с настройкой компилятора, а в режиме олимпиады даже минута, потраченная не на собственно решение задач, может сказаться на результатах участника. Хотя, справедливости ради стоит сказать, что на международной олимпиаде процент участников, использующих язык программирования C (C++) достаточно высок, причем многие из них выступают более чем успешно, что опять же свидетельствует о высокой квалификации таких школьников, а размер кода программ на C (не следует путать с размером исполняемого файла) часто меньше кода на языке Pascal. В заключение заметим, что предоставляемое на олимиадах программное обеспечение (операционная система, тип и версия компиляторов, среда программирования) со временем естественно может изменяться, как это и произошло на последней международной олимпиаде по информатике в Финляндии (см. №37/2001).

{\комментарии}

  1. На каждом из туров участникам будет предложено решить несколько задач. Вопросы по условиям задач можно задавать только в течение первого часа тура. Вопросы следует задавать только в письменном виде и формулировать их так, чтобы на них можно было ответить “да” или “нет”.

{комментарии}

Такая практика сложилась исторически и применяется на международных олимпиадах. Строгое соблюдение данного пункта правил иногда вызывает у ряда участников некоторые сложности. Так, школьникам зачастую тяжело именно в начале тура пытаться понять нюансы в формулировках сразу всех задач. Кроме того, часто вопросы по условию возникают лишь тогда, когда участник приступил к решению той или иной задачи. Поэтому немаловажным является умение с первого раза внимательно прочитать условие любой задачи, выделяя не ясные для себя места в тексте. Умение грамотно сформулировать вопрос, допускающий один из двух вариантов ответа, также зачастую у школьников отсутствует. Заметим, что при ответе на большинство задаваемых вопросов члены жюри используют фразу “без комментариев”. Это означает, что либо ответ на вопрос все же содержится в формулировке задачи и его следует искать самостоятельно, либо вопрос фактически касается уже способов ее решения и жюри не комментирует различные соображения участников по этому поводу.

{\комментарии}

  1. Во время тура не допускается использование личных дискет, калькуляторов, электронных записных книжек, пейджеров, мобильных телефонов, а также учебной литературы и личных записей, сделанных до начала тура1.

{сноска}

1Последнее ограничение применялось на Всероссийской олимпиаде по информатике 2001 года.

{\сноска}

{комментарии}

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

{\комментарии}

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

{комментарии}

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

{\комментарии}

  1. В решениях категорически запрещается:

  • использовать расширенную память;

  • использовать ассемблерные вставки;

  • создавать файлы и каталоги во время работы программы;

  • читать данные откуда-либо, кроме как из входного файла и записывать их куда-либо, кроме выходного файла;

  • читать и записывать вектора прерываний;

  • производить любые другие действия, нарушающие работу проверяющей системы во время тестирования.

{комментарии}

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

{\комментарии}

  1. Для решения разных задач могут использоваться разные языки программирования. По каждой задаче на проверку должны быть сданы два файла — исходный текст решения и соответствующий ему исполняемый файл (файл с расширением exe). Если программа написана на языке C или C++, то она должна быть скомпилирована в модели памяти large. Ваша программа не должна использовать созданные вами внешние модули. После окончания тура и сдачи работы вносить какие-либо изменения в текст решения не допускается. Файлы с решениями могут быть скопированы на личную дискету участника дежурным преподавателем после окончания тура.

{комментарии}

Из данного правила следует, что проверка решения задачи производится в основном путем тестирования созданного участником во время тура исполняемого файла. Однако жюри оставляет за собой право перекомпилировать решения участников, в исключительных случаях это делается по просьбе школьников с разрешения жюри во время тестирования. Текст же решения с целью оценки используемых в нем алгоритмов жюри не анализируется, проверка осуществляется путем запуска программы на различных тестах. Так было далеко не всегда, однако в последнее десятилетие это стало нормой проведения всех практических туров олимпиад по информатике и программированию различного уровня2. Достаточно строгим является правило, согласно которому текст программы после окончания тура исправлениям не подлежит, даже если ошибки в программе незначительны (иногда требуется исправить всего один символ) или задача практически решена, но нарушен формат выходных данных. В противном случае довольно сложно определить, какие же именно исправления можно считать допустимыми. В последние годы такое правило неуклонно соблюдается и практически не вызывает возражений со стороны как участников, так и их руководителей. Ограничение же на модель памяти при использовании языка программирования C является довольно искусственным и введено лишь потому, что данная модель памяти наиболее близка к модели памяти языка Turbo Pascal, что опять же ставит участников в равные условия при решении задач. На международных олимпиадах такое ограничение отсутствует. Копирование решения участником на собственную дискету в ряде случаев позволяет ему вместе с руководителем найти ошибки и разобраться в особенностях работы программы до окончания олимпиады. Это существенно снижает количество подаваемых в жюри апелляций.

{сноска}

2О принципах оценки программ с помощью их тестирования можно прочитать в №34/2001.

{\сноска}

{\комментарии}

  1. Проверка решений осуществляется после окончания тура и проводится в присутствии участника (а по желанию и руководителя). По результатам тестирования заполняется лист проверки с результатами по каждому тесту. Ваша программа на одном и том же тесте должна всегда выдавать одинаковые результаты. Если с результатами проверки участник не согласен, то он вносит свои замечания в лист проверки.

{комментарии}

Проверка решения в присутствии участника говорит об открытости работы жюри на этапе тестирования. Такой подход снимает множество вопросов относительно полученных за решение той или иной задачи баллов. Поэтому его применение можно рекомендовать для олимпиад любого уровня, начиная со школьной. На последней, а также районной олимпиаде, участники зачастую получают за решение той или иной задачи нулевые баллы просто потому, что их решение просто не удалось запустить или файл с решением оказался не найденным. А ошибки в названиях файлов с решениями, входными и выходными данными, например на школьной олимпиаде, не должны оказаться для ребят фатальными. Но определить, что причины неработоспособности программы именно в этом, зачастую можно только лишь с помощью ее автора. Требование же стабильности работы программы имеет следующий смысл. Различные результаты работы программы на одном и том же тесте в большинстве случаев объясняются либо ошибками в ее работе (например, если значения каких-либо переменных в программе явным образом не проинициализированы, то работа исполняемого файла зависит от того, чем было заполнено содержимое используемой программой при запуске оперативной памяти), либо использованием датчика случайных (а на самом деле псевдослучайных) чисел. Причем правилами олимпиады использование случайных чисел как таковых не возбраняется. Просто программа должна применять датчик так, чтобы на одних и тех же входных данных, генерировалась последовательность из одних и тех же случайных чисел. Например, в языке Turbo Pascal этого легко добиться, если не использовать в программе процедуру randomize. Кроме того, генератор псевдослучайных чисел можно запрограммировать и самостоятельно. При нарушении указанного правила жюри оставляет за собой право запустить программу несколько раз и засчитать худший из показанных ею результатов.

{\комментарии}

  1. Ваши решения будут проверяться на компьютерах с одинаковой тактовой частотой, возможно не совпадающей с тактовой частотой компьютеров, предоставленных в ваше распоряжение на соревнованиях. При тестировании вам будет доступно не менее 350 килобайт динамической памяти. Для сравнения быстродействия тестирующего компьютера с вашим вам будет во время тура предоставлена специальная программа, которая на тестирующем компьютере работает ровно 5 секунд.

{комментарии}

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

{\комментарии}

Порядок решения олимпиадных задач

Попробуем теперь сформулировать уже неформальные правила поведения на практически любой личной олимпиаде по информатике, которые могут помочь школьникам, особенно участвующим в ней впервые, показать максимально возможный результат. Большинство из предлагаемых советов не зависят от языка программирования, на котором школьник решает олимпиадные задачи, однако фрагменты программ будут приведены на языке Turbo Pascal, как наиболее распространенном среди участников российских олимпиад. Очевидно, что приведенные ниже “правила” несут под собой лишь рекомендательный характер, особенно это касается порядка в котором они перечислены, и могут быть переработаны как самим учеником, так и его руководителем.

  1. В самом начале тура полезно набить приведенную ниже универсальную заготовку для решения олимпиадной задачи (она представляет из себя работающую программу!!!), особое внимание следует обратить на директивы компилятора, приведенные в образце. С помощью команды <Ctrl+O O> текущие директивы компилятора можно записать в начале текста программы и исправить те из них, которые не соответствуют приведенным.

{$A+,B-,D+,E+,F+,G-,I+,L+,N+,O-,P-,Q+,R+,S+,T+,V+,X+,Y+}

{$M 65520,0,655360}

var

i,j,k:longint;

procedure readdata;

begin

assign(input,'');

reset(input);

end;

procedure outdata;

begin

assign(output,'');

rewrite(output);

close(output)

end;

procedure initial;

begin

fillchar(i,?,0);{см. лекцию 3}

end;

procedure run;

begin

end;

begin

readdata;

initial;

run;

outdata

end.

Далее можно скопировать эту заготовку столько раз, сколько задач предложено на туре и сразу назвать каждый файл так, как это требуется по условиям олимпиады. В результате вам не придется при переходе от решения одной задачи к другой начинать работу с нуля (а попытка править текст с решением одной задачи для ускорения набора текста другой ведет только к порождению ошибок, на исправление которых будет потрачено гораздо больше времени). В разделе OPTIONS\enviroment\preferences среды программирования Turbo Pascal полезно установить параметр Auto save [X]Editor Files (автосохраниние редактируемых файлов). Это гарантирует автоматическое сохранение текста программы при каждом ее запуске. Таким образом, если, например, программа зависнет и среду программирования придется запускать заново, то результат последнего редактирования будет сохранен (к сожалению, во время тура школьники зачастую забывают самостоятельно время от времени запоминать сделанные ими изменения в тексте программ.

  1. Затем следует очень внимательно прочитать условия всех задач и постараться правильно (!!!) понять в чем заключается каждая задача. Если что-то непонятно, в том числе и в формате ввода и вывода, то лучше задать вопрос.

{комментарий}

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

{\комментарий}

  1. Если вы приступили к решению конкретной задачи и основная структура данных для нее вам ясна, то можно описать основные глобальные переменные и набить процедуру readdata ввода данных, чтобы она считывала все параметры задачи так, как это указано в условии. Если не оговорено иное, то делать формальную проверку считанных данных, то есть проверять соответствие введенных значений переменных условию задачи не нужно (!!!). Объясняется это тем, что по правилам проведения большинства олимпиад последних лет считается, что все входные данные при тестировании будут корректны. Кроме того, заметим, что при считывании из файла чисел обычно следует использовать только процедуру read (а не readln), для случаев же считывания симовлов и строк (тип string) это не так. Если количество числе во входном файле неизвестно, то нужно использовать функцию seekeof вместо eof для проверки условия окончания считывания чисел. Для файлов, содержащих произвольный текст, это опять же уже не так.

{комментарий}

Проверка на корректность, несомненно необходимая в профессиональном программировании действительно в последнее время на олимпиадах практически не производится. Хотя на олимпиадах прошлых лет такая практика и существовала. Объясняется это тем, что количество предлагаемых на одном туре задач и их сложность со временем возрасли и во время олимпиады важнее определить не степень профессиональной пригодности участника как программиста, а его способность решать те или иные задачи. А отмена проверки входных данных позволяет участникам больше времени потратить на обдумывание алгоритмов решения задач и их реализацию. Что же касается приведеннных в данном пункте “технических” советов по организации ввода данных, то ниже будут даны различные рекомендации по технике и приемам программирования при решении олимпиадных задач, поэтому сейчас подробно обсуждать мы их не будем.

{\комментарий}

  1. В процедуре initial следует обнулить или присвоить соответствующие начальные значения всем (!!!) глобальным переменным, за исключением тех, которые будут использоваться в качестве параметров циклов. Затем запрограммировать вывод результата в процедуре outdata так, как это требуется в условии задачи. Это поможет дальнейшей отладке программы и в дальнейшем не потребуется “простой” вывод переделывать в “правильный”. Таким образом, к этому моменту у вас уже должна быть “работающая” программа. Она, по крайней мере, должна компилироваться, считывать данные и выводить результат, пусть и нулевой, но в нужном формате.

{комментарий}

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

{\комментарий}

  1. При выполнении пунктов 3, 4 данной памятки или после следует подумать над подходами к решению задачи, для чего ответить себе на ряд вопросов и проделать ряд действий.
    1) Проверить данные на фактическую корректность, то есть всегда ли задача имеет решение для введенного набора данных, например, связан ли граф, нет ли деления на 0 и т.п., если только в условии не сказано, что все данные и в этом смысле корректны.
    2) Определить, относится ли данная задача к знакомому вам классу или решение придется искать “с нуля”.
    3) Попытаться найти на бумаге (!!!) точное решение, возможно только для малых размерностей. Такой подход зачастую позволяет обнаружить закономерности, которые затем можно попытаться распространить и на общий случай. Отобразить на бумаге принципиально различные случаи, в том числе и вырожденные. Это поможет при составлении тестов для самопроверки написанной программы.
    4) Попробуйте сформулировать условие существования решения, пусть только необходимое или только достаточное.
    5) Продумать и выпишите (!!!) достаточную систему тестов.

  2. Запрограммируйте решение задачи в виде вызовов процедур и функций, которые пока следует описать в виде “заглушек” (мнимого или пустого действия или имитации настоящего действия, которое должна выполнять ваша программа). Таким образом вы сможете отладить логику вашей программы, которая опять же должна оставаться “работающей”.

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

{сноска}

3Создание программы по плану, описанному в пунктах 6 и 7 данных обычно называют методом программирования “сверху вниз”.

{\сноска}

  1. Если вы не придумали эффективного решения задачи, то запрограммируйте его по-простому: например, с помощью полного перебора или простой эвристики (приближенного решения в ряде случаев дающего точный ответ). Если и это сложно, то упростите себе задачу, то есть отбросьте условия, которые вам мешают или добейтесь, чтобы программа проходила на самых простых, например, вырожденных тестах (большинство параметров равны 0 или 1). Аналогично следует поступить с задачами, на решение которых у вас не хватило времени.

  2. Прежде, чем окончательно cоздавать exe-файл, замените ряд директив компилятора на следующие: D-,I-,L-,R-,Q- и отрегулируйте размер необходимого вашей программе стека.

  3. Постарайтесь запустить ваш exe-файл непосредственно в операционной системе хотя бы для одного теста, чтобы убедиться в его работоспособности и еще раз перечитайте условие.

{комментарий}

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

{\комментарий}

Лекция 3.

Техника программирования олимпиадных задач

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

Директивы компилятора

Как уже было показано выше, при программировании на языке Turbo Pascal практически необходимо вставлять директивы для компилятора в текст программы. В противном случае, при компиляции программы из командной строки (в этом случае используются те значения для ключей компилятора, которые установлены по умолчанию) или из среды программирования, в которой через меню были установлены не те значения для ключей, при которых отлаживалась программа, работа программы может не соответствовать ожиданиям. Напомним, что разместить директивы компилятора (значения ключей компилятора и характеристики оперативной памяти, выделяемой программе при ее выполнении) в тексте программы можно с помощью команды <Ctrl+O O>. Наличие директив компилятора в тексте позволяет легко их редактировать, а компиляция такой программы будет производиться согласно установленным параметрам тех или иных ключей. Приведем значения ключей компилятора, наиболее оптимальные для отладки программы и прокомментируем наиболее важные из рекомендованных установок параметров:

{$A+,B-,D+,E+,F+,G-,I+,L+,N+,O-,R+,S+,T+,Q+,P-,V+,X+}

{$M 65520,0,655360}

Собственно для отладки программы наиболее значимыми являются ключи D+ и L+. Именно благодаря им в исполнимый код программы вставляется отладочная информация и из среды программирования программу можно выполнять “по шагам”, просматривая значения тех или иных переменных на различных стадиях выполнения программы.

Еще одна пара ключей — E+ и N+ необходима, если программа использует вещественные числовые типы данных, арифметические и логические операции над которыми производятся с помощью сопроцессора, а именно: comp, single, double и extended. Без упомянутых ключей программа, использующая эти типы, просто не будет компилироваться. Строго говоря, ключ E+ был необходим лишь для компьютеров, сопроцессор в которых отсутствовал и операции над вещественными числами осуществлялись с помощью так называемого эмулятора — программы, реализующей эти операции только через команды процессора. Однако все процессоры класса Pentium, а именно ими и оснащено большинство современных компьютеров, содержат встроенный сопроцессор, который будет использоваться при выполнении программы, написанной на языке Turbo Pascal, в случае установки ключа компилятора N+. Заметим, что одновременное “включение” и эмулятора и сопроцессора приводит к использованию последнего при наличии сопроцессора и эмулятора при его отсутствии. То есть такая комбинация ключей делает программу “переносимой”, не зависящей от компьютера, на котором она исполняется.

Установка ключа I+ приводит к тому, что при работе программы строго контролируется соответствие поступающих на вход программы констант типам переменных, которым значения этих констант будут присвоены. В случае несоответствия типов, например, при вводе символа вместо числа или вещественного числа вместо целого, выполнение программы будет прервано.

Совершенно незаменима при отладке программы следующая установка ключей компилятора: R+ и Q+ (последний из двух ключей появился лишь в версии Turbo Pascal 7.0). Они позволяют контролировать во время выполнения программы “выход за границу массивов” и “выход за границу допустимого диапазона значений” при операциях над целочисленными переменными. То есть при попытке обращения к несуществующему элементу массива или если во время выполнения операции (арифметической или присваивания) над целыми числами результат, в том числе и промежуточный, не является допустимым для соответствующего типа, то выполнение программы прерывается. При этом ключ R+ отвечает за корректную работу с массивами и присваивание только допустимых значений переменным типа byte и shortint, а Q+ — за корректное выполнение арифметических операций над целыми числами в рамках соответствующих типов1. При отсутствии такого контроля поиск ошибки может быть затруднен тем, что промежуточные вычисления чаще всего производятся в целом типе наибольшего размера (обычно 32-разрядном) и лишь при присваивании полученного значения переменной меньшего размера лишние старшие разряды оказываются отброшенными. Как следствие, отладочная информация о значении арифметического выражения и его результат могут не совпадать.

{сноска}

1Подробнее об организации целочисленной компьютерной арифметики и возникающих при этом ошибках можно прочитать в гл. 6 книги Е.Андреева, И.Фалина. Системы счисления и компьютерная арифметика. М: Лаборатория базовых знаний, 2000.

{\сноска}

Рассмотрим это на примере следующей простой программы:

{$Q-}

var a:integer;



Скачать документ

Похожие документы:

  1. Правила проведения олимпиады

    Лекция
    Выполняя обещание, данное в конце первой лекции, приведем и прокомментируем наиболее важные правила проведения Всероссийской олимпиады по информатике. Многие из этих правил справедливы также и для большинства региональных олимпиад.
  2. Это не учебник!

    Учебник
    Учебников и пособий по теме управления персоналом, как переводных, так и «родных» (нередко скомпилированных из тех же переводных), в книжных магазинах вполне достаточно.
  3. Мониторинг сообщений сми об Общественной палате РФ с 1 июля по 31 июля 2010 года

    Закон
    2. Горячая линия по вопросам движения транспорта до международного аэропорта "Шереметьево" в связи с транспортными проблемами на Ленинградском шоссе 39-59 стр.
  4. В. З. Гарифуллин Печатается по решению (1)

    Документ
    Информационное поле современной России: практики и эффекты: Материалы Пятой Международной научно-практической конференции 16 – 18 октября 2008 года / Под.
  5. В. З. Гарифуллин Печатается по решению (2)

    Документ
    Информационное поле современной России: практики и эффекты: Материалы Шестой Международной научно-практической конференции 22 – 24 октября 2009 года / Под.

Другие похожие документы..