Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

помогите решить в паскаль. Заданы основание

Марина Иванова Ученик (187), закрыт 5 лет назад
системы счисления p(p<17) и строка s, представляющая собой запись числа в этой системе счисления. Осуществить перевод заданного числа в систему с основанием 10.
Лучший ответ
Александр Устименко Просветленный (24313) 7 лет назад
Многовато кода, но есть проверка основания (p < 17) и подсказка, что для данной системы счисления выбрано неверное основание "p"

var i, p, stepen, g, code_error: integer;
sum: real;
s, ss: string;
ch: char;
begin
ss:='0123456789ABCDEF';
p:=1;
repeat
write ('основание СС p=');
readln (p);
write ('строка s=');
readln (s);
until p < length (ss)+1;
stepen:=1;
sum:=0;
while length(s) > 0 do
begin
ch:=s[length(s)];
s:=copy (s, 1, length(s)-1);
val (ch, g, code_error);
for i:=1 to 16 do
if ch=ss[i] then g:=i-1;
if g >= p then
begin
write ('Основание системы выбрано неверно');
halt;
end;
sum:=sum+g*power(p, stepen-1);
//writeln (ch,' ':5,stepen-1,' ':4,g*power(p, stepen-1));
inc(stepen);
end;
writeln ('число в 10-й СС= ', sum)
end.
Остальные ответы
Maxim Fox Профи (612) 7 лет назад
Мужика бы тебе найти нормального.
Марина ИвановаУченик (187) 7 лет назад
адрес нормального мужика не подскажешь?;)
Александр Устименко Просветленный (24313) А версия Pascal: ABC.NET or Turbo, Free? функцию степени как писать?
Зло Просветленный (38869) 7 лет назад
Для перевода числа из одной системы счисления в десятичную достаточно посчитать многочлен

сумма ( S[ i ] * pow( p, i ) )

где
S[ i ] - символ на и-той позиции
pow( p, i ) - основание системы счисления в степени i

в случае p > 10 не стоит забывать о том, что A = 10, B = 11 и т. д.

P.S. я позиции считаю от 0, а не от 1

Пример: перевести 1234 из 8-ной сс в десятичную:
x = 4 + 3*8 + 2*64 + 1*512 = 668

Пример: перевести A3B из 16-й в 10-ую:
x = 11 + 3*16 + 10*256 = 2619
Krab Bark Искусственный Интеллект (286471) 7 лет назад
program to10;
var s:string; i,o,p:integer; b,k:longInt;
begin
b:=0; k:=1; write('Base: '); readln(o); write('Number: '); readln(s);
for i:=length(a) downto 1 do
begin p:=ord(s[i])-48; p:=p-ord(p>48)*32-ord(p>9)*7; b:=b+k*p; k:=o*k end;
writeln(b); readln
end.
Похожие вопросы