Форум программистов, компьютерный форум CyberForum.ru

Подкиньте несколько вариантов тестов для задачи с acm.timus.ru - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual C++ (наработки есть очень большие) http://www.cyberforum.ru/cpp-beginners/thread647735.html
Помогите за тестировать программы, пожалуйста. Писал некоторые еще по весне, а большая часть написана на днях. Мне просто интересно нет ли багов в программах, все компилится, но все же интересно узнать мнение более квалифицированных людей. В код добавил комменты для ясности. Итак №1.(голова кипит уже, помогите вывести то, что записывается в память, после введения данных) Условие: Разреженная...
C++ Парсинг шрифтов Всем привет. Вот заинтересовала тема о шрифтах, подскажите пожалуйста литературу по шрифтам, хотелось бы научиться считывать файл шрифта и получать данные о геометрии, ну конечно коды символов, в общем хочется знать о строении шрифтов всё. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread647728.html
Судоку C++
# include <algorithm> # include <iostream> # include <string.h> # include <stdio.h> # include <iomanip> # include <vector> using namespace std; class cell { int namber;
C++ Стек
Уважаемые теоретики по С++ подскажите, пожалуйста, как граммотно называются в Стеке самое нижнее и самое верхнее значения. Заранее спасибо.
C++ ошибка в коде http://www.cyberforum.ru/cpp-beginners/thread647699.html
Я только начал изучать с++ , и вот уже проблемы, помогите разобраться в чём тут ошибка пожалуйста. //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- #include <iostream.h> #include <conio.h> #include <math.h> #pragma argsused
C++ Алгоритм поиска по строке Кнута-Морриса-Пратта Само задание таково: Программа должна быть грамотно функционально разбита на модули и функции. • Входные данные – текстовый файл. • Выходные данные – текстовый файл, содержащий найденные слова с указанием позиции во входном файле (номер строки, позиция в строке, количество вхождений слова в файле). номер строки: 3 позиция в строке:9 но при компилировании выдает ошибку #include... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
09.09.2012, 14:04     Подкиньте несколько вариантов тестов для задачи с acm.timus.ru
sdq34, я посмотрел код до одного момента и нашел недочет, там полученное значение не помещается в используемый тип.
Для такой ошибки тест немного сложновато написать, но саму ошибку объясню:
Допустим такой тест:
1
0 999999
1
3 -10000000 10000000 10000000 0 10000000 10000000
Идем вот в эту функцию:
C++
1
bool point_segment(int x, int y, int x1, int y1, int x2, int y2)
Самый первый ее вызов будет таким:
point_segment(0, 999999, -10000000, 10000000, 10000000, 0);
Смотрим что получается (см комментарии):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool point_segment(int x, int y, int x1, int y1, int x2, int y2)
{
    if (x==x1 && y==y1) return true;
    if (x==x2 && y==y2) return true;
    int smallx(0),bigx(0);
    smallx=x1<x2 ? x1 : x2;
    bigx=x2>x1 ? x2 : x1;
    int smally(0),bigy(0);
    smally=y1<y2 ? y1 : y2;
    bigy=y2>y1 ? y2 : y1;
    if (x1==x2 && x==x1){ if (smally<y && y<bigy) return true; else return false;}
    if (y1==y2 && y==y1){ if (smallx<x && x<bigx) return true; else return false;}
    if (smallx<x && x<bigx) { } else return false;
    if (smally<y && y<bigy) { } else return false;
 
    double xd(0);
    xd=(x2-x1)*y + (x1*y2-x2*y1);//вот в этом месте Вы ожидаете что будет такой результат: xd=(10000000--10000000)*999999 + (-10000000*0 - 10000000*10000000)=20000000*999999 - 100000000000000= -80000020000000
    // но на самом деле получается: xd=-1959144704
    double temp(0);
    temp=y2-y1;
    xd=xd/temp;
    double xtemp=x;
    if (xd==xtemp && smallx<=xtemp && xtemp<=bigx) return true; else return false;
    return false;
}
Вся причина в том что переменные x,y,x1,y1,x2,y2 являются типа int. Промежуточные результаты (при вычислении xd) тоже хранятся в типе int, но они туда не помещаются.
Вам для исключения этой ошибки нужно или переменные x,y,x1,y1,x2,y2 делать типом long long или при вычислении xd приводить эти переменные к типу double.
Пробуйте исправляйте эту ошибку, проверяйте, если код не пройдет все тесты, то буду смотреть что еще с кодом не так.
 
Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru