Консультация № 175202
13.12.2009, 17:46
35.00 руб.
0 3 2
Добрый вечер.
Задача на строки.

Вводится непустая последовательность символов( <= 79) . Отдельные слова в тексте разделяются пробелами.

Выделить из текста целые числа, записанные в 6-чной системе счисления (считать, что они положительные и в тексте встречаются в виде отдельных слов) и перевести их в 10-чную систему счисления.

Спасибо.

Обсуждение

Неизвестный
13.12.2009, 18:23
общий
это ответ
Здравствуйте, Sheva17.
Программа в приложении.
Сначала программы считывает строку в переменную st и проверяет ее длину
Потом в программа добавляет к концу строки один пробел (чтобы легче было искать слова)
Далее начинается цикл repeat, в котором и осуществляется поиск чисел
Сначала находим пробел и отделяем слова от исходной строки (вырезаем его).
В найденном слове проверяем каждый символ, если этот символ может быть в числе (там могут быть только цифры от 0 до 5)
Если слово проходит проверку, то начинаем его переводить в 6-чную систему.
начинаем умножать каждый символ начиная справа на 1,6,62,63 (эти числа хранятся в переменной d) и т.д и суммируем их в переменную d.
После этого выводим слово и его эквивалент в 10-ной системе.

Приложение:
Program p1;
var st,sr:string;
ss:set of char;
i,n:integer;
d:longint;
y:integer;
S:longint;
f:boolean;
begin
write('st='); readln(st); {ввод начальной сроки}
ss:=['0'..'5']; {множество символов, которое может быть в 6-чной системе}
if length(st)>79 then begin writeln('Dlinnay stroka'); readln; exit; end; {проверка условия (длина строки <= 79)}
if st[length(st)]<>' 'then st:=st+' ';
repeat
y:=pos(' ',st); {поиск следующего пробела}
if y=1 then delete(st,1,1) else
if y<>0 then
begin
sr:=copy(st,1,y-1); {выделение слова}
delete(st,1,y);
n:=y-1;
f:=true;
for i:=1 to n do
if not(sr[i] in ss) then f:=false; {проверка, если слово является числом в 6-чной системе}
if f then
begin
s:=0; d:=1;
for i:=n downto 1 do
begin
s:=s+(ord(sr[i])-ord('0'))*d; {перевод в десятичную систему}
d:=d*6;
end;
writeln(sr,' ',s);
end;
end;
until y=0;

readln;
end.
5
Отличный быстрый ответ.
Неизвестный
13.12.2009, 18:43
общий
Большое спасибо за оперативность. Все отлично работает
Неизвестный
16.12.2009, 15:22
общий
это ответ
Здравствуйте, Sheva17! Решение в приложении.

Приложение:
var F, F2: Text;
S: String;
A: LongInt;
Code: Integer;
Ch: Char;
function S6ToS10(I: LongInt): LongInt;
var Result, C, Res2, V: LongInt;
ResS: String;
begin
Result := 0;
Res2 := 0;
Str(I, ResS);
for C := 1 to Length(ResS) do
begin
if not (ResS[C] in ['0'..'5']) then Exit; {если цифра больше 5 - выходим}
Res2 := (Ord(ResS[C]) - Ord('0')); {находим значение цифры, используя разность кодов}
for V := 1 to Length(ResS) - C do
Res2 := Res2 * 6;
Result := Result + Res2;
end;

S6ToS10 := Result; {и наконец выводим результат}
end;
begin
Assign(F, 'INPUT.txt'); {связываем с файлом}
Reset(F); {готовим для чтения}
while Eoln(F) = False do
begin
Read(F, Ch);
if Eoln(F) then S := S + Ch;
if (Ch = ' ') or (Eoln(F)) then
begin
Val(S, A, Code); {переводим строку в число}
if Code = 0 then {проверяем, есть ли ошибка}
begin
A := S6ToS10(A); {используем функцию перевода}
writeln(A);
end;
S := '';
end
else
S := S + Ch; {прибавляем прочитанный символ}
end;
readln;
end.
Форма ответа