перевод чисел в паскале #720225


#0 by program345
доброго вечера! задача перевести число из десятичной системы исчисления в любую. вот мой вариант решения: 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 by ObjectRelationModel
было
#2 by User_Agronom
Рекурсия... Процедура... Автор, подумай сам. На паскалевских оболочках пошаговый проход нормально организован.
#3 by program345
вот рабочий вариант, но без рекурсии: //! 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 by User_Agronom
Код языка 1С: Функция Перевод(аЧисло,аОснование)     Цифери = "0123456789ABCDEF";     Результат = "";     Пока аЧисло>0 цикл         Результат = ""+Сред(Цифери,аЧисло%аОснование+1,1)+Результат;         аЧисло = Цел(аЧисло/аОснование);     КонецЦикла;     Возврат Результат КонецФункции На Паскаль переведи сам.
#5 by User_Agronom
+ В Паскале String можно рассматривать как Array of Char, т.е. один символ можно не вырезать, а получать его по номеру как элемент массива. Учти это!
#6 by Крошка Ру
>>перевести число из десятичной системы исчисления в любую >>'введенное основание не поддерживается!' Вижу противоречие!
#7 by User_Agronom
Ты код ТС видишь? Что он в пример приводит. Нет противоречий в !
#8 by Torquader
На самом деле, нужно понимать, что внутри компьютера число хранится в двоичном виде, и перевод проводится только в момент вывода числа на экран. Реально ->(Машинное представление)->(Любое основание) Для вывода числа в системе с основанием N мы должны последовательно делить число на N, пока оно больше N, а остатки выводить как цифры числа, начиная с самой младшей. Не забываем, что целое число может занимать M-байт в общем случае, поэтому, деление нужно проводить побайтово, пока весь массив байт, кроме последнего не станет равен нолю.
#9 by User_Agronom
...но и в бреду говорил только то, что всем известно:    -- Волга впадает в Каспийское море... Лошади кушают овес и сено... А.П. Чехов. Удивил на форуме программистов формальным описанием перевода чисел из одной системы счисления в другую!
#10 by Жан Пердежон
помню в школе такие задачки были, классе в 8-9
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С