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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2012, 06:00   #1
EleF
 
Регистрация: 14.06.2012
Сообщений: 4
Вопрос Перевести число из пятеричной системы в десятичную

Есть задача: Дано 20-ти разрядное число в пятеричной системе, необходимо написать программу для перевода его в десятичную. Причем при вводе неправильного знака (>=5) программа должна об этом говорить. Вот что навоял, но есть несколько недостатков:
  1. Разрядность максимум 12 знаков (дальше начинает считать неправильно)
  2. Не до конца разобрался с синтаксисом (go to не работает должным образом).
Код:
program Kursovik;

var
  J, i, p: integer;
  Pyat: string;
  DEC: double;

label 1;
begin
  1:
  writeln('Введите пятеричное число');
  read(Pyat);
  DEC := 0;
  for J := 1 to Length(Pyat) do
  begin
    if StrToInt(Pyat[J]) >= 5 then
    begin
      writeln('Ошибка в ', j, ' Знаке. Проверьте данные.');
      goto 1;
    end
    else
      p := 1;
    for i := 1 To (J - 1) Do p := p * 5;
    DEC := DEC + StrToInt(Pyat[Length(Pyat) + 1 - J]) * p//Пересчет с "конца" исходного массива
  end;
  Writeln('В пятеричной системе  ', Pyat, ' = ', DEC, ' В десятичной системе');
end.
Большое спасибо за то, что уделили внимание

Последний раз редактировалось Stilet; 15.06.2012 в 10:05.
EleF вне форума Ответить с цитированием
Старый 15.06.2012, 08:34   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от EleF Посмотреть сообщение
  1. Разрядность максимум 12 знаков (дальше начинает считать неправильно)
  2. Не до конца разобрался с синтаксисом (go to не работает должным образом).
Чтоб правильно обрабатывать длинные числа, используй тип extended, а не double.
По синтаксису совет такой: НИКОГДА НЕ ИСПОЛЬЗУЙ goto. Если в опциях компилятора есть возможность отключить goto - СДЕЛАЙ это без тени сомнения. Твой код - это классический пример того, как можно изуродовать программу, применяя этот оператор.

Вот тебе твоя исправленная прога. Постарайся вникнуть и разобраться. Если будут вопросы - задавай. Извини, я твои (совершенно уродские) переменные переименовал в более приличные..
Код:
var
  i, p,e: integer;
  s: string;
  d: extended;

begin
  repeat
    writeln('Введите пятеричное число:');
    readln(s);
    e:= 0;
    for i:=Length(s) downto 1 do
      if not (s[i] in ['0'..'4']) then e:=i;
    if e>0 then
      writeln('Ошибка в ', e, '-м знаке. Проверьте данные.')
  until e=0;
  d:= 0;
  for i:= 1 to Length(s) do d:= d*5+ord(s[i])-ord('0');
  Writeln('В пятеричной системе ',s,' = ',d:0:0,' в десятичной системе');
end.
И последнее - обрати внимание на форматирование кода (отступы). Возьми мой код за пример и придерживайся таких правил. Это ОЧЕНЬ важно.
Успехов тебе.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 15.06.2012, 09:00   #3
EleF
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

Спасибо тебе большое. Только : Неизвестное имя 'extended'.
И еще
Цитата:
d:= 0;
for i:= 1 to Length(s) do d:= d*5+ord(s[i])-ord('0');
при d=0 произведение d*5 тоже ноль. Или я чего не понимаю?
EleF вне форума Ответить с цитированием
Старый 15.06.2012, 09:11   #4
AlexMas
Пользователь
 
Аватар для AlexMas
 
Регистрация: 30.05.2012
Сообщений: 69
По умолчанию

там же цикл. Сначала ноль, но при каждом проходе изменяется.
AlexMas вне форума Ответить с цитированием
Старый 15.06.2012, 09:19   #5
EleF
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

Понял, спасибо.
EleF вне форума Ответить с цитированием
Старый 15.06.2012, 09:51   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

AlexMas, спасибо за помощь, +1.
Цитата:
Сообщение от EleF Посмотреть сообщение
Спасибо тебе большое. Только : Неизвестное имя 'extended'.
Говори, какой у тебя компилятор, хватит уже в прятки играть.. ))
extended - это тип, введенный в TurboPascal, он также присутствует в FreePascal. Позиционировался для банковских вычислений. Занимает 10 байт, если помню правильно.. Он как бы вещественный, но очень удобен для целых чисел с большой разрядностью.

Так на чем ты работаешь? PascalABC?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 15.06.2012, 09:57   #7
EleF
 
Регистрация: 14.06.2012
Сообщений: 4
По умолчанию

PascalABC. В принципе 'real' хватило
EleF вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести число из десятичной системы в шестнадцатиричную Dasha_P Общие вопросы C/C++ 11 02.08.2019 23:03
Из троичной системы в десятичную KL1CK3R C# (си шарп) 3 16.10.2011 11:36
Перевод из шестнадцатеричной системы в десятичную AnderoN Общие вопросы Delphi 3 07.05.2011 19:55
Как перевести число из 256 системы счисления в десятичную ? alexprey Помощь студентам 5 24.11.2010 16:48