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

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

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

> Системы исчисления, из 10-тичной в другую и наоборот
Sensitive
сообщение 9.09.2007 12:13
Сообщение #1


Пионер
**

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

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


Задание такое: Программа должна преобразовывать 10 в q и q в 10. q в 10 с помощью полимиальной записи чисел, а 10 в q с помощью алгоритма "Обратное деление". Исходные данные вводить по типу string, результат выводить склеяным стрингом. В теоретических вопросах уже побывала, и всё почитала.
Вот что получилось:
uses crt;

function fromdec(n,osnov:longint):string;
var
s:string;
const
digit:string[16]='0123456789ABCDEF';
begin
s:=' ';
repeat
s:=digit[(n mod osnov)+1]+s;
n:=n div osnov;
until n=0;
fromdec:=s;
end;
var s:string;
i,m,code:integer;
ss:integer;
st,a:array[1..50] of string;
p,b:array[1..50] of integer;
begin
clrscr;
writeln('Vvedite sistemu is4isleniya');
readln(ss);
writeln('Vvedite kol-vo 4isel');
readln(m);
writeln('Vvedite chisla');
for i:=1 to m do
begin
readln(st[i]);
end;
for i:=1 to m do
begin
val(st[i],p[i],code);
end;
for i:=1 to 43 do write('-');writeln;
writeln('|','ishodnie':10,'|','polu4ennie':20,'|');
for i:=1 to 43 do write('-');writeln;
for i:=1 to m do writeln(st[i]:10,fromdec(p[i],ss):20);
for i:=1 to 43 do write('-');writeln;
readln;
end.

Из 10-тичной системы переводит. А мне еще нужно, чтоб получившиеся числа (не в десятичной системе) переводились обратно в десятичную. (как бы сразу и для проверки перевода).
Функцию видела, вот эту:
Function ToDec(n:string; radix:longint):longint;
var m,i:longint;
const digit:string[16]='0123456789ABCDEF';
begin
m:=0;
while (n[1]='0') and (length(n)>1) do delete(n,1,1);
for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1;
ToDec:=m;
end;

Но не знаю, как реализовать, чтоб полученные числа переводились обратно. Подскажите пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
fererro_rosher
сообщение 23.09.2007 16:45
Сообщение #2


Гость






a kak wam moya programma dlya perewoda chisler d 10-oj d lyubuyu sistemu? 4erez string i putem deleniya ....
Program name;
Uses Crt;
Label ex,pp,ppp,ex2,ex3,pp2,ppp2;
Var
i,ii,j,n,m,mm,b,chislo_new,ostatok,celoe,prob:longint;
error:integer;
flag,flag2,razmer:byte;
chislo,s_celoe,sceloe,s_ostatok,sfor_array,for_array,p_chislo:string;
aa,a:array [1..190] of longint;
simvol:string[2];
wwod_simvola:char;

BEGIN
Clrscr;
Textcolor (13); Write ('В какую систему перевести: ');
Textcolor (10); Readln (razmer);
Textcolor (13); Writeln ('Введите число в 10-ой системе: ');
Textcolor (10); chislo:='';
Repeat
wwod_simvola:=readkey;
i:=ord(wwod_simvola);
Case wwod_simvola of
'0': ii:=0; '1': ii:=1; '2': ii:=2; '3': ii:=3; '4': ii:=4; '5': ii:=5;
'6': ii:=6; '7': ii:=7; '8': ii:=8; '9': ii:=9; 'a': ii:=10; 'A': ii:=10;
'b': ii:=11; 'B': ii:=11; 'c': ii:=12; 'C': ii:=12; 'd': ii:=13;
'D': ii:=13; 'e': ii:=14; 'E': ii:=14; 'f': ii:=15; 'F': ii:=15; end;
if i=13 then goto ex3;
if ii<=10 then begin
Write (wwod_simvola);
chislo:=chislo+wwod_simvola;
end;
ex3:
until i=13;

if razmer<=9
THEN Begin
n:=ord(chislo[0]); sceloe:=''; flag:=0; flag2:=flag;
chislo_new:=razmer+2; ostatok:=razmer+2; i:=1; ii:=1;
While chislo_new>=razmer do begin
While ostatok>=razmer do begin
for j:=1 to n do val(chislo[j],a[j],error);
if a[i]<razmer then begin
sfor_array:='';
for j:=1 to 2 do begin
str(a[j],for_array);
sfor_array:=sfor_array+for_array;
end;
val(sfor_array,b,error);
inc(i);
flag2:=1;
end
else begin b:=a[i]; flag:=1; end;
celoe:=b div razmer; str(celoe,s_celoe);
ostatok:=b mod razmer; str(ostatok,s_ostatok);
sceloe:=sceloe+s_celoe;
p_chislo:=chislo;
delete(p_chislo,1,i);
prob:=ord(p_chislo[0]);
if prob<=0 then begin
if(flag=1) and (ostatok<razmer) then begin flag:=0; goto ex; end;
if(flag2=1) and (ostatok<razmer) then begin chislo:=sceloe;
flag2:=0;
goto ex;
end;
end;
if s_ostatok='0' then s_ostatok:='';
chislo:=s_ostatok;
chislo:=chislo+p_chislo;
i:=1;
n:=ord(chislo[0]);
if n>5 then begin
ostatok:=razmer*2;
goto ppp;
end;
val(chislo,ostatok,error);
ppp:
end;
ex:
aa[ii]:=ostatok;
inc(ii);
s_ostatok:=''; ostatok:=razmer+2;
m:=ord(sceloe[0]);
if m>5 then begin
chislo_new:=razmer*razmer;
goto pp;
end;
val(sceloe,chislo_new,error);
pp:
chislo:=sceloe;
sceloe:='';i:=1;
end;
val(chislo,b,error);
aa[ii]:=b;
end
ELSE Begin
n:=ord(chislo[0]); sceloe:=''; flag:=0; flag2:=flag;
chislo_new:=razmer+2; ostatok:=razmer+2; i:=1; ii:=1;

While chislo_new>=razmer do begin
While ostatok>=razmer do begin
n:=ord(chislo[0]);
for j:=1 to n do val(chislo[j],a[j],error);
if a[i]<razmer then begin
sfor_array:='';
for j:=1 to 2 do begin
str(a[j],for_array);
sfor_array:=sfor_array+for_array;
end;
val(sfor_array,b,error);
inc(i);
flag2:=1;
end;
if b<razmer then begin
sfor_array:='';
for j:=1 to 3 do begin
str(a[j],for_array);
sfor_array:=sfor_array+for_array;
end;
val(sfor_array,b,error);
inc(i);
flag:=1;
end;
celoe:=b div razmer; str(celoe,s_celoe);
ostatok:=b mod razmer; str(ostatok,s_ostatok);
sceloe:=sceloe+s_celoe;
p_chislo:=chislo;
delete(p_chislo,1,i);
prob:=ord(p_chislo[0]);
if prob<=0 then begin
if(flag=1) and (ostatok<razmer) then begin flag:=0; goto ex2; end;
if(flag2=1) and (ostatok<razmer) then begin chislo:=sceloe;
flag2:=0;
goto ex2;
end;
end;
if s_ostatok='0' then s_ostatok:='';
chislo:=s_ostatok;
chislo:=chislo+p_chislo;
i:=1;
n:=ord(chislo[0]);
if n>5 then begin
ostatok:=razmer*2;
goto ppp2;
end;
val(chislo,ostatok,error);
ppp2:
end;
ex2:
aa[ii]:=ostatok;
inc(ii);
s_ostatok:=''; ostatok:=razmer+2;
m:=ord(sceloe[0]);
if m>5 then begin
chislo_new:=razmer*razmer;
goto pp2;
end;
val(sceloe,chislo_new,error);
pp2:
chislo:=sceloe;
sceloe:='';i:=1;
end;
val(chislo,b,error);
aa[ii]:=b; end;

for i:=1 to ii do a[i]:=aa[i];
Writeln; Textcolor (13);
Writeln ('Предложенное Вами число в ',razmer,'-ой системе выглядит сл.образом: ');
Textcolor (10);
for i:=ii downto 1 do
begin
Case a[i] of
10: simvol:='A';
11: simvol:='B';
12: simvol:='C';
13: simvol:='D';
14: simvol:='E';
15: simvol:='F';
0: simvol:='0';
1: simvol:='1';
2: simvol:='2';
3: simvol:='3';
4: simvol:='4';
5: simvol:='5';
6: simvol:='6';
7: simvol:='7';
8: simvol:='8';
9: simvol:='9';
end;
Write (simvol);
delay (10000);
end;
readkey;
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Sensitive   Системы исчисления   9.09.2007 12:13
volvo   Во-первых, в функции FromDec не надо изначально пр...   9.09.2007 12:23
Sensitive   Спасибо, volvo! Из-за пробела у меня и не полу...   9.09.2007 15:21
Sensitive   А подскажите плиз каким способом можно сделать бло...   12.09.2007 19:00
мисс_граффити   цифры 13, к сожалению, нет... обычно идет 1 2 .. 9...   12.09.2007 19:09
Sensitive   мм...просто я привела пример,который нам приводил ...   12.09.2007 19:13
volvo   ... writeln('Vvedite sistemu is4isleniya...   12.09.2007 19:11
volvo   Ну, с учетом исправления (относительно букв), это ...   12.09.2007 19:28
Sensitive   Препод объяснял именно так... что 13 нельзя, а 14...   12.09.2007 23:19
мисс_граффити   а почему, собственно, 13 нельзя перевести в 13сс? ...   12.09.2007 23:30
Sensitive   А как нужно переделать программу, чтоб она могла о...   15.09.2007 0:07
volvo   Переходом к длинной арифметике... В Drkb есть мод...   15.09.2007 1:25
Sensitive   Volvo,спасибо за помощь. Буду разбираться с модуле...   15.09.2007 15:27
Sensitive   Вот сидела разбиралась... потом начала писать функ...   15.09.2007 17:16
volvo   Совсем не обязательно делать в цикле то, что можно...   15.09.2007 18:06
Sensitive   Огромное спасибо. Я разобралась.   15.09.2007 23:48
Archie   Народ...а как записать число в десятчной записи и ...   16.09.2007 18:04
Sensitive   Представляете, препод не принял программу! Тип...   18.09.2007 16:32
volvo   :) Тогда тебе надо реализовывать умножение/деление...   18.09.2007 16:44
fererro_rosher   a kak wam moya programma dlya perewoda chisler d 1...   23.09.2007 16:45
volvo   Попробуй перевести с ее помощью, например, 5234567...   23.09.2007 16:58


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

 



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