Задания для подготовки к пробному ЕГЭ по информатике в компьютерной форме скачать здесь.
Решение
Напомню сперва функции, применяемые для работы с символьными данными:
function Length(S:string):integer - длина строки
function Ord(C: char):integer- код символа С в таблице ASCII.
Таким образом, если C - символ соответствующий некоторой цифре, то получить саму цифру можно следующим образом:
N := Ord(C) - Odr('0');
Рассмотрим программу для решения
Рассмотрим подробнее некоторые задачи.
С4
Будем называть разделителем символ '.' (точка) или ''(пробел). Будем называть словом любую непустую последовательность идущих подряд букв и (или) цифр, не содержащую разделителей, и ограниченную слева началом строки или разделителем, а справа — разделителем. Например, строка
AsdF 10 AS42 AS 77qqq.
содержит 5 слов: AsdF, 10, AS42, AS, 77qqq
Будем называть подходящим словом слово, являющееся записью целого числа в системе счисления с основанием 5. Например, слова
10, 44444, 0013, 0 – подходящие, а слова
46, two, один, 33а, 3z4z не являются подходящими.
Составьте программу, которая вводит строку символов длиной не менее 2 и не более 32, заканчивающуюся символом '.' (точка), а затем выводит на экран для всех подходящих слов входной строки, сумму соответствующих чисел. Значение суммы должно выводиться в десятичной системе счисления. Например, для входной строки
100 у3 AS42 AS 22 77w.
программа должна вывести 37.
Ничего, кроме суммы чисел, программа выводить не должна.
Решение
Напомню сперва функции, применяемые для работы с символьными данными:
function Length(S:string):integer - длина строки
function Ord(C: char):integer- код символа С в таблице ASCII.
Таким образом, если C - символ соответствующий некоторой цифре, то получить саму цифру можно следующим образом:
N := Ord(C) - Odr('0');
Рассмотрим программу для решения
var
InS, Word: string; //InS - исходная строка, Word - отдельное слово в строке
Sum, Tmp, Num5, i: integer; // Sum - итоговая сумма, Tmp - код ошибки при переводе в пятеричную систему, Num5 - одно число
// Опишем процедуру, проверяет является ли строка корректно записанным пятеричным числом и переводит его в десятичную систему счисления
procedure StrToFiveInt(NumberStr: string; var NumberVar: integer; var ErrorCode: integer);
var
i, Pow:integer;
begin
NumberVar := 0;
Pow := 1;
ErrorCode := 0; // код ошибки "0" - ошибок нет
if length(NumberStr) = 0 then ErrorCode := 2 //код ошибки "2" - входная строка пустая
else
begin
for i := length(NumberStr) downto 1 do
begin
if (NumberStr[i]>='0') and (NumberStr[i]<='4') then
begin
// Переводим, используя развернутый вид числа
NumberVar := NumberVar + (ord(NumberStr[i])-ord('0')) * Pow;
Pow := Pow * 5;
end
else
begin
ErrorCode := 1;// код ошибки "1" - недопустимые символы в строке
end;
end;
end;
end;
//Основная программа
begin
read(InS);
i := 1;
Word := '';
Sum := 0;
Tmp := 0;
for i := 1 to length(InS) do
begin
if (InS[i] = ' ') or (InS[i] = '.') then //находим разделитель
begin
StrToFiveInt(Word, Num5, Tmp); //переводим строку в число
if Tmp = 0 then //если перевод прошел без ошибок, добавляем полученное число в сумму
begin
Sum := Sum + Num5;
end;
Word:=''; //очищаем текущее слово
end
else
begin
Word := Word + InS[i];
end;
end;
StrToFiveInt(Word, Num5, Tmp);
if Tmp = 0 then
begin
Sum := Sum + Num5;
end;
write(Sum);
readln;
readln;
end.
Комментариев нет:
Отправить комментарий