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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2014, 22:50   #1
adrenalin142
Пользователь
 
Регистрация: 26.04.2014
Сообщений: 20
По умолчанию Перевод из 10-ой системы счисления в 6-ую(Pascal)

Здравствуйте! Нужна помощь понимающих людей.
Есть программка, но не могу разобраться с функциями и процедурами, хотелось бы понять как они работают и зачем они вообще нужны в данной программе.
Текст программы:
Код:
program FromDecTo6;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

function FromDecInt(intPart:Integer):string;
var
  s: String;
const
  digit:string[16]='0123456';
begin
  s:='';
  repeat
    s:=digit[(intPart mod 6)+1]+s;
    intPart:=intPart div 6;
  until intPart=0;

  FromDecInt := s;
end;

function FromDecDecimal(floatPart:Real):string;
var
  s: String;
  j,a: Integer;
begin
  s := s + '.';
  for j := 0 to 5 do begin
    floatPart := floatPart * 6;
    a := Trunc(floatPart);
    s := s + IntToStr(a);
    floatPart := Frac(floatPart);

    if (floatPart = 0) then break;
  end;

  FromDecDecimal := s;
end;

function FromDec(n:Real):string;
var
  s:String;
const
  digit:string[16]='0123456';
begin
  s := FromDecInt(Abs(Trunc(n)));

  if (Frac(n) <> 0.0) then begin
    s := s + FromDecDecimal(Abs(Frac(n)));
  end;

  FromDec:=s;
end;

function checkErrorEmpty(value:String): Boolean;
begin
 if (length(value) < 1) then begin
    Writeln('   Ошибка ввода: Ничего не введено');
    checkErrorEmpty := true;
  end else begin
    checkErrorEmpty := false;
  end;
end;

function checkErrorFirstCharacter(value:String):Boolean;
begin
  if (((Ord(value[1]) < 48) OR (Ord(value[1]) > 57)) AND (value[1] <> '-')) then begin
    Writeln('   Ошибка ввода исходного числа: позиция номер 1');
    checkErrorFirstCharacter := true;
  end else begin
    checkErrorFirstCharacter := false
  end;
end;

function checkErrorCharacters(value:String):Boolean;
var
  isDecimalPart: Boolean;
  i: Integer;
begin
  isDecimalPart := false;
  checkErrorCharacters := false;

  for i:= 2 to Length(value) do begin
    if (((Ord(value[i]) < 48) OR (Ord(value[i]) > 57)) AND (value[i] <> '.')) then begin
        Writeln('   Ошибка ввода исходного числа: позиция номер ',i);
        checkErrorCharacters := true;
        Break;
    end;

    if (value[i] = '.') then begin
      if (isDecimalPart = false) then begin
        isDecimalPart := true;
        Continue;
      end else begin
        Writeln('   Ошибка ввода исходного числа: позиция номер ',i);
        checkErrorCharacters := true;
        Break;
      end;
    end;
  end;
end;

function checkErrors(value:String):Boolean;
var
  isError: Boolean;
begin
  isError := checkErrorEmpty(value);

  if (isError = false) then
    isError := checkErrorFirstCharacter(value);

  if (isError = false) then
    isError := checkErrorCharacters(value);

  checkErrors := isError;
end;

procedure InputValue(var value:String; var isError:Boolean);
begin
  Write('   Введите действительное 10-ичное число: ');
  Readln(value);
  Writeln('//-----------------------------------------------------------------------------');

  isError := checkErrors(value);
end;

procedure OutputResult(oldValue:String; newValue: String; isError:Boolean);
begin
  if (oldValue[1] = '-') then
    newValue := '-' + newValue;

  if (isError = false) then
    Writeln('   6-ое представление: ', newValue, '  десятичного числа: ',oldValue);

  Writeln('//-----------------------------------------------------------------------------');
end;

var
  DEC: String;
  error: Boolean;
  result: String = '';
begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);

  DecimalSeparator := '.';

  Writeln('//-----------------------------------------------------------------------------');
  Writeln('   Приложение для перевода 10-ых действительных чисел в 6-ую систему счисления');
  Writeln('//-----------------------------------------------------------------------------');

  InputValue(DEC, error);

  if (error = false) then
    result := FromDec(StrToFloat(DEC));

  OutputResult(DEC, result, error);

  Readln;
end.
Как я понял функция FromDecInt определяет значение числа и возвращает полученный результат в основную программу.
FromDecDecimal - Выводит разряды шестеричного представления. Верно? И что делают другие функции?
adrenalin142 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из одной системы счисления в другую (Pascal) Keti Помощь студентам 2 25.12.2011 20:59
Pascal. перевод из десятичной системы счисления в двоичную Xeon332 Помощь студентам 3 24.01.2011 13:54
Очень нужно! Перевод системы счисления pascal evklid Помощь студентам 7 24.01.2011 12:31
Перевод числа из одной системы счисления в другую (Pascal) street_spirit Помощь студентам 2 06.04.2010 23:36