|
перевод чисел в паскале | ☑ | ||
---|---|---|---|---|
0
program345
16.09.14
✎
15:26
|
доброго вечера!
задача перевести число из десятичной системы исчисления в любую. вот мой вариант решения: var a,b:integer; procedure q(a,b:integer); var c:integer; d,f:string; begin if a>0 then q(a div b,b); if a>0 then begin c:=a mod b end; case c of 0..9:str(c,d); 10:d:='A'; 11:d:='B'; 12:d:='C'; 13:d:='D'; 14:d:='E'; 15:d:='F'; else writeln('введенное основание не поддерживается!'); end; f:=f+d; write(f); end; begin writeln('введите число: '); readln(a); writeln('в какую систему переводим число: '); readln(b); q(a,b); end. только вот незадача, прога выводит 0 вначале числа и даже if a>0 then не робит. как это можно исправить? |
|||
1
ObjectRelation Model
16.09.14
✎
15:28
|
||||
2
User_Agronom
16.09.14
✎
15:29
|
Рекурсия...
Процедура... Автор, подумай сам. На паскалевских оболочках пошаговый проход нормально организован. |
|||
3
program345
16.09.14
✎
15:29
|
вот рабочий вариант, но без рекурсии:
//! var a,b:integer; procedure q(a,b:integer); var c,f:integer; d,e:string; begin while a>0 do begin c:=a mod b; case c of 0..9:str(c,d); 10:d:='A'; 11:d:='B'; 12:d:='C'; 13:d:='D'; 14:d:='E'; 15:d:='F'; else writeln('перевод в данную систему не поддерживается!!!'); end; e:=e+d; a:=a div b; end; f:=length(e); while f>0 do begin write(e[f]); f:=f-1; end; end; begin writeln('введите число: '); readln(a); writeln('в какую систему переводим число: '); readln(b); q(a,b); end. //! |
|||
4
User_Agronom
16.09.14
✎
15:43
|
Код языка 1С:
Функция Перевод(аЧисло,аОснование) Цифери = "0123456789ABCDEF"; Результат = ""; Пока аЧисло>0 цикл Результат = ""+Сред(Цифери,аЧисло%аОснование+1,1)+Результат; аЧисло = Цел(аЧисло/аОснование); КонецЦикла; Возврат Результат КонецФункции На Паскаль переведи сам. |
|||
5
User_Agronom
16.09.14
✎
15:46
|
+(4) В Паскале String можно рассматривать как Array of Char, т.е. один символ можно не вырезать, а получать его по номеру как элемент массива.
Учти это! |
|||
6
Крошка Ру
16.09.14
✎
15:57
|
(0)>>перевести число из десятичной системы исчисления в любую
>>'введенное основание не поддерживается!' Вижу противоречие! |
|||
7
User_Agronom
16.09.14
✎
16:11
|
(6) Ты код ТС видишь? Что он в пример приводит.
Нет противоречий в (0)! |
|||
8
Torquader
17.09.14
✎
23:04
|
На самом деле, нужно понимать, что внутри компьютера число хранится в двоичном виде, и перевод проводится только в момент вывода числа на экран.
Реально (10)->(Машинное представление)->(Любое основание) Для вывода числа в системе с основанием N мы должны последовательно делить число на N, пока оно больше N, а остатки выводить как цифры числа, начиная с самой младшей. Не забываем, что целое число может занимать M-байт в общем случае, поэтому, деление нужно проводить побайтово, пока весь массив байт, кроме последнего не станет равен нолю. |
|||
9
User_Agronom
17.09.14
✎
23:54
|
(8) ...но и в бреду говорил только то, что всем известно:
-- Волга впадает в Каспийское море... Лошади кушают овес и сено... А.П. Чехов. Удивил на форуме программистов формальным описанием перевода чисел из одной системы счисления в другую! |
|||
10
Жан Пердежон
18.09.14
✎
17:48
|
помню в школе такие задачки были, классе в 8-9
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |