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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 12.09.2007 19:28
Сообщение #2


Гость






Ну, с учетом исправления (относительно букв), это может выглядеть несколько иначе:

{ добавляем переменные: }
var
count, position: integer;
s: string;

{ Это - "алфавит" систем счисления }
const
alpha: string = '0123456789ABCDEFGHIJKLMNOPQSRTUVWXYZ';

writeln('Vvedite sistemu is4isleniya');
readln(ss);
writeln('Vvedite kol-vo 4isel');
readln(m);
writeln('Vvedite chisla');
for i:=1 to m do begin
repeat
count := 0; { считаем, сколько введенных символов попадают в алфавите ДО номера с/с }
writeln('enter number #', i);
readln(s);
for j := 1 to length(s) do begin
position := pred(pos(upcase(s[j]), alpha));
if (position < ss) and (position > 0) then inc(count);
end;
until count = length(s); { если все символы - допустимы, то выходим }
st[i] := s; { и запоминаем введенную строку }
end;
...


Добавлено через 1 мин.
Цитата
потому что число должно не быть именно меньше, а оно не должно быть равно ss.
То есть 13 тебе нельзя переводить, а 14 - можно? Странно... Обычно именно меньше...

Update:
Чтобы не было разночтений: вводится строка, и проверяется на наличие в ней "запрещенных" для заданной системы счисления символов: для с/с с основанием 16 разрешены символы '0' .. 'F', для с/с с основанием 18 - символы '0' .. 'H', для с/с с основанием 7 - символы '0' .. '6'.

Попытка ввести основание с/с = 7 и строку 128, к примеру, будет считаться ошибкой ввода, ибо "8" недопустимо при основании = 7... То же самое произойдет при попытке ввода основания = 16 и строки 12FK, "K" - это перебор...

Сообщение отредактировано: volvo - 13.09.2007 0:21
 К началу страницы 
+ Ответить 
Sensitive
сообщение 12.09.2007 23:19
Сообщение #3


Пионер
**

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

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


Цитата
То есть 13 тебе нельзя переводить, а 14 - можно? Странно... Обычно именно меньше...

Препод объяснял именно так... что 13 нельзя, а 14 уже можно... вот я начинаю думать-не ошибся ли препод с примером.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"