![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Kubus |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
в общем есть у меня курсавая. Задача написать программку перевода чисел из разных систем счисления в другие(с основаниями от 2 до 16) с дробной частью. Задача не новая да и не особо сложноя. Сделал я ее и понес к преподу. Там-то и выяснилось, что сделана она через одно местно, так как программка переводит отдельно дробную, отдельно целую часть, а это неправильно. Так вот может кто-нибудь возьмется помочь и отредактирует так, как надо? или мож у кого готовая есть? а то мне сдавать в понедельник, а у самого завал с мейплом, не успеваю. Буду очень, очень благодарен.
вот исходный текст:
Сообщение отредактировано: Kubus - 24.12.2005 23:08 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата программка переводит отдельно дробную, отдельно целую часть, а это неправильно. Надо полагать, твой преподаватель придумал новый алгоритм перевода дробных чисел? Ну, тогда пускай он поделится, и расскажет, каким образом ВМЕСТЕ переводить и целую и дробную часть... А мы поможем это запрограммировать... |
Kubus |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
я, наверное, неправильно выразился. То, что у меня есть берет целую часть и переводит и берет дробную часть и точно так же, как и целую ее переводит. А это, походу, неправильно Целая и дробная часть не равноправны.....) И еще она что-то про точность говорила. Хоть чуть-чуть стало понятнее?
Вообще-то эту программу писал не я, а сам я с паскалем особо не знаком. Поэтому получив текст неделю назад я сел, намутил четыре учебника по паскалю и стал построчно "переводить", а то надо же знать, что вообще сдаешь и как оно работает, да и вообще интересно..........) чуток в ней исправил\добавил, а то там графика убогая была так вот посидев ночь сегодня намутил вот такую штуку Код uses crt; const value = 0.1875; { число, которое будем переводить } base = 2; { в какую систему переводим } precision = 5; { точность } var ivalue, nbase, digit, k : integer; fvalue, eps : real; sym : char; begin ivalue := trunc(value); fvalue := value - ivalue; nbase := 1; while (ivalue >= nbase) do nbase := nbase * base; while (nbase > 1) do begin nbase := nbase div base; digit := ivalue div nbase; ivalue := ivalue - digit * nbase; if (digit < 10) then sym := chr(48+digit) else sym := chr(55+digit); write(sym); end; write('.'); eps := 1; for k := 1 to precision do eps := eps * base; for k := 1 to precision do begin digit := trunc(fvalue * base); fvalue := fvalue * base - digit; if (digit < 10) then sym := chr(48+digit) else sym := chr(55+digit); write(sym); if (fvalue < 1/eps) then break; end; writeln; readkey; end. ....вот по этой ссылке http://forum.pascalnet.ru/index.php?showt...993entry46993 Только проблема в том, что я не особо понимаю, что там написано. Построчно перевести не получилось.....) прикинул, что из моей программы нужно выкинуть, а что вставить. Например задаем новую переменную precision и вводим ее с клавиатуры. Переменная base у меня уже есть, только называется она radix. Переменная value - это, я так понимаю, str (хотя я могу ошибаться....). Далее invalue & fvalue - int & decimal соответственно. |
Kubus |
![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
подскажите, пожалуйста, что нужно изменить, чтоб этот кусочек счетал не из десятичной в двоичную, а из любой в любую?
|
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
подскажите, пожалуйста, что нужно изменить, чтоб этот кусочек счетал не из десятичной в двоичную, а из любой в любую? Код (* Function Dec2Hex (num: Word): String; { перевод из 10-ичной в 16-ичную } Function Dec2Bin (num: word): String; { перевод из 10-ичной в 2-ичную } Function Hex2Dec (hs:string): longint; { перевод из 16-ичной в 10-ичную } Function Bin2Dec (S: String): longint; { перевод из 2-ичной в 10-ичную } *) Function Dec2Hex (num: Word): String; var result: string; remainder: word; c: char; begin result := ''; while num <> 0 do begin remainder := num mod 16; num := num div 16; { или num := num shr 4 } if remainder < 10 then c := chr (remainder + ord ('0')) else c := chr (remainder + ord ('A') - 10); result := c + result; end; Dec2Hex := '$' + result end; Function Dec2Bin (num: word): String; var result: string; remainder: word; c: char; begin result := ''; while num <> 0 do begin remainder := num mod 2; num := num div 2; { или num := num shr 1 } c := chr (remainder + ord ('0')); result := c + result; end; Dec2Bin := result end; Function Hex2Dec (hs:string): longint; var res,k: longint; r,i: word; c: char; begin res := 0; k := 1; for i := length (hs) downto 1 do begin c := UpCase (hs[i]); case c of 'A'..'F': r := ord(c) - (ord('A') - 10); { ord (c) - 55 } '0'..'9': r := ord(c) - ord('0'); { ord (c) - 48 } else break end; inc (res, r * k); { res := res + r * k} k := k * 16; { или k := k shl 4 } end; Hex2Dec := res; end; Function Bin2Dec (S: String): longint; var i, bit: word; p, result: longint; Begin result := 0; p := 1; for i := length (S) downto 1 do begin bit := ord (S[i]) - ord ('0'); inc (result, bit * p); p := p * 2; { или p := p shl 1 } end; Bin2dec:=result; End; begin writeln (dec2bin (2004)); writeln (dec2hex (2004)); writeln (hex2dec ('fff0')); writeln (bin2dec ('11111010100')) end. Может это приблизит тебя к истине ![]() |
-Kosinus- |
![]()
Сообщение
#6
|
Гость ![]() |
Здесь возможно не всё, но мало ли!
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Гость, а ты ссылку видел, которую автор привел? Там есть все те же функции, плюс еще работа с четверичными числами... Так зачем копировать код с Сурсов? Тем более, что этот код работает только с НЕдробными числами...
|
Kubus |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
так что? никто помочь не может?(
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Да пойми наконец, нельзя переводить числа НЕ через 10-ю систему счисления... Переводишь в 10, оттуда - в другую... Всё. Что тебе непонятно как делается?
|
Kubus |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
а моя программа переводит сначала в 10, потом в нужную?
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:25 |