Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2015, 17:18   #1
alex 2000
Пользователь
 
Регистрация: 06.02.2012
Сообщений: 16
По умолчанию Runtime error в программе

Всем привет!
Решаю задачи на сайте http://acmp.ru/
Там есть вот такая задача- http://acmp.ru/index.asp?main=task&id_task=7 , в которой надо из 3 чисел найти большее (числа до 10 в 100 степени), решаю через длинную арифметику. На компьютере в PascalABC.Net компилирует/работает нормально. Когда отправляю на сайт пишет Runtime error. Там стоит Borland Delphi 7
Моя программа:
Код:
var
  a, b, d: array [1..100] of char;
  k, t, u: array [1..100] of integer;
  f, g, h, i, l, j, o, q, s, z: integer;
  c: string;
  n: char;


begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt');rewrite(output);
  read(c);
  j := length(c);
  reset(input);
  read(n);
  while (n <> ' ') do
  begin
    h := h + 1;
    o := o + 1;
    i := i + 1;
    a[i] := n;
    read(n);
  end;
  i := 0;
  read(n);
  while (n <> ' ') do
  begin
    f := f + 1;
    o := o + 1;
    i := i + 1;
    b[i] := n;
    read(n);
  end;
  i := 0;
  for l := 1 to j - (2 + o) do
  begin
    g := g + 1;
    read(n);
    i := i + 1;
    d[i] := n;
  end;
  for i := 1 to h do
  begin
    val(a[i], k[i], q)
  end;
  for i := 1 to f do
  begin
    val(b[i], t[i], q)
  end;
  for i := 1 to g do
  begin
    val(d[i], u[i], q)
  end;
  if (h > f) and (h > g) then
  begin
    for i := 1 to h do
    begin
      write(k[i]);
    end;
    s := 5;
  end;
  if (f > h) and (f > g) then
  begin
    for i := 1 to f do
    begin
      write(t[i]);
    end;
    s := 5;
  end;
  if (g > f) and (g > h) then
  begin
    for i := 1 to g do
    begin
      write(u[i]);
    end;
    s := 5;
  end;
  if s <> 5 then
  begin
    if (g = h) then s := 1;
    if (f = h) then s := 2;
    if (f = g) then s := 3;
    if (g = h) and (f = h) and (f = g) then s := 4;
    if (s = 1) then
    begin
      for i := 1 to h do
      begin
        if (k[i] > u[i]) then
        begin
          for z := 1 to h do
          begin
            write(k[z]);
          end;
          break;
        end;
        if (k[i] < u[i]) then
        begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break;
        end;
        if (h = i) then begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break;
        end;
      end;
    end;
    if (s = 2) then
    begin
      for i := 1 to h do
      begin
        if (k[i] > t[i]) then
        begin
          for z := 1 to h do
          begin
            write(a[z]);
          end;
          break;
        end;
        if (k[i] < t[i]) then
        begin
          for z := 1 to h do
          begin
            write(t[z]);
          end;
          break;
        end;
        if (h = i) then begin
          for z := 1 to h do
          begin
            write(t[z]);
          end;
          break; 
        end;
      end;
    end;
    if (s = 3) then
    begin
      for i := 1 to g do
      begin
        if (t[i] > u[i]) then
        begin
          for z := 1 to h do
          begin
            write(t[z]);
          end;
          break;
        end;
        if (t[i] < u[i]) then
        begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break;
        end;
        if (g = i) then begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break;
        end;
      end;
    end;
    if (s = 4) then
    begin
      for i := 1 to h do
      begin
        if (k[i] > u[i]) and (k[i] > t[i]) then
        begin
          for z := 1 to h do
          begin
            write(k[z]);
          end;
          break;
        end;
        if (t[i] > u[i]) and (t[i] > k[i]) then
        begin
          for z := 1 to h do
          begin
            write(t[z]);
          end;
          break;
        end;
        if (u[i] > k[i]) and (u[i] > t[i]) then
        begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break;
        end;
        if (h = i) then begin
          for z := 1 to h do
          begin
            write(u[z]);
          end;
          break; 
        end;
      end;
    end;
  end;
end.
В каком месте ошибка?
alex 2000 вне форума Ответить с цитированием
Старый 14.02.2015, 18:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А че так длинно? Три числа в символьном виде дополнить слева нулем до 100 байтов и так примерно
Код:
  c1:=StringOfChar('0',100-Length(s1))+s1;
  c2:=StringOfChar('0',100-Length(s2))+s2;
  c3:=StringOfChar('0',100-Length(s3))+s3;
  b1:=True; b2:=True; b3:=True;
  for i:=1 to 100 do begin
    b1:=b1 and (not b2 or (c1[i]>=c2[i])) and (not b3 or (c1[i]>=c3[i]));
    b2:=b2 and (not b1 or (c2[i]>=c1[i])) and (not b3 or (c2[i]>=c3[i]));
    b3:=b3 and (not b1 or (c3[i]>=c1[i])) and (not b2 or (c3[i]>=c2[i]));
    if Ord(b1)+Ord(b2)+Ord(b3)=1 then Break;
  end;
  if b1      then Write(s1)
  else if b2 then Write(s2)
             else Write(s3);
Для делфи 100% прокатит, для паскаляабц - разве что фукции StringOfChar нет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.02.2015 в 18:35. Причина: Исправил ошибку
Аватар вне форума Ответить с цитированием
Старый 14.02.2015, 19:09   #3
alex 2000
Пользователь
 
Регистрация: 06.02.2012
Сообщений: 16
По умолчанию

Спасибо, большое, на PascalABC все работает, правда на сайте ошибка в 3 тесте, вот мой окончательный код:
Код:
var
  s1, s2, s3, c1, c2, c3: string;
  b1, b2, b3: boolean;
  n: char;
  i: integer;

begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);
  read(n);
  while (n <> ' ') do
  begin
    s1 := s1 + n;
    read(n);
  end;
  read(n);
  while (n <> ' ') do
  begin
    s2 := s2 + n;
    read(n);
  end;
  read(s3);
  c1 := StringOfChar('0', 100 - Length(s1)) + s1;
  c2 := StringOfChar('0', 100 - Length(s2)) + s2;
  c3 := StringOfChar('0', 100 - Length(s3)) + s3;
  b1 := True; b2 := True; b3 := True;
  for i := 1 to 100 do 
  begin
    b1 := b1 and (not b2 or (c1[i] >= c2[i])) and (not b3 or (c1[i] >= c3[i]));
    b2 := b2 and (not b1 or (c2[i] >= c1[i])) and (not b3 or (c2[i] >= c3[i]));
    b3 := b3 and (not b1 or (c3[i] >= c1[i])) and (not b2 or (c3[i] >= c2[i]));
    if Ord(b1) + Ord(b2) + Ord(b3) = 1 then Break;
  end;
  if b1      then Write(s1)
  else if b2 then Write(s2)
  else Write(s3);
end.
Update: понял в чем ошибка, нужно добавить еще read(n); перед первым циклом, код исправил

Последний раз редактировалось alex 2000; 15.02.2015 в 07:52. Причина: Решил
alex 2000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
runtime error shalgan Помощь студентам 5 23.11.2013 13:02
Runtime error oban11 Помощь студентам 4 16.11.2010 22:47
Runtime Error ultrasfan Общие вопросы C/C++ 3 12.10.2010 16:16
Runtime Error RoS Qt и кроссплатформенное программирование С/С++ 7 06.09.2010 16:44
runtime error 2 в delphi Tina94 Общие вопросы Delphi 7 03.01.2010 21:23