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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2011, 13:55   #1
Ulq
Пользователь
 
Аватар для Ulq
 
Регистрация: 17.08.2011
Сообщений: 14
По умолчанию Exitcode_205

Пишет exitcode 205)НЕ ммогу понять, что ему не нравиться) Надо из 16(ричного)2разр. перевести в десятичный.
Код:
program p_149;
uses crt;
var a:string[2];
k,g,z,r:real;
d:char;
b:'A'..'F';
i,n,l,x,c:integer;
BEGIN
clrscr;
n:=-1;
g:=0; z:=0;
        write('input 2razr.|./16-richnoe 4islo: ');readln(a);
            for i:=2 downto 1 do
   while (a[i]in[b,'0'..'9'])do  begin
     for l:=2 downto 1 do begin
       n:=n+1;
         k:=exp(ln(16)*n);
         val(a,x,c);
      if c<>0 then begin r:=ord(a[i]); g:=g+(r-55)*k;
      end
        else z:=z+x;
      end;
      end;
      write(z+g);
readln;
END.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Ulq; 17.08.2011 в 16:15.
Ulq вне форума Ответить с цитированием
Старый 17.08.2011, 15:06   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

ну что сразу бросается в галаза, эт лишняя запятая
Код:
d,:char;
unbanned вне форума Ответить с цитированием
Старый 17.08.2011, 15:24   #3
Ulq
Пользователь
 
Аватар для Ulq
 
Регистрация: 17.08.2011
Сообщений: 14
По умолчанию

нет, это не то.Просто я когда копировал код убирал лишние переменные, а так все работает, только выводит "exitcode 205", что с ним то делать?
Ulq вне форума Ответить с цитированием
Старый 17.08.2011, 16:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да потому что у вас полная АХИНЕЯ написана!
начиная с того, что Вы ЦЕЛИКОМ переводите число A (хотя думаете, что работаете с одним разрядом)
и заканчивая БЕСКОНЕЧНЫМ циклом
Код:
while (a[i]in[b,'0'..'9'])do  begin
внутри While переменная I не изменяется!!
вот внутри цикла и происходит ошибка 205 - переполнение вещественного числа!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2011, 16:26   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

варианты решения могут быть от таких (относительно нечестных - используется тот факт, что VAL сам преобразует шестнадцатеричные числа - если в начале строки есть знак $
Код:
program p_149;
uses crt;
var
  a: string;
  err : integer;
  N : longint;
begin
  clrscr;
  write('input 16-richnoe 4islo (lybogo ramera): ');
  readln(a);
  Val('$'+a, N, err);
  if err<>0 then WriteLn('Osibka! Vy vveli ne 16-richnoe chislo!')
  else WriteLn('Rezultat raven ',N);
  Readln
end.
и заканчивая таким:
Код:
uses crt;

function getValue(hex: char):integer;
begin
  if hex in ['0'..'9'] then
      getValue:= Ord(hex) - 48
  else if UpCase(hex) in ['A'..'F'] then
      getValue:= Ord(UpCase(hex)) - 55
  else begin 
     WriteLn('Wrong symbol: '+Hex);
     WriteLn;
     WriteLn('Press enter to exit...');
     Readln;
     Halt;
  end
end;

function HexToInt(hex: string): integer;
var
  i,r: Integer;
begin
  r:=0;
  for i := 1 to Length(hex) do
  begin
    r:=r*16+getValue(hex[i]);
  end;
  HexToInt:=r;
end;

var
  a: string;
begin
  clrscr;
  write('input 16-richnoe 4islo (lybogo ramera): ');
  readln(a);
  WriteLn('Rezultat raven ', HexToInt(a));
  readln
end.


p.s. ваш алгоритм тоже можно довести до ума.
Но мой Вам совет. Вместо n := n + 1; k := exp(ln(16) * n);
пишите просто: k := k * 16;
Уберите тип real - работайте исключительно с целочисленными типами.
while (a[i] in ...) замените на if (a[i] in )
там, где val(a, x, c); нужно val(a[i], x, c);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2011, 16:27   #6
Ulq
Пользователь
 
Аватар для Ulq
 
Регистрация: 17.08.2011
Сообщений: 14
По умолчанию

Ясно, а другое в голову не приходит) У меня был код, но если в нем поставить сначала букву, а потом цифру тоже ничего не получалось), а третий:
Я писал

Код:
a:string[2];
b:char;
n:integer;
readln(a);
for i:=2 downto 1
begin
b:=a[i];
if b:='A' then n:=10;
end;
Тут все получилось , но надо каждому символу от "A".."F" писать вот это
" if b:='A' then n:=10;"И от 0..9 - тоже самое.И он получился здоровенный и не 'красивый'=)
Подскажите плиз как её написать...
Ulq вне форума Ответить с цитированием
Старый 17.08.2011, 16:30   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ulq
смотрите выше...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2011, 16:40   #8
Ulq
Пользователь
 
Аватар для Ulq
 
Регистрация: 17.08.2011
Сообщений: 14
По умолчанию

спасибо, в 2 код немного не понятен), но разберусь.Просто я только недавно начал учить, и сейчас решаю задачи по сборнику, а эту никак не получалось) Еще раз спасибо)
Ulq вне форума Ответить с цитированием
Старый 17.08.2011, 21:33   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
спасибо, в 2 код немного не понятен), но разберусь.
Пожалуйста.

как не странно, но 2-й пример очень близок к вашему алгоритму (ну, если не считать ошибок реализации).

Если не разберётесь - обращайтесь.
Это - "азбука", поэтому Вам обязательно "разжуют" как и что..

Ну и рекомендую ещё свой вариант довести до ума согласно вышеприведённым замечаниям.

p.s. кстати, Вы бы легко сами нашли ошибки в вашем коде, если сделали так, как я - воспользовались пошаговой отладкой!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.08.2011, 12:31   #10
Просто лис
 
Регистрация: 20.07.2011
Сообщений: 8
По умолчанию

16-чная 2-чная
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
Вставляем число в 16 системе в переменную String копируем по символу, сравниваем, находим, удаляем, вставляем.
Просто лис вне форума Ответить с цитированием
Ответ


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