задача на системы счисления |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
задача на системы счисления |
Flipper |
Сообщение
#1
|
Гость |
задание: написать программу на языке паскаль, чтобы она переводила число из четверичной системы счиления в шестнадцетиричную с.с.
вот собственно что надо.......... ПОЖАЛУЙСТО, HELP |
Dao |
Сообщение
#21
|
Новичок Группа: Пользователи Сообщений: 14 Репутация: 0 |
Я мож и опоздал, но в том году писал прогу, которая переводит числа из десятичной системы счисления в шестнадцатеричную (а может и еще в какую-нить). Так, если кому пригодится
Код uses crt; var a : real; z,k,q : integer; s,m : string; c : char; begin repeat write ('Введите дробное число по основанию 10 : '); readln(a); write ('Введите новое основание : '); readln(q); write ('Введите количество знаков после запятой : '); readln(z); k:=0; s:='0,'; m:=''; a:=a-trunc(a); while (a>0)and(k<z) do begin k:=k+1; a:=a*q; str(trunc(a),m); if q=16 then begin if m='10' then m:='A'; if m='11' then m:='B'; if m='12' then m:='C'; if m='13' then m:='D'; if m='14' then m:='E'; if m='15' then m:='F'; end; s:=s+m; a:=a-trunc(a); end; writeln ('Число по основанию ',q,' : ',s); writeln('Будем считать еще? (Д/Н)'); writeln; c:=readkey; until (c='y')or(c='Y'); end. |
Altair |
Сообщение
#22
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Опоздал во-первых, во-вторых слишком однобокая прога, всего 1 действтие... не оптимально... хотя молодец, задача решена, и это главное!
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Dao |
Сообщение
#23
|
Новичок Группа: Пользователи Сообщений: 14 Репутация: 0 |
Полностью с тобой согласен, но 5 у меня уже сотит, а это главное.
|
Altair |
Сообщение
#24
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Точно!
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Vika |
Сообщение
#25
|
Гость |
Цитата(Oleg_Z @ 16.10.04 20:16) function FromDec(n, radix:longint):string; {перевод числа n из radix c/c в 10-ую} n:=n div radix; function ToDec(n:string; radix:longint):longint; {перевод числа n из 10-ной с/с в radix} for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1; вот, перевод числа из любой с/с в 10. не делением, а умножение... а у тебя делением, тоже и с другой, короче должно быть наоборот.... Сообщение отредактировано: Vika - |
Altair |
Сообщение
#26
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Не понял, что тебе не нравиться?
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
aspu |
Сообщение
#27
|
Гость |
А вот я что-то не пойму та прога универсальная на запятую не ругается но с дробями работает неправильно как бы туда еще дроби запихнуть?
|
Jill |
Сообщение
#28
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
ребята, а если ПРОСТО десятичное (и положительное, и отрицательное) в двоичное? что-то по полочкам не раскладывается совсем
проблема именно в ОТРИЦАТЕЛЬНЫХ числах ((( Сообщение отредактировано: Jill - |
aspu |
Сообщение
#29
|
Гость |
У тебя не проблема При переводе между системами знак не меняется так что просто определяешь знак у исходного числа и добавляешь его к итоговому а вот с дробями это проблема
|
Jill |
Сообщение
#30
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
как это?
Цитата(aspu @ 26.09.2005 15:38) добавляешь его к итоговому по-моему, там происходят изменения в старшем разряде, а не просто меняется знак разве не так? |
aspu |
Сообщение
#31
|
Гость |
A черт его знает в одних источниках одно написано в других другое. Вон виндовый калькулятор вообще при преобразовании туда-обратно фигню выдает какую-то. Полный бред вобщем
|
Jill |
Сообщение
#32
|
Пионер Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: 0 |
Цитата(aspu @ 27.09.2005 8:48) виндовый калькулятор вообще при преобразовании туда-обратно фигню выдает какую-то калькулятор не обрабатывает отр. числа :-) чтоб получить отр. необходимо перевести модуль числа, провести инверсию (поменять 0 на 1 и наоборот) и прибавить единицу (по-моему, можно в самом калькуляторе) а вот как это сделать в pascal... :-( |
aspu |
Сообщение
#33
|
Гость |
ну вот и меняй Переведи его в строковый вид и по порядку каждую цифирь меняй :rose:
|
Гость |
Сообщение
#34
|
Гость |
Помогите пожалуйста модифицировать программу перевода для больших целых чисел (>14 разрядов). Использую фукции Mod и т.п, которые только для целых.
Цитата var a,b,cc,r:integer; c,ab,dd:string; Function sn (a, n: integer): integer; Var i,s: integer; Begin sn := 0; s := 1; For i:=1 To n Do s := s*a; sn := s; End; Procedure make_to_ten (m: String; Var kk: String); var i, r : integer; l : char; Begin i := 0; r := 0; while i<>length(m) Do Begin l := m[length(m)-i]; {отделяем цифру} If ord(l)<=ord('9') Then r := r + (ord(l) - ord('0')) * sn (a, i) {для чисел 0,1,..,9} Else r := r + (ord(l) - ord('a') + 10) * sn (a, i); {для латинских букв} i := i + 1; End; str (r, kk); End; Function intg(d:String): integer; Var code,res: integer; Begin val(d,res,code); intg := res; End; begin write('Исходная система счисления: '); readln(a); write('Итоговая система счисления: '); readln(b); write('Число: '); readln( c ); ab := ''; If b=10 Then make_to_ten(c,ab) {переводим в десятичную СС} Else Begin make_to_ten(c,dd); {переводим в десятичную СС} cc := intg(dd); {переводим строковую информацию в целочисленную} while cc>0 Do Begin r := cc Mod b; {берем остаток} cc := cc Div b; {берем целое частное} If r>=10 Then ab := chr(ord('a')+r-10)+ab Else ab := chr(48+r)+ab; End; End; writeln ('-----------------------'); writeln ('Итог: ',ab); readln; End. |
Текстовая версия | 19.05.2024 18:24 |