Подготовка к тестированию по президентской программе Краткие рекомендации

Скачать презентацию Подготовка к тестированию по президентской программе Краткие рекомендации Скачать презентацию Подготовка к тестированию по президентской программе Краткие рекомендации

13034-lecture_test_0.ppt

  • Количество слайдов: 14

>Подготовка к тестированию по президентской программе Краткие рекомендации Подготовка к тестированию по президентской программе Краткие рекомендации

>Автоматическое тестирование Данные и результат - файлы Точное соответствие форматам ввода-вывода Никаких других файлов Автоматическое тестирование Данные и результат - файлы Точное соответствие форматам ввода-вывода Никаких других файлов быть не должно Контроль на совпадение с правильным ответом - Wrong Answer (WA ) Превышено ограничение на время работы программы - Time Limit (TL) Превышены ограничения на память - Memory Limit Исключительная ситуация во время выполнения - Runtime Error Нарушение формата вывода - Presentation Error Нарушение правил - Security Violation

>Предметы, подлежащие тестированию Этап 1 - Основы программирования Процедурное программирование Программирование с явным управлением Предметы, подлежащие тестированию Этап 1 - Основы программирования Процедурное программирование Программирование с явным управлением памятью Архитектура ЭВМ Программирование в управляемых средах (Java или C#) Дискретная математика (теория множеств, комбинаторика, теория .вероятностей, теория информации) Структуры данных (часть 1) Алгоритмы на строках Этап 2 - Проектирование программного обеспечения Программирование программных комплексов (использование внешних библиотек) ООП Ассемблер Теория графов (структуры данных часть 2) Технологии проектирования ПО Вычислительная геометрия Языки программирования и методы трансляции БД ОС Компьютерные сети Численные методы Теория вычислительной сложности

>Задачи для тестирования весной 2010 1 курс - 3-4 задачи, например: задача на циклы Задачи для тестирования весной 2010 1 курс - 3-4 задачи, например: задача на циклы и линейный массив задача на двумерные массивы управление памятью 4 курс - 2-3 задачи, например: разбор выражений и вычисление логического значения структуры данных теория графов поиск ошибок в программе (есть исходные тексты ошибочных программ ) вычислительная геометрия На решение одной задачи отводится  30 минут

>Краткие рекомендации - исходные данные Обратите внимание на имя входного/выходного  файла и Краткие рекомендации - исходные данные Обратите внимание на имя входного/выходного файла и freopen (”fileName_1", "r", stdin); freopen (" fileName_2", "w", stdout); обратите внимание на диапазоны значений данных и используйте соответствующие типы переменных обратите внимание на приведение типов в процессе вычислений int/int = int обратите внимание на диапазоны значений промежуточных результатов. Число 2*109 при возведении в квадрат равно 4*1018 и не поместится в int (или, что то же самое, long int), вместо int a,b,c; a= (b * b) % c; нужно писать int a,b,c; a= ((__int64)b) * b) % c; или int a,b,c; __int64 bb= b; a= (bb*bb) % c;

>Краткие рекомендации - диапазоны данных целого типа       Тип Краткие рекомендации - диапазоны данных целого типа Тип данных Байты Биты Min Max Примерное максимальное значение char 1 8 - 128 127 unsigned char 1 8 0 255 short 2 16 -32768 32767 unsigned short int 2 16 0 65535 int 4 32 -2147483648 2147483647 2*109 unsigned int 4 32 0 4294967295 4*109 long int 4 32 -2147483648 2147483647 2*109 unsigned long int 4 32 0 4294967295 4*109 long long int 8 64 2*1019 __int64 8 64 4*1019

>Краткие рекомендации - точность вещественных данных  Тип данных     Краткие рекомендации - точность вещественных данных Тип данных Байты Точность Диапазон (мантисса) float 4 7 цифр 1.5 10–45 .. 3.4 1038 double 8 15 цифр 5.0 10–324 .. 1.7 10308 Математический сопроцессор работает с 64-разрядными числами, поэтому тип float не соответствует современной архитектуре ЭВМ! Вещественные вычисления нужно выполнять только в double. Ограниченная длина мантиссы не позволяет представить все целые числа из диапазона, например: 1000000003 не представимо в типе float 20000000.000000001 не представимо в double

>Краткие рекомендации - сравнение вещественных данных  Целые данные не имеют погрешности. Например, чтобы Краткие рекомендации - сравнение вещественных данных Целые данные не имеют погрешности. Например, чтобы проверить, принадлежит ли точка с целыми координатами (x,y) окружности радиуса R с центром в начале координат, надо написать: int x,y, R; …. if (x*x + y*y == R*R) printf(“inside”); else printf(“outside”); Вещественные данные представлены в памяти ЭВМ с некоторой точностью. Сравнение на равенство делать нельзя. Если по условию задачи данные вещественные (и только в этом случае!) , то решение имеет вид: double x, y, R, eps = 0.5e-6; // точность вычислений по условию задачи ….. if (fabs (x*x + y*y - R*R) < eps) printf(“inside”); else printf(“outside”);

>Краткие рекомендации - выделение памяти Следите за объемом данных, выделяемых в стеке  - Краткие рекомендации - выделение памяти Следите за объемом данных, выделяемых в стеке - это все локальные данные в функции. Чаще всего превышение размеров стека приведет к ошибке Runtime Error Обратите внимание на ограничения на память. Особенно следите за граничными значениями размерности. «На всякий случай» выделяйте массив хотя бы на пару значений длиннее. По возможности используйте статические массивы, которые из-за ограничений на размер стека должны быть глобальными #define MAXLEN 1000000 int data [MAXLEN]; int main(){ return 0; } Если используете динамическое выделение памяти, не забывайте освобождать ее в конце работы программы data = new int[MAXLEN]; …. delete[] data;

>Краткие рекомендации - структура программы Откомпилируйте свою программу из командной строки:   Краткие рекомендации - структура программы Откомпилируйте свою программу из командной строки: cl file.cpp или bcc32 filename или g++ filename или ... При завершении программы не забывайте вернуть код возврата 0 int main(){ return 0; } При автоматическом тестировании программа - это один файл. Возможность отправки на тестирование проекта оговаривается отдельно в условии задачи Не забывайте перед началом работы очищать рабочие массивы с помощью функции memset #define MAXLEN 1000000 // только для статических массивов: int data[MAXLEN]; memset(data, 0, sizeof(data)); // работает всегда, в том числе и для динамических массивов: data = new int[MAXLEN]; memset(data, 0, MAXLEN*sizeof(data[0]));

>Краткие рекомендации - порядок сложности Перед тем, как писать программу, оцените порядок сложности по Краткие рекомендации - порядок сложности Перед тем, как писать программу, оцените порядок сложности по количеству выполняемых операций for (int i=0; i

>Пример простой задачи на цикл Имя входного файла   period.in Имя выходного файла Пример простой задачи на цикл Имя входного файла period.in Имя выходного файла period.out Ограничение по времени 2 секунды Ограничение по памяти 256 мегабайт Последовательность чисел {ai} генерируется по формуле ai+1 = (A*ai + B) mod C Требуется по данным A, B, C , a0 найти период и предпериод последовательности {ai}. Формат входного файла Входной файл содержит четыре неотрицательных целых числа A, B, C , a0 . Каждое не превышает одного миллиона. Формат выходного файла Выведите в выходной файл два целых числа - длину периода и предпериода последовательности {ai} . Пример period.in period.out 2 1 6 4 2 1

>Пример задачи на обработку матрицы Имя входного файла   saddle.in Имя выходного файла Пример задачи на обработку матрицы Имя входного файла saddle.in Имя выходного файла saddle.out Ограничение по времени 2 секунды Ограничение по памяти 256 мегабайт Седловой точкой матрицы называется элемент матрицы, который является наименьшим элементом в своем ряду и наибольшим в своем столбце или же наибольшим в ряду и наименьшим в столбце. Требуется написать программу, находящую все седловые точки заданной матрицы. Формат входного файла Первая строка входного файла содержит два натуральных числа r и c - кодичество строк и столбцов в матрице (1 <= r,c <= 100). Последующие r строк содержат по c целых чисел каждая - элементы матрицы. Абсолютные значения эоементов матрицы не превышают 109. Формат выходного файла Первая строка выходного файла должна содержать число n - количество седловых точек матрицы. Последующие n строк должны содержать по два числа каждая - номер строки и столбца седловой точки. Столбцы и строки нумеруются с единицы. Пример saddle.in saddle.out 4 3 4 2 2 -2 1 1 3 4 7 1 2 5 6 2 4 1 2 2 0 4 2

>Пример задачи на ТЯП   Имя входного файла   function.in Имя выходного Пример задачи на ТЯП Имя входного файла function.in Имя выходного файла function.out Ограничение по времени 2 секунды Ограничение по памяти 256 мегабайт Построить таблицу истинности функции, заданной во входном файле. Формат входного файла Единственная строка входного файла содержит описание функции. Для задания функции применяются переменные {a,b,…j}, логические связки ~ (отрицание), & (конъюнкция), | (дизъюнкция) и круглые скобки. Приоритет операций - стандартный. Гарантируется, что описание функции синтаксически корректно. Длина описания не превышает 1000 символов. Формат выходного файла Первая строка выходного файла должна содержать имена переменных, используемых в функции и упорядоченных в лексикографическом порядке. Столбец и именем F соответствует значению функции. Последующие строки должны содержать всевозможные комбинации булевых значений входных переменных и соответствующее значение функции. Ложь обозначается символом 0, истина - символом 1. . Примеры function.in function.out (c | b) & ˜a a b c F 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0