В данном материале мы подробно разберем одну из наиболее часто встречающихся задач, где надо поработать с массивами и типами данных. Как выбрать число из строки, как определить, что это вообще число и сколько в нем знаков – все это будет рассмотрено в рамках данного материала. Сперва приведем пример массива. Пусть один будет символьный, а другой – числовой.
Пример:
var
numbers: array[1..5] of integer;
Здесь numbers — массив из пяти целых чисел. Индексация начинается с 1, и к элементам можно обращаться так: numbers[1], numbers[2] и т.д.
В ЕГЭ часто используется массив символов, особенно при анализе строк:
var
chars: array[1..255] of char;
В языке Паскаль строки представляют собой специальные структуры, которые в некотором смысле можно воспринимать как массивы символов. Однако между строкой и массивом char есть разница.
Тип данных |
Описание |
Особенности |
string |
Готовый тип данных для работы со строками |
Длина хранится автоматически |
array of char |
Массив символов |
Длину нужно обрабатывать вручную |
Строка в Паскале — это последовательность символов с длиной до 255 символов (в стандартном типе string). Она хранит количество символов и сами символы. Мы можем обращаться к символам строки по индексам, как к элементам массива:
s := 'Привет';
writeln(s[1]); // Печатает 'П'
А вот массив char:
var
a: array[1..10] of char;
требует ручного подсчета длины и управления концом строки.
Для понимания задания по подсчёту чисел в строке важно чётко различать:
Символ (char) — один знак: буква, цифра, пробел, точка и т.п.
Число (integer) — последовательность символов, представляющая числовое значение.
Строка (string) — последовательность символов, в которой могут встречаться как буквы, так и цифры.
Примеры:
Значение |
Тип |
Комментарий |
'A' |
char |
Одна буква |
'7' |
char |
Символ-цифра, не число! |
7 |
integer |
Число |
'Привет 42' |
string |
Строка, содержащая и буквы, и число |
Чтобы определить, сколько чисел содержится в строке, нужно посимвольно просканировать строку и отследить, где начинается и заканчивается числовая последовательность. Есть и другие примеры задач.
Существует несколько вариантов от простых до сложных.
program CountSimpleNumbers;
var
s: string;
i, count: integer;
insideNumber: boolean;
begin
readln(s);
count := 0;
insideNumber := false;
for i := 1 to length(s) do
begin
if s[i] in ['0'..'9'] then
begin
if not insideNumber then
begin
insideNumber := true;
count := count + 1;
end;
end
else
insideNumber := false;
end;
writeln('Количество чисел: ', count);
end.
Объяснение:
Проходим по всем символам строки.
Если текущий символ — цифра, и до этого мы не были внутри числа — увеличиваем счётчик.
Если символ — не цифра, завершаем текущее число.
program CountNumbersAdvanced;
var
s: string;
i, count: integer;
insideNumber: boolean;
begin
readln(s);
count := 0;
insideNumber := false;
for i := 1 to length(s) do
begin
if s[i] in ['0'..'9'] then
begin
if not insideNumber then
begin
count := count + 1;
insideNumber := true;
end;
end
else
insideNumber := false;
end;
writeln('Количество чисел в строке: ', count);
end.
Что учитывается:
Алгоритм считает последовательности цифр числом даже если между ними знаки препинания: Пример: 2, 30 и 7. — результат будет 3.
Входная строка |
Ожидаемый результат |
У меня 3 яблока и 7 груш |
2 |
12 45, 7. А ещё 8 |
4 |
Без цифр вообще |
0 |
1 2 3 4 5 |
5 |
Цена: 300р, скидка: 20 |
2 |
Не считайте символ '5' как число. Это символ, а не число.
Число — это непрерывная цепочка цифр. 123 — одно число, а не три.
Обрабатывайте строку посимвольно. Это универсально.
Игнорируйте пробелы, знаки препинания и буквы. Главное — найти цифры.
Внимание: числа могут быть большими. Не нужно преобразовывать их в integer, если задача — просто подсчитать их количество.
Массивы, особенно массивы char, лежат в основе строковой обработки.
Строки — это, по сути, массивы символов, и к ним применим посимвольный анализ.
Символ ≠ число. Даже если символ выглядит как цифра ('3'), это не число, а элемент строки.
В заданиях ЕГЭ важно уметь обрабатывать строку в цикле, выявляя границы чисел и не перепутать отдельные цифры с числами.
Закончив с изучением теории, можно перейти на решение теоретических заданий для подготовки к ЕГЭ.
Вопрос 1.
Что считается числом при подсчёте чисел в строке?
Ответы:
А) Любой символ-цифра
Б) Последовательность цифр, идущих подряд
В) Любое слово, содержащее хотя бы одну цифру
Г) Числа, записанные через пробелы
Вопрос 2.
Сколько чисел в строке:
На улице -5, в комнате +22, всего 3 градуса разницы.
Ответы:
А) 2
Б) 3
В) 4
Г) 5
Вопрос 3.
Какой тип данных используется для одного символа в языке Паскаль?
Ответы:
А) integer
Б) char
В) string
Г) byte
Вопрос 4.
Какой тип данных лучше всего использовать для хранения целой строки текста?
Ответы:
А) char
Б) array
В) string
Г) word
Вопрос 5.
Какое из утверждений верно?
Ответы:
А) Массив char и строка — это одно и то же
Б) Строка — это число, если в ней есть хотя бы одна цифра
В) Последовательность цифр считается одним числом
Г) Каждая цифра в строке — отдельное число
Вопрос 6.
Сколько чисел в строке:
Температура: +3 +5 -10.
Ответы:
А) 2
Б) 3
В) 4
Г) 5