Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 4
1

Олимпиадная задача "Минимум из трёх". Runtime error 205

27.01.2019, 01:17. Показов 2585. Ответов 2

Author24 — интернет-сервис помощи студентам
Минимум из трёх

В каждой из N строк входного файла записано по три объекта одного из трёх типов: целые числа, вещественные числа или строки, состоящие из заглавных латинских букв и цифр. Объекты разделены знаком табуляции.

Определите минимальный из трёх объектов в каждой строке и запишите его в выходной файл. Выводить объект нужно точно так же, как он дан во входных данных.

В первом тесте N = 30. Оценка за этот тест: 30 баллов. За каждое неправильно определенный минимум оценка снижается на 3 балла, однако не может стать меньше нуля. Проверка осуществляется в режиме on-line (результат виден сразу).

Во втором тесте N = 7000. Оценка за этот тест: 70 баллов. За каждый неправильно определенный минимум оценка снижается на 3 балла, однако не может стать меньше нуля. Во время тура проверяется, что сданный файл содержит 7000 строк. Проверка правильности ответа осуществляется в режиме on-line (результат виден после окончания тура).

Примеры

Входные данныеРезультат
AB 12 AC1
1 2 3
7.5 36.6 0.001
12
1
0.001


Задание состоит из нескольких частей: файл b0 (3 строки из примера) с ответом для проверки - ответ верный, b1 (30 строк) - программа работает, получил 18 баллов из 30, b2 (7000 строк и добавились отрицательные числа) - программа обрабатывает только 3022 строки и в консоль выводит ошибку:
Код
Runtime error 205 at $0000000000408D5E
  $0000000000408D5E
  $000000000040018C
Входные файлы: b1.txt, b2_txt.zip

Вот код:
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
var
f,f1:text;
x,min,str:string;
rez,i,sum,err:integer;
m,poz:real;
begin
    assign(f,'b_input.txt');
    assign(f1,'b_output.txt');
    reset(f);
    rewrite(f1);
    while not eof(f) do 
    begin
        readln(f,x);
        rez:=32000;
        poz:=3200000000000000000;
        sum:=0;
        str:='';
        min:='';
        m:=0;
        for i:=1 to length(x) do
        begin
            if (x[i]='  ') or (i=length(x)) then 
            begin
                if i=length(x) then
                begin
                    sum:=sum+ord(x[i]);
                    str:=str+x[i];
                end;
                val(str,m,err);
                if err=0 then 
                begin
                    if poz>m then
                    begin
                        poz:=m;
                        min:=str;
                    end;
                end;
                if (err<>0) and (rez>sum) then 
                begin
                    rez:=sum;
                    min:=str;
                end;
            err:=0;
            sum:=0;
            str:='';
            m:=0;
            end
            else begin
                sum:=sum+ord(x[i]);
                str:=str+x[i];
            end;
        end;
        writeln(f1,min);
    end;
    close(f);
    close(f1);
end.
Компилятор: free pascal 3.0.4
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2019, 01:17
Ответы с готовыми решениями:

Runtime error 205 at 0000:020B
Здравствуйте! Вот собсно задание такое: Пишу следующее: program lab8; {Индивидуальное...

ошибка "runtime error 205"
Программа вычисляет сумму бесконечного ряда u(i) = xi / i!; f(x) = exp(x). но если ввести,...

Задача Кинотеатр. Runtime error
Тестирующая программа выдаёт ошибку Failed test #6 of 15. Runtime error Error: main:...

Задача на максимум и минимум трех чисел
Найти: Z=(min(a,b,c))/(max(a,b,c)) Программа: var a, b, c, min, max, Z: real; begin...

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

2
Модератор
9874 / 5242 / 3306
Регистрация: 17.08.2012
Сообщений: 16,012
27.01.2019, 06:11 2
Лучший ответ Сообщение было отмечено sashakor22 как решение

Решение

- Ошиблись с типом переменных. Не всё из файла может поместиться в real или integer, откуда, собственно, и ошибка.
- Используете "волшебные числа", мало того, что это костыль, так ещё и неправильно Вы эти числа используете.
- Если выводить нужно в том виде, в котором это было во входном файле, то про целые числа можно (и нужно) смело забыть, и использовать только вещественные.

Какие-то несколько усложнённые у Вас преобразования... Я бы так написал:
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
var
  f, g: text;
  s: string;
  i, k, err, e, imin: integer;
  st: array[1..3] of string[255]; //судя по файлу, можно string[20]
  num: array[1..3] of extended; //extended, а никакой не real, и даже не double
 
begin
  assign(f, 'b_input.txt');
  reset(f);
  assign(g, 'b_output.txt');
  rewrite(g);
  while not eof(f) do
    begin
      readln(f, s);
      s += #9;
      e := 0;
      for i := 1 to 3 do st[i] := '';
      k := 1;
      for i := 1 to length(s) do
        if s[i] <> #9 then
          st[k] += s[i]
        else
          begin
            val(st[k], num[k], err);
            e += err;
            inc(k)
          end;
      imin := 1;
      if e = 0 then
        begin
          for i := 2 to 3 do
            if num[imin] > num[i] then imin := i
        end
      else
        begin
          for i := 2 to 3 do
            if st[imin] > st[i] then imin := i
        end;
      writeln(g, st[imin])
    end;
  close(f);
  close(g)
end.
Если всё же пожелаете целые числа обрабатывать отдельно от вещественных, применяйте для них тип int64.
1
0 / 0 / 0
Регистрация: 17.08.2018
Сообщений: 4
27.01.2019, 10:48  [ТС] 3
Спасибо, проблема решена.
0
27.01.2019, 10:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2019, 10:48
Помогаю со студенческими работами здесь

Задача про минимум и максимум из трёх чисел
Здравствуйте, я написал программу в качестве домашнего задания. В неё вводятся 3 числа, а она в...

Ошибка Microsoft Visual C++ Runtime Library - Runtime Error
Здравствуйте. Буду признательна за помощь в моей беде. Совсем в этом не разбираюсь. В Safari при...

Из-за чего может быть runtime error? Задача "Автобус" с acmp
Доброго времени суток. Решаю задачу &quot;Автобус&quot;, но на 19 тесте (не могу предположить, что там может...

Error 205 при вводе значений в программе
error 205 при вводе значений в программе. Как обойти не изменяя алгоритм вычисления ? ...

Программа выдает ошибку Microsoft Visual C++ Runtime Library Runtime Error! Program: c:\Program Files\OpenOff
Здравствуйте! Написали программку, вставляющую в подготовленный шаблон документа Open Office Calc и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru