IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> задача на системы счисления
Dao
сообщение 19.10.2004 20:31
Сообщение #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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.10.2004 6:12
Сообщение #22


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Опоздал во-первых, во-вторых слишком однобокая прога, всего 1 действтие... не оптимально... хотя молодец, задача решена, и это главное!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dao
сообщение 20.10.2004 18:19
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 14

Репутация: -  0  +


Полностью с тобой согласен, но 5 у меня уже сотит, а это главное.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 20.10.2004 18:32
Сообщение #24


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Точно!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vika
сообщение 22.10.2004 9:15
Сообщение #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 - 22.10.2004 9:29
 К началу страницы 
+ Ответить 
Altair
сообщение 22.10.2004 15:30
Сообщение #26


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Не понял, что тебе не нравиться?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
aspu
сообщение 26.09.2005 13:52
Сообщение #27


Гость






А вот я что-то не пойму та прога универсальная на запятую не ругается но с дробями работает неправильно как бы туда еще дроби запихнуть? blink.gif
 К началу страницы 
+ Ответить 
Jill
сообщение 26.09.2005 14:20
Сообщение #28


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


ребята, а если ПРОСТО десятичное (и положительное, и отрицательное) в двоичное? что-то по полочкам не раскладывается совсем sad.gif

проблема именно в ОТРИЦАТЕЛЬНЫХ числах (((

Сообщение отредактировано: Jill - 26.09.2005 15:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
aspu
сообщение 26.09.2005 15:38
Сообщение #29


Гость






У тебя не проблема smile.gif При переводе между системами знак не меняется так что просто определяешь знак у исходного числа и добавляешь его к итоговому а вот с дробями это проблема sad.gif
 К началу страницы 
+ Ответить 
Jill
сообщение 26.09.2005 15:43
Сообщение #30


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


как это?
Цитата(aspu @ 26.09.2005 15:38)
добавляешь его к итоговому

по-моему, там происходят изменения в старшем разряде, а не просто меняется знак

разве не так?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
aspu
сообщение 27.09.2005 8:48
Сообщение #31


Гость






A черт его знает в одних источниках одно написано в других другое. Вон виндовый калькулятор вообще при преобразовании туда-обратно фигню выдает какую-то. Полный бред вобщем
 К началу страницы 
+ Ответить 
Jill
сообщение 27.09.2005 10:29
Сообщение #32


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Цитата(aspu @ 27.09.2005 8:48)
виндовый калькулятор вообще при преобразовании туда-обратно фигню выдает какую-то

калькулятор не обрабатывает отр. числа :-)
чтоб получить отр. необходимо перевести модуль числа, провести инверсию (поменять 0 на 1 и наоборот) и прибавить единицу (по-моему, можно в самом калькуляторе)

а вот как это сделать в pascal... :-(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
aspu
сообщение 27.09.2005 10:49
Сообщение #33


Гость






ну вот и меняй smile.gif Переведи его в строковый вид и по порядку каждую цифирь меняй :rose:
 К началу страницы 
+ Ответить 
Гость
сообщение 25.09.2007 10:40
Сообщение #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.


 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 10.08.2025 18:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"