Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 17:25   #1
Anabella
 
Регистрация: 03.06.2010
Сообщений: 3
По умолчанию Cистемы счисления

Написать программу в паскале, для перевода числа, представленного в системе
счисления с основанием 22, в системы счисления с основаниями 10, 8, 25.
Обеспечить корректность ввода числа в системе счисления с основанием 22.
Перевод чисел реализовать с применением функций. Разработайте функцию
для перевода числа из системы счисления с основанием 22 в систему счисления с
основанием 10, а затем, функции для перевода из 10 в 8 и из 8 в 25.
Anabella вне форума Ответить с цитированием
Старый 07.06.2010, 16:01   #2
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

число в системе счисления по основанию 22 будет включать цифры 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H ,I,J,K,P
(Р выбрали вместо О, чтобы не путать визуально с нулем при вводе с клавиатуры)

определяем функцию, которая переводит цифры системы с основанием 22 в числа 10-тичную.

Код:
function func1(var cifra:char):integer;
begin
if(cifra='A') then result:=10
else
if(cifra='B') then result:=11
else
if(cifra='C') then result:=12
else
...
if (cifra='P') then result:=21
else
   begin
   здесь выводится сообщение об ошибке в случае "левого" символа
   end;
end;
собственно сам перевод числа в 22-тичной системе (оно представлено строкой символов) в 10-тичную.
Код:
var str:string[10];
var n,i, res, mnoj:integer;
var chislo:array 1..10 of integer;
writeln("введите число цифр числа");
readln(n);
writeln("введите число");
readln(str);
for i:=1 to n do
  begin
  if ((str[i]='0')or
      (str[i]='1')or
      ...
      (str[i]='9'))
   then chislo[i]:=StrtoInt(str[i])
  else  chislo[i]:=func1(str[i]);
  end;
//преобразуем массив chislo в результат в 10-чной форме
mnoj:=1;
res:=0;
fori:=n down to 1 do 
begin
res:=res+chislo[i]*mnoj;
mnoj:=mnoj*10;
end;
//получили число res в десятичной системе

Последний раз редактировалось Stilet; 07.06.2010 в 16:04.
Snejnaya вне форума Ответить с цитированием
Старый 07.06.2010, 16:16   #3
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

перевод числа из десятичной системы в восьмиричную осуществляется делением исходного числа на 8 и сохранением всех остатков от деления. Т.е.

опишем функцию для перевода любого числа из десятичной системы в восьмеричную

function dec_to_oct(var a:integer):integer;
var flag=false:boolean;
var mas:array 1..20 of integer;
var dlina_mas=0, mnoj,i, a1:integer;
begin

while(not flag) do
begin
dlina_mas:=dlina_mas+1;
mas[dlina_mas]:=a mod 8;
a:=a div 8;
if(a=0) then flag=true;
end;

a1:=0;
mnoj:=1;
for i:=1 to dlina_mas do
begin
a1:=a1+mas[i]*mnoj;
mnoj:=mnoj*8;
end;
result:=a1;
end;
Snejnaya вне форума Ответить с цитированием
Старый 07.06.2010, 16:28   #4
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

по поводу перевода числа из восьмеричной системы в 25-ричную, ИМХО, минуя десятичную систему, перевести вряд ли удастся, т.к. для системы с основанием 25 изначально не определены операции сложения.
Т.е. придется их реализовывать, а это геморрой тот еще, во всяком случае, мне так кажется.
Snejnaya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
система счисления с 2 в 16 never smile Помощь студентам 0 19.03.2010 16:30
Системы счисления BloodMaX Общие вопросы C/C++ 1 08.11.2009 14:46
Системы счисления vdv08 Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2008 17:32