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

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

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

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


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

 





- Текстовая версия 27.04.2024 12:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name