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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2009, 21:06   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Помогите с прогой (исправьте ошибки)

Вот задача:
Число вводится своим двоичным представлением (длина числа не
превышает 10000 двоичных разрядов). Необходимо определить делится
ли число на 15.

Вот что я написал:
Код:
program BinDivFifteen;
var
  Input, Output: Text;
  Bin, Hex: string;
  i, Len, BinMod, b, Err, Temp: integer;
  Res: boolean;

function BinToHex(Input: string): string;
begin
  if Input = '0000' then BinToHex := '0' else
  if Input = '0001' then BinToHex := '1' else
  if Input = '0010' then BinToHex := '2' else
  if Input = '0011' then BinToHex := '3' else
  if Input = '0100' then BinToHex := '4' else
  if Input = '0101' then BinToHex := '5' else
  if Input = '0110' then BinToHex := '6' else
  if Input = '0111' then BinToHex := '7' else
  if Input = '1000' then BinToHex := '8' else
  if Input = '1001' then BinToHex := '9' else
  if Input = '1010' then BinToHex := 'A' else
  if Input = '1011' then BinToHex := 'B' else
  if Input = '1100' then BinToHex := 'C' else
  if Input = '1101' then BinToHex := 'D' else
  if Input = '1110' then BinToHex := 'E' else
  if Input = '1111' then BinToHex := 'F' else
  BinToHex := 'Error';
end;

function HexSum(Input: string): integer;
  function HexToNum(Input: string): integer;
    begin
      if Input = 'A' then HexToNum := 10 else
      if Input = 'B' then HexToNum := 11 else
      if Input = 'C' then HexToNum := 12 else
      if Input = 'D' then HexToNum := 13 else
      if Input = 'E' then HexToNum := 14 else
      if Input = 'F' then HexToNum := 15 else
        begin
        Val(Input, Temp, Err);
        HexToNum := Temp;
    end;
begin
  for i := 1 to Length(Input) do
    Temp := Temp + HexToNum(Input[i]);
  HexSum := Temp;
end;

begin
  b := 1;
  Res := false;
  |{File Variable Excepted}Assign(Input, 'Input1.txt');
  Reset(Input);
  Read(Input, Bin);
  Close(Input);
  BinMod := Length(Bin) mod 4;
  Len := Length(Bin) div 4;
  while BinMod <> 0 do
    begin
    Hex := '0' + Hex;
    BinMod := BinMod end;
    inc(b);
    end;
  for i := 1 to Len do
    begin
    Hex := Hex + Convert(Bin[b] + Bin[b+1] + Bin[b+2] + Bin[b+3]);
    inc(b);
    end;
  if HexSum(Hex) mod 15 = 0 then Res := true;
  Assign(Output, 'Output1.txt');
  Rewrite(Output);
  if Res then Write(Output, Bin + ' delitsa na 15') else
  Write(Output, Bin + ' ne delitsa na 15');
  Close(Output);
end.
С чего вдруг такая ошибка? Input же объявлен как Text!

Последний раз редактировалось k1r1ch; 17.10.2009 в 21:16.
k1r1ch вне форума Ответить с цитированием
Старый 17.10.2009, 21:25   #2
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Это вроде Делфи, как я понял. Тогда используйте AssignFile.
anGeee вне форума Ответить с цитированием
Старый 17.10.2009, 21:28   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Нет, я сам уже задолбался, но надо писать на Паскале! После Delphi сильно бесит, особенно отсутствие CodeInsight)
k1r1ch вне форума Ответить с цитированием
Старый 17.10.2009, 21:43   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Может быть компилятору не нравиться само имя переменой Input? (скорее всего так и есть).

Не надо называть переменые такими названиями, может произойти путаница.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 17.10.2009, 21:49   #5
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Исправил на Input1, щас пишет, что где то end забыл. Может неправильно вложенную функцию оформил (никогда до этого так не делал)?
k1r1ch вне форума Ответить с цитированием
Старый 17.10.2009, 21:52   #6
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Может тут... ибо мне показалось что end немного не от этого блока.

Код:
........
      if Input = 'F' then HexToNum := 15 else
        begin // Началось.
        Val(Input, Temp, Err);
        HexToNum := Temp;
    end;// Закончилось???
begin
  for i := 1 to Length(Input) do
    Temp := Temp + HexToNum(Input[i]);
  HexSum := Temp;
end;
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 17.10.2009, 23:46   #7
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Зачем такой длинный код? Можно в 1 строку переводить, если есть фрагмент st[1]st[2]st[3]st[4], то его 16ичное значение равно
8*pos(st[1],st1)+4*pos(st[2],st1)+2*pos(st[3],st1)+pos(st[4],st1), где st1='1'.
LeBron вне форума Ответить с цитированием
Старый 18.10.2009, 09:29   #8
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Счастье

LeBron, я бы не додумался! Спасибо!
Вавел из ГМТУ, спасибо за помощь, теперь все работает!
k1r1ch вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си++. Исправьте пожалуйста ошибки megavolt91 Помощь студентам 3 29.05.2009 16:02
помогите с прогой DeDoK Общие вопросы Delphi 7 09.05.2008 23:51
Свой "Пуск",исправьте плиз ошибки Marsik Помощь студентам 8 07.12.2007 15:28
Помогите с прогой DarthNemo Помощь студентам 2 06.05.2007 18:11