Подскажите как вырезать задавание точности и блок схему, в сих схемах, как и в паскале, чайник(((
uses
CRT;
const
a: string[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; {задаём строку для поиска
в ней символов}
var
n, r: real;
rez, s, s2, s3: string;
t, cc, ind, cc2, k: integer;
{процедура для разделения дробной и целой части числа}
procedure Del(var ss: string);
var
i: integer;
begin
ind := 0;
s2 := '';
for i := 1 to length(ss) do {идём по строке}
if ss[i] in [',', '.'] then {если символ входит в множество то}
begin
ind := i; {запомнили его индекс}
break{прервали цикл}
end
else {иначе}
s2 := s2 + ss[i]; {пишим в строку по символам целую часть}
s3 := ''; {инициализируем переменную}
if ind <> 0 then {если символ из множества [',','.'] есть в строке то}
begin
delete(s, 1, ind); {удаляем с первой позиции по ind элементы из строки
(т.е. целую часть + [',','.'])}
s3 := ss; {остаток исходной строки заносим в s3 (т.е. дробную часть)}
end;
end;
{функция для перевода (целой части числа) из любой СС в 10-ю}
function ToDec(var ss: string; cc: byte): integer;
var
i, n, sum: integer;
begin
sum := 0;
n := length(ss); {присваиваем n - длину строки ss}
for i := 1 to n do {идём по строке}
begin
dec(n); {уменьшаем счётчик на 1}
sum := sum + round((pos(ss[i], a) - 1) * exp(ln(cc) * n)); {суммируем число (найденное в
строке по позиции символа-1 (pos(ss[i],a)-1)) в степени dec(n)}
end;
ToDec := sum;
end;
{функция для перевода целой части числа из 10-й в любую сс}
function Cel(d: real; c: integer): string;
var
s: string;
n2: integer;
begin
n2 := round(int(d)); {берём целую часть от числа}
s := '';
repeat
s := ((a[n2 mod c + 1]) + s); {повторяем пока число не будет равно нулю берём целую часть при
делении числа на основание и берём остаток + 1 от деления целой части на 16, записываем
результат посимвольно в строку s}
n2 := n2 div c;
until (n2 = 0);
Cel := s;
end;
{функция для перевода дробной части числа из 10-й в любую сс}
function Drob(var d: real; t, c: integer): string;
var
s: string;
l2, k, n3: real;
i, l: integer;
begin
k := d - int(d);
s := '';
i := 0;
if t <> 0 then {если точность не равна 0 то переводим}
begin
repeat
l2 := k * c;
k := frac(l2); {умножаем число на c (основание СС) берём целую часть и
снова умножаем дробную}
s := s + a[round(int(l2)) + 1]; {ищим в строке элемент на позиции round(int(l2))+1
(целая часть от умножения числа на c +1)}
inc(i); {увеличиваем счётчик}
until i = t;
end
else {иначе}
s := '0'; {присваиваем s '0'}
Drob := s;
end;
{перевод (дробной части) из произвольной сс в 10-ю}
function drob2(ss: string; c: integer): real;
var
i: integer;
sum: real;
begin
for i := 1 to length(ss) do {идём по строке (по дробной части)}
sum := sum + (pos(ss[i], a) - 1) * exp(ln(c) * -i); {умножаем позицию символа строки -1
на онование системы счисления в степени -i}
drob2 := sum;
end;
begin
ClrScr;
repeat
write('Из какой будем переводить сс: ');
readln(cc2)
until cc2 in [2..36]; {проверка ввода}
write('Введите СС в которую хотите перевести: ');
readln(cc);
if cc2 = 10 then {если перевод из 10 то юзаем функции Cel и Drob}
begin
write('Введите число в ', cc2, '-й СС: ');
readln(n);
write('Введите точность: ');
readln(t);
if ((n - round(int(n))) = 0) then {если дробная часть числа=0 то юзаем Cel}
rez := Cel(n, cc)
else {иначе юзаем обе и добавляем , между дробной и целой}
rez := Cel(n, cc) + ',' + Drob(n, t, cc);
end
else {иначе если перевод не из 10-й СС}
begin
write('Введите число в ', cc2, '-й СС: ');
readln(s);
Del(s); {разбиваем на дробную и целую части строку}
if ind = 0 then
rez := Cel(ToDec(s2, cc2), cc) {переводим сначала из любой в 10-ю сс, а затем из
10-й в любую}
else
begin
r := drob2(s3, cc2); {переводим дробную часть числа}
rez := Cel(ToDec(s2, cc2), cc) + ',' + drob(r, length(s3), cc); {переводим из любой сс
в другую }
end;
end;
write(rez); { THE END }
readkey
end.
P.S. Как выдачу результата бегущей строкой сделать???