Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 5

Как написать чекер для Contester для олимпиадного программирования?

11.12.2017, 10:20. Показов 2523. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
это код на С++ для определения центра и радиуса ОКРУЖНОСТИ ПО ТРЕМ заданным ТОЧКАМ
как для него чекер в формате .dpr для проверки в контестер. Многочасовое гугление результат не дало ни где не нашел руководства либо инструкций по этой теме. пожалуйста помогите подскажите.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <math.h>
#include <iostream>
 
typedef struct CIRCLE
{
    double x;
    double y;
    double r;
} circle;
 
inline
static double det(
        double a1, double b1, double c1,
        double a2, double b2, double c2 )
{
    double d  = (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2;
    d -= (a1*a1+a2*a2)*c2 + (b1*b1+b2*b2)*a2 + (c1*c1+c2*c2)*b2;
    return d;
}
 
inline
static double norm(double x1, double y1, double x2, double y2)
{
    double x = x1 - x2;
    double y = y1 - y2;
    return sqrt(x*x+y*y);
}
 
circle circumscribed(
        double x1, double y1,
        double x2, double y2,
        double x3, double y3 )
{
    circle crcl;
    double a = norm(x1, y1, x2, y2);
    double b = norm(x1, y1, x3, y3);
    double c = norm(x3, y3, x2, y2);
    double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    crcl.r = a*b*c*fabs(Dinv);
    crcl.x =  Dinv*det(x1, x2, x3, y1, y2, y3);
    crcl.y = -Dinv*det(y1, y2, y3, x1, x2, x3);
    return crcl;
}
 
int main()
{
    double x1 = 1, y1 = 5;
    double x2 = 4, y2 = 7;
    double x3 = 2, y3 = 9;
    circle c;
 
   /* printf("x1 y1 x2 y2 x3 y3 engiziniz: ");
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
    */
     c = circumscribed(x1, y1, x2, y2, x3, y3);
    printf("Center: (%g, %g)\n", c.x, c.y);
    printf("Radius: %g\n", c.r);
        system("pause");
    return 0;
}
Спасибо за внимание!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2017, 10:20
Ответы с готовыми решениями:

IDE для олимпиадного программирования
Дело в том, что notepad++ не хватает, а eclipse уже слишком замороченный.

Посоветуйте литературу для олимпиадного программирования C++
Буду вам очень благодарен. Пока читаю только Окулова про алгоритмы в общем.

Какой язык рациональнее использовать для олимпиадного программирования?
Java или C++? Java собирает мусор, не даёт совершить утечек памяти и тупых ошибок. C++ лёгкий и быстрый. Не знаю, что лучше тут выбрать.

3
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 5
15.12.2017, 10:59  [ТС]
Вот переписал на паскаль

Code
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
program Project552;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
function leng(x1, y1, x2, y2 : integer) : real;
begin
     leng :=  sqrt(sqr(y1 - y2) + sqr(x1 - x2));
end;
 
function checkCirk (x1, y1, x2, y2, x3, y3: integer) : boolean;
var
   ab, bc, ac : real;
begin
     ab := leng(x1, y1, x2, y2);
     bc := leng(x2, y2, x3, y3);
     ac := leng(x1, y1, x3, y3);
     checkCirk := ((ab + bc - ac) > 0) and ((ab + ac - bc) > 0) and ((bc + ac - ab) > 0);
  end;
 
var
   x1, x2, x3, y1, y2, y3, a, b, c ,d, e ,f, g : integer;
   xc, yc, r : real;
 
begin
     Write('vvedite 3 t: ');
     Readln(x1, y1, x2, y2, x3, y3);
 
     if not(checkCirk(x1, y1, x2, y2, x3, y3)) then Writeln('krug impossible')
     else
     begin
 
 
A := x2 - x1;
B := y2 - y1;
C := x3 - x1;
D := y3 - y1;
E := A * (x1 + x2) + B * (y1 + y2);
F := C * (x1 + x3) + D * (y1 + y3);
G := 2 * (A * (y3 - y2) - B * (x3 - x2));
if G = 0 then Exit;
xc := (D * E - B * F) / G;
yc := (A * F - C * E) / G;
              r := (sqrt(sqr(x1 - xc) + sqr(y1 - yc)));
 
           Writeln('tochki centra: ', xc:0:4, ', ', yc:0:4);
           Writeln('Radius: ', r:0:4);
     end;
     Readln;
end.
и вот написал не до чекер в чем ощибка?
Code
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
program checker;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
{$IFDEF MSWINDOWS}
  unJudge17 in '..\utils\unJudge17.pas';
{$ELSE}
  unJudge17 in '../utils/unJudge17.pas';
{$ENDIF}
 
var
 x1, x2, x3, y1, y2, y3, a, b, c ,d, e ,f, g : integer;
   xc, yc, r : integer;
begin
  InputTxt.ReadLongInt(x1);
  InputTxt.NextLine;
 
InputTxt.ReadLongInt(y1);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(x2);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(y2);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(x3);
  InputTxt.NextLine;
  
 
  
  InputTxt.ReadLongInt(y3);
  InputTxt.MustBeEOF;
 
 
 
 
 
A := x2 - x1;
B := y2 - y1;
C := x3 - x1;
D := y3 - y1;
E := A * (x1 + x2) + B * (y1 + y2);
F := C * (x1 + x3) + D * (y1 + y3);
G := 2 * (A * (y3 - y2) - B * (x3 - x2));
if G = 0 then Exit;
xc := (D * E - B * F) / G;
yc := (A * F - C * E) / G;
             
     
  OutputTxt.ReadLongInt(r);
  OutputTxt.MustBeEOF;
  if sqrt(sqrt(sqr(x1 - xc) + sqr(y1 - yc))) <> r then VRejectWA(
    Format('%d expected, %d found', [sqrt(sqr(x1 - xc) + sqr(y1 - yc)), r]));
  VAccept;
end.
вот собственно ошибка

checker.dpr(46) Error: Incompatible types: 'Integer' and 'Extended'

checker.dpr(47) Error: Incompatible types: 'Integer' and 'Extended'
что это значит? Объясните пожалуйста
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
15.12.2017, 12:45
Цитата Сообщение от Nurzadakhan Посмотреть сообщение
checker.dpr(46) Error: Incompatible types: 'Integer' and 'Extended'
В строке 46 у Вас вычитаются несовместимые типы 'Integer' and 'Extended': x1 - xc, y1 - yc. Добавьте явное приведение типа.
0
0 / 0 / 0
Регистрация: 14.06.2016
Сообщений: 5
16.12.2017, 07:58  [ТС]
Вот переписал чекер контестер принимает его

Pascal
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
program checker;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
{$IFDEF MSWINDOWS}
  unJudge17 in '..\utils\unJudge17.pas';
{$ELSE}
  unJudge17 in '../utils/unJudge17.pas';
{$ENDIF}
 
var
 x1, x2, x3, y1, y2, y3, a, b, c ,d, e ,f, g : integer;
   xc, yc, r : extended;
begin
  InputTxt.ReadLongInt(x1);
  InputTxt.NextLine;
 
InputTxt.ReadLongInt(y1);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(x2);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(y2);
  InputTxt.NextLine;
  InputTxt.ReadLongInt(x3);
  InputTxt.NextLine;
  
 
  
  InputTxt.ReadLongInt(y3);
 
 
  
     
 
 
A := x2 - x1;
B := y2 - y1;
C := x3 - x1;
D := y3 - y1;
E := A * (x1 + x2) + B * (y1 + y2);
F := C * (x1 + x3) + D * (y1 + y3);
G := 2 * (A * (y3 - y2) - B * (x3 - x2));
if G = 0 then Exit;
xc := (D * E - B * F) / G;
yc := (A * F - C * E) / G;
             
   
 xc := ouf.readreal;
 
 
 
if ((D * E - B * F) / G) <> xc then
quit(_wa, 'Expected: ' + floattostr(xc) + ', found: ' + floattostr(xc));
 
quit(_ok, floattostr(xc));
 
yc := ouf.readreal;
 
 
if ((A * F - C * E) / G) <> yc then
quit(_wa, 'Expected: ' + floattostr(yc) + ', found: ' + floattostr(yc));
 
quit(_ok, floattostr(yc));
 
r := ouf.readreal;
if (sqrt(sqr(x1 - xc) + sqr(y1 - yc))) <> r then
quit(_wa, 'Expected: ' + floattostr(r) + ', found: ' + floattostr(r));
 
quit(_ok, floattostr(r));
 
end.
но при тесте кода пишет Compilation Error
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <math.h>
#include <iostream>
 
typedef struct CIRCLE
{
    double x;
    double y;
    double r;
} circle;
 
inline
static double det(
        double a1, double b1, double c1,
        double a2, double b2, double c2 )
{
    double d  = (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2;
    d -= (a1*a1+a2*a2)*c2 + (b1*b1+b2*b2)*a2 + (c1*c1+c2*c2)*b2;
    return d;
}
 
 
inline
static double norm(double x1, double y1, double x2, double y2)
{
    double x = x1 - x2;
    double y = y1 - y2;
    return sqrt(x*x+y*y);
}
 
circle circumscribed(
        double x1, double y1,
        double x2, double y2,
        double x3, double y3 )
{
    circle crcl;
    double a = norm(x1, y1, x2, y2);
    double b = norm(x1, y1, x3, y3);
    double c = norm(x3, y3, x2, y2);
    double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    crcl.r = a*b*c*fabs(Dinv);
    crcl.x =  Dinv*det(x1, x2, x3, y1, y2, y3);
    crcl.y = -Dinv*det(y1, y2, y3, x1, x2, x3);
    return crcl;
}
 
int main()
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
    circle c;
 
   
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
 
    c = circumscribed(x1, y1, x2, y2, x3, y3);
    printf("(%g, %g)\n", c.x, c.y);
    printf("%g\n", c.r);
  
  system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2017, 07:58
Помогаю со студенческими работами здесь

C++ vs Java vs python. Что выбрать для олимпиадного программирования новичку?
не получается определиться с выбором языка

Для сайта олимпиадного программирования каким способом компилировать код?
Хочу сделать сайт для олимпиадного программирования, нужно ли вставлять в сайт консоль для каждого языка и вообще каким способом это...

Какие модули посоветуете изучить новичку в программировании для олимпиадного программирования?
Какие модули посоветуете изучить новичку в программирование?Для олимпиадного программирования. Спс за внимание:)

Как создать чекер для проверки консольных программ
Мне нужно научиться создавать чекеры для проверки консольных программ... Где можно почитать об этом, а то везде чекеры, чекеры, но не...

Как называется язык программирования для программирования на Android?
Как называется язык программирования для программирования на Android?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru