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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2017, 11:14   #1
FlayGlam
Пользователь
 
Регистрация: 21.12.2015
Сообщений: 38
По умолчанию Наименьшая система счисления

Помогите с задачей
Известно, что основанием позиционной системы счисления называют количество различных символов, используемых для записи чисел в данной системе счисления. Также известно, что любое число x в b-ичной системе счисления имеет следующий вид: x = a0*b0 + a1*b1 +...+ an*bn, где b ≥ 2 и 0 ≤ ai < b
Для записи чисел в b-ичной системе счисления, где b ≤ 36, могут быть использованы первые b символов из следующего списка: 0, 1, …, 9, A, B, …, Z. Например для записи чисел в троичной системе счисления используются символы 0, 1, 2, а в двенадцатиричной — 0, 1, …, 9, A, B
Требуется написать программу которая по входной строке S определит, является ли данная строка записью числа в системе счисления, с основанием не большим 36, и, если является, определит минимальное основание этой системы счисления.
Формат входного файла

Во входном файле содержится строка S.
Формат выходного файла

В выходном файле должно содержаться единственное число:
−1 — если строка S не может быть представлена как число в какой-либо системе счисления, с основанием не большим 36
Наименьшее основание системы счисления в которой строка S является записью числа — в противном случае
Ограничения

Длина строки S не превосходит 255 символов
Коды символов во входном файле лежат в диапазоне от 32 до 127 включительно

Вот код моей программы

Код:
program sistem;
var
  f: text;
  s: string;
  n, i, k, max: byte;
 
begin
  assign(f, 'input.txt');
  reset(f);
  readln(f, s);
  close(f);
  n := length(s);
  k := 0;
  max := ord(s[1]);
  for i := 1 to n do
  begin
    if not (s[i] in ['0'..'9', 'A'..'Z']) then k := 1;
    if ord(s[i]) > max then max := ord(s[i])
  end;
  assign(f, 'output.txt');
  rewrite(f);
  if (k = 1) or (max = 48) then write(f, '-1')
  else if max in [49..57] then write(f, max - 47)
  else write(f, max - 54);
  close(f)
end.

Отправляю программу на проверку - пишет ошибка выполнения
Что не так?
FlayGlam вне форума Ответить с цитированием
Старый 23.06.2017, 11:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от FlayGlam Посмотреть сообщение
Отправляю программу на проверку - пишет ошибка выполнения
код написан плохо.
ну, например, подумайте, что будет, если будет пустая строка?
чему будет равно k и что будет, если из max (кстати, будет или ошибка или там будет мусор) отнять 54, то возможно, Вы просто получите отрицательное значение в переменной типа byte.
Это так, навскидку.

p.s. если речь идёт про acmp.ru, то удобнее не объявлять f:text, а использовать стандартные типы input, output (см. тут)
Код:
//Вариант №2
var a,b : integer;
 
begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);
  read(a,b);
  write(a+b)
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2017, 11:37   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не сказано, что строка во входном не может быть пустой. Чего не проверяешь? И одни нули во входном - это двоичная, а у тебя -1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Система счисления ArchiCurtis Помощь студентам 10 07.04.2012 13:14
Система счисления medic357 Помощь студентам 2 29.09.2010 17:05
Система счисления artemavd Общие вопросы Delphi 10 04.07.2010 19:00
Система счисления Alex_sim Microsoft Office Excel 4 20.04.2010 14:04
система счисления с 2 в 16 never smile Помощь студентам 0 19.03.2010 16:30