Feur_GOR Posted February 16, 2005 Report Share Posted February 16, 2005 Нужна прога для решений задач по информатике, которая переводит числа из одной системы счисления в другую, не подскажите есть ли такая или нет, и если нет, то не хотите ли создать такую прогу?? Quote Link to comment Share on other sites More sharing options...
Тролль Posted February 16, 2005 Report Share Posted February 16, 2005 max15 Зайди на Софтодром, набери там в поиске слово "счисления" и выбирай программу, какая больше понравится. Quote Link to comment Share on other sites More sharing options...
ZnoY Posted February 16, 2005 Report Share Posted February 16, 2005 а калькулятор винды для чего?нажми инженерный режим Quote Link to comment Share on other sites More sharing options...
aTeos Posted February 17, 2005 Report Share Posted February 17, 2005 а калькулятор винды для чего?нажми инженерный режим Поясню на всякий случай. В обычном калькуляторе Windows есть такая функция. Запускай его, делай Вид-Инженерный, потом слева вверху выбирай нужную СС, вводи в ней число, а потом там же щелкай по другой СС. Вот тебе и конвертация Quote Link to comment Share on other sites More sharing options...
Feur_GOR Posted February 20, 2005 Author Report Share Posted February 20, 2005 aTeos , ZnoY , Тролль , пацаны, ну просто спасибо, очень молодцы!! Добавлено : [mergetime]1108937190[/mergetime] Вот только проблемка одна, мне важно понять как всё это дело просиходит, а не тупо списать с компа, а потом сдать и получить 5, это не интересно!! Quote Link to comment Share on other sites More sharing options...
Payne Posted February 28, 2005 Report Share Posted February 28, 2005 max15 мне важно понять как всё это дело просиходит Короче, если хочешь понять, как все это происходит, почитай учебник по информатике - там все очень хорошо описано про позиционные системы счисления и про то, как переводить из одной системы в другую... Тебе могу предложить исходник своего модуля для работы с двоичными и десятичными числами. Если нужны и шестнадцатиричные, и восьмиричные - процесс их перевода очень похож. Если нужно, обращайся, попробую написать и для них. unit BinDecTranslate; interface {Проверяем, не содержит ли введенное двоичное число другие цифры, кроме 0 и 1} function BinCheck (a: string): boolean; {Проверяем, не содержит ли введенное десятичное число лишних знаков} function DecCheck (a: string): boolean; {Функция будет возвращать результат расчета a в степени b} function power (a,b: integer): integer; {Функция будет выводить максимальную целую степень двойки для данного числа} {Это нужно при переводе из десятичной в двоичную систему вычитанием степеней} function MaxPower (a: integer): integer; {Функция будет переводить числа из двоичной системы счисления в десятичную} functi[/b]on BinToDec (b: string): real; {Функция будет возвращать двоичную строку, соответвтвующую десятничному числу} function DecToBin (d: integer): string; implementation {------------------------------------------------------------------------------} function BinCheck (a: string): boolean; var i: word; {счетчик цикла} begin BinCheck := true; {сначала будет считаться, что число введено правильно} for i := 1 to length(a) do {затем проверяем каждый символ…} if (ord(a)<48) or (ord(a)>49) then BinCheck := false; {…по ASCII-коду} {и если хоть один из них отличен от 0 или 1, то функции присваиваем false} end; {------------------------------------------------------------------------------} function DecCheck (a: string): boolean; var i: word; {счетчик цикла} begin DecCheck := true; {сначала будет считаться, что число введено правильно} for i := 1 to length(a) do {затем проверяем каждый символ} if (ord(a)<48) or (ord(a)>57) then DecCheck := false; {и если хоть один из них отличен десятичных цифр, то функции присваиваем false} end; {------------------------------------------------------------------------------} function power (a,b: integer): integer; var i: integer; {это у нас будет счетчиком цикла} res: integer; {а это - промежуточный результат} begin res := 1; {ведь есть истина - любое число в нулевой степени равно единице!} for i := 1 to b do res := res*a; {вот и возведение в степень} power := res; {осталось лишь присвоить функции значение результата} if a=0 then power := 0; {любая степень нуля будет равна нулю} end; {------------------------------------------------------------------------------} function MaxPower (a: integer): integer; var i: word; {это счетчик цикла repeat…until} temp: integer; {промежуточный результат} begin i := 0; repeat i := i+1; {будем увеличивать степень до тех пор…} temp := power(2,i); until temp > a; {…пока значение двойки в следующей степени не превысит число} MaxPower := i-1; end; {------------------------------------------------------------------------------} function BinToDec (b: string): real; var i, temp, pow: word; {значит так, здесь - счетчик, разряд (он будет выделяться из двоичной строки) и степень двойки} res: real; {ну а это результат, как и в предыдущей функции} begin res := 0; {начальное значение результата} pow := 0; {степень двойки при первом разряде - нулевая} for i := length(b) downto 1 do {выделяем последовательно все разряды...} begin temp := StrToInt(b); {...} res := res + temp*power(2,pow); {...и рассчитываем результат} pow := pow + 1; {степень двойки увеличим, т.к. номер разряда увеличивается} end; BinToDec := res; {опять-таки присваиваем функции значение результата} end; {------------------------------------------------------------------------------} function DecToBin (d: integer): string; var m, t: integer; i: integer; {максимальная степень, промежуточное число и счетчик} res: string; temp: char; {результат и промежуточные символы} begin t := d; {присваиваем t само число, которое нужно перевести} res := ''; {результат сначала будет равен пустой строке, т.к. его еще нет } m := MaxPower(d); {максимальная степень двойки для числа переводимого числа…} for i := m downto 0 do {…от нее и будем начинать обратный отсчет} begin {если i-тая степень двойки меньше, чем промежуточное число, то…} if power(2,i)<=t then temp := '1' else temp := '0'; {добавляем 1, иначе - 0} {и вычитаем из числа другое число: 2 в степени i} {например, макс. степень двойки для 114 – это 6. Тогда отнимаем От 114 2 в степени 6. 114-64=50. Макс. степень этого нового числа находится при следующем прохождении цикла} if power(2,i)<=t then t := t-power(2,MaxPower(t)); res := res+temp; {добавляем к результату полученный символ: 0 или 1} end; DecToBin := res; {после цикла результат готов} end; end. Quote Link to comment Share on other sites More sharing options...
AleXGray Posted March 10, 2005 Report Share Posted March 10, 2005 Дома посмотрю, где-то писал, из любой системы в любую, но она на с++. Это не подходит? Quote Link to comment Share on other sites More sharing options...
Feur_GOR Posted March 13, 2005 Author Report Share Posted March 13, 2005 Спасибо всем, я сам уже научился! Quote Link to comment Share on other sites More sharing options...
Guest Форматцевт Posted April 14, 2005 Report Share Posted April 14, 2005 max15 извини, может я и террорист, но есть такой язык форт, так в нем это проще все решается, и исходники есть. В этом языке система текущего исчисления задается числом 8 разрядным от 2 до 255. Посмотри его, если будет не лень, может он тебе и понравится за одно познакомишься с ОПЗ :D Quote Link to comment Share on other sites More sharing options...
freeloader Posted April 21, 2005 Report Share Posted April 21, 2005 Как хорош Basic :) Hex; Oct; правдо, для двоичного самому писать надо, но это не сложно, если знаешь принцип ;) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.